diff --git a/.gitignore b/.gitignore index 60d85dc4..abc0e16e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ docs/_build umap/remote_static .idea tmp/* +node_modules/* +umap/static/umap/vendors ### Python ### # Byte-compiled / optimized / DLL files @@ -53,6 +55,7 @@ nosetests.xml coverage.xml *,cover .hypothesis/ +.pytest_cache/ # Translations *.mo diff --git a/.travis.yml b/.travis.yml index ed33d532..29a5f023 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ sudo: false language: python python: -- "2.7" - "3.4" - "3.5" - "3.6" diff --git a/.tx/config b/.tx/config index eeb009d1..45e25e76 100644 --- a/.tx/config +++ b/.tx/config @@ -1,10 +1,16 @@ [main] host = https://www.transifex.com -[umap.project] +[umap.backend] file_filter = umap/locale//LC_MESSAGES/django.po source_file = umap/locale/en/LC_MESSAGES/django.po source_lang = en type = PO +[umap.frontend] +file_filter = umap/static/umap/locale/.json +source_file = umap/static/umap/locale/en.json +source_lang = en +type = KEYVALUEJSON + diff --git a/MANIFEST.in b/MANIFEST.in index f9efab73..ea58a895 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,3 +3,4 @@ include requirements.txt recursive-include umap/static * recursive-include umap/templates * recursive-include umap/locale * +recursive-include ui * diff --git a/Makefile b/Makefile index 09c76e57..7056441a 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,55 @@ test: - py.test + py.test -xv umap/tests/ +develop: + python setup.py develop +release: test makemessages + python setup.py sdist bdist_wheel +test_publish: + twine upload -r testpypi dist/* +publish: + twine upload dist/* + make clean +clean: + rm -f dist/* + rm -rf build/* +compilemessages: + django-admin.py compilemessages + node node_modules/leaflet-i18n/bin/i18n.js --dir_path=umap/static/umap/js/ --dir_path=umap/static/umap/vendors/measurable/ --locale_dir_path=umap/static/umap/locale/ --locale_codes=en --mode=json --clean --default_values +makemessages: + django-admin.py makemessages -a + umap generate_js_locale +ui: + mkdir -p umap/static/umap/vendors/leaflet/ && cp -r node_modules/leaflet/dist/** umap/static/umap/vendors/leaflet/ + mkdir -p umap/static/umap/vendors/editable/ && cp -r node_modules/leaflet-editable/src/*.js umap/static/umap/vendors/editable/ + mkdir -p umap/static/umap/vendors/editable/ && cp -r node_modules/leaflet.path.drag/src/*.js umap/static/umap/vendors/editable/ + mkdir -p umap/static/umap/vendors/hash/ && cp -r node_modules/leaflet-hash/*.js umap/static/umap/vendors/hash/ + mkdir -p umap/static/umap/vendors/i18n/ && cp -r node_modules/leaflet-i18n/*.js umap/static/umap/vendors/i18n/ + mkdir -p umap/static/umap/vendors/editinosm/ && cp -r node_modules/leaflet-editinosm/Leaflet.EditInOSM.* umap/static/umap/vendors/editinosm/ + mkdir -p umap/static/umap/vendors/minimap/ && cp -r node_modules/leaflet-minimap/src/** umap/static/umap/vendors/minimap/ + mkdir -p umap/static/umap/vendors/loading/ && cp -r node_modules/leaflet-loading/src/** umap/static/umap/vendors/loading/ + mkdir -p umap/static/umap/vendors/markercluster/ && cp -r node_modules/leaflet.markercluster/dist/** umap/static/umap/vendors/markercluster/ + mkdir -p umap/static/umap/vendors/contextmenu/ && cp -r node_modules/leaflet-contextmenu/dist/** umap/static/umap/vendors/contextmenu/ + mkdir -p umap/static/umap/vendors/heat/ && cp -r node_modules/leaflet.heat/dist/** umap/static/umap/vendors/heat/ + mkdir -p umap/static/umap/vendors/fullscreen/ && cp -r node_modules/leaflet-fullscreen/dist/** umap/static/umap/vendors/fullscreen/ + mkdir -p umap/static/umap/vendors/toolbar/ && cp -r node_modules/leaflet-toolbar/dist/** umap/static/umap/vendors/toolbar/ + mkdir -p umap/static/umap/vendors/formbuilder/ && cp -r node_modules/leaflet-formbuilder/*.js umap/static/umap/vendors/formbuilder/ + mkdir -p umap/static/umap/vendors/measurable/ && cp -r node_modules/leaflet-measurable/Leaflet.Measurable.* umap/static/umap/vendors/measurable/ + mkdir -p umap/static/umap/vendors/photon/ && cp -r node_modules/leaflet.photon/*.js umap/static/umap/vendors/photon/ + mkdir -p umap/static/umap/vendors/csv2geojson/ && cp -r node_modules/csv2geojson/*.js umap/static/umap/vendors/csv2geojson/ + mkdir -p umap/static/umap/vendors/togeojson/ && cp -r node_modules/togeojson/*.js umap/static/umap/vendors/togeojson/ + mkdir -p umap/static/umap/vendors/osmtogeojson/ && cp -r node_modules/osmtogeojson/osmtogeojson.js umap/static/umap/vendors/osmtogeojson/ + mkdir -p umap/static/umap/vendors/georsstogeojson/ && cp -r node_modules/georsstogeojson/GeoRSSToGeoJSON.js umap/static/umap/vendors/georsstogeojson/ + mkdir -p umap/static/umap/vendors/togpx/ && cp -r node_modules/togpx/togpx.js umap/static/umap/vendors/togpx/ + mkdir -p umap/static/umap/vendors/tokml && cp -r node_modules/tokml/tokml.js umap/static/umap/vendors/tokml +installjs: + npm install +testjsfx: + firefox umap/static/umap/test/index.html +testjs: node_modules + @./node_modules/mocha-phantomjs/bin/mocha-phantomjs --view 1024x768 umap/static/umap/test/index.html +tx_push: + tx push -s +tx_pull: + tx pull + +.PHONY: ui diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 00000000..95e0d1a8 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,255 @@ +# Changelog + +## Upgrading to 1.0 + +- because of the merge of django-leaflet-storage inside umap, the migrations + has been reset, so a bit of SQL needs to be ran by hand: + +```sql +BEGIN; +DELETE FROM django_migrations WHERE app = 'leaflet_storage'; +DELETE FROM django_migrations WHERE app = 'umap'; +ALTER TABLE leaflet_storage_datalayer RENAME TO umap_datalayer; +ALTER TABLE leaflet_storage_datalayer_id_seq RENAME TO umap_datalayer_id_seq; +ALTER TABLE leaflet_storage_licence RENAME TO umap_licence; +ALTER TABLE leaflet_storage_licence_id_seq RENAME TO umap_licence_id_seq; +ALTER TABLE leaflet_storage_map RENAME TO umap_map; +ALTER TABLE leaflet_storage_map_editors RENAME TO umap_map_editors; +ALTER TABLE leaflet_storage_map_editors_id_seq RENAME TO umap_map_editors_id_seq; +ALTER TABLE leaflet_storage_map_id_seq RENAME TO umap_map_id_seq; +ALTER TABLE leaflet_storage_pictogram RENAME TO umap_pictogram; +ALTER TABLE leaflet_storage_pictogram_id_seq RENAME TO umap_pictogram_id_seq; +ALTER TABLE leaflet_storage_tilelayer RENAME TO umap_tilelayer; +ALTER TABLE leaflet_storage_tilelayer_id_seq RENAME TO umap_tilelayer_id_seq; +COMMIT; +``` + +- Then fake initial migrations: + + umap migrate --fake-initial + +- Then run the new migrations: + + umap migrate + +- If you have customized some templates, change any `leaflet_storage/` path + to `umap/` + +- If you have customized some static, change any `storage/` path + to `umap/` + +- Each `LEAFLET_STORAGE_XXX` setting should be renamed in `UMAP_XXX` (but we + still support them for now) + + + +## 1.0.0.rc-1 +- BREAKING: support of python 2 is removed per upgrading to Django 2.0 +- WARNING: merge Leaflet-Storage and django-leaflet-storage inside umap to ease + maintenance and contribution; See [Upgrading to 1.0](#upgrading-to-1.0) +- permissions management forms are now built in JS directly +- upgrade all dependencies +- added a language switcher in the home page footer +- added UMAP_CUSTOM_TEMPLATES and UMAP_CUSTOM_STATICS settings to make + customization easier +- added empty `umap/theme.css` to ease customization +- add download link in the map and datalayers edit panel +- fixed some touch related CSS issues +- removed support for old URL (changed in version `0.3.0`) +- added languages: hr (Croatian), pl (Polish), hu (Hungarian), sl (Slovenian), + el (Greek), gl (Galician) +- JS locales are now bundled, no need to generate them while installing +- local settings are now loaded from `/etc/umap/umap.conf` if available +- fixed an issue where it was not possible to change the tilelayer if the + tilelayer control was not added to the map (#587) +- `showLabel` is now a ternary value (instead of having this plus `labelHover`) + (#553) +- fixed resetting a select to undefined for inheritable fields (#551) +- fixed labelKey not being saved (#595) +- filtering in data browser now is also reflected in the displayed features + (#550) + + + +## 0.8.0 +- allow colon in properties to be consumed in popupTemplate +- added am_ET, pl and sk_SK locales +- fixed default licence being created in every available languages +- switch to pytest for unit tests +- Django 1.10 compatibility +- add DataLayer.rank +- Expose DataLayer versions +- python3 support +- add nofollow meta when map is not public + +## 0.7.5 +- upgrade osmtogeojson to 2.1.0 +- localize and proxy dataUrl parameter + +## 0.7.4 +- fix anonymous not able to edit map anymore + +## 0.7.3 +- add tooltip when drawing +- import multiple files at a time +- added Chinese (Taiwan) locale +- fixed right-click on path vertex not working propertly when editing + +## 0.7.1 +- upgrade Leaflet.Editable to 0.2.0 +- fixed some bugs after Leaflet.Editable switch + +## 0.7.0 +- introduce panel popup mode +- upgraded leaflet.loading to 0.1.10 +- make the cluster text color dynamic +- fix missing icons for transorm to polygon/polyline actions +- add a slideshow mode +- make possible to set cluster color by hand +- make possible to manage showLabel from layer and map +- basic kml/gpx download support +- MultiLineString are merged at import +- catch setMaxBounds errors (when using useless bounds) +- first version of a table editor +- it's now possible to cancel every mouse action of a polygon + (useful when using them as background) +- simple custom popup templates +- more control over map data attribution (custom inputs added) +- basic HTTP optimistic concurrency control +- add "empty" button in limit bounds fieldset +- make possible to decide which properties the data browser will filter on +- add "datalayers" query string parameter to override shown datalayers on map load +- add edit fieldset for changing marker latlng by hand +- moved from Leaflet.Draw to Leaflet.Editable +- added Vietnamese +- by default, allow_edit is now false +- added Chinese (Taiwan) locale + +## 0.6.x +- add TMS option to custom tilelayer +- allow to define default properties at map level +- support iframe in text formatting +- fix bug where polygon export were adding a point +- make that only visible elements are downloaded +- iframe export helper +- add Leaflet.label (for marker only atm) +- GeoRSS support +- heatmap support, thanks to https://github.com/Leaflet/Leaflet.heat +- added optional caption bar +- added new "large" popup template +- added a button to empty a layer without deleting it +- added a button to clone a datalayer +- added dataUrl and dataFormat on map creation page +- basic support for GeometryCollection import +- removed submodules and switched to grunt for assets management +- upgrade to django 1.6 +- sesql replaced by django-pgindex +- support for gzip for datalayer geojson +- support for X-Senfile/Accel-Redirect +- more translations +- fix anonymous map owner not able to delete their map +- fix missing vendors assets +- reset South migrations (some were bugged); to be back again with django 1.7 +- added russian locale +- http optimistic concurrency control +- longer anonymous cookie max_age (one month instead of session only) +- add possibility to override default zoom with LEAFLET_ZOOM setting +- fix bug where anonymous map wasn't editable by logged in users even if + edit status was ANONYMOUS + +## 0.5.x +- datalayers are now sent to backend as geojson +- there is now a global "save" button, and also a "cancel changes" +- added a contextmenu, thanks to https://github.com/aratcliffe/Leaflet.contextmenu +- added a loader, thanks to https://github.com/ebrelsford/Leaflet.loading +- import are processed client side, thanks to https://github.com/mapbox/csv2geojson + and https://github.com/mapbox/togeojson +- download is handled client side +- option "outlink" as been added, to open external URL on polygon click +- edit shortcuts has been added (Ctrl-E to toggle edit status, Ctrl-S to save, etc.) +- links in popup now open in a now window +- possibility to add custom icon symbols +- new option to clusterize markers, thanks to https://github.com/Leaflet/Leaflet.markercluster +- remote data option added to datalayer: this will fetch data from a given URL + instead of from the local database +- popup window can now display a table with all features properties +- support of OSM XML format, thanks to https://github.com/tyrasd/osmtogeojson +- added a measure control, thanks to https://github.com/makinacorpus/Leaflet.MeasureControl +- added Transifex config +- simple help boxes +- it's now possible to set background layer with manual settings +- add an edit button in the data browser (when in edit mode) +- add icon URL formatting with feature properties +- add "Transform to Polygon/Polyline" action +- new link on contextmenu to open external routing service from clicked point +- fix bug where features were duplicated when datalayer was deleted then reverted +- add layer action to databrowser +- add optional default CSS +- allow to close panel by ctrl-Enter when editing in textarea +- add management for map max bounds +- add Ctrl-Z for canceling changes +- internal storage structure totally reviewed: datalayers are stored as geojson files, + instead of being split in features stored in PostGIS +- upload and download moved to client side (see Leaflet.Storage) +- cloned map name is now prefixed by "Clone of " +- added Transifex config +- workaround for non asciiable map names +- add a share_status fielf in Map model + +## 0.4.x +- add a data browser +- add a popup footer with navigation between features +- some work on IE compat +- new tilelayer visual switcher +- Spanish translation, thanks to @ikks +- renamed internally category in datalayer +- add a rank column to tilelayer to control their order in the tilelayer edit box +- fix description that was not exported in the GeoJSON export +- return proper 403 if bad signature on anonymous_edit_url access +- refactored tilelayer management +- smarter encoding management at import +- smarter errors management at import +- handle other delimiters than just comma for CSV import +- Spanish translation, thanks to @ikks +- map clone possibility + +## 0.3.x +- add a setting to display map caption on map load (cf #50) +- add nl translation +- update to Leaflet 0.6-dev and Leaflet.Draw 0.2 +- handle anonymous map creation +- Fix color no more displayed in map info box (cf #70) +- portuguese translation (thanks @FranciscoDS) +- fix bug when the map title was too long (making the slug too long, and so over the + database limit for this field) +- add a setting to display map caption on map load (cf Leaflet.Storage#50) +- update to django 1.5 +- first version of a CSV import +- add a Textarea in import form +- first version of data export (GeoJSON only for now) + + +## 0.2.0 +- handle auth from popup +- add a control for map settings management +- move to Leaflet 0.5 +- move to Leaflet.draw 0.1.6 +- default tooltip has now a fixed position +- make just drown polys editable +- handle path styling option (https://github.com/yohanboniface/Leaflet.Storage/issues/26) +- add an UI to manage icon style and picto (https://github.com/yohanboniface/django-leaflet-storage/issues/22) +- icon style and picto are now manageable also on Markers (https://github.com/yohanboniface/django-leaflet-storage/issues/21) +- add Leaflet.EditInOSM plugin in options +- add a scale control (optional) +- add an optional minimap (with Leaflet.MiniMap plugin) +- handle map settings management from front-end +- handle path styling options (https://github.com/yohanboniface/Leaflet.Storage/issues/26) +- remove Category.rank (https://github.com/yohanboniface/django-leaflet-storage/issues/46) +- Marker has now icon_class and pictogram fields (https://github.com/yohanboniface/django-leaflet-storage/issues/21) +- handle scale control +- basic short URL management +- fixed a bug where imports were failing if the category had a custom marker image + +## 0.1.0 + +- first packaged version diff --git a/docs/custom.md b/docs/custom.md new file mode 100644 index 00000000..9f9aab23 --- /dev/null +++ b/docs/custom.md @@ -0,0 +1,83 @@ +# Customize your uMap installation + + +When running your own uMap, you may want to changed its appearance, for example +you want your own logo on the home page, or you want to apply some design, or +you want to add some tracking (but anonymous!) script… + +This is done by overriding templates, CSS and images and telling uMap about +that. +So basically you'll have your own templates and/or statics directories where +you will put the templates or statics you want to control (and only those). + +Inside thore directory, you need to respect the exact relative path of the +templates or statics you are adding, relatively to the +[templates](https://github.com/umap-project/umap/tree/master/umap/templates) +and +[static](https://github.com/umap-project/umap/tree/master/umap/static) +roots in the uMap structure. +For example, if you want to control the logo, you will add your own static with +the relative path `umap/img/logo.svg`. + +The same apply to any file inside `umap/templates` and `umap/statics`. + +## Settings + +- `UMAP_CUSTOM_TEMPLATES` (`path`): points to the directory where the custom + templates are stored +- `UMAP_CUSTOM_STATICS` (`path`): points to the directory where the custom + templates are stored + + +## Example + +Let's say we want to customize the home page, with a custom header, a custom +logo, and some CSS adjustments. + +For this we need to control at least two files: + +- `umap/navigation.html` +- `umap/theme.css` + +Let's create one templates directory: + + mkdir -p /srv/umap/custom/templates/ + +And one static directory: + + mkdir -p /srv/umap/custom/static/ + +Now let's create our custom navigation file: + + vim /srv/umap/custom/templates/umap/navigation.html + +We certainly want to copy-paste the +[original one](https://github.com/umap-project/umap/blob/master/umap/templates/umap/navigation.html) +to adapt it. + +Now let's add our custom logo, with whatever path inside the static dir, given +we'll customize also the CSS: + + mv mylogo.png /srv/umap/custom/static/umap/mylogo.png + +And then let's add some custom rules, for example the one to load our logo: + +```css +.umap-nav h1 a { + background-image: url("./img/mylogo.png"); +} +``` + +And we want the header to be red: + +```css +.umap-nav { + background-color: red; +} +``` + +And so on! + +See also +[https://github.com/etalab/cartes.data.gouv.fr](https://github.com/etalab/cartes.data.gouv.fr) +for an example of customization. diff --git a/docs/ubuntu.md b/docs/ubuntu.md index aac93d68..5c0164ca 100644 --- a/docs/ubuntu.md +++ b/docs/ubuntu.md @@ -82,10 +82,6 @@ you will need to run again this last line.* umap collectstatic -## Create languages files - - umap storagei18n - ## Create a superuser umap createsuperuser diff --git a/mkdocs.yml b/mkdocs.yml index 8f69ea69..ddfe693c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -5,4 +5,6 @@ pages: - Contributing: contributing.md - how-tos: - Ubuntu from scratch: ubuntu.md + - Customize your uMap style: custom.md +- Changelog: changelog.md theme: readthedocs diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..3cc78942 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2465 @@ +{ + "name": "umap", + "version": "1.0.0-alpha.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/geojson": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", + "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", + "optional": true + }, + "JSONStream": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.0.tgz", + "integrity": "sha1-78Ri1aW8lOwAf0siVxrNf28q4BM=", + "requires": { + "jsonparse": "0.0.5", + "through": "2.2.7" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "adm-zip": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.2.1.tgz", + "integrity": "sha1-6AHO3rW9mk6Y1pnFwPQjnicx3L8=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "argparse": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "dev": true, + "requires": { + "underscore": "1.7.0", + "underscore.string": "2.4.0" + }, + "dependencies": { + "underscore.string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", + "dev": true + } + } + }, + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", + "dev": true, + "optional": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", + "dev": true + }, + "aws-sign2": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz", + "integrity": "sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", + "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", + "dev": true, + "requires": { + "readable-stream": "2.0.6" + } + }, + "boom": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", + "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", + "dev": true, + "requires": { + "hoek": "0.9.1" + } + }, + "bops": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz", + "integrity": "sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo=", + "requires": { + "base64-js": "0.0.2", + "to-utf8": "0.0.1" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-equal": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.2.tgz", + "integrity": "sha1-7Lt5D1aNQAmKYkK1SAXHWAXrk48=" + }, + "bunker": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/bunker/-/bunker-0.1.2.tgz", + "integrity": "sha1-yImSRkqOKm7ehpMDdfkrWAd++Xw=", + "requires": { + "burrito": "0.2.12" + } + }, + "burrito": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/burrito/-/burrito-0.2.12.tgz", + "integrity": "sha1-0NbmrIHV6ZeJxvpKzLCwAx6lT2s=", + "requires": { + "traverse": "0.5.2", + "uglify-js": "1.1.1" + }, + "dependencies": { + "traverse": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.5.2.tgz", + "integrity": "sha1-4gPFjV9/DjfbbnTArLkpuwm2HYU=" + }, + "uglify-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.1.1.tgz", + "integrity": "sha1-7nGpfEzv0GoamyBDfzQRiYKqA1s=" + } + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "deep-eql": "0.1.3", + "type-detect": "1.0.0" + } + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true, + "requires": { + "ansi-styles": "1.1.0", + "escape-string-regexp": "1.0.5", + "has-ansi": "0.1.0", + "strip-ansi": "0.3.0", + "supports-color": "0.2.0" + } + }, + "charm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", + "integrity": "sha1-BsIe7RobBq62dVPNxT4jJ0usIpY=" + }, + "coffee-script": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", + "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", + "dev": true, + "optional": true, + "requires": { + "delayed-stream": "0.0.5" + } + }, + "commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + } + }, + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "dev": true, + "requires": { + "ini": "1.3.5", + "proto-list": "1.2.4" + }, + "dependencies": { + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", + "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", + "dev": true, + "optional": true, + "requires": { + "boom": "0.4.2" + } + }, + "csv2geojson": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/csv2geojson/-/csv2geojson-5.0.2.tgz", + "integrity": "sha1-q9ZJ8uxXaJIZrU8Z0zO+dUVrb1k=", + "requires": { + "concat-stream": "1.5.2", + "d3-dsv": "1.0.1", + "optimist": "0.6.1", + "sexagesimal": "0.5.0" + }, + "dependencies": { + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + } + } + } + }, + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", + "dev": true, + "optional": true + }, + "d3-dsv": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.1.tgz", + "integrity": "sha1-1JU0fATLHg0mVXu9xHdcTRGiReo=", + "requires": { + "rw": "1.3.3" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "dateformat": { + "version": "1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + } + } + }, + "deep-equal": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz", + "integrity": "sha1-mWedO70EcVb81FDT0B7rkGhpHoM=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", + "dev": true, + "optional": true + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "difflet": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/difflet/-/difflet-0.2.6.tgz", + "integrity": "sha1-qyOzH1ZJtvqo49KsvTNEZzZcpvo=", + "requires": { + "charm": "0.1.2", + "deep-is": "0.1.3", + "traverse": "0.6.6" + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz", + "integrity": "sha1-Wd+dzSJ+gIs2Wuc+H2aErD2Ub8I=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.3.0.tgz", + "integrity": "sha1-mtTVm1r2ymhMYv5tdo7xcOcN8ZI=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extract-zip": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", + "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=", + "dev": true, + "requires": { + "concat-stream": "1.5.0", + "debug": "0.7.4", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", + "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + } + }, + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "findup-sync": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", + "dev": true, + "requires": { + "glob": "3.2.11", + "lodash": "2.4.2" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "forever-agent": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", + "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", + "dev": true + }, + "form-data": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", + "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=", + "dev": true, + "optional": true, + "requires": { + "async": "0.9.2", + "combined-stream": "0.0.7", + "mime": "1.2.11" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true, + "optional": true + } + } + }, + "formatio": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", + "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", + "dev": true, + "requires": { + "samsam": "1.1.2" + } + }, + "fs-extra": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.2.8" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "geojson-area": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/geojson-area/-/geojson-area-0.1.0.tgz", + "integrity": "sha1-1I2AcILPrfSnjfE0m+UPOL8YlK4=", + "requires": { + "wgs84": "0.0.0" + } + }, + "geojson-numeric": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.0.tgz", + "integrity": "sha1-q5quLqlyekg3B5rP8qqDyHLXLUo=", + "requires": { + "concat-stream": "1.0.1", + "optimist": "0.3.7" + }, + "dependencies": { + "concat-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", + "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", + "requires": { + "bops": "0.0.6" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "0.0.3" + } + } + } + }, + "geojson-rewind": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/geojson-rewind/-/geojson-rewind-0.2.0.tgz", + "integrity": "sha1-6lWOnkT/A7hlXQoIt1B43DOhXnk=", + "requires": { + "concat-stream": "1.2.1", + "geojson-area": "0.1.0", + "minimist": "0.0.5" + }, + "dependencies": { + "concat-stream": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.2.1.tgz", + "integrity": "sha1-81EAtsRjeL+6i2uA+fDQzN8T3GA=", + "requires": { + "bops": "0.0.6" + } + }, + "minimist": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", + "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=" + } + } + }, + "georsstogeojson": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/georsstogeojson/-/georsstogeojson-0.1.0.tgz", + "integrity": "sha1-9duAeheaK0Z3sJpWsgqdHCT7FlM=", + "requires": { + "xmldom": "0.1.27" + } + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "grunt": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", + "dev": true, + "requires": { + "async": "0.1.22", + "coffee-script": "1.3.3", + "colors": "0.6.2", + "dateformat": "1.0.2-1.2.3", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.1.3", + "getobject": "0.1.0", + "glob": "3.1.21", + "grunt-legacy-log": "0.1.3", + "grunt-legacy-util": "0.2.0", + "hooker": "0.2.3", + "iconv-lite": "0.2.11", + "js-yaml": "2.0.5", + "lodash": "0.9.2", + "minimatch": "0.2.14", + "nopt": "1.0.10", + "rimraf": "2.2.8", + "underscore.string": "2.2.1", + "which": "1.0.9" + }, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } + }, + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + } + } + }, + "grunt-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "dev": true, + "requires": { + "findup-sync": "0.3.0", + "grunt-known-options": "1.1.0", + "nopt": "3.0.6", + "resolve": "1.1.7" + }, + "dependencies": { + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "5.0.15" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + } + } + }, + "grunt-contrib-concat": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz", + "integrity": "sha1-lTxu/f39LBB6uchQd/LUsk0xzUk=", + "dev": true, + "requires": { + "chalk": "0.5.1", + "source-map": "0.3.0" + } + }, + "grunt-contrib-copy": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-0.5.0.tgz", + "integrity": "sha1-QQB1rEWlhWuhkbHMclclRQ1KAhU=", + "dev": true + }, + "grunt-known-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", + "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", + "dev": true + }, + "grunt-legacy-log": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", + "dev": true, + "requires": { + "colors": "0.6.2", + "grunt-legacy-log-utils": "0.1.1", + "hooker": "0.2.3", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true + } + } + }, + "grunt-legacy-log-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", + "dev": true, + "requires": { + "colors": "0.6.2", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true + } + } + }, + "grunt-legacy-util": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", + "dev": true, + "requires": { + "async": "0.1.22", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "0.9.2", + "underscore.string": "2.2.1", + "which": "1.0.9" + } + }, + "happen": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/happen/-/happen-0.1.3.tgz", + "integrity": "sha1-NXrHYPq4dFueVracudOvLACfFTk=", + "dev": true + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.15.1", + "is-my-json-valid": "2.17.2", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + }, + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz", + "integrity": "sha1-uQuxaYByhUEdp//LjdJZhQLTtS0=", + "dev": true, + "optional": true, + "requires": { + "boom": "0.4.2", + "cryptiles": "0.2.2", + "hoek": "0.9.1", + "sntp": "0.2.4" + } + }, + "hoek": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", + "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", + "dev": true + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "htmlparser2": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.5.1.tgz", + "integrity": "sha1-b0L3ZX3RnBP31l3pEYQXOUoL5tA=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.2.1", + "domutils": "1.3.0", + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, + "http-signature": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", + "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", + "dev": true, + "optional": true, + "requires": { + "asn1": "0.1.11", + "assert-plus": "0.1.5", + "ctype": "0.5.3" + } + }, + "iconv-lite": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", + "dev": true + }, + "ieee754": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz", + "integrity": "sha1-ToCMLOFExsF4iRjgNNZ5e8bPYoE=", + "dev": true + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "dependencies": { + "commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "js-yaml": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", + "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", + "dev": true, + "requires": { + "argparse": "0.1.16", + "esprima": "1.0.4" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "jsonparse": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", + "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=" + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "jxon": { + "version": "2.0.0-beta.5", + "resolved": "https://registry.npmjs.org/jxon/-/jxon-2.0.0-beta.5.tgz", + "integrity": "sha1-O2qUEE+YAe5oL9BWZF/1Rz2bND4=", + "requires": { + "xmldom": "0.1.27" + } + }, + "kew": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.1.7.tgz", + "integrity": "sha1-CjKoF/8amzsSuMm6z0vE1nmvjnI=", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "leaflet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.3.1.tgz", + "integrity": "sha512-adQOIzh+bfdridLM1xIgJ9VnJbAUY3wqs/ueF+ITla+PLQ1z47USdBKUf+iD9FuUA8RtlT6j6hZBfZoA6mW+XQ==" + }, + "leaflet-contextmenu": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/leaflet-contextmenu/-/leaflet-contextmenu-1.4.0.tgz", + "integrity": "sha1-4r2kga8QJggOq6oymX5TH9RPYFw=" + }, + "leaflet-editable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/leaflet-editable/-/leaflet-editable-1.1.0.tgz", + "integrity": "sha1-93dZekCoGic/KHtIn9D+XM1gyNA=" + }, + "leaflet-editinosm": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/leaflet-editinosm/-/leaflet-editinosm-0.2.3.tgz", + "integrity": "sha1-8HFmTEpSe3b3uPm87HRLJIiVwHE=" + }, + "leaflet-formbuilder": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/leaflet-formbuilder/-/leaflet-formbuilder-0.2.3.tgz", + "integrity": "sha1-7ucYzcyMOzABk+U7qASFLAv0l9k=" + }, + "leaflet-fullscreen": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leaflet-fullscreen/-/leaflet-fullscreen-1.0.2.tgz", + "integrity": "sha1-CcYcS6xF9jsu4Sav2H5c2XZQ/Bs=" + }, + "leaflet-hash": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/leaflet-hash/-/leaflet-hash-0.2.1.tgz", + "integrity": "sha1-w2xxg0fFJDAztXy0uuomEZ2CxwE=" + }, + "leaflet-i18n": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/leaflet-i18n/-/leaflet-i18n-0.3.1.tgz", + "integrity": "sha1-QE513GcE9KI5nRzQXw3R3ReDALU=" + }, + "leaflet-loading": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/leaflet-loading/-/leaflet-loading-0.1.24.tgz", + "integrity": "sha1-6v38GIcY6xPTz3uSJsTAaxbpKRk=" + }, + "leaflet-measurable": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/leaflet-measurable/-/leaflet-measurable-0.0.5.tgz", + "integrity": "sha1-A6dXfcxqVYWEo1lldjX47WnnJX8=" + }, + "leaflet-minimap": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/leaflet-minimap/-/leaflet-minimap-3.6.1.tgz", + "integrity": "sha1-KkP/Oz2UekWgrPS978llBbZzpsY=" + }, + "leaflet-toolbar": { + "version": "github:umap-project/Leaflet.toolbar#a730bbe3baf402cdf8337e3271081bfa4ff1a75b" + }, + "leaflet.heat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/leaflet.heat/-/leaflet.heat-0.2.0.tgz", + "integrity": "sha1-EJ2M9Ybwre5B8Fr/Ax4np3/swik=" + }, + "leaflet.markercluster": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.3.0.tgz", + "integrity": "sha512-bHBaI8kTaLrZxI/ZP7pnNaS8WCKKz98BU1//B5OH9b/kTk6IriduvDtMFGlGBYYr/ymuXCB9lO7HsGBr5dSw5w==" + }, + "leaflet.path.drag": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/leaflet.path.drag/-/leaflet.path.drag-0.0.6.tgz", + "integrity": "sha1-bZw68LnXsDJUSuFr/eaI8BYFFKA=" + }, + "leaflet.photon": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/leaflet.photon/-/leaflet.photon-0.7.3.tgz", + "integrity": "sha1-0U170y6tfkAqF/O+1HKoDxym+UY=" + }, + "lodash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", + "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", + "dev": true + }, + "lolex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", + "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", + "dev": true + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + }, + "mime": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", + "dev": true + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mocha": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", + "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", + "dev": true, + "requires": { + "commander": "2.3.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.2", + "glob": "3.2.11", + "growl": "1.9.2", + "jade": "0.26.3", + "mkdirp": "0.5.1", + "supports-color": "1.2.0", + "to-iso-string": "0.0.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "dev": true + }, + "supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "dev": true + } + } + }, + "mocha-phantomjs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mocha-phantomjs/-/mocha-phantomjs-4.1.0.tgz", + "integrity": "sha1-x14WYS4aavCtjSgeOi/vSdVeUFs=", + "dev": true, + "requires": { + "commander": "2.15.1", + "mocha-phantomjs-core": "1.3.1", + "phantomjs": "1.9.7-15" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", + "dev": true + }, + "phantomjs": { + "version": "1.9.7-15", + "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.7-15.tgz", + "integrity": "sha1-Czp85jBIaoO+kf9Ogy7uIOlxEVs=", + "dev": true, + "requires": { + "adm-zip": "0.2.1", + "kew": "0.1.7", + "mkdirp": "0.3.5", + "ncp": "0.4.2", + "npmconf": "0.0.24", + "progress": "1.1.8", + "request": "2.36.0", + "request-progress": "0.3.1", + "rimraf": "2.2.8", + "which": "1.0.9" + } + } + } + }, + "mocha-phantomjs-core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mocha-phantomjs-core/-/mocha-phantomjs-core-1.3.1.tgz", + "integrity": "sha1-WGU4yNcfqN6QxBpGrMBIHB+4Phg=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "ncp": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", + "dev": true + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true + }, + "nopt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz", + "integrity": "sha1-KqCbfRdoSHs7ianFqlIzW/8Lrqc=", + "requires": { + "abbrev": "1.1.1" + } + }, + "npmconf": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-0.0.24.tgz", + "integrity": "sha1-t4h1sIjMw8Cvo+zrPOMkSxtSOQw=", + "dev": true, + "requires": { + "config-chain": "1.1.11", + "inherits": "1.0.2", + "ini": "1.1.0", + "mkdirp": "0.3.5", + "nopt": "2.2.1", + "once": "1.1.1", + "osenv": "0.0.3", + "semver": "1.1.4" + }, + "dependencies": { + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", + "dev": true + }, + "once": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/once/-/once-1.1.1.tgz", + "integrity": "sha1-nbV0kzzLCMOnYU0VQDLAnqbzOec=", + "dev": true + } + } + }, + "oauth-sign": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz", + "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.4.0.tgz", + "integrity": "sha1-y47Dfy/jqphky2eidSUOfhliCiU=", + "dev": true, + "requires": { + "wordwrap": "0.0.3" + } + }, + "osenv": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz", + "integrity": "sha1-zWrY3bKQkVrZ4idlV2Al1BHynLY=", + "dev": true + }, + "osm-polygon-features": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/osm-polygon-features/-/osm-polygon-features-0.9.2.tgz", + "integrity": "sha1-IK5BEwxIbkmjsqPCtYoUGcSYZ3g=" + }, + "osmtogeojson": { + "version": "3.0.0-beta.3", + "resolved": "https://registry.npmjs.org/osmtogeojson/-/osmtogeojson-3.0.0-beta.3.tgz", + "integrity": "sha512-8abt3HLjlMzR1QwlnqnJTRPo7P+lOTf3VMIp1lmGvKno4Il+6LLFuWwohyDs8tPZjaUGuCjK0YjRkapsBMjH1Q==", + "requires": { + "@types/geojson": "1.0.6", + "JSONStream": "0.8.0", + "concat-stream": "1.0.1", + "geojson-numeric": "0.2.0", + "geojson-rewind": "0.2.0", + "htmlparser2": "3.5.1", + "optimist": "0.3.7", + "osm-polygon-features": "0.9.2", + "tiny-osmpbf": "0.1.0", + "xmldom": "0.1.27" + }, + "dependencies": { + "concat-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", + "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", + "requires": { + "bops": "0.0.6" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "0.0.3" + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pbf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", + "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", + "requires": { + "ieee754": "1.1.11", + "resolve-protobuf-schema": "2.0.0" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "phantomjs": { + "version": "1.9.20", + "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz", + "integrity": "sha1-RCSsog4U0lXAsIia9va4lz2hDg0=", + "dev": true, + "requires": { + "extract-zip": "1.5.0", + "fs-extra": "0.26.7", + "hasha": "2.2.0", + "kew": "0.7.0", + "progress": "1.1.8", + "request": "2.67.0", + "request-progress": "2.0.1", + "which": "1.2.14" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "4.17.10" + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", + "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", + "dev": true, + "requires": { + "async": "2.6.1", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "qs": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz", + "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=", + "dev": true + }, + "request": { + "version": "2.67.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz", + "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "bl": "1.0.3", + "caseless": "0.11.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "1.0.1", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "5.2.1", + "stringstream": "0.0.6", + "tough-cookie": "2.2.2", + "tunnel-agent": "0.4.3" + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "1.0.0" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "tough-cookie": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", + "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=", + "dev": true + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } + } + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "protocol-buffers-schema": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-2.2.0.tgz", + "integrity": "sha1-0pxs1z+2VZePtpiWkRgNuEQRn2E=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", + "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.36.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.36.0.tgz", + "integrity": "sha1-KMbAQmLHuf/dIbklU3RRfubZQ/U=", + "dev": true, + "requires": { + "aws-sign2": "0.5.0", + "forever-agent": "0.5.2", + "form-data": "0.1.4", + "hawk": "1.0.0", + "http-signature": "0.10.1", + "json-stringify-safe": "5.0.1", + "mime": "1.2.11", + "node-uuid": "1.4.8", + "oauth-sign": "0.3.0", + "qs": "0.6.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.4.3" + } + }, + "request-progress": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", + "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "dev": true, + "requires": { + "throttleit": "0.0.2" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "resolve-protobuf-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.0.0.tgz", + "integrity": "sha1-5nsGKmfwLRG9aIbnDv2niEB+D7Q=", + "requires": { + "protocol-buffers-schema": "2.2.0" + } + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + }, + "runforcover": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/runforcover/-/runforcover-0.0.2.tgz", + "integrity": "sha1-NE8FfY1F0zrrxsyCIEZ49pxIV8w=", + "requires": { + "bunker": "0.1.2" + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "samsam": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", + "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", + "dev": true + }, + "semver": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-1.1.4.tgz", + "integrity": "sha1-LlpOcrqwNHLMl/cnU7RQiRLvVUA=", + "dev": true + }, + "sexagesimal": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/sexagesimal/-/sexagesimal-0.5.0.tgz", + "integrity": "sha1-nYFb0r3dY0tiW6aFG/j+dKWtPvM=" + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, + "sinon": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", + "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", + "dev": true, + "requires": { + "formatio": "1.1.1", + "lolex": "1.3.2", + "samsam": "1.1.2", + "util": "0.10.3" + } + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "sntp": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", + "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", + "dev": true, + "optional": true, + "requires": { + "hoek": "0.9.1" + } + }, + "source-map": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz", + "integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true + }, + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + }, + "strxml": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/strxml/-/strxml-0.0.0.tgz", + "integrity": "sha1-j/UxTIyHTbBVBnN2GoHk0/JEFFw=", + "requires": { + "tap": "0.4.13" + } + }, + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + }, + "tap": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/tap/-/tap-0.4.13.tgz", + "integrity": "sha1-OYYTTWdZcn/CIj5hEm7rhyQ6zLw=", + "requires": { + "buffer-equal": "0.0.2", + "deep-equal": "0.0.0", + "difflet": "0.2.6", + "glob": "3.2.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "nopt": "2.2.1", + "runforcover": "0.0.2", + "slide": "1.1.6", + "yamlish": "0.0.7" + } + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "through": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", + "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=" + }, + "tiny-inflate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", + "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" + }, + "tiny-osmpbf": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tiny-osmpbf/-/tiny-osmpbf-0.1.0.tgz", + "integrity": "sha1-ColXFxE+vmquNjxL5e76js2vuSc=", + "requires": { + "pbf": "3.1.0", + "tiny-inflate": "1.0.2" + } + }, + "to-iso-string": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", + "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", + "dev": true + }, + "to-utf8": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz", + "integrity": "sha1-0Xrqcv8vujm55DYBvns/9y4ImFI=" + }, + "togeojson": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/togeojson/-/togeojson-0.16.0.tgz", + "integrity": "sha1-q1cp5PjJkg5tpfCP2CSQodFqym0=", + "requires": { + "concat-stream": "1.5.2", + "minimist": "1.2.0", + "xmldom": "0.1.27" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "togpx": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/togpx/-/togpx-0.5.4.tgz", + "integrity": "sha1-sz27BUHfBL1rpPULhtqVNCS7d3M=", + "requires": { + "concat-stream": "1.0.1", + "jxon": "2.0.0-beta.5", + "optimist": "0.3.7", + "xmldom": "0.1.27" + }, + "dependencies": { + "concat-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", + "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", + "requires": { + "bops": "0.0.6" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "0.0.3" + } + } + } + }, + "tokml": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tokml/-/tokml-0.4.0.tgz", + "integrity": "sha1-fAMhtCRmPKMYegpBny37z5DaNyo=", + "requires": { + "minimist": "0.1.0", + "rw": "0.0.4", + "strxml": "0.0.0" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" + }, + "rw": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/rw/-/rw-0.0.4.tgz", + "integrity": "sha1-3iex7VuRdXcuqiKnlmJRC9BZjEw=" + } + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", + "dev": true, + "requires": { + "optimist": "0.3.7", + "source-map": "0.1.43" + }, + "dependencies": { + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "dev": true, + "requires": { + "wordwrap": "0.0.3" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, + "underscore.string": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", + "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "wgs84": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz", + "integrity": "sha1-NP3FVZF7blfPKigu0ENxDASc3HY=" + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yamlish": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/yamlish/-/yamlish-0.0.7.tgz", + "integrity": "sha1-tK+aHcxjYYhzw9bkUewyE8OaV/s=" + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..e2dd803d --- /dev/null +++ b/package.json @@ -0,0 +1,63 @@ +{ + "name": "umap", + "version": "1.0.0-alpha.1", + "description": "Manage map and features with Leaflet and expose them for backend storage through an API.", + "directories": { + "test": "test" + }, + "devDependencies": { + "chai": "^3.3.0", + "grunt": "^0.4.4", + "grunt-cli": "^1.2.0", + "grunt-contrib-concat": "^0.5.1", + "grunt-contrib-copy": "^0.5.0", + "happen": "~0.1.3", + "mocha": "^2.3.3", + "mocha-phantomjs": "^4.0.1", + "optimist": "~0.4.0", + "phantomjs": "^1.9.18", + "sinon": "^1.10.3", + "uglify-js": "~2.2.3" + }, + "scripts": { + "test": "firefox test/index.html", + "build": "grunt" + }, + "repository": { + "type": "git", + "url": "git://github.com/umap-project/Leaflet.Storage.git" + }, + "keywords": [ + "leaflet" + ], + "author": "Yohan Boniface", + "license": "WTFPL", + "bugs": { + "url": "https://github.com/umap-project/Leaflet.Storage/issues" + }, + "homepage": "http://wiki.openstreetmap.org/wiki/UMap", + "dependencies": { + "csv2geojson": "5.0.2", + "georsstogeojson": "^0.1.0", + "leaflet": "1.3.1", + "leaflet-contextmenu": "^1.4.0", + "leaflet-editable": "^1.1.0", + "leaflet-editinosm": "0.2.3", + "leaflet-formbuilder": "0.2.3", + "leaflet-fullscreen": "1.0.2", + "leaflet-hash": "0.2.1", + "leaflet-i18n": "0.3.1", + "leaflet-loading": "0.1.24", + "leaflet-measurable": "0.0.5", + "leaflet-minimap": "^3.6.1", + "leaflet-toolbar": "umap-project/Leaflet.toolbar", + "leaflet.heat": "0.2.0", + "leaflet.markercluster": "^1.3.0", + "leaflet.path.drag": "0.0.6", + "leaflet.photon": "0.7.3", + "osmtogeojson": "^3.0.0-beta.3", + "togeojson": "0.16.0", + "togpx": "^0.5.4", + "tokml": "0.4.0" + } +} diff --git a/pytest.ini b/pytest.ini index b9589e63..733af6f1 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,2 +1,2 @@ [pytest] -DJANGO_SETTINGS_MODULE=umap.settings +DJANGO_SETTINGS_MODULE=umap.tests.settings diff --git a/requirements-dev.txt b/requirements-dev.txt index 59dc14cc..95b24a2e 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,3 +1,4 @@ +factory-boy==2.11.1 pytest==3.0.7 pytest-django==3.1.2 mkdocs==0.16.3 diff --git a/requirements.txt b/requirements.txt index 9c62a3eb..7713efcb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -Django==1.11 +Django==2.0.5 +django-agnocomplete==0.12.2 django-compressor==2.1.1 -django-leaflet-storage==0.8.2 -Pillow==4.1.0 -psycopg2==2.7.1 -requests==2.13.0 -social-auth-app-django==1.1.0 +Pillow==5.1.0 +psycopg2==2.7.4 +requests==2.18.4 +social-auth-app-django==2.1.0 social-auth-core==1.7.0 diff --git a/setup.py b/setup.py index f998b162..2c8e035b 100644 --- a/setup.py +++ b/setup.py @@ -23,20 +23,26 @@ setup( author=umap.__author__, author_email=umap.__contact__, description=umap.__doc__, - keywords="django leaflet geodjango openstreetmap", + keywords="django leaflet geodjango openstreetmap map", url=umap.__homepage__, packages=find_packages(), include_package_data=True, platforms=["any"], zip_safe=True, long_description=long_description, + long_description_content_type='text/markdown', install_requires=install_requires, classifiers=[ - "Development Status :: 3 - Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Operating System :: OS Independent", "Topic :: Software Development :: Libraries :: Python Modules", "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", ], entry_points={ 'console_scripts': ['umap=umap.bin:main'], diff --git a/umap/admin.py b/umap/admin.py new file mode 100644 index 00000000..74193e3b --- /dev/null +++ b/umap/admin.py @@ -0,0 +1,13 @@ +from django.contrib.gis import admin +from .models import Map, DataLayer, Pictogram, TileLayer, Licence + + +class TileLayerAdmin(admin.ModelAdmin): + list_display = ('name', 'rank', ) + list_editable = ('rank', ) + +admin.site.register(Map, admin.OSMGeoAdmin) +admin.site.register(DataLayer) +admin.site.register(Pictogram) +admin.site.register(TileLayer, TileLayerAdmin) +admin.site.register(Licence) diff --git a/umap/autocomplete.py b/umap/autocomplete.py new file mode 100644 index 00000000..6a485182 --- /dev/null +++ b/umap/autocomplete.py @@ -0,0 +1,19 @@ +from django.conf import settings +from django.contrib.auth import get_user_model +from django.urls import reverse + + +from agnocomplete.register import register +from agnocomplete.core import AgnocompleteModel + + +@register +class AutocompleteUser(AgnocompleteModel): + model = get_user_model() + fields = ['^username'] + + def item(self, current_item): + data = super().item(current_item) + data['url'] = reverse(settings.USER_MAPS_URL, + args=(current_item.get_username(), )) + return data diff --git a/umap/context_processors.py b/umap/context_processors.py index f50e6212..03253b24 100644 --- a/umap/context_processors.py +++ b/umap/context_processors.py @@ -15,4 +15,3 @@ def version(request): return { 'UMAP_VERSION': __version__ } - diff --git a/umap/decorators.py b/umap/decorators.py new file mode 100644 index 00000000..971a9257 --- /dev/null +++ b/umap/decorators.py @@ -0,0 +1,57 @@ +from functools import wraps + +from django.urls import reverse_lazy +from django.shortcuts import get_object_or_404 +from django.http import HttpResponseForbidden +from django.conf import settings + +from .views import simple_json_response +from .models import Map + + +LOGIN_URL = getattr(settings, "LOGIN_URL", "login") +LOGIN_URL = (reverse_lazy(LOGIN_URL) if not LOGIN_URL.startswith("/") + else LOGIN_URL) + + +def login_required_if_not_anonymous_allowed(view_func): + @wraps(view_func) + def wrapper(request, *args, **kwargs): + if (not getattr(settings, "UMAP_ALLOW_ANONYMOUS", False) + and not request.user.is_authenticated): + return simple_json_response(login_required=str(LOGIN_URL)) + return view_func(request, *args, **kwargs) + return wrapper + + +def map_permissions_check(view_func): + """ + Used for URLs dealing with the map. + """ + @wraps(view_func) + def wrapper(request, *args, **kwargs): + map_inst = get_object_or_404(Map, pk=kwargs['map_id']) + user = request.user + kwargs['map_inst'] = map_inst # Avoid rerequesting the map in the view + if map_inst.edit_status >= map_inst.EDITORS: + can_edit = map_inst.can_edit(user=user, request=request) + if not can_edit: + if map_inst.owner and not user.is_authenticated: + return simple_json_response(login_required=str(LOGIN_URL)) + else: + return HttpResponseForbidden('Action not allowed for user.') + return view_func(request, *args, **kwargs) + return wrapper + + +def jsonize_view(view_func): + @wraps(view_func) + def wrapper(request, *args, **kwargs): + response = view_func(request, *args, **kwargs) + response_kwargs = {} + if hasattr(response, 'rendered_content'): + response_kwargs['html'] = response.rendered_content + if response.has_header('location'): + response_kwargs['redirect'] = response['location'] + return simple_json_response(**response_kwargs) + return wrapper diff --git a/umap/fields.py b/umap/fields.py new file mode 100644 index 00000000..f60a62fa --- /dev/null +++ b/umap/fields.py @@ -0,0 +1,33 @@ +import json + +from django.utils import six +from django.db import models +from django.utils.encoding import smart_text + + +class DictField(models.TextField): + """ + A very simple field to store JSON in db. + """ + + def get_prep_value(self, value): + if not value: + value = {} + if not isinstance(value, six.string_types): + value = json.dumps(value) + return value + + def from_db_value(self, value, expression, connection, context): + return self.to_python(value) + + def to_python(self, value): + if not value: + value = {} + if isinstance(value, six.string_types): + return json.loads(value) + else: + return value + + def value_to_string(self, obj): + """Return value from object converted to string properly""" + return smart_text(self.get_prep_value(self.value_from_object(obj))) diff --git a/umap/forms.py b/umap/forms.py new file mode 100644 index 00000000..4a240ff4 --- /dev/null +++ b/umap/forms.py @@ -0,0 +1,87 @@ +from django import forms +from django.contrib.gis.geos import Point +from django.contrib.auth import get_user_model +from django.utils.translation import ugettext_lazy as _ +from django.template.defaultfilters import slugify +from django.conf import settings +from django.forms.utils import ErrorList + +from .models import Map, DataLayer + +DEFAULT_LATITUDE = settings.LEAFLET_LATITUDE if hasattr(settings, "LEAFLET_LATITUDE") else 51 +DEFAULT_LONGITUDE = settings.LEAFLET_LONGITUDE if hasattr(settings, "LEAFLET_LONGITUDE") else 2 +DEFAULT_CENTER = Point(DEFAULT_LONGITUDE, DEFAULT_LATITUDE) + +User = get_user_model() + + +class FlatErrorList(ErrorList): + def __unicode__(self): + return self.flat() + + def flat(self): + if not self: + return u'' + return u' — '.join([e for e in self]) + + +class UpdateMapPermissionsForm(forms.ModelForm): + + class Meta: + model = Map + fields = ('edit_status', 'editors', 'share_status', 'owner') + + +class AnonymousMapPermissionsForm(forms.ModelForm): + + def __init__(self, *args, **kwargs): + super(AnonymousMapPermissionsForm, self).__init__(*args, **kwargs) + full_secret_link = "%s%s" % (settings.SITE_URL, self.instance.get_anonymous_edit_url()) + help_text = _('Secret edit link is %s') % full_secret_link + self.fields['edit_status'].help_text = _(help_text) + + STATUS = ( + (Map.ANONYMOUS, _('Everyone can edit')), + (Map.OWNER, _('Only editable with secret edit link')) + ) + + edit_status = forms.ChoiceField(choices=STATUS) + + class Meta: + model = Map + fields = ('edit_status', ) + + +class DataLayerForm(forms.ModelForm): + + class Meta: + model = DataLayer + fields = ('geojson', 'name', 'display_on_load', 'rank') + + +class MapSettingsForm(forms.ModelForm): + + def __init__(self, *args, **kwargs): + super(MapSettingsForm, self).__init__(*args, **kwargs) + self.fields["slug"].required = False + + def clean_slug(self): + slug = self.cleaned_data.get('slug', None) + name = self.cleaned_data.get('name', None) + if not slug and name: + # If name is empty, don't do nothing, validation will raise + # later on the process because name is required + self.cleaned_data['slug'] = slugify(name) or "map" + return self.cleaned_data['slug'][:50] + else: + return "" + + def clean_center(self): + if not self.cleaned_data['center']: + point = DEFAULT_CENTER + self.cleaned_data['center'] = point + return self.cleaned_data['center'] + + class Meta: + fields = ('settings', 'name', 'center', 'slug') + model = Map diff --git a/umap/locale/am_ET/LC_MESSAGES/django.mo b/umap/locale/am_ET/LC_MESSAGES/django.mo index e6668962..119056d1 100644 Binary files a/umap/locale/am_ET/LC_MESSAGES/django.mo and b/umap/locale/am_ET/LC_MESSAGES/django.mo differ diff --git a/umap/locale/am_ET/LC_MESSAGES/django.po b/umap/locale/am_ET/LC_MESSAGES/django.po index c8306d32..6d04e10e 100644 --- a/umap/locale/am_ET/LC_MESSAGES/django.po +++ b/umap/locale/am_ET/LC_MESSAGES/django.po @@ -9,14 +9,13 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2015-11-15 14:24+0000\n" -"Last-Translator: Alazar Tekle \n" -"Language-Team: Amharic (Ethiopia) (http://www.transifex.com/yohanboniface/" -"umap/language/am_ET/)\n" -"Language: am_ET\n" +"PO-Revision-Date: 2017-09-22 17:21+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Amharic (Ethiopia) (http://www.transifex.com/yohanboniface/umap/language/am_ET/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: am_ET\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: templates/404.html:7 @@ -33,10 +32,8 @@ msgid "Type editors nick to add…" msgstr "የአራሚዎችን ኒክ በመፃፍ ጨምር" #: templates/leaflet_storage/map_detail.html:27 -#, fuzzy -#| msgid "Type editors nick to add…" msgid "Type new owner nick…" -msgstr "የአራሚዎችን ኒክ በመፃፍ ጨምር" +msgstr "" #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -71,9 +68,7 @@ msgstr "እባክዎ አቅራቢ ይምረጡ" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"ዩማፕ በ ኦፕን ስትሪት ማፕ ሌየሮች ካርታዎችን በደቂቃ ውስጥ ሰርተን " -"በገፃችን ማካተት እንድንችል ያደርገናል" +msgstr "ዩማፕ በ ኦፕን ስትሪት ማፕ ሌየሮች ካርታዎችን በደቂቃ ውስጥ ሰርተን በገፃችን ማካተት እንድንችል ያደርገናል" #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -120,13 +115,10 @@ msgstr "በማሳያው ተለማመድ" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"ይህ ለሙከራ እና ፕሪ-ሮሊግ ሪሊዞች የሚያገለግል ማሳያ ነው። ቋሚ የሆነ ማሳያ ከፈለጉ እባክዎ %(stable_url)s ይጠቀሙ። እንዲሁም የራስዎን ማስቀመጥ ይችላሉ፣ ነፃ እና ክፍት ነው!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "ይህ ለሙከራ እና ፕሪ-ሮሊግ ሪሊዞች የሚያገለግል ማሳያ ነው። ቋሚ የሆነ ማሳያ ከፈለጉ እባክዎ %(stable_url)s ይጠቀሙ። እንዲሁም የራስዎን ማስቀመጥ ይችላሉ፣ ነፃ እና ክፍት ነው!" #: templates/umap/home.html:17 msgid "Map of the uMaps" @@ -170,8 +162,8 @@ msgstr "" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." msgstr "" #: templates/umap/password_change.html:12 @@ -214,5 +206,182 @@ msgstr "ፈልግ" msgid "View the map" msgstr "ካርታውን አሳይ" -#~ msgid "Map settings" -#~ msgstr "የካርታዎች ሁኔታ" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "የሚስጥር የማረሚያ መስመሩ %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "ሁሉም ማረም ይችላል" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "በሚስጥር የመረሚያ መስመሩ ብቻ የሚታረም" + +#: models.py:20 +msgid "name" +msgstr "ስም" + +#: models.py:42 +msgid "No licence set" +msgstr "ምንም ፈቃድ አልተሰጠም" + +#: models.py:51 +msgid "details" +msgstr "ዝርዝሮች" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "ፈቃዱ በዝርዝር ከተቀመጠ ገፅ ጛር አገናኝ" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "የድረ-ገፅ አድራሻ ተምሳሌ በኦ.ኤስ.ኤም. የታይል ፎርማት" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "በማረሚያ ሳጥኑ ውስጥ የታይል ሌየሮቹ ቅደም ተከተል" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "አራሚዎች ብቻ ማረም ይችላሉ" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "ባለቤት ብቻ ማረም ይችላል" + +#: models.py:118 +msgid "everyone (public)" +msgstr "ሁሉም (የህዝብ)" + +#: models.py:119 +msgid "anyone with link" +msgstr "አድራሻው ያለው ሁሉ" + +#: models.py:120 +msgid "editors only" +msgstr "አራሚዎች ብቻ" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "መገለጫ" + +#: models.py:124 +msgid "center" +msgstr "መሀከል" + +#: models.py:125 +msgid "zoom" +msgstr "ዙም" + +#: models.py:126 +msgid "locate" +msgstr "ጠቁም" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "በመጫን ላይ ያለውን ተጠቃሚ ጠቁም?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "የካርታውን ፈቃድ ከልስ" + +#: models.py:130 +msgid "licence" +msgstr "ፈቃድ" + +#: models.py:135 +msgid "background" +msgstr "ጀርባ" + +#: models.py:136 +msgid "owner" +msgstr "ባለቤት" + +#: models.py:137 +msgid "editors" +msgstr "አራሚዎች" + +#: models.py:138 +msgid "edit status" +msgstr "ያለበትን ሁኔታ አርም" + +#: models.py:139 +msgid "share status" +msgstr "ያለበትን ሁኔታ አጋራ" + +#: models.py:140 +msgid "settings" +msgstr "ሁኔታዎች" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "በግልፅ ያልተቀመጠው ካርታዎ ከ %s አካውንትዎ ጋር ተያይዟል" + +#: models.py:211 +msgid "Clone of" +msgstr "ድቃይ" + +#: models.py:262 +msgid "display on load" +msgstr "በመጫን ላይ አሳይ" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "ሌየሩ በመጫን ላይ አሳይ" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "ገብተዋል። በመቀጠል ላይ ..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "የካርታ ፍቃዶች" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "እባክዎ ለመቀጠል ይግቡ" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "የተገልጋይ ስምዎ እና የይለፍ ቃልዎ አልተዛመደም። እባክዎ እንደገና ይሞክሩ።" + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "ካርታዎ ተፈጥሯል! ይህንን ካርታ ከሌላ ኮምፒውተር ላይ ሆነው ለማረም ከፈለጉ የሚከተለውን አድራሻ ይጠቀሙ %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "እንኳን ደስ አለዎ ካርታዎ ተፈጥሯል!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "ካርታው ታድሷል!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "የካርታ አራሚዎች በትክክል ታድሰዋል!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "ካርታውን የሚሰርዘው ባለቤቱ ብቻ ነው።" + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "ካርታዎ ተዳቅሏል! ይህንን ካርታ ከሌላ ኮምፒውተር ላይ ሆነው ለማረም ከፈለጉ የሚከተለውን አድራሻ ይጠቀሙ %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "እንኳን ደስ አለዎ ካርታዎ ተዳቅሏል!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "ሌየሩ በትክክል ተሰርዟ" diff --git a/umap/locale/bg/LC_MESSAGES/django.mo b/umap/locale/bg/LC_MESSAGES/django.mo index 3399a0d9..f47568a7 100644 Binary files a/umap/locale/bg/LC_MESSAGES/django.mo and b/umap/locale/bg/LC_MESSAGES/django.mo differ diff --git a/umap/locale/bg/LC_MESSAGES/django.po b/umap/locale/bg/LC_MESSAGES/django.po index 8e6a1bd5..fa814c0a 100644 --- a/umap/locale/bg/LC_MESSAGES/django.po +++ b/umap/locale/bg/LC_MESSAGES/django.po @@ -10,14 +10,13 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2014-07-20 14:03+0000\n" +"PO-Revision-Date: 2017-09-23 19:25+0000\n" "Last-Translator: yohanboniface \n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/umap/language/" -"bg/)\n" -"Language: bg\n" +"Language-Team: Bulgarian (http://www.transifex.com/yohanboniface/umap/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: templates/404.html:7 @@ -70,10 +69,7 @@ msgstr "Моля изберете провайдер" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"uMap ви позволява да създавате карти базирани върху слоевете на OpenStreetMap само за минути и да ги вградите в " -"сайта си." +msgstr "uMap ви позволява да създавате карти базирани върху слоевете на OpenStreetMap само за минути и да ги вградите в сайта си." #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -89,9 +85,7 @@ msgstr "Промени POIs цветове и икони" #: templates/umap/about_summary.html:14 msgid "Manage map options: display a minimap, locate user on load…" -msgstr "" -"Играй с опциите на картата: покажи миникарта, локализирай потребителя при " -"зареждане ..." +msgstr "Играй с опциите на картата: покажи миникарта, локализирай потребителя при зареждане ..." #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" @@ -122,14 +116,10 @@ msgstr "Играй си с демото" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Това е само демо пример, използван за тестове и предварителни издания. Ако " -"имате нужда от стабилна версия, моля използвайте " -"%(stable_url)s. Можете също така да бъде хост на вашата собствена " -"версия, това е отворен код !" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Това е само демо пример, използван за тестове и предварителни издания. Ако имате нужда от стабилна версия, моля използвайте %(stable_url)s. Можете също така да бъде хост на вашата собствена версия, това е отворен код !" #: templates/umap/home.html:17 msgid "Map of the uMaps" @@ -173,8 +163,8 @@ msgstr "" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." msgstr "" #: templates/umap/password_change.html:12 @@ -217,5 +207,182 @@ msgstr "Търсене" msgid "View the map" msgstr "Виж картата" -#~ msgid "Map settings" -#~ msgstr "Настройки на картата" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Тайно редактиране на линк е %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Всеки може да редактира" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Само може да се редактира с тайно редактиран линк" + +#: models.py:20 +msgid "name" +msgstr "име" + +#: models.py:42 +msgid "No licence set" +msgstr "Няма избран лиценз" + +#: models.py:51 +msgid "details" +msgstr "детайли" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Линк към страницата с подробно описание за лиценза." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "URL шаблон, използван формат OSM плочи" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Поръчка на tilelayers в полето за редактиране" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Само редактори могат да редактират" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Само притежателят може да редактира" + +#: models.py:118 +msgid "everyone (public)" +msgstr "всеки (публично)" + +#: models.py:119 +msgid "anyone with link" +msgstr "всеки които има линк" + +#: models.py:120 +msgid "editors only" +msgstr "само редакторите" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "описание" + +#: models.py:124 +msgid "center" +msgstr "център" + +#: models.py:125 +msgid "zoom" +msgstr "мащаб" + +#: models.py:126 +msgid "locate" +msgstr "локализирай" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Локализирай потребител при зареждане?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Избери лиценз за картата." + +#: models.py:130 +msgid "licence" +msgstr "лиценз" + +#: models.py:135 +msgid "background" +msgstr "фон" + +#: models.py:136 +msgid "owner" +msgstr "притежател" + +#: models.py:137 +msgid "editors" +msgstr "редактори" + +#: models.py:138 +msgid "edit status" +msgstr "статус на редактиране" + +#: models.py:139 +msgid "share status" +msgstr "сподели статус" + +#: models.py:140 +msgid "settings" +msgstr "настройки" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Вашата анонимна карта е прикрепена към вашия акаунт %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Клониране на" + +#: models.py:262 +msgid "display on load" +msgstr "покажи при зареждане" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Покажи този слой при зареждане" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "В процес на включване. Продължение..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Разрешения за картата" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Моля, включете се за да осъществите тази процедура" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Вашето потребителско име и парола не съвпадат. Моля, опитайте отново." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Вашата карта е създадена! Ако искате да редактирате тази карта от друг компютър, моля използвайте този линк : %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Поздравления, вашата карта е създадена!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Карта е актуализирана!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Редакторите на картата актуализират с успех!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Само собственикът може да изтрие картата." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Вашата карта е клонирана! Ако искате да редактирате тази карта от друг компютър, моля използвайте този линк: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Поздравления, вашата карта е клонирана!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Слоят е изтрит успешно." diff --git a/umap/locale/ca/LC_MESSAGES/django.mo b/umap/locale/ca/LC_MESSAGES/django.mo index 498932e7..54786006 100644 Binary files a/umap/locale/ca/LC_MESSAGES/django.mo and b/umap/locale/ca/LC_MESSAGES/django.mo differ diff --git a/umap/locale/ca/LC_MESSAGES/django.po b/umap/locale/ca/LC_MESSAGES/django.po index a67552e3..dd78337a 100644 --- a/umap/locale/ca/LC_MESSAGES/django.po +++ b/umap/locale/ca/LC_MESSAGES/django.po @@ -3,20 +3,19 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# jmontane , 2014 +# jmontane, 2014 msgid "" msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2014-04-23 18:50+0000\n" -"Last-Translator: jmontane \n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/umap/language/" -"ca/)\n" -"Language: ca\n" +"PO-Revision-Date: 2017-09-23 19:45+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Catalan (http://www.transifex.com/yohanboniface/umap/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: templates/404.html:7 @@ -33,10 +32,8 @@ msgid "Type editors nick to add…" msgstr "Escriviu els sobrenoms dels editors a afegir..." #: templates/leaflet_storage/map_detail.html:27 -#, fuzzy -#| msgid "Type editors nick to add…" msgid "Type new owner nick…" -msgstr "Escriviu els sobrenoms dels editors a afegir..." +msgstr "" #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -71,9 +68,7 @@ msgstr "Trieu un proveïdor" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"El uMap us permet crear mapes amb capes de l'OpenStreetMap en un minut i incrustar-los al vostre lloc web." +msgstr "El uMap us permet crear mapes amb capes de l'OpenStreetMap en un minut i incrustar-los al vostre lloc web." #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -89,9 +84,7 @@ msgstr "Gestioneu els colors i les icones dels PDI" #: templates/umap/about_summary.html:14 msgid "Manage map options: display a minimap, locate user on load…" -msgstr "" -"Gestioneu les opcions del mapa: mostreu un minimapa, ubiqueu l'usuari en " -"carregar..." +msgstr "Gestioneu les opcions del mapa: mostreu un minimapa, ubiqueu l'usuari en carregar..." #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" @@ -122,14 +115,10 @@ msgstr "Jugueu amb la demostració" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Aquesta és una versió de demostració, usada per a fer proves i desplegar " -"versions. Si us cal un versió estable, useu " -"%(stable_url)s. També podeu hostatjar la vostra pròpia còpia, és codi lliure!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Aquesta és una versió de demostració, usada per a fer proves i desplegar versions. Si us cal un versió estable, useu %(stable_url)s. També podeu hostatjar la vostra pròpia còpia, és codi lliure!" #: templates/umap/home.html:17 msgid "Map of the uMaps" @@ -173,8 +162,8 @@ msgstr "" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." msgstr "" #: templates/umap/password_change.html:12 @@ -217,5 +206,182 @@ msgstr "Cerca" msgid "View the map" msgstr "Mostra el mapa" -#~ msgid "Map settings" -#~ msgstr "Paràmetres del mapa" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "L'enllaç d'edició secret és %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Tothom pot editar" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Només es pot editar amb l'enllaç d'edició secret" + +#: models.py:20 +msgid "name" +msgstr "nom" + +#: models.py:42 +msgid "No licence set" +msgstr "No s'ha indicat llicència" + +#: models.py:51 +msgid "details" +msgstr "detalls" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Enllaç a una pàgina on es detalla la llicència." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "La plantilla de l'URL usa el format de tesel·les de l'OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Ordre de les capes de tessel·les al quadre d'edició" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Només els editors poden editar" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Només el propietari pot editar" + +#: models.py:118 +msgid "everyone (public)" +msgstr "tothom (públic)" + +#: models.py:119 +msgid "anyone with link" +msgstr "qualsevol amb l'enllaç" + +#: models.py:120 +msgid "editors only" +msgstr "només els editors" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "descripció" + +#: models.py:124 +msgid "center" +msgstr "centre" + +#: models.py:125 +msgid "zoom" +msgstr "escala" + +#: models.py:126 +msgid "locate" +msgstr "ubica" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Voleu ubicar l'usuari en carregar?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Trieu la llicència del mapa." + +#: models.py:130 +msgid "licence" +msgstr "llicència" + +#: models.py:135 +msgid "background" +msgstr "fons" + +#: models.py:136 +msgid "owner" +msgstr "propietari" + +#: models.py:137 +msgid "editors" +msgstr "editors" + +#: models.py:138 +msgid "edit status" +msgstr "edita l'estat" + +#: models.py:139 +msgid "share status" +msgstr "comparteix l'estat" + +#: models.py:140 +msgid "settings" +msgstr "paràmetres" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "El vostre mapa anònim s'ha enllaçat al compte %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Clon de" + +#: models.py:262 +msgid "display on load" +msgstr "mostra en carregar" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Mostra aquesta capa en carregar." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Heu iniciat sessió. S'està continuant..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Permisos del mapa" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Inicieu sessió per a procedir" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "L'usuari i contrasenya no coincideixen. Torneu-ho a intentar." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "S'ha creat el vostre mapa! Si voleu editar aquest mapa en un altre ordinador, useu aquest enllaç: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Enhorabona, s'ha creat el vostre mapa!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "S'ha actualitzat el mapa!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "S'han actualitzat els editors del mapa correctament!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Només el propietari pot suprimir el mapa." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "S'ha clonat el vostre mapa! Si voleu editar aquest mapa en un altre ordinador, useu aquest enllaç: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Enhorabona, s'ha clonat el vostre mapa!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "S'ha suprimit la capa correctament." diff --git a/umap/locale/cs_CZ/LC_MESSAGES/django.mo b/umap/locale/cs_CZ/LC_MESSAGES/django.mo index 23782def..10e40bd3 100644 Binary files a/umap/locale/cs_CZ/LC_MESSAGES/django.mo and b/umap/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/umap/locale/cs_CZ/LC_MESSAGES/django.po b/umap/locale/cs_CZ/LC_MESSAGES/django.po index 738b95ab..247c0c7d 100644 --- a/umap/locale/cs_CZ/LC_MESSAGES/django.po +++ b/umap/locale/cs_CZ/LC_MESSAGES/django.po @@ -9,15 +9,14 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2015-10-16 10:19+0000\n" -"Last-Translator: Jakub A. Tesinsky\n" -"Language-Team: Czech (Czech Republic) (http://www.transifex.com/" -"yohanboniface/umap/language/cs_CZ/)\n" -"Language: cs_CZ\n" +"PO-Revision-Date: 2017-09-19 23:03+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Czech (Czech Republic) (http://www.transifex.com/yohanboniface/umap/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Language: cs_CZ\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" #: templates/404.html:7 msgid "Take me to the home page" @@ -33,10 +32,8 @@ msgid "Type editors nick to add…" msgstr "Vložte přezdívku přispěvovatele k přidání" #: templates/leaflet_storage/map_detail.html:27 -#, fuzzy -#| msgid "Type editors nick to add…" msgid "Type new owner nick…" -msgstr "Vložte přezdívku přispěvovatele k přidání" +msgstr "" #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -71,9 +68,7 @@ msgstr "Vyberte poskytovatele mapy" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"Vytvářejte a sdílejte vlastní OpenStreet mapy " -"a během pár minut je použijte na svém webu." +msgstr "Vytvářejte a sdílejte vlastní OpenStreet mapy a během pár minut je použijte na svém webu." #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -93,8 +88,7 @@ msgstr "Nastavte další možnosti - minimapu, lokalizaci uživatele, ..." #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" -msgstr "" -"Import existujících geodat v mnoha formátech (geojson, gpx, kml, osm...)" +msgstr "Import existujících geodat v mnoha formátech (geojson, gpx, kml, osm...)" #: templates/umap/about_summary.html:16 msgid "Choose the license for your data" @@ -121,14 +115,10 @@ msgstr "Vyzkoušejte si to hned" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Toto je ukázková verze, používaná na testování nových vydání uMap. Pokud " -"potřebujete stabilní verzi, použijte " -"%(stable_url)s. Můžete si taky stáhnout celý projekt a nainstalovat na " -"svém serveru, je to open source!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Toto je ukázková verze, používaná na testování nových vydání uMap. Pokud potřebujete stabilní verzi, použijte %(stable_url)s. Můžete si taky stáhnout celý projekt a nainstalovat na svém serveru, je to open source!" #: templates/umap/home.html:17 msgid "Map of the uMaps" @@ -172,8 +162,8 @@ msgstr "" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." msgstr "" #: templates/umap/password_change.html:12 @@ -216,5 +206,182 @@ msgstr "Hledej" msgid "View the map" msgstr "Prohlídnout si tuto mapu" -#~ msgid "Map settings" -#~ msgstr "Nastavení mapy" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Tajný odkaz umožňující úpravu mapy je %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Kdokoli může editovat" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Lze upravovat jen pomocí tajného odkazu" + +#: models.py:20 +msgid "name" +msgstr "název" + +#: models.py:42 +msgid "No licence set" +msgstr "Licence nenastavena." + +#: models.py:51 +msgid "details" +msgstr "podrobnosti" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Odkaz na stránku s podrobnějším popisem licence." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Vzor URL ve formátu pro dlaždice OSM " + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Pořadí vrstev při editaci" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Jen přispěvovatelé mohou editovat" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Jen vlastník může editovat" + +#: models.py:118 +msgid "everyone (public)" +msgstr "kdokoli (veřejná)" + +#: models.py:119 +msgid "anyone with link" +msgstr "kdokoli kdo má odkaz" + +#: models.py:120 +msgid "editors only" +msgstr "jen připěvovatelé" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "popis" + +#: models.py:124 +msgid "center" +msgstr "střed" + +#: models.py:125 +msgid "zoom" +msgstr "přiblížení" + +#: models.py:126 +msgid "locate" +msgstr "lokalizuj" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Najdi poluhu uživatele na startu?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Vyberte si licenci mapy." + +#: models.py:130 +msgid "licence" +msgstr "licence" + +#: models.py:135 +msgid "background" +msgstr "pozadí" + +#: models.py:136 +msgid "owner" +msgstr "vlastník" + +#: models.py:137 +msgid "editors" +msgstr "přispěvovatelé" + +#: models.py:138 +msgid "edit status" +msgstr "kdo může provádět úpravy" + +#: models.py:139 +msgid "share status" +msgstr "nastavení sdílení" + +#: models.py:140 +msgid "settings" +msgstr "nastavení" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Vaše anonymní mapa byla připojena k vašemů účtu %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Kopie" + +#: models.py:262 +msgid "display on load" +msgstr "zbraz na startu" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Zobrazit tuto vrstvu na startu." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Jste přihlášeni. Jedeme dál ..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Přístupová oprávnění" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Pro pokračování se musíte přihlásit" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Jméno či heslo nesouhlasí. Zkuste to prosím znovu." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Vaše mapa byla vytvořena! Pokud chcete upravovat tuto mapu z jiného počítače, použijte tento odkaz: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Gratulujeme, vaše mapa byla vytvořena!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Mapa byla aktualizována!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Seznam přispěvovatelů byl úspěšně upraven!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Jen vlastník může vymzat tuto mapu." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Byla vytvořena kopie mapy! Pokud chcete upravovat tuto mapu z jiného počítače, použijte tento odkaz: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Gratulujeme, byla vytvořena kopie mapy!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Vrstva úspěšně vymazána." diff --git a/umap/locale/da/LC_MESSAGES/django.mo b/umap/locale/da/LC_MESSAGES/django.mo index 18ecf3c9..c7674b83 100644 Binary files a/umap/locale/da/LC_MESSAGES/django.mo and b/umap/locale/da/LC_MESSAGES/django.mo differ diff --git a/umap/locale/da/LC_MESSAGES/django.po b/umap/locale/da/LC_MESSAGES/django.po index 7ef85014..7d654af4 100644 --- a/umap/locale/da/LC_MESSAGES/django.po +++ b/umap/locale/da/LC_MESSAGES/django.po @@ -9,14 +9,13 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2014-06-02 15:12+0000\n" -"Last-Translator: Neogeografen \n" -"Language-Team: Danish (http://www.transifex.com/projects/p/umap/language/" -"da/)\n" -"Language: da\n" +"PO-Revision-Date: 2017-09-19 22:28+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Danish (http://www.transifex.com/yohanboniface/umap/language/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: templates/404.html:7 @@ -33,10 +32,8 @@ msgid "Type editors nick to add…" msgstr "Indtast redaktørernes nickname for tilføjelse..." #: templates/leaflet_storage/map_detail.html:27 -#, fuzzy -#| msgid "Type editors nick to add…" msgid "Type new owner nick…" -msgstr "Indtast redaktørernes nickname for tilføjelse..." +msgstr "" #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -71,9 +68,7 @@ msgstr "Vælg en udbyder" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"Med uMap kan du lave kort med OpenStreetMap " -"lag og på et minuts arbejde kan du indlejre disse på dit eget websted." +msgstr "Med uMap kan du lave kort med OpenStreetMap lag og på et minuts arbejde kan du indlejre disse på dit eget websted." #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -89,9 +84,7 @@ msgstr "Håndterer POIs farver og ikoner" #: templates/umap/about_summary.html:14 msgid "Manage map options: display a minimap, locate user on load…" -msgstr "" -"Håndterer kortindstillinger: vis et miniaturekort, lokaliser brugeren ved " -"indlæsning..." +msgstr "Håndterer kortindstillinger: vis et miniaturekort, lokaliser brugeren ved indlæsning..." #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" @@ -122,14 +115,10 @@ msgstr "Leg med demoen" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Dette er en demo som bruges til test og forhåndstesting. Hvis du har brug " -"for en stabil testdemo, så brug %(stable_url)s. Du kan webhoste din egen testdemo. det er open " -"source!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Dette er en demo som bruges til test og forhåndstesting. Hvis du har brug for en stabil testdemo, så brug %(stable_url)s. Du kan webhoste din egen testdemo. det er open source!" #: templates/umap/home.html:17 msgid "Map of the uMaps" @@ -173,8 +162,8 @@ msgstr "" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." msgstr "" #: templates/umap/password_change.html:12 @@ -217,5 +206,182 @@ msgstr "Søg" msgid "View the map" msgstr "Vis kortet" -#~ msgid "Map settings" -#~ msgstr "Kortindstillinger" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Hemmeligt redigeringslink er %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Alle kan redigere" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Er kun redigerbart med et hemmeligt link" + +#: models.py:20 +msgid "name" +msgstr "navn" + +#: models.py:42 +msgid "No licence set" +msgstr "Ingen licens angivet" + +#: models.py:51 +msgid "details" +msgstr "detaljer" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Link til siden hvor der er flere detaljer om licensen." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "URL skabelon bruger OSMs tile format" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Rækkefølge af tile-lag i redigeringsboksen" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Kun redaktører kan redigere" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Kun ejeren kan redigere" + +#: models.py:118 +msgid "everyone (public)" +msgstr "alle (fuldt offentlig)" + +#: models.py:119 +msgid "anyone with link" +msgstr "alle med et link" + +#: models.py:120 +msgid "editors only" +msgstr "kun redaktører " + +#: models.py:123 models.py:257 +msgid "description" +msgstr "beskrivelse" + +#: models.py:124 +msgid "center" +msgstr "center" + +#: models.py:125 +msgid "zoom" +msgstr "zoom" + +#: models.py:126 +msgid "locate" +msgstr "lokalisere" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Lokaliserer brugeren ved indlæsning?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Vælg kortlicensen." + +#: models.py:130 +msgid "licence" +msgstr "licens" + +#: models.py:135 +msgid "background" +msgstr "baggrund" + +#: models.py:136 +msgid "owner" +msgstr "ejer" + +#: models.py:137 +msgid "editors" +msgstr "redaktører" + +#: models.py:138 +msgid "edit status" +msgstr "ret status" + +#: models.py:139 +msgid "share status" +msgstr "Delestatus" + +#: models.py:140 +msgid "settings" +msgstr "indstillinger" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Dit anonyme kort er blevet tilføjet til din konto %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Klonet kopi af" + +#: models.py:262 +msgid "display on load" +msgstr "vis ved indlæsning" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Vis dette lag ved indlæsning" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Du er logget ind. Fortsætter..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Kortindstillinger" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Login ind for at fortsætte" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Dit brugernavn og adgangskode passer ikke. Prøv igen." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Dit kort er blevet lavet! Hvis du ønsker at rette dette kort fra en anden computer, så brug dette link: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Tillykke dit kort er nu blevet lavet!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Kortet er blevet opdateret!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Kortredaktører blev opdateret med succes!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Kun ejer kan slettet kortet." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Dit kort er blevet klonet! Hvis du ønsker at rette dette kort fra en anden computer, så brug dette link: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Tillykke dit kort er blevet klonet!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Lag blev slettet med succes." diff --git a/umap/locale/de/LC_MESSAGES/django.mo b/umap/locale/de/LC_MESSAGES/django.mo index 32b751c2..0e7b7465 100644 Binary files a/umap/locale/de/LC_MESSAGES/django.mo and b/umap/locale/de/LC_MESSAGES/django.mo differ diff --git a/umap/locale/de/LC_MESSAGES/django.po b/umap/locale/de/LC_MESSAGES/django.po index bea9e4e9..93c3f0a3 100644 --- a/umap/locale/de/LC_MESSAGES/django.po +++ b/umap/locale/de/LC_MESSAGES/django.po @@ -3,25 +3,26 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Klumbumbus , 2013-2014 +# Ettore Atalan , 2016 +# Jannis Leidel , 2016 +# Klumbumbus, 2013-2014,2016 msgid "" msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2014-03-01 23:34+0000\n" -"Last-Translator: Klumbumbus \n" -"Language-Team: German (http://www.transifex.com/projects/p/umap/language/" -"de/)\n" -"Language: de\n" +"PO-Revision-Date: 2017-09-19 22:04+0000\n" +"Last-Translator: Klumbumbus\n" +"Language-Team: German (http://www.transifex.com/yohanboniface/umap/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: templates/404.html:7 msgid "Take me to the home page" -msgstr "" +msgstr "Zur Startseite zurückkehren" #: templates/auth/user_detail.html:7 #, python-format @@ -33,10 +34,8 @@ msgid "Type editors nick to add…" msgstr "Zum Hinzufügen von Bearbeitern, Benutzernamen hier eingeben..." #: templates/leaflet_storage/map_detail.html:27 -#, fuzzy -#| msgid "Type editors nick to add…" msgid "Type new owner nick…" -msgstr "Zum Hinzufügen von Bearbeitern, Benutzernamen hier eingeben..." +msgstr "Benutzernamen des neuen Besitzers eingeben..." #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -48,19 +47,19 @@ msgstr "Mehr" #: templates/registration/login.html:4 msgid "Please log in with your account" -msgstr "" +msgstr "Bitte melden Sie sich mit Ihrem Konto an" #: templates/registration/login.html:18 msgid "Username" -msgstr "" +msgstr "Benutzername" #: templates/registration/login.html:20 msgid "Password" -msgstr "" +msgstr "Passwort" #: templates/registration/login.html:21 msgid "Login" -msgstr "" +msgstr "Anmeldung" #: templates/registration/login.html:27 msgid "Please choose a provider" @@ -71,10 +70,7 @@ msgstr "Bitte wähle einen Anbieter" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"Mit uMap kannst du in einer Minute Karten mit OpenStreetMap-Hintergrund erstellen und sie in deine eigene " -"Internetseite einbinden." +msgstr "Mit uMap kannst du in einer Minute Karten mit OpenStreetMap-Hintergrund erstellen und sie in deine eigene Internetseite einbinden." #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -90,15 +86,11 @@ msgstr "Verwalte Farben und Icons der POIs" #: templates/umap/about_summary.html:14 msgid "Manage map options: display a minimap, locate user on load…" -msgstr "" -"Verwalte Karteneinstellungen: eine Übersichtskarte anzeigen, den Nutzer beim " -"Seitenaufruf lokalisieren,..." +msgstr "Verwalte Karteneinstellungen: eine Übersichtskarte anzeigen, den Nutzer beim Seitenaufruf lokalisieren,..." #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" -msgstr "" -"Stapelverarbeitung beim Importieren von geotechnischen Daten (geojson, gpx, " -"kml, osm...)" +msgstr "Stapelverarbeitung beim Importieren von geotechnischen Daten (geojson, gpx, kml, osm...)" #: templates/umap/about_summary.html:16 msgid "Choose the license for your data" @@ -111,7 +103,7 @@ msgstr "Teile und binde deine Karte ein" #: templates/umap/about_summary.html:23 #, python-format msgid "And it's open source!" -msgstr "Und es ist open source!" +msgstr "Und es ist Open Source!" #: templates/umap/about_summary.html:32 templates/umap/navigation.html:31 msgid "Create a map" @@ -125,18 +117,14 @@ msgstr "Spiele mit der Demo" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Dies ist eine Demo-Instanz und wird benutzt für Tests und " -"Vorveröffentlichungen. Wenn du eine stabile Instanz benötigst, benutze bitte " -"%(stable_url)s. Du kannst auch deine eigene " -"Instanz hosten, es ist open source!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Dies ist eine Demo-Instanz und wird für Tests und Vorveröffentlichungen benutzt. Wenn du eine stabile Instanz benötigst, benutze bitte %(stable_url)s. Du kannst auch deine eigene Instanz hosten, uMap ist Open Source!" #: templates/umap/home.html:17 msgid "Map of the uMaps" -msgstr "Karte aller \"uMap\"-Karten" +msgstr "Karte aller „uMap“-Karten" #: templates/umap/home.html:24 msgid "Get inspired, browse maps" @@ -164,7 +152,7 @@ msgstr "Feedback" #: templates/umap/navigation.html:20 msgid "Change password" -msgstr "" +msgstr "Passwort ändern" #: templates/umap/navigation.html:22 msgid "Log out" @@ -172,37 +160,37 @@ msgstr "Ausloggen" #: templates/umap/password_change.html:6 msgid "Password change" -msgstr "" +msgstr "Passwortänderung" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." -msgstr "" +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." +msgstr "Bitte gib aus Sicherheitsgründen dein altes Passwort ein und dann zweimal dein neues, um sicherzustellen, dass du es korrekt eingegeben hast." #: templates/umap/password_change.html:12 msgid "Old password" -msgstr "" +msgstr "Altes Passwort" #: templates/umap/password_change.html:14 msgid "New password" -msgstr "" +msgstr "Neues Passwort" #: templates/umap/password_change.html:16 msgid "New password confirmation" -msgstr "" +msgstr "Neues Passwort bestätigen" #: templates/umap/password_change.html:18 msgid "Change my password" -msgstr "" +msgstr "Mein Passwort ändern" #: templates/umap/password_change_done.html:6 msgid "Password change successful" -msgstr "" +msgstr "Passwortänderung erfolgreich" #: templates/umap/password_change_done.html:7 msgid "Your password was changed." -msgstr "" +msgstr "Ihr Passwort wurde geändert." #: templates/umap/search.html:13 msgid "Not map found." @@ -220,5 +208,182 @@ msgstr "Suchen" msgid "View the map" msgstr "Diese Karte anzeigen" -#~ msgid "Map settings" -#~ msgstr "Karteneinstellungen" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Geheimer Bearbeitungslink ist %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Jeder kann bearbeiten" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Nur mit geheimen Bearbeitungslink zu bearbeiten" + +#: models.py:20 +msgid "name" +msgstr "Name" + +#: models.py:42 +msgid "No licence set" +msgstr "Keine Lizenz ausgewählt" + +#: models.py:51 +msgid "details" +msgstr "Details" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Verlinke auf eine Seite mit der Lizenz." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Das URL-Template nutzt das OSM Tile Format" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Reihenfolge der Karten-Ebenen in der Bearbeiten-Box" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Nur Bearbeiter können bearbeiten" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Nur der Ersteller kann bearbeiten" + +#: models.py:118 +msgid "everyone (public)" +msgstr "Jeder (Öffentlich)" + +#: models.py:119 +msgid "anyone with link" +msgstr "Jeder mit Link" + +#: models.py:120 +msgid "editors only" +msgstr "Nur Bearbeiter " + +#: models.py:123 models.py:257 +msgid "description" +msgstr "Beschreibung" + +#: models.py:124 +msgid "center" +msgstr "Mittelpunkt" + +#: models.py:125 +msgid "zoom" +msgstr "Zoom" + +#: models.py:126 +msgid "locate" +msgstr "lokalisiere" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Standort des Benutzers beim Seitenaufruf bestimmen?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Kartenlizenz auswählen" + +#: models.py:130 +msgid "licence" +msgstr "Lizenz" + +#: models.py:135 +msgid "background" +msgstr "Hintergrund" + +#: models.py:136 +msgid "owner" +msgstr "Ersteller" + +#: models.py:137 +msgid "editors" +msgstr "Bearbeiter" + +#: models.py:138 +msgid "edit status" +msgstr "Bearbeitungsstatus" + +#: models.py:139 +msgid "share status" +msgstr "Teilen-Status" + +#: models.py:140 +msgid "settings" +msgstr "Einstellungen" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Deine anonyme Karte wurde deinem Account %s zugeordnet." + +#: models.py:211 +msgid "Clone of" +msgstr "Duplicat von" + +#: models.py:262 +msgid "display on load" +msgstr "Beim Seitenaufruf einblenden" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Diese Ebene beim Seitenaufruf einblenden." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Du bist eingeloggt. Weiterleitung..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Kartenberechtigungen" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Bitte logge dich ein, um fortzufahren." + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Dein Benutzername und Password stimmen nicht überein. Bitte versuche es noch einmal." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Deine Karte wurde erstellt! Wenn du diese Karte von einem anderen Computer aus bearbeiten möchtest, benutze bitte diesen Link: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Glückwunsch, deine Karte wurde erstellt!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Karte wurde aktualisiert!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Bearbeiter erfolgreich geändert" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Nur der Ersteller kann die Karte löschen." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Deine Karte wurde kopiert! Wenn du diese Karte von einem anderen Computer aus bearbeiten möchtest, benutze bitte diesen Link: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Glückwunsch, deine Karte wurde kopiert!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Ebene erfolgreich gelöscht." diff --git a/umap/locale/el/LC_MESSAGES/django.po b/umap/locale/el/LC_MESSAGES/django.po new file mode 100644 index 00000000..1a51f24d --- /dev/null +++ b/umap/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,389 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Emmanuel Verigos , 2018 +# Emmanuel Verigos , 2017 +# prendi , 2017 +msgid "" +msgstr "" +"Project-Id-Version: uMap\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-09 21:37+0200\n" +"PO-Revision-Date: 2018-06-02 14:14+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Greek (http://www.transifex.com/yohanboniface/umap/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/404.html:7 +msgid "Take me to the home page" +msgstr "Επιστροφή στην Αρχική " + +#: templates/auth/user_detail.html:7 +#, python-format +msgid "Browse %(current_user)s's maps" +msgstr "" + +#: templates/leaflet_storage/map_detail.html:24 +msgid "Type editors nick to add…" +msgstr "Πρόσθεσε παρατσούκλι..." + +#: templates/leaflet_storage/map_detail.html:27 +msgid "Type new owner nick…" +msgstr "" + +#: templates/leaflet_storage/map_list.html:7 views.py:184 +msgid "by" +msgstr "" + +#: templates/leaflet_storage/map_list.html:11 +msgid "More" +msgstr "περισσότερα " + +#: templates/registration/login.html:4 +msgid "Please log in with your account" +msgstr "" + +#: templates/registration/login.html:18 +msgid "Username" +msgstr "Όνομα Χρήστη " + +#: templates/registration/login.html:20 +msgid "Password" +msgstr "Κωδικός πρόσβασης" + +#: templates/registration/login.html:21 +msgid "Login" +msgstr "Σύνδεση " + +#: templates/registration/login.html:27 +msgid "Please choose a provider" +msgstr "" + +#: templates/umap/about_summary.html:6 +#, python-format +msgid "" +"uMap let you create maps with OpenStreetMap " +"layers in a minute and embed them in your site." +msgstr "" + +#: templates/umap/about_summary.html:11 +msgid "Choose the layers of your map" +msgstr "Διάλεξε το χαρτογραφικό επίπεδο " + +#: templates/umap/about_summary.html:12 +msgid "Add POIs: markers, lines, polygons..." +msgstr "" + +#: templates/umap/about_summary.html:13 +msgid "Manage POIs colours and icons" +msgstr "" + +#: templates/umap/about_summary.html:14 +msgid "Manage map options: display a minimap, locate user on load…" +msgstr "" + +#: templates/umap/about_summary.html:15 +msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" +msgstr "" + +#: templates/umap/about_summary.html:16 +msgid "Choose the license for your data" +msgstr "Διάλεξε άδεια χρήσης των δεδομένων " + +#: templates/umap/about_summary.html:17 +msgid "Embed and share your map" +msgstr " Ενσωμάτωσε και μοιράσου τον χάρτη " + +#: templates/umap/about_summary.html:23 +#, python-format +msgid "And it's open source!" +msgstr "" + +#: templates/umap/about_summary.html:32 templates/umap/navigation.html:31 +msgid "Create a map" +msgstr "" + +#: templates/umap/about_summary.html:34 +msgid "Play with the demo" +msgstr "" + +#: templates/umap/home.html:10 +#, python-format +msgid "" +"This is a demo instance, used for tests and pre-rolling releases. If you " +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "" + +#: templates/umap/home.html:17 +msgid "Map of the uMaps" +msgstr "" + +#: templates/umap/home.html:24 +msgid "Get inspired, browse maps" +msgstr "" + +#: templates/umap/navigation.html:12 +msgid "My maps" +msgstr "Οι χάρτες μου" + +#: templates/umap/navigation.html:14 +msgid "Log in" +msgstr "Σύνδεση" + +#: templates/umap/navigation.html:14 +msgid "Sign in" +msgstr "Εγγραφή" + +#: templates/umap/navigation.html:16 +msgid "About" +msgstr "Σχετικά" + +#: templates/umap/navigation.html:17 +msgid "Feedback" +msgstr "" + +#: templates/umap/navigation.html:20 +msgid "Change password" +msgstr "Αλλαγή κωδικού" + +#: templates/umap/navigation.html:22 +msgid "Log out" +msgstr "Αποσύνδεση" + +#: templates/umap/password_change.html:6 +msgid "Password change" +msgstr "" + +#: templates/umap/password_change.html:7 +msgid "" +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." +msgstr "" + +#: templates/umap/password_change.html:12 +msgid "Old password" +msgstr "" + +#: templates/umap/password_change.html:14 +msgid "New password" +msgstr "" + +#: templates/umap/password_change.html:16 +msgid "New password confirmation" +msgstr "" + +#: templates/umap/password_change.html:18 +msgid "Change my password" +msgstr "" + +#: templates/umap/password_change_done.html:6 +msgid "Password change successful" +msgstr "" + +#: templates/umap/password_change_done.html:7 +msgid "Your password was changed." +msgstr "" + +#: templates/umap/search.html:13 +msgid "Not map found." +msgstr "" + +#: templates/umap/search_bar.html:6 +msgid "Search maps" +msgstr "Ψάξε χάρτες " + +#: templates/umap/search_bar.html:9 +msgid "Search" +msgstr "Ψάξε " + +#: views.py:190 +msgid "View the map" +msgstr "" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "" + +#: models.py:20 +msgid "name" +msgstr "όνομα" + +#: models.py:42 +msgid "No licence set" +msgstr "Χωρίς Άδεια Χρήσης" + +#: models.py:51 +msgid "details" +msgstr "Λεπτομέρειες " + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Σύνδεσμος σελίδας Αναλυτικής Άδειας Χρήσης " + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "" + +#: models.py:118 +msgid "everyone (public)" +msgstr "" + +#: models.py:119 +msgid "anyone with link" +msgstr "" + +#: models.py:120 +msgid "editors only" +msgstr "" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "περιγραφή" + +#: models.py:124 +msgid "center" +msgstr "" + +#: models.py:125 +msgid "zoom" +msgstr "" + +#: models.py:126 +msgid "locate" +msgstr "" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "" + +#: models.py:130 +msgid "licence" +msgstr "άδεια" + +#: models.py:135 +msgid "background" +msgstr "" + +#: models.py:136 +msgid "owner" +msgstr "" + +#: models.py:137 +msgid "editors" +msgstr "" + +#: models.py:138 +msgid "edit status" +msgstr "" + +#: models.py:139 +msgid "share status" +msgstr "" + +#: models.py:140 +msgid "settings" +msgstr "ρυθμίσεις" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "" + +#: models.py:211 +msgid "Clone of" +msgstr "" + +#: models.py:262 +msgid "display on load" +msgstr "" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "" + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "" + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "" diff --git a/umap/locale/en/LC_MESSAGES/django.po b/umap/locale/en/LC_MESSAGES/django.po index 9c54f1a1..5a040279 100644 --- a/umap/locale/en/LC_MESSAGES/django.po +++ b/umap/locale/en/LC_MESSAGES/django.po @@ -204,3 +204,183 @@ msgstr "" #: views.py:190 msgid "View the map" msgstr "" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "" + +#: models.py:20 +msgid "name" +msgstr "" + +#: models.py:42 +msgid "No licence set" +msgstr "" + +#: models.py:51 +msgid "details" +msgstr "" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "" + +#: models.py:118 +msgid "everyone (public)" +msgstr "" + +#: models.py:119 +msgid "anyone with link" +msgstr "" + +#: models.py:120 +msgid "editors only" +msgstr "" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "" + +#: models.py:124 +msgid "center" +msgstr "" + +#: models.py:125 +msgid "zoom" +msgstr "" + +#: models.py:126 +msgid "locate" +msgstr "" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "" + +#: models.py:130 +msgid "licence" +msgstr "" + +#: models.py:135 +msgid "background" +msgstr "" + +#: models.py:136 +msgid "owner" +msgstr "" + +#: models.py:137 +msgid "editors" +msgstr "" + +#: models.py:138 +msgid "edit status" +msgstr "" + +#: models.py:139 +msgid "share status" +msgstr "" + +#: models.py:140 +msgid "settings" +msgstr "" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "" + +#: models.py:211 +msgid "Clone of" +msgstr "" + +#: models.py:262 +msgid "display on load" +msgstr "" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "" + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "" + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "" diff --git a/umap/locale/es/LC_MESSAGES/django.mo b/umap/locale/es/LC_MESSAGES/django.mo index f030120e..558a2c14 100644 Binary files a/umap/locale/es/LC_MESSAGES/django.mo and b/umap/locale/es/LC_MESSAGES/django.mo differ diff --git a/umap/locale/es/LC_MESSAGES/django.po b/umap/locale/es/LC_MESSAGES/django.po index f7b75419..1c0586bb 100644 --- a/umap/locale/es/LC_MESSAGES/django.po +++ b/umap/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Igor Támara , 2013 # Marco Antonio , 2014 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2016-09-28 03:51+0000\n" +"PO-Revision-Date: 2017-09-19 22:04+0000\n" "Last-Translator: Marco Antonio \n" "Language-Team: Spanish (http://www.transifex.com/yohanboniface/umap/language/es/)\n" "MIME-Version: 1.0\n" @@ -208,3 +208,183 @@ msgstr "Buscar" #: views.py:190 msgid "View the map" msgstr "Ver el mapa" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "El enlace secreto de edición es %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Todos pueden editar" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Sólo puede editarse con el enlace secreto de edición" + +#: models.py:20 +msgid "name" +msgstr "nombre" + +#: models.py:42 +msgid "No licence set" +msgstr "Sin conjunto de licencias" + +#: models.py:51 +msgid "details" +msgstr "detalles" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Enlace a una página donde se detalla la licencia." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Plantilla URL usando el formato de teselas OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Orden de las capas de teselas en la caja de edición" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Solo los editores pueden editar" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Solo el propietario puede editar" + +#: models.py:118 +msgid "everyone (public)" +msgstr "todo el mundo (público)" + +#: models.py:119 +msgid "anyone with link" +msgstr "cualquiera que tenga el enlace" + +#: models.py:120 +msgid "editors only" +msgstr "sólo editores" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "descripción" + +#: models.py:124 +msgid "center" +msgstr "centrar" + +#: models.py:125 +msgid "zoom" +msgstr "acercar/alejar" + +#: models.py:126 +msgid "locate" +msgstr "localizar" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "¿Al cargar localizar el usuario?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Elija la licencia del mapa." + +#: models.py:130 +msgid "licence" +msgstr "licencia" + +#: models.py:135 +msgid "background" +msgstr "fondo" + +#: models.py:136 +msgid "owner" +msgstr "propietario" + +#: models.py:137 +msgid "editors" +msgstr "editores" + +#: models.py:138 +msgid "edit status" +msgstr "estado de la edición" + +#: models.py:139 +msgid "share status" +msgstr "compartir estado" + +#: models.py:140 +msgid "settings" +msgstr "ajustes" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Tu mapa anónimo se ha adjuntado a tu cuenta %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Clon de" + +#: models.py:262 +msgid "display on load" +msgstr "mostrar al cargar" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Mostrar esta capa al cargar." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Has iniciado sesión. Continuando..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Permisos del mapa" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Inicia sesión para poder continuar" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Tu nombre de usuario y contraseña no coinciden. Inténtalo de nuevo." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "¡Tu mapa ha sido creado! Si deseas editarlo desde otro ordenador, por favor usa este enlace: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "¡Enhorabuena! ¡Tu mapa ha sido creado!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "¡El mapa ha sido actualizado!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "¡Los editores del mapas han sido actualizados con éxito!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Sólo el propietario puede borrar el mapa." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "¡Tu mapa ha sido clonado! Si quieres editar este mapa desde otro ordenador, usa este enlace: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "¡Enhorabuena! ¡Tu mapa ha sido clonado!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Se eliminó la capa con éxito." diff --git a/umap/locale/fi/LC_MESSAGES/django.mo b/umap/locale/fi/LC_MESSAGES/django.mo index d52aa379..ad9da68e 100644 Binary files a/umap/locale/fi/LC_MESSAGES/django.mo and b/umap/locale/fi/LC_MESSAGES/django.mo differ diff --git a/umap/locale/fi/LC_MESSAGES/django.po b/umap/locale/fi/LC_MESSAGES/django.po index f5120bd3..5bfe9a15 100644 --- a/umap/locale/fi/LC_MESSAGES/django.po +++ b/umap/locale/fi/LC_MESSAGES/django.po @@ -3,22 +3,21 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# acastren, 2014 -# jaakkoh , 2013 -# jaakkoh , 2013 +# Antti Castrén, 2014 +# Jaakko Helleranta , 2013 +# Jaakko Helleranta , 2013 msgid "" msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2014-03-04 21:50+0000\n" -"Last-Translator: acastren\n" -"Language-Team: Finnish (http://www.transifex.com/projects/p/umap/language/" -"fi/)\n" -"Language: fi\n" +"PO-Revision-Date: 2017-09-23 19:23+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Finnish (http://www.transifex.com/yohanboniface/umap/language/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: templates/404.html:7 @@ -35,10 +34,8 @@ msgid "Type editors nick to add…" msgstr "Kirjoita muokkaajan nimi lisätäksesi..." #: templates/leaflet_storage/map_detail.html:27 -#, fuzzy -#| msgid "Type editors nick to add…" msgid "Type new owner nick…" -msgstr "Kirjoita muokkaajan nimi lisätäksesi..." +msgstr "" #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -73,10 +70,7 @@ msgstr "Valitse mieleisesi palveluntarjoaja" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"uMap mahdollistaa OpenStreetMap-pohjaisten " -"räätälöityjen karttojen luomisen ja liittämisen verkkosivuusi muutamassa " -"minuutissa." +msgstr "uMap mahdollistaa OpenStreetMap-pohjaisten räätälöityjen karttojen luomisen ja liittämisen verkkosivuusi muutamassa minuutissa." #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -92,9 +86,7 @@ msgstr "Valitse ja hallinnoi POI-merkintöjen värit ja karttakuvakkeet" #: templates/umap/about_summary.html:14 msgid "Manage map options: display a minimap, locate user on load…" -msgstr "" -"Hallitse kartta-optiot: näytä mini-kartta, paikanna käyttäjä sivun " -"latauksessa, ..." +msgstr "Hallitse kartta-optiot: näytä mini-kartta, paikanna käyttäjä sivun latauksessa, ..." #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" @@ -125,14 +117,10 @@ msgstr "Tongi demoa sielusi kyllyydestä!" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Tämä on uMapin demo-instanssi, jota käytetään testaamiseen ja " -"väliversioille. Jos tarvitset vakaan version, niin käytäthän %(stable_url)s :a. Voit myös tarjota oman instanssin " -"- avoin lähdekoodi rulettaa!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Tämä on uMapin demo-instanssi, jota käytetään testaamiseen ja väliversioille. Jos tarvitset vakaan version, niin käytäthän %(stable_url)s :a. Voit myös tarjota oman instanssin - avoin lähdekoodi rulettaa!" #: templates/umap/home.html:17 msgid "Map of the uMaps" @@ -176,8 +164,8 @@ msgstr "" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." msgstr "" #: templates/umap/password_change.html:12 @@ -220,5 +208,182 @@ msgstr "Etsi" msgid "View the map" msgstr "Katso karttaa" -#~ msgid "Map settings" -#~ msgstr "Kartan asetukset" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Salainen muokkauslinkki on %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Kuka tahansa saa muokata" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Muokattavissa vain salaisella muokkauslinkillä" + +#: models.py:20 +msgid "name" +msgstr "nimi" + +#: models.py:42 +msgid "No licence set" +msgstr "Määrittämätön lisenssi" + +#: models.py:51 +msgid "details" +msgstr "tarkemmat tiedot" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Linkki sivulle, jossa lisenssi on määritetty yksityiskohtaisesti." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "OSM-karttatiiliformaattia mukaileva URL-sapluuna" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Taustakarttojen järjestys muokkauslaatikossa" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Vain julkaisijat saavat muokata" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Vain omistaja saa muokata" + +#: models.py:118 +msgid "everyone (public)" +msgstr "kaikille (julkinen)" + +#: models.py:119 +msgid "anyone with link" +msgstr "linkinhaltijoille" + +#: models.py:120 +msgid "editors only" +msgstr "vain muokkaajille" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "kuvaus" + +#: models.py:124 +msgid "center" +msgstr "keskitä" + +#: models.py:125 +msgid "zoom" +msgstr "zoomaa" + +#: models.py:126 +msgid "locate" +msgstr "paikanna" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Paikanna käyttäjä sivua ladattaessa?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Valitse kartan lisenssi" + +#: models.py:130 +msgid "licence" +msgstr "lisenssi" + +#: models.py:135 +msgid "background" +msgstr "tausta" + +#: models.py:136 +msgid "owner" +msgstr "omistaja" + +#: models.py:137 +msgid "editors" +msgstr "julkaisija" + +#: models.py:138 +msgid "edit status" +msgstr "muokkaa tilaa" + +#: models.py:139 +msgid "share status" +msgstr "jaa status" + +#: models.py:140 +msgid "settings" +msgstr "asetukset" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Anonyymi karttasi on liitetty tiliisi %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Kloonattu kartasta" + +#: models.py:262 +msgid "display on load" +msgstr "näytä ladattaessa" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Näytä tämä kerros ladattaessa." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Sisäänkirjautumisesi onnistui. Jatketahan..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Kartan oikeudet" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Rekisteröidythän jatkaaksesi, jooko?" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Käyttäjätunnuksesi ja salasanasi eivät täsmänneet. Yritä uudestaan ole hyvä." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Karttasi on luotu! Jos haluat muokata tätä karttaa joltain muulta tietokoneelta, käytä tätä linkkiä: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Onneksi olkoon! Uusi karttasi on luotu!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Kartta on päivitetty!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Kartan toimittajat päivitetty onnistuneesti!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Vain kartan omistaja voi poistaa kartan." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Karttasi on kloonattu! Jos haluat muokata tätä karttaa joltain muulta tietokoneelta, käytä tätä linkkiä: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Onneksi olkoon! Karttasi on kloonattu!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Kerros onnistuneesti poistettu. Pysyvästi." diff --git a/umap/locale/fr/LC_MESSAGES/django.mo b/umap/locale/fr/LC_MESSAGES/django.mo index f2c2f5d6..34fd05dd 100644 Binary files a/umap/locale/fr/LC_MESSAGES/django.mo and b/umap/locale/fr/LC_MESSAGES/django.mo differ diff --git a/umap/locale/fr/LC_MESSAGES/django.po b/umap/locale/fr/LC_MESSAGES/django.po index 68e441fb..3c4ec38c 100644 --- a/umap/locale/fr/LC_MESSAGES/django.po +++ b/umap/locale/fr/LC_MESSAGES/django.po @@ -1,10 +1,11 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Buggi, 2013 # Buggi, 2013 +# Philippe Verdy, 2017 # yohanboniface , 2014,2016 # YOHAN BONIFACE , 2012 msgid "" @@ -12,8 +13,8 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2016-09-09 19:41+0000\n" -"Last-Translator: yohanboniface \n" +"PO-Revision-Date: 2017-09-19 22:04+0000\n" +"Last-Translator: Philippe Verdy\n" "Language-Team: French (http://www.transifex.com/yohanboniface/umap/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,11 +33,11 @@ msgstr "Consulter les cartes de %(current_user)s" #: templates/leaflet_storage/map_detail.html:24 msgid "Type editors nick to add…" -msgstr "Taper le nom d'un éditeur…" +msgstr "Entrez le nom d'un modificateur…" #: templates/leaflet_storage/map_detail.html:27 msgid "Type new owner nick…" -msgstr "Nouveau du nouveau propriétaire…" +msgstr "Entrez le nom du nouveau propriétaire…" #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -75,11 +76,11 @@ msgstr "uMap permet de créer des cartes personnalisées sur des fonds , 2017 +# Rafael Ávila Coya , 2014 +msgid "" +msgstr "" +"Project-Id-Version: uMap\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-09 21:37+0200\n" +"PO-Revision-Date: 2018-06-02 14:15+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Galician (http://www.transifex.com/yohanboniface/umap/language/gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/404.html:7 +msgid "Take me to the home page" +msgstr "Lévame á páxina de inicio" + +#: templates/auth/user_detail.html:7 +#, python-format +msgid "Browse %(current_user)s's maps" +msgstr "Navegador %(current_user)s dos mapas" + +#: templates/leaflet_storage/map_detail.html:24 +msgid "Type editors nick to add…" +msgstr "Tipo de editores engadir alcume..." + +#: templates/leaflet_storage/map_detail.html:27 +msgid "Type new owner nick…" +msgstr "Tipo de novo propietario de alcume..." + +#: templates/leaflet_storage/map_list.html:7 views.py:184 +msgid "by" +msgstr "por" + +#: templates/leaflet_storage/map_list.html:11 +msgid "More" +msgstr "Máis" + +#: templates/registration/login.html:4 +msgid "Please log in with your account" +msgstr "Fai o favor de loguearte ca túa conta" + +#: templates/registration/login.html:18 +msgid "Username" +msgstr "Nome de usuario" + +#: templates/registration/login.html:20 +msgid "Password" +msgstr "Contrasinal" + +#: templates/registration/login.html:21 +msgid "Login" +msgstr "Logueado" + +#: templates/registration/login.html:27 +msgid "Please choose a provider" +msgstr "Por favor escolle provedor" + +#: templates/umap/about_summary.html:6 +#, python-format +msgid "" +"uMap let you create maps with OpenStreetMap " +"layers in a minute and embed them in your site." +msgstr " permítelle crear mapas con OpenStreetMap capas nun minuto e incorpóralas no seu sitio." + +#: templates/umap/about_summary.html:11 +msgid "Choose the layers of your map" +msgstr "Elixir capas do teu mapa" + +#: templates/umap/about_summary.html:12 +msgid "Add POIs: markers, lines, polygons..." +msgstr "Engadir POIs: marcas, liñas, polígonos..." + +#: templates/umap/about_summary.html:13 +msgid "Manage POIs colours and icons" +msgstr "Xestionar colores de POIs e iconas" + +#: templates/umap/about_summary.html:14 +msgid "Manage map options: display a minimap, locate user on load…" +msgstr "Xestionar as opcións do mapa: amosar un minimapa, localizar o usuario na carga ..." + +#: templates/umap/about_summary.html:15 +msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" +msgstr "Importación por feixes de datos xeostructurados (geojson, gpx, kml, osm...)" + +#: templates/umap/about_summary.html:16 +msgid "Choose the license for your data" +msgstr "Elixe licenza para a túa información" + +#: templates/umap/about_summary.html:17 +msgid "Embed and share your map" +msgstr "Inserir e compartir o teu mapa" + +#: templates/umap/about_summary.html:23 +#, python-format +msgid "And it's open source!" +msgstr "e isto é fonte libre!" + +#: templates/umap/about_summary.html:32 templates/umap/navigation.html:31 +msgid "Create a map" +msgstr "Crear un mapa" + +#: templates/umap/about_summary.html:34 +msgid "Play with the demo" +msgstr "Xogar ca demo" + +#: templates/umap/home.html:10 +#, python-format +msgid "" +"This is a demo instance, used for tests and pre-rolling releases. If you " +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Esta é unha instancia de demostración, usada para probas e lanzamentos previos. Se precisa unha instancia estable, use %(stable_url)s. Tamén pode albergar a súa propia instancia, é código aberto!" + +#: templates/umap/home.html:17 +msgid "Map of the uMaps" +msgstr "Mapa de uMaps" + +#: templates/umap/home.html:24 +msgid "Get inspired, browse maps" +msgstr "Inspírese e busque mapas" + +#: templates/umap/navigation.html:12 +msgid "My maps" +msgstr "Os meus mapas" + +#: templates/umap/navigation.html:14 +msgid "Log in" +msgstr "Loguear" + +#: templates/umap/navigation.html:14 +msgid "Sign in" +msgstr "Asinar" + +#: templates/umap/navigation.html:16 +msgid "About" +msgstr "Acerca de" + +#: templates/umap/navigation.html:17 +msgid "Feedback" +msgstr "Auto mellora" + +#: templates/umap/navigation.html:20 +msgid "Change password" +msgstr "Trocar contrasinal" + +#: templates/umap/navigation.html:22 +msgid "Log out" +msgstr "Saír" + +#: templates/umap/password_change.html:6 +msgid "Password change" +msgstr "Trocar contrasinal" + +#: templates/umap/password_change.html:7 +msgid "" +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." +msgstr "Insira o seu contrasinal anterior, por razóns de seguridade e, a continuación, introduza o seu novo contrasinal dúas veces para que poidamos comprobar que o escribiu correctamente." + +#: templates/umap/password_change.html:12 +msgid "Old password" +msgstr "Contrasinal vello" + +#: templates/umap/password_change.html:14 +msgid "New password" +msgstr "Novo contrasinal" + +#: templates/umap/password_change.html:16 +msgid "New password confirmation" +msgstr "Confirmar nova contrasinal" + +#: templates/umap/password_change.html:18 +msgid "Change my password" +msgstr "Trocar meu contrasinal" + +#: templates/umap/password_change_done.html:6 +msgid "Password change successful" +msgstr "O contrasinal foi trocado ben" + +#: templates/umap/password_change_done.html:7 +msgid "Your password was changed." +msgstr "Teu contrasinal foi trocado" + +#: templates/umap/search.html:13 +msgid "Not map found." +msgstr "Non atopado no mapa" + +#: templates/umap/search_bar.html:6 +msgid "Search maps" +msgstr "Atopar mapas" + +#: templates/umap/search_bar.html:9 +msgid "Search" +msgstr "Atopar" + +#: views.py:190 +msgid "View the map" +msgstr "Ver no mapa" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "A ligazón de edición secreta é %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Calquera pode editar" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Só é editable coa ligazón de edición secreta" + +#: models.py:20 +msgid "name" +msgstr "nome" + +#: models.py:42 +msgid "No licence set" +msgstr "No se escolleu ningunha licenza" + +#: models.py:51 +msgid "details" +msgstr "detalles" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Ligazón a unha páxina web onde se detalla a licenza." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Modelo de URL que usa o formato de teselas de OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Orde das capas base na caixa de edición" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Só os editores poden editar" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Só o proprietario pode editar" + +#: models.py:118 +msgid "everyone (public)" +msgstr "calquera (público)" + +#: models.py:119 +msgid "anyone with link" +msgstr "calquera que teña a ligazón" + +#: models.py:120 +msgid "editors only" +msgstr "Só editores" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "descrición" + +#: models.py:124 +msgid "center" +msgstr "centrar" + +#: models.py:125 +msgid "zoom" +msgstr "achegar/alonxar" + +#: models.py:126 +msgid "locate" +msgstr "localizar" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Localizar o usuario na carga?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Escolle a licenza do mapa." + +#: models.py:130 +msgid "licence" +msgstr "licenza" + +#: models.py:135 +msgid "background" +msgstr "fondo" + +#: models.py:136 +msgid "owner" +msgstr "propietario" + +#: models.py:137 +msgid "editors" +msgstr "editores" + +#: models.py:138 +msgid "edit status" +msgstr "estado da edición" + +#: models.py:139 +msgid "share status" +msgstr "compartir o estado" + +#: models.py:140 +msgid "settings" +msgstr "configuración" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "O teu mapa anónimo foi ligado á túa conta %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Clon de" + +#: models.py:262 +msgid "display on load" +msgstr "amosar na carga" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Amosar esta capa na carga." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Xa iniciaches sesión. Continuando..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Permisos do mapa" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Por favor: inicia sesión para continuar" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "O teu nome de usuario e contrasinal non casan. Por favor, téntao de novo." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "O teu mapa foi creado! Se queres editar este mapa dende outra computadora, usa esta ligazón: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Parabéns! O teu mapa foi creado!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "O mapa foi actualizado!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "O editores de mapa foron actualizados con éxito!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Só o seu proprietario pode eliminar o mapa." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "O teu mapa foi clonado! Se queres editar este mapa dende outra computadora, usa esta ligazón: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Parabéns! O teu mapa foi clonado!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "A capa foi eliminada con éxito." diff --git a/umap/locale/hr/LC_MESSAGES/django.po b/umap/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 00000000..f85c0449 --- /dev/null +++ b/umap/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,388 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Janjko , 2013 +# Janjko , 2013 +msgid "" +msgstr "" +"Project-Id-Version: uMap\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-09 21:37+0200\n" +"PO-Revision-Date: 2018-06-02 14:15+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Croatian (http://www.transifex.com/yohanboniface/umap/language/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: templates/404.html:7 +msgid "Take me to the home page" +msgstr "" + +#: templates/auth/user_detail.html:7 +#, python-format +msgid "Browse %(current_user)s's maps" +msgstr "" + +#: templates/leaflet_storage/map_detail.html:24 +msgid "Type editors nick to add…" +msgstr "" + +#: templates/leaflet_storage/map_detail.html:27 +msgid "Type new owner nick…" +msgstr "" + +#: templates/leaflet_storage/map_list.html:7 views.py:184 +msgid "by" +msgstr "" + +#: templates/leaflet_storage/map_list.html:11 +msgid "More" +msgstr "Više" + +#: templates/registration/login.html:4 +msgid "Please log in with your account" +msgstr "" + +#: templates/registration/login.html:18 +msgid "Username" +msgstr "" + +#: templates/registration/login.html:20 +msgid "Password" +msgstr "" + +#: templates/registration/login.html:21 +msgid "Login" +msgstr "" + +#: templates/registration/login.html:27 +msgid "Please choose a provider" +msgstr "" + +#: templates/umap/about_summary.html:6 +#, python-format +msgid "" +"uMap let you create maps with OpenStreetMap " +"layers in a minute and embed them in your site." +msgstr "" + +#: templates/umap/about_summary.html:11 +msgid "Choose the layers of your map" +msgstr "" + +#: templates/umap/about_summary.html:12 +msgid "Add POIs: markers, lines, polygons..." +msgstr "" + +#: templates/umap/about_summary.html:13 +msgid "Manage POIs colours and icons" +msgstr "" + +#: templates/umap/about_summary.html:14 +msgid "Manage map options: display a minimap, locate user on load…" +msgstr "" + +#: templates/umap/about_summary.html:15 +msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" +msgstr "" + +#: templates/umap/about_summary.html:16 +msgid "Choose the license for your data" +msgstr "" + +#: templates/umap/about_summary.html:17 +msgid "Embed and share your map" +msgstr "" + +#: templates/umap/about_summary.html:23 +#, python-format +msgid "And it's open source!" +msgstr "" + +#: templates/umap/about_summary.html:32 templates/umap/navigation.html:31 +msgid "Create a map" +msgstr "Stvori kartu" + +#: templates/umap/about_summary.html:34 +msgid "Play with the demo" +msgstr "" + +#: templates/umap/home.html:10 +#, python-format +msgid "" +"This is a demo instance, used for tests and pre-rolling releases. If you " +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "" + +#: templates/umap/home.html:17 +msgid "Map of the uMaps" +msgstr "" + +#: templates/umap/home.html:24 +msgid "Get inspired, browse maps" +msgstr "" + +#: templates/umap/navigation.html:12 +msgid "My maps" +msgstr "Moje karte" + +#: templates/umap/navigation.html:14 +msgid "Log in" +msgstr "Prijava" + +#: templates/umap/navigation.html:14 +msgid "Sign in" +msgstr "Registracija" + +#: templates/umap/navigation.html:16 +msgid "About" +msgstr "Više o" + +#: templates/umap/navigation.html:17 +msgid "Feedback" +msgstr "Povratna informacija" + +#: templates/umap/navigation.html:20 +msgid "Change password" +msgstr "" + +#: templates/umap/navigation.html:22 +msgid "Log out" +msgstr "Odjava" + +#: templates/umap/password_change.html:6 +msgid "Password change" +msgstr "" + +#: templates/umap/password_change.html:7 +msgid "" +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." +msgstr "" + +#: templates/umap/password_change.html:12 +msgid "Old password" +msgstr "" + +#: templates/umap/password_change.html:14 +msgid "New password" +msgstr "" + +#: templates/umap/password_change.html:16 +msgid "New password confirmation" +msgstr "" + +#: templates/umap/password_change.html:18 +msgid "Change my password" +msgstr "" + +#: templates/umap/password_change_done.html:6 +msgid "Password change successful" +msgstr "" + +#: templates/umap/password_change_done.html:7 +msgid "Your password was changed." +msgstr "" + +#: templates/umap/search.html:13 +msgid "Not map found." +msgstr "Karta nije nađena" + +#: templates/umap/search_bar.html:6 +msgid "Search maps" +msgstr "Pretraži karte" + +#: templates/umap/search_bar.html:9 +msgid "Search" +msgstr "Pretraživanje" + +#: views.py:190 +msgid "View the map" +msgstr "" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Svi mogu uređivati" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "" + +#: models.py:20 +msgid "name" +msgstr "ime" + +#: models.py:42 +msgid "No licence set" +msgstr "" + +#: models.py:51 +msgid "details" +msgstr "detalji" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Samo urednici mogu uređivati" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Samo vlasnik može uređivati" + +#: models.py:118 +msgid "everyone (public)" +msgstr "" + +#: models.py:119 +msgid "anyone with link" +msgstr "" + +#: models.py:120 +msgid "editors only" +msgstr "" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "opis" + +#: models.py:124 +msgid "center" +msgstr "centar" + +#: models.py:125 +msgid "zoom" +msgstr "uvećanje" + +#: models.py:126 +msgid "locate" +msgstr "" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "" + +#: models.py:130 +msgid "licence" +msgstr "licenca" + +#: models.py:135 +msgid "background" +msgstr "pozadina" + +#: models.py:136 +msgid "owner" +msgstr "vlasnik" + +#: models.py:137 +msgid "editors" +msgstr "urednici" + +#: models.py:138 +msgid "edit status" +msgstr "status uređivanja" + +#: models.py:139 +msgid "share status" +msgstr "" + +#: models.py:140 +msgid "settings" +msgstr "postavke" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "" + +#: models.py:211 +msgid "Clone of" +msgstr "Duplikat od" + +#: models.py:262 +msgid "display on load" +msgstr "" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "" + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Prijavite se za nastavak" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Vaše korisničko ime i lozinka se ne podudaraju. Molim pokušajte ponovo." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Samo vlasnik karte ju može obrisati." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Karta je duplicirana." + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Sloj obrisan." diff --git a/umap/locale/hu/LC_MESSAGES/django.po b/umap/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 00000000..e85daca9 --- /dev/null +++ b/umap/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,207 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Gábor Babos , 2017 +msgid "" +msgstr "" +"Project-Id-Version: uMap\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-09 21:37+0200\n" +"PO-Revision-Date: 2017-10-29 20:37+0000\n" +"Last-Translator: Gábor Babos \n" +"Language-Team: Hungarian (http://www.transifex.com/yohanboniface/umap/language/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/404.html:7 +msgid "Take me to the home page" +msgstr "Vissza a kezdőlapra" + +#: templates/auth/user_detail.html:7 +#, python-format +msgid "Browse %(current_user)s's maps" +msgstr "%(current_user)s térképeinek böngészése" + +#: templates/leaflet_storage/map_detail.html:24 +msgid "Type editors nick to add…" +msgstr "Add meg a szerkesztő felhasználónevét a hozzáadáshoz…" + +#: templates/leaflet_storage/map_detail.html:27 +msgid "Type new owner nick…" +msgstr "Add meg az új tulajdonos felhasználónevét…" + +#: templates/leaflet_storage/map_list.html:7 views.py:184 +msgid "by" +msgstr "– készítette:" + +#: templates/leaflet_storage/map_list.html:11 +msgid "More" +msgstr "Még több" + +#: templates/registration/login.html:4 +msgid "Please log in with your account" +msgstr "Kérlek, jelentkezz be" + +#: templates/registration/login.html:18 +msgid "Username" +msgstr "Felhasználónév" + +#: templates/registration/login.html:20 +msgid "Password" +msgstr "Jelszó" + +#: templates/registration/login.html:21 +msgid "Login" +msgstr "Belépés" + +#: templates/registration/login.html:27 +msgid "Please choose a provider" +msgstr "Kérlek, válassz egy szolgáltatót" + +#: templates/umap/about_summary.html:6 +#, python-format +msgid "" +"uMap let you create maps with OpenStreetMap " +"layers in a minute and embed them in your site." +msgstr "A uMap segítségével OpenStreetMap-alapú térképrétegeket hozhatsz létre percek alatt, amelyeket be is ágyazhatsz a weboldaladba." + +#: templates/umap/about_summary.html:11 +msgid "Choose the layers of your map" +msgstr "Válaszd ki a térképed rétegeit" + +#: templates/umap/about_summary.html:12 +msgid "Add POIs: markers, lines, polygons..." +msgstr "Érdekes helyek hozzáadása: pontok, vonalak, sokszögek…" + +#: templates/umap/about_summary.html:13 +msgid "Manage POIs colours and icons" +msgstr "Érdekes helyek (POI-k) színeinek és ikonjainak kezelése" + +#: templates/umap/about_summary.html:14 +msgid "Manage map options: display a minimap, locate user on load…" +msgstr "Szabd testre a térkép viselkedését: áttekintő térkép használatával, a felhasználó pozíciójának lekérdezésével…" + +#: templates/umap/about_summary.html:15 +msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" +msgstr "Geoinformatikai adatfájlok tömeges importjának támogatása (geojson, gpx, kml, osm…)" + +#: templates/umap/about_summary.html:16 +msgid "Choose the license for your data" +msgstr "Válassz licenszet adataid számára!" + +#: templates/umap/about_summary.html:17 +msgid "Embed and share your map" +msgstr "Ágyazd be és oszd meg a térképedet!" + +#: templates/umap/about_summary.html:23 +#, python-format +msgid "And it's open source!" +msgstr "És mindez nyílt forráskódú!" + +#: templates/umap/about_summary.html:32 templates/umap/navigation.html:31 +msgid "Create a map" +msgstr "Készíts egy térképet!" + +#: templates/umap/about_summary.html:34 +msgid "Play with the demo" +msgstr "Próbáld ki a bemutatót!" + +#: templates/umap/home.html:10 +#, python-format +msgid "" +"This is a demo instance, used for tests and pre-rolling releases. If you " +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Ez egy tesztelési célra használt szerver. Amennyiben egy üzemszerűen használható szerverre van szükséged, kérlek használd ezt a címet: %(stable_url)s. A uMap-et a saját szerveredre is feltelepítheded, hiszen nyílt forráskódú!" + +#: templates/umap/home.html:17 +msgid "Map of the uMaps" +msgstr "uMap-térképek térképe" + +#: templates/umap/home.html:24 +msgid "Get inspired, browse maps" +msgstr "Szerezz inspirációt, böngéssz a térképek között!" + +#: templates/umap/navigation.html:12 +msgid "My maps" +msgstr "Térképeim" + +#: templates/umap/navigation.html:14 +msgid "Log in" +msgstr "Bejelentkezés" + +#: templates/umap/navigation.html:14 +msgid "Sign in" +msgstr "Regisztráció" + +#: templates/umap/navigation.html:16 +msgid "About" +msgstr "Névjegy" + +#: templates/umap/navigation.html:17 +msgid "Feedback" +msgstr "Segítség és hibabejelentés" + +#: templates/umap/navigation.html:20 +msgid "Change password" +msgstr "Jelszó változtatása" + +#: templates/umap/navigation.html:22 +msgid "Log out" +msgstr "Kijelentkezés" + +#: templates/umap/password_change.html:6 +msgid "Password change" +msgstr "Jelszó változtatása" + +#: templates/umap/password_change.html:7 +msgid "" +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." +msgstr "Kérlek, biztonsági okokból írd be a régi jelszavad, majd add meg kétszer a kívánt új jelszót!" + +#: templates/umap/password_change.html:12 +msgid "Old password" +msgstr "Régi jelszó" + +#: templates/umap/password_change.html:14 +msgid "New password" +msgstr "Új jelszó" + +#: templates/umap/password_change.html:16 +msgid "New password confirmation" +msgstr "Új jelszó ismét" + +#: templates/umap/password_change.html:18 +msgid "Change my password" +msgstr "Jelszó változtatása" + +#: templates/umap/password_change_done.html:6 +msgid "Password change successful" +msgstr "A jelszóváltoztatás sikeres volt." + +#: templates/umap/password_change_done.html:7 +msgid "Your password was changed." +msgstr "A jelszavad megváltozott." + +#: templates/umap/search.html:13 +msgid "Not map found." +msgstr "Ilyen térkép nem található." + +#: templates/umap/search_bar.html:6 +msgid "Search maps" +msgstr "Térképek keresése" + +#: templates/umap/search_bar.html:9 +msgid "Search" +msgstr "Keresés" + +#: views.py:190 +msgid "View the map" +msgstr "Térkép megtekintése" diff --git a/umap/locale/it/LC_MESSAGES/django.mo b/umap/locale/it/LC_MESSAGES/django.mo index 03400d03..d23d2b40 100644 Binary files a/umap/locale/it/LC_MESSAGES/django.mo and b/umap/locale/it/LC_MESSAGES/django.mo differ diff --git a/umap/locale/it/LC_MESSAGES/django.po b/umap/locale/it/LC_MESSAGES/django.po index 6c195d77..d5e44cc6 100644 --- a/umap/locale/it/LC_MESSAGES/django.po +++ b/umap/locale/it/LC_MESSAGES/django.po @@ -3,7 +3,8 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Maurizio Napolitano , 2013-2015 +# idetao , 2017 +# Maurizio Napolitano , 2013-2015,2018 # claudiamocci , 2013 # YOHAN BONIFACE , 2012 msgid "" @@ -11,19 +12,18 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2015-11-02 09:15+0000\n" +"PO-Revision-Date: 2018-02-22 11:08+0000\n" "Last-Translator: Maurizio Napolitano \n" -"Language-Team: Italian (http://www.transifex.com/yohanboniface/umap/language/" -"it/)\n" -"Language: it\n" +"Language-Team: Italian (http://www.transifex.com/yohanboniface/umap/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: templates/404.html:7 msgid "Take me to the home page" -msgstr "" +msgstr "Vai alla pagina principale" #: templates/auth/user_detail.html:7 #, python-format @@ -35,10 +35,8 @@ msgid "Type editors nick to add…" msgstr "Inserire nick degli editor d'aggiungere..." #: templates/leaflet_storage/map_detail.html:27 -#, fuzzy -#| msgid "Type editors nick to add…" msgid "Type new owner nick…" -msgstr "Inserire nick degli editor d'aggiungere..." +msgstr "Inserisci il nome del nuovo proprietario..." #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -50,19 +48,19 @@ msgstr "Altre mappe" #: templates/registration/login.html:4 msgid "Please log in with your account" -msgstr "" +msgstr "Accedi con il tuo account" #: templates/registration/login.html:18 msgid "Username" -msgstr "" +msgstr "Nome utente" #: templates/registration/login.html:20 msgid "Password" -msgstr "" +msgstr "Password" #: templates/registration/login.html:21 msgid "Login" -msgstr "" +msgstr "Login" #: templates/registration/login.html:27 msgid "Please choose a provider" @@ -73,9 +71,7 @@ msgstr "Seleziona un fornitore" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"uMap permette di creare mappe, che fanno uso di OpenStreetMap come sfondo, da inserire nel proprio sito in un minuto." +msgstr "uMap permette di creare mappe, che fanno uso di OpenStreetMap come sfondo, da inserire nel proprio sito in un minuto." #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -91,9 +87,7 @@ msgstr "Scegli colori ed icone dei POI" #: templates/umap/about_summary.html:14 msgid "Manage map options: display a minimap, locate user on load…" -msgstr "" -"Aggiungi opzioni alla mappa: mappa panoramica, geolocalizzazione di un " -"utente al caricamento ..." +msgstr "Aggiungi opzioni alla mappa: mappa panoramica, geolocalizzazione di un utente al caricamento ..." #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" @@ -124,14 +118,10 @@ msgstr "Gioca con la demo" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Questa è una demo da utilizzare solo per test e prototipi. Qualora sia " -"necessaria una versione stabile si deve utilizzare l'indirizzo a href=" -"\"%(stable_url)s\">%(stable_url)s. Chiunque inoltre può crearsi una " -"propria istanza, uMap è software libero!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Questa è una demo da utilizzare solo per test e prototipi. Qualora sia necessaria una versione stabile si deve utilizzare l'indirizzo a href=\"%(stable_url)s\">%(stable_url)s. Chiunque inoltre può crearsi una propria istanza, uMap è software libero!" #: templates/umap/home.html:17 msgid "Map of the uMaps" @@ -163,7 +153,7 @@ msgstr "Feedback" #: templates/umap/navigation.html:20 msgid "Change password" -msgstr "" +msgstr "Cambia password" #: templates/umap/navigation.html:22 msgid "Log out" @@ -171,37 +161,37 @@ msgstr "Esci" #: templates/umap/password_change.html:6 msgid "Password change" -msgstr "" +msgstr "Cambia password" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." -msgstr "" +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." +msgstr "Per motivi di sicurezza inserire la vecchia password, poi inserire quella nuova due volte così da verificare che sia stata scritta correttamente" #: templates/umap/password_change.html:12 msgid "Old password" -msgstr "" +msgstr "Password vecchia" #: templates/umap/password_change.html:14 msgid "New password" -msgstr "" +msgstr "Nuova password" #: templates/umap/password_change.html:16 msgid "New password confirmation" -msgstr "" +msgstr "Conferma della nuova password" #: templates/umap/password_change.html:18 msgid "Change my password" -msgstr "" +msgstr "Cambia la mia password" #: templates/umap/password_change_done.html:6 msgid "Password change successful" -msgstr "" +msgstr "Cambio della password effettuato con successo!" #: templates/umap/password_change_done.html:7 msgid "Your password was changed." -msgstr "" +msgstr "La tua password è stata cambiata." #: templates/umap/search.html:13 msgid "Not map found." @@ -219,5 +209,182 @@ msgstr "Cerca" msgid "View the map" msgstr "Visualizza la mappa" -#~ msgid "Map settings" -#~ msgstr "Impostazioni mappa" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Il link segreto per la modifica %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Chiunque può modificare" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Modificabile solo con il link segreto" + +#: models.py:20 +msgid "name" +msgstr "nome" + +#: models.py:42 +msgid "No licence set" +msgstr "Nessuna licenza definita" + +#: models.py:51 +msgid "details" +msgstr "dettagli" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Link alla pagina con i dettagli della licenza" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Modello dell'URL usando il formato delle tile OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Ordine degli sfondi (tilelayers) nel box di modifica" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Solo gli editor possono fare modifiche" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Solo il proprietario può effettuare modifiche" + +#: models.py:118 +msgid "everyone (public)" +msgstr "chiunque (pubblico)" + +#: models.py:119 +msgid "anyone with link" +msgstr "chiunque abbia il ilnk" + +#: models.py:120 +msgid "editors only" +msgstr "solo autori" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "descrizione" + +#: models.py:124 +msgid "center" +msgstr "centra" + +#: models.py:125 +msgid "zoom" +msgstr "zoom" + +#: models.py:126 +msgid "locate" +msgstr "localizza" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Geolocalizzare l'utente al caricamento?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Scegliere una licenza per la mappa." + +#: models.py:130 +msgid "licence" +msgstr "licenza" + +#: models.py:135 +msgid "background" +msgstr "sfondo" + +#: models.py:136 +msgid "owner" +msgstr "proprietario" + +#: models.py:137 +msgid "editors" +msgstr "editor" + +#: models.py:138 +msgid "edit status" +msgstr "stato della modifica" + +#: models.py:139 +msgid "share status" +msgstr "stato condivisione" + +#: models.py:140 +msgid "settings" +msgstr "impostazioni" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "La mappa anonima è stata associata all'account %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Duplicata da " + +#: models.py:262 +msgid "display on load" +msgstr "mostra al caricamento" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Visualizza questo layer al caricamento." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Utente loggato. Continuare..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Permessi della mappa" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Effettuare il login per continuare" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Username e password non corrispondono. Riprovare." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "La mappa è stata creata! Per modificarla da un altro computer, si deve utilizzare questo link: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Congratulazioni, la mappa è stata creata!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "La mappa è stata aggiornata!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Aggiornato l'elenco degli editor abilitati alla modifica della mappa!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Solo il proprietario può eliminare la mappa." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "La mappa è stata clonata! Per modificarla usando un altro computer, si deve utilizzare questo link: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Perfetto, la tua mappa è stata clonata!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Layer eliminato correttamente" diff --git a/umap/locale/ja/LC_MESSAGES/django.mo b/umap/locale/ja/LC_MESSAGES/django.mo index 9998dc0c..79c26bdd 100644 Binary files a/umap/locale/ja/LC_MESSAGES/django.mo and b/umap/locale/ja/LC_MESSAGES/django.mo differ diff --git a/umap/locale/ja/LC_MESSAGES/django.po b/umap/locale/ja/LC_MESSAGES/django.po index b3972602..0ad241f9 100644 --- a/umap/locale/ja/LC_MESSAGES/django.po +++ b/umap/locale/ja/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Satoshi IIDA , 2013-2014 # tomoya muramoto , 2016 @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2016-10-02 07:23+0000\n" +"PO-Revision-Date: 2017-09-19 22:33+0000\n" "Last-Translator: tomoya muramoto \n" "Language-Team: Japanese (http://www.transifex.com/yohanboniface/umap/language/ja/)\n" "MIME-Version: 1.0\n" @@ -206,3 +206,183 @@ msgstr "検索" #: views.py:190 msgid "View the map" msgstr "マップ表示" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "非公開の編集用リンク %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "だれでも編集可能" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "非公開の編集リンクからのみ編集可能" + +#: models.py:20 +msgid "name" +msgstr "名称" + +#: models.py:42 +msgid "No licence set" +msgstr "ライセンス未設定" + +#: models.py:51 +msgid "details" +msgstr "詳細" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "ライセンス詳細ページへのリンク" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "OSMタイルフォーマットを利用したURLテンプレート" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "編集ボックス内のタイルレイヤ並び順" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "指定ユーザのみ編集可能" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "所有者のみ編集可能" + +#: models.py:118 +msgid "everyone (public)" +msgstr "制限なし (公開)" + +#: models.py:119 +msgid "anyone with link" +msgstr "リンクを知っている人全員" + +#: models.py:120 +msgid "editors only" +msgstr "編集者のみ" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "概要" + +#: models.py:124 +msgid "center" +msgstr "中心点" + +#: models.py:125 +msgid "zoom" +msgstr "ズーム" + +#: models.py:126 +msgid "locate" +msgstr "現在地" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "読み込み時に現在地を表示?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "マップのライセンスを選択" + +#: models.py:130 +msgid "licence" +msgstr "ライセンス" + +#: models.py:135 +msgid "background" +msgstr "背景地図" + +#: models.py:136 +msgid "owner" +msgstr "所有者" + +#: models.py:137 +msgid "editors" +msgstr "編集者" + +#: models.py:138 +msgid "edit status" +msgstr "編集ステータス" + +#: models.py:139 +msgid "share status" +msgstr "共有状況" + +#: models.py:140 +msgid "settings" +msgstr "設定" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "所有者不明のマップがアカウント %s と関連付けられました" + +#: models.py:211 +msgid "Clone of" +msgstr "複製元" + +#: models.py:262 +msgid "display on load" +msgstr "読み込み時に表示" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "読み込み時にこのレイヤを表示" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "ログインしました" + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "マップ編集許可" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "ログインが必要です" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "ユーザ名とパスワードが不一致です。もう一度入力してください。" + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "マップの作成が完了しました! このマップを他の端末から編集する場合、いかのリンクを使用してください: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "マップ作成完了です!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "マップが更新されました!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "マップ編集者の更新が完了しました!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "マップを削除できるのは所有者だけです" + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "マップの複製が完了しました! このマップを他の端末から編集する場合、以下のリンクを使用してください: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "マップの複製が完了しました!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "レイヤ削除完了" diff --git a/umap/locale/lt/LC_MESSAGES/django.mo b/umap/locale/lt/LC_MESSAGES/django.mo index da0cb847..9dab2005 100644 Binary files a/umap/locale/lt/LC_MESSAGES/django.mo and b/umap/locale/lt/LC_MESSAGES/django.mo differ diff --git a/umap/locale/lt/LC_MESSAGES/django.po b/umap/locale/lt/LC_MESSAGES/django.po index 95242114..383be1ea 100644 --- a/umap/locale/lt/LC_MESSAGES/django.po +++ b/umap/locale/lt/LC_MESSAGES/django.po @@ -3,26 +3,25 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# ramunasd , 2014 +# Ramūnas D. , 2014 +# Ugne Urbelyte , 2017 msgid "" msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2014-03-01 00:29+0000\n" -"Last-Translator: yohanboniface \n" -"Language-Team: Lithuanian (http://www.transifex.com/projects/p/umap/language/" -"lt/)\n" -"Language: lt\n" +"PO-Revision-Date: 2017-09-19 23:05+0000\n" +"Last-Translator: Ugne Urbelyte \n" +"Language-Team: Lithuanian (http://www.transifex.com/yohanboniface/umap/language/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" -"%100<10 || n%100>=20) ? 1 : 2);\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" #: templates/404.html:7 msgid "Take me to the home page" -msgstr "" +msgstr "Grįžti į pagrindinį puslapį" #: templates/auth/user_detail.html:7 #, python-format @@ -31,15 +30,15 @@ msgstr "Peržiūrėti %(current_user)s žemėlapius" #: templates/leaflet_storage/map_detail.html:24 msgid "Type editors nick to add…" -msgstr "" +msgstr "Įveskite redaguotojų pseudonimus, kad pridėtu..." #: templates/leaflet_storage/map_detail.html:27 msgid "Type new owner nick…" -msgstr "" +msgstr "Įveskite naują vartotojo vardą" #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" -msgstr "" +msgstr "pagal" #: templates/leaflet_storage/map_list.html:11 msgid "More" @@ -47,19 +46,19 @@ msgstr "Daugiau" #: templates/registration/login.html:4 msgid "Please log in with your account" -msgstr "" +msgstr "Prisijungti prie savo paskyros" #: templates/registration/login.html:18 msgid "Username" -msgstr "" +msgstr "Vartotojo vardas" #: templates/registration/login.html:20 msgid "Password" -msgstr "" +msgstr "Slaptažodis" #: templates/registration/login.html:21 msgid "Login" -msgstr "" +msgstr "Prisijungti" #: templates/registration/login.html:27 msgid "Please choose a provider" @@ -70,9 +69,7 @@ msgstr "Pasirinkite teikėją" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"uMap leidžia susikurti savo žemėlapį naudojant OpenStreetMap sluoksnius vos per minutę ir įterpti jį į savo puslapį." +msgstr "uMap leidžia susikurti savo žemėlapį naudojant OpenStreetMap sluoksnius vos per minutę ir įterpti jį į savo puslapį." #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -88,13 +85,11 @@ msgstr "Valdyti POI spalvas ir ikonėles" #: templates/umap/about_summary.html:14 msgid "Manage map options: display a minimap, locate user on load…" -msgstr "" -"Valdyti žemėlapio nustatymus: rodyti mini žemėlapį, automatiškai nustatyti " -"padėtį.." +msgstr "Valdyti žemėlapio nustatymus: rodyti mini žemėlapį, automatiškai nustatyti padėtį.." #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" -msgstr "" +msgstr "Masiškai importuoti geografinius duomenis (geojson, gpx, kml, osm...)" #: templates/umap/about_summary.html:16 msgid "Choose the license for your data" @@ -121,22 +116,18 @@ msgstr "Išbandyti demo" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Tai demonstracinė versija, naudojama testavimui ir naujų versijų " -"demonstravimui. Jei Jums reikia stabilios versijos, tada geriau naudokitės " -"%(stable_url)s. Jūs taip pat gali pasileisti " -"savo puslapį, juk tai atviras kodas!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Tai demonstracinė versija, naudojama testavimui ir naujų versijų demonstravimui. Jei Jums reikia stabilios versijos, tada geriau naudokitės %(stable_url)s. Jūs taip pat gali pasileisti savo puslapį, juk tai atviras kodas!" #: templates/umap/home.html:17 msgid "Map of the uMaps" -msgstr "" +msgstr "uMap žemėlapis" #: templates/umap/home.html:24 msgid "Get inspired, browse maps" -msgstr "" +msgstr "Peržiūrėkite žemėlapius, raskite įkvėpimą" #: templates/umap/navigation.html:12 msgid "My maps" @@ -160,7 +151,7 @@ msgstr "Atsiliepimai" #: templates/umap/navigation.html:20 msgid "Change password" -msgstr "" +msgstr "Keisti slaptažodį" #: templates/umap/navigation.html:22 msgid "Log out" @@ -168,37 +159,37 @@ msgstr "Atsijungti" #: templates/umap/password_change.html:6 msgid "Password change" -msgstr "" +msgstr "Slaptažodžio keitimas" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." -msgstr "" +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." +msgstr "Saugumo sumetimais, įveskite savo dabartinį slaptažodį. Tuomet įveskite naują slaptažodį du kartus." #: templates/umap/password_change.html:12 msgid "Old password" -msgstr "" +msgstr "Senas slaptažodis" #: templates/umap/password_change.html:14 msgid "New password" -msgstr "" +msgstr "Naujas slaptažodis" #: templates/umap/password_change.html:16 msgid "New password confirmation" -msgstr "" +msgstr "Naujo slaptažodžio patvirtinimas" #: templates/umap/password_change.html:18 msgid "Change my password" -msgstr "" +msgstr "Keisti mano slaptažodį" #: templates/umap/password_change_done.html:6 msgid "Password change successful" -msgstr "" +msgstr "Slaptažodžio pakeitimas sėkmingas." #: templates/umap/password_change_done.html:7 msgid "Your password was changed." -msgstr "" +msgstr "Jūsų slaptažodis buvo pakeistas." #: templates/umap/search.html:13 msgid "Not map found." @@ -214,7 +205,184 @@ msgstr "Ieškoti" #: views.py:190 msgid "View the map" -msgstr "" +msgstr "Peržiūrėti žemėlapį" -#~ msgid "Map settings" -#~ msgstr "Žemėlapio nustatymai" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Slapta redagavimo nuoroda %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Visi gali redaguoti" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Redaguojamas tik su slapta nuoroda" + +#: models.py:20 +msgid "name" +msgstr "vardas" + +#: models.py:42 +msgid "No licence set" +msgstr "Nenustatyta licenzija" + +#: models.py:51 +msgid "details" +msgstr "išsamiau" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Licenzijos aprašymo nuoroda." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "URL šablonas OSM kaladėlių formatui" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Žemėlapio sluoksnių tvarka redagavimo lange" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Tik redaktoriai gali keisti" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Tik savininkas gali keisti" + +#: models.py:118 +msgid "everyone (public)" +msgstr "visi (viešai)" + +#: models.py:119 +msgid "anyone with link" +msgstr "visi su nuoroda" + +#: models.py:120 +msgid "editors only" +msgstr "tik keitėjai" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "aprašymas" + +#: models.py:124 +msgid "center" +msgstr "centras" + +#: models.py:125 +msgid "zoom" +msgstr "mastelis" + +#: models.py:126 +msgid "locate" +msgstr "nustatyti padėtį" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Nustatyti padėti užsikrovus?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Pasirinkite žemėlapio licenziją." + +#: models.py:130 +msgid "licence" +msgstr "licenzija" + +#: models.py:135 +msgid "background" +msgstr "fonas" + +#: models.py:136 +msgid "owner" +msgstr "savininkas" + +#: models.py:137 +msgid "editors" +msgstr "redaktoriai" + +#: models.py:138 +msgid "edit status" +msgstr "keisti būseną" + +#: models.py:139 +msgid "share status" +msgstr "pasidalinti būsena" + +#: models.py:140 +msgid "settings" +msgstr "nustatymai" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Jūsų anoniminis žemėlapis prijungtas prie Jūsų paskyros %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Kopija" + +#: models.py:262 +msgid "display on load" +msgstr "rodyti pasikrovus" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Rodyti šį sluoksnį pasrikrovus." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Sėkmingai prisijungėte. Kraunasi..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Žemėlapio leidimai" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Prisijunkite, kad tęsti" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Jūsų vardas ir slaptažodis yra neteisingi. Prašom pabandyti iš naujo." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Jūsų žemėlapis sėkmingai sukurtas! Jei norite redaguoti jį iš kito kompiuterio, pasinaudokite šia nuoroda: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Sveikinam, Jūsų žemėlapis sukurtas!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Žemėlapis atnaujintas!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Žemėlapio keitėjai atnaujinti!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Tik savininkas gali ištrinti žemėlapį." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Jūsų žemėlapis nukopijuotas! Jei norite redaguoti jį iš kito kompiuterio, pasinaudokite šia nuoroda: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Sveikinam, Jūsų žemėlapis buvo nukopijuotas!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Sluoksnis sėkmingai ištrintas." diff --git a/umap/locale/nl/LC_MESSAGES/django.mo b/umap/locale/nl/LC_MESSAGES/django.mo index 9e6b85ca..d260e00b 100644 Binary files a/umap/locale/nl/LC_MESSAGES/django.mo and b/umap/locale/nl/LC_MESSAGES/django.mo differ diff --git a/umap/locale/nl/LC_MESSAGES/django.po b/umap/locale/nl/LC_MESSAGES/django.po index 6ca1c454..107b432a 100644 --- a/umap/locale/nl/LC_MESSAGES/django.po +++ b/umap/locale/nl/LC_MESSAGES/django.po @@ -205,3 +205,183 @@ msgstr "" #: views.py:190 msgid "View the map" msgstr "" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "" + +#: models.py:20 +msgid "name" +msgstr "naam" + +#: models.py:42 +msgid "No licence set" +msgstr "" + +#: models.py:51 +msgid "details" +msgstr "" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "" + +#: models.py:118 +msgid "everyone (public)" +msgstr "" + +#: models.py:119 +msgid "anyone with link" +msgstr "" + +#: models.py:120 +msgid "editors only" +msgstr "" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "" + +#: models.py:124 +msgid "center" +msgstr "" + +#: models.py:125 +msgid "zoom" +msgstr "" + +#: models.py:126 +msgid "locate" +msgstr "" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "" + +#: models.py:130 +msgid "licence" +msgstr "" + +#: models.py:135 +msgid "background" +msgstr "" + +#: models.py:136 +msgid "owner" +msgstr "" + +#: models.py:137 +msgid "editors" +msgstr "" + +#: models.py:138 +msgid "edit status" +msgstr "" + +#: models.py:139 +msgid "share status" +msgstr "" + +#: models.py:140 +msgid "settings" +msgstr "" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "" + +#: models.py:211 +msgid "Clone of" +msgstr "" + +#: models.py:262 +msgid "display on load" +msgstr "" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "" + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "" + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "" diff --git a/umap/locale/pl/LC_MESSAGES/django.po b/umap/locale/pl/LC_MESSAGES/django.po index 5999965e..fb0b36ad 100644 --- a/umap/locale/pl/LC_MESSAGES/django.po +++ b/umap/locale/pl/LC_MESSAGES/django.po @@ -4,21 +4,23 @@ # # Translators: # Daniel Koć , 2015 +# endro, 2016 # endro, 2015 -# Teiron , 2016 +# Maciej Kowalik , 2016 +# Teiron, 2016 msgid "" msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2016-09-16 17:30+0000\n" -"Last-Translator: Teiron \n" +"PO-Revision-Date: 2018-06-02 14:15+0000\n" +"Last-Translator: yohanboniface \n" "Language-Team: Polish (http://www.transifex.com/yohanboniface/umap/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: templates/404.html:7 msgid "Take me to the home page" @@ -207,3 +209,183 @@ msgstr "Szukaj" #: views.py:190 msgid "View the map" msgstr "Zobacz mapę" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Sekretnym odnośnikiem do edycji jest %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Wszyscy mogą edytować" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Edycja możliwa tylko z sekretnym odnośnikiem" + +#: models.py:20 +msgid "name" +msgstr "nazwa" + +#: models.py:42 +msgid "No licence set" +msgstr "Brak ustawionej licencji" + +#: models.py:51 +msgid "details" +msgstr "szczegóły" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Odnośnik do strony ze szczegółowym opisem licencji." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Szablon URL używający formatu kafelków OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Kolejność podkładów w oknie edycji" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Tylko edytorzy mogą edytować" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Tylko właściciel może edytować" + +#: models.py:118 +msgid "everyone (public)" +msgstr "wszyscy (publiczne)" + +#: models.py:119 +msgid "anyone with link" +msgstr "każdy z linkiem" + +#: models.py:120 +msgid "editors only" +msgstr "tylko edytorzy" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "opis" + +#: models.py:124 +msgid "center" +msgstr "środek" + +#: models.py:125 +msgid "zoom" +msgstr "przybliżenie" + +#: models.py:126 +msgid "locate" +msgstr "lokalizuj" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Lokalizować użytkownika po załadowaniu?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Wybierz licencję mapy." + +#: models.py:130 +msgid "licence" +msgstr "licencja" + +#: models.py:135 +msgid "background" +msgstr "tło" + +#: models.py:136 +msgid "owner" +msgstr "właściciel" + +#: models.py:137 +msgid "editors" +msgstr "edytorzy" + +#: models.py:138 +msgid "edit status" +msgstr "status edycji" + +#: models.py:139 +msgid "share status" +msgstr "udostępnij status" + +#: models.py:140 +msgid "settings" +msgstr "ustawienia" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Twoja anonimowa mapa została dołączona do twojego konta %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Kopia" + +#: models.py:262 +msgid "display on load" +msgstr "wyświetl po załadowaniu" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Wyświetl tę warstwę po załadowaniu." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Jesteś zalogowany. Kontynuowanie..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Uprawnienia mapy" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Proszę się zalogować by kontynuować" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Twoja nazwa użytkownika i hasło nie pasują. Proszę spróbować ponownie." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Twoja mapa została utworzona! Jeśli chcesz edytować ją z innego komputera, użyj odnośnika: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Gratulacje, twoja mapa została utworzona!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Mapa została zaktualizowana!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Edytorzy mapy zaktualizowani pomyślnie!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Tylko właściciel może usunąć mapę." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Twoja mapa została skopiowana! Jeśli chcesz edytować ją z innego komputera, użyj odnośnika: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Gratulacje, twoja mapa została skopiowana!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Warstwa usunięta pomyślnie." diff --git a/umap/locale/pt/LC_MESSAGES/django.mo b/umap/locale/pt/LC_MESSAGES/django.mo index 74bffddd..061bb4fc 100644 Binary files a/umap/locale/pt/LC_MESSAGES/django.mo and b/umap/locale/pt/LC_MESSAGES/django.mo differ diff --git a/umap/locale/pt/LC_MESSAGES/django.po b/umap/locale/pt/LC_MESSAGES/django.po index dfaa6eea..49d48079 100644 --- a/umap/locale/pt/LC_MESSAGES/django.po +++ b/umap/locale/pt/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Joao Ponce de Leao Paulouro , 2014 # Rui , 2016 @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2016-12-22 10:03+0000\n" +"PO-Revision-Date: 2017-09-19 22:04+0000\n" "Last-Translator: Rui \n" "Language-Team: Portuguese (http://www.transifex.com/yohanboniface/umap/language/pt/)\n" "MIME-Version: 1.0\n" @@ -206,3 +206,183 @@ msgstr "Procurar" #: views.py:190 msgid "View the map" msgstr "Ver o mapa" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Link secreto para edição é %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Todos podem editar" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Unicamente editável através de link secreto" + +#: models.py:20 +msgid "name" +msgstr "nome" + +#: models.py:42 +msgid "No licence set" +msgstr "Nenhuma licença definida" + +#: models.py:51 +msgid "details" +msgstr "detalhes" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Link para uma página detalhando a licença." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Modelo de URL no formato de telas OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Ordem das camadas na caixa de edição" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Só editores podem editar" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Só o proprietário pode editar" + +#: models.py:118 +msgid "everyone (public)" +msgstr "todos (público)" + +#: models.py:119 +msgid "anyone with link" +msgstr "qualquer um com o link" + +#: models.py:120 +msgid "editors only" +msgstr "só editores" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "descrição" + +#: models.py:124 +msgid "center" +msgstr "centro" + +#: models.py:125 +msgid "zoom" +msgstr "zoom" + +#: models.py:126 +msgid "locate" +msgstr "localizar" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Localizar usuário no início?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Escolha uma licença para o mapa." + +#: models.py:130 +msgid "licence" +msgstr "licença" + +#: models.py:135 +msgid "background" +msgstr "fundo" + +#: models.py:136 +msgid "owner" +msgstr "proprietário" + +#: models.py:137 +msgid "editors" +msgstr "editores" + +#: models.py:138 +msgid "edit status" +msgstr "editar estado" + +#: models.py:139 +msgid "share status" +msgstr "partilhar estado" + +#: models.py:140 +msgid "settings" +msgstr "parâmetros" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "O seu mapa anónimo foi anexado à sua conta %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Clone de" + +#: models.py:262 +msgid "display on load" +msgstr "mostrar no início" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Apresentar esta camada ao carregar." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Sucesso na identificação. Continuando..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Permissões do mapa" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Por favor entre na sua conta para continuar" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "O nome de usuário e senha não correspondem. Tente novamente." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "O seu mapa foi criado! Se quiser editar este mapa noutro computador, por favor utilize este link: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Parabéns, o seu mapa foi criado!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "O mapa foi atualizado!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Os editores do mapa foram atualizados com sucesso!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Só o proprietário pode eliminar o mapa." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "O seu mapa foi clonado! Se quiser editar este mapa noutro computador, por favor utilize este link: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Parabéns, o seu mapa foi clonado!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Camada eliminada com sucesso." diff --git a/umap/locale/ru/LC_MESSAGES/django.mo b/umap/locale/ru/LC_MESSAGES/django.mo index 919eb1df..97c25ed3 100644 Binary files a/umap/locale/ru/LC_MESSAGES/django.mo and b/umap/locale/ru/LC_MESSAGES/django.mo differ diff --git a/umap/locale/ru/LC_MESSAGES/django.po b/umap/locale/ru/LC_MESSAGES/django.po index 1ba5919c..21b58c65 100644 --- a/umap/locale/ru/LC_MESSAGES/django.po +++ b/umap/locale/ru/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Кругликов Илья , 2014 # Кругликов Илья , 2016 @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2016-10-20 07:57+0000\n" +"PO-Revision-Date: 2017-09-20 07:08+0000\n" "Last-Translator: Кругликов Илья \n" "Language-Team: Russian (http://www.transifex.com/yohanboniface/umap/language/ru/)\n" "MIME-Version: 1.0\n" @@ -206,3 +206,183 @@ msgstr "Найти" #: views.py:190 msgid "View the map" msgstr "Посмотреть карту" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Секретная ссылка для редактирования: %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Все могут редактировать" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Редактирование возможно только при наличии секретной ссылки" + +#: models.py:20 +msgid "name" +msgstr "название" + +#: models.py:42 +msgid "No licence set" +msgstr "Лицензия не задана" + +#: models.py:51 +msgid "details" +msgstr "подробности" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Ссылка на страницу с описанием лицензии" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "шаблон ссылки использует формат слоя OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Расположите слои карт в окне редактирования" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Только редакторы могут редактировать" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Только владелец может редактировать" + +#: models.py:118 +msgid "everyone (public)" +msgstr "все (без ограничений)" + +#: models.py:119 +msgid "anyone with link" +msgstr "все, у кого есть ссылка" + +#: models.py:120 +msgid "editors only" +msgstr "только редакторы" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "описание" + +#: models.py:124 +msgid "center" +msgstr "центр" + +#: models.py:125 +msgid "zoom" +msgstr "масштаб" + +#: models.py:126 +msgid "locate" +msgstr "геолокация" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Использовать геолокацию при загрузке?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Выберите лицензию для карты." + +#: models.py:130 +msgid "licence" +msgstr "лицензия" + +#: models.py:135 +msgid "background" +msgstr "фоновый слой" + +#: models.py:136 +msgid "owner" +msgstr "владелец" + +#: models.py:137 +msgid "editors" +msgstr "редакторы" + +#: models.py:138 +msgid "edit status" +msgstr "статус редактирования" + +#: models.py:139 +msgid "share status" +msgstr "статус совместного использования" + +#: models.py:140 +msgid "settings" +msgstr "настройки" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Ваша анонимная карта была присоединена к вашей учётной записи %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Копия" + +#: models.py:262 +msgid "display on load" +msgstr "показывать при загрузке" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Показать этот слой при загрузке." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Вы вошли. Продолжим..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Разрешения для карты" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Чтобы продолжить, выполните вход" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Имя пользователя или пароль неверные. Попробуйте ещё раз." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Ваша карта готова! Если вы хотите редактировать её на другом компьютере, используйте эту ссылку:: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Поздравляем, ваша карта готова!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Карта обновлена!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Редакторы карты успешно обновлены!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Только владелец карты может удалить её." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Карта была скопирована. Если вы хотите редактировать её на другом компьютере, используйте эту ссылку: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Поздравляем, ваша карта скопирована!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Слой удалён." diff --git a/umap/locale/sk_SK/LC_MESSAGES/django.po b/umap/locale/sk_SK/LC_MESSAGES/django.po index cd4e7a8c..ea6c245e 100644 --- a/umap/locale/sk_SK/LC_MESSAGES/django.po +++ b/umap/locale/sk_SK/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Martin , 2016 # Martin , 2016 @@ -11,14 +11,14 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2016-10-09 11:19+0000\n" +"PO-Revision-Date: 2017-09-21 14:34+0000\n" "Last-Translator: Martin \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/yohanboniface/umap/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk_SK\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" #: templates/404.html:7 msgid "Take me to the home page" @@ -207,3 +207,183 @@ msgstr "Hľadať" #: views.py:190 msgid "View the map" msgstr "Prezrieť si túto mapu" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Tajný odkaz umožňujúci úpravu mapy je %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Hocikto môže upravovať" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Možné upravovať iba pomocou tajného odkazu" + +#: models.py:20 +msgid "name" +msgstr "názov" + +#: models.py:42 +msgid "No licence set" +msgstr "Žiadná licencia nie je nastavená" + +#: models.py:51 +msgid "details" +msgstr "podrobnosti" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Odkaz na stránku s podrobnejším popisom licencie." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Vzor URL vo formáte pre dlaždice OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Poradie vrstiev pri úprave" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Upravovať môžu iba prispievatelia" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Upravovať môže iba vlastník" + +#: models.py:118 +msgid "everyone (public)" +msgstr "hocikto (verejná)" + +#: models.py:119 +msgid "anyone with link" +msgstr "hocikto pomocou odkazu" + +#: models.py:120 +msgid "editors only" +msgstr "iba prispievatelia" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "popis" + +#: models.py:124 +msgid "center" +msgstr "stred" + +#: models.py:125 +msgid "zoom" +msgstr "priblíženie" + +#: models.py:126 +msgid "locate" +msgstr "lokalizovať" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Nájsť polohu používateľa pri štarte?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Vyberte si licenciu mapy." + +#: models.py:130 +msgid "licence" +msgstr "licencia" + +#: models.py:135 +msgid "background" +msgstr "pozadie" + +#: models.py:136 +msgid "owner" +msgstr "vlastník" + +#: models.py:137 +msgid "editors" +msgstr "prispievatelia" + +#: models.py:138 +msgid "edit status" +msgstr "kto môže vykonávať úpravy" + +#: models.py:139 +msgid "share status" +msgstr "nastavenie zdieľania" + +#: models.py:140 +msgid "settings" +msgstr "nastavenia" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Vaša anonymná mapa bola pripojená k vašemu účtu %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Kópia" + +#: models.py:262 +msgid "display on load" +msgstr "zobraziť pri štarte" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Zobraziť túto vrstvu pri štarte." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Ste prihláseni. Pokračujeme ďalej…" + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Prístupové práva" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Pre pokračovanie sa musíte prihlásiť" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Používateľské meno a heslo sa nezhodujú. Prosím, skúste to znova." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Vaša mapa bola vytvorená! Ak chcete upravovať túto mapu z iného počítača, použite tento odkaz: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Gratulujeme, vaša mapa bola vytvorená!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Mapa bola aktualizována!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Zoznam prispievovateľov bol úspešne upravený!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Iba vlastník môže vymazať túto mapu." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Bola vytvorená kópia mapy! Ak chcete upravovať túto mapu z iného počítača, použite tento odkaz: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Gratulujeme, bola vytvorená kópia mapy!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Vrstva bola úspešne vymazaná." diff --git a/umap/locale/sl/LC_MESSAGES/django.po b/umap/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 00000000..4fd01cb7 --- /dev/null +++ b/umap/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,387 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Matej Urbančič <>, 2018 +msgid "" +msgstr "" +"Project-Id-Version: uMap\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-09 21:37+0200\n" +"PO-Revision-Date: 2018-06-02 14:15+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Slovenian (http://www.transifex.com/yohanboniface/umap/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#: templates/404.html:7 +msgid "Take me to the home page" +msgstr "Nazaj na začetno stran" + +#: templates/auth/user_detail.html:7 +#, python-format +msgid "Browse %(current_user)s's maps" +msgstr "Prebrskaj zemljevide (%(current_user)s)" + +#: templates/leaflet_storage/map_detail.html:24 +msgid "Type editors nick to add…" +msgstr "Vpišite vzdevek urednika ..." + +#: templates/leaflet_storage/map_detail.html:27 +msgid "Type new owner nick…" +msgstr "Vpišite nov vzdevek lastnika ..." + +#: templates/leaflet_storage/map_list.html:7 views.py:184 +msgid "by" +msgstr "–" + +#: templates/leaflet_storage/map_list.html:11 +msgid "More" +msgstr "Več" + +#: templates/registration/login.html:4 +msgid "Please log in with your account" +msgstr "Prijavite se z računom" + +#: templates/registration/login.html:18 +msgid "Username" +msgstr "Uporabniško ime" + +#: templates/registration/login.html:20 +msgid "Password" +msgstr "Geslo" + +#: templates/registration/login.html:21 +msgid "Login" +msgstr "Prijava" + +#: templates/registration/login.html:27 +msgid "Please choose a provider" +msgstr "Izbor ponudnika" + +#: templates/umap/about_summary.html:6 +#, python-format +msgid "" +"uMap let you create maps with OpenStreetMap " +"layers in a minute and embed them in your site." +msgstr "Okolje uMap omogoča hitro ustvarjanje plasti zemljevidov OpenStreetMap in vstavljanje povezav na spletno stran." + +#: templates/umap/about_summary.html:11 +msgid "Choose the layers of your map" +msgstr "Izbor plasti na zemljevidu" + +#: templates/umap/about_summary.html:12 +msgid "Add POIs: markers, lines, polygons..." +msgstr "Dodajanje točk POI: označbe, črte, polja ..." + +#: templates/umap/about_summary.html:13 +msgid "Manage POIs colours and icons" +msgstr "Prilagajanje ikon in barv točk POI" + +#: templates/umap/about_summary.html:14 +msgid "Manage map options: display a minimap, locate user on load…" +msgstr "Upravljanje možnosti zemljevidov: določanje uporabnikov, vrst prikaza ..." + +#: templates/umap/about_summary.html:15 +msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" +msgstr "Paketno uvažanje geografskih podatkov (geojson, gpx, kml, osm ...)" + +#: templates/umap/about_summary.html:16 +msgid "Choose the license for your data" +msgstr "Izbor dovoljenja za vpisane podatke" + +#: templates/umap/about_summary.html:17 +msgid "Embed and share your map" +msgstr "Vstavljanje in objavljanje zemljevida" + +#: templates/umap/about_summary.html:23 +#, python-format +msgid "And it's open source!" +msgstr "Povrh vsega pa je projekt še odprtokoden!" + +#: templates/umap/about_summary.html:32 templates/umap/navigation.html:31 +msgid "Create a map" +msgstr "Ustvari zemljevid" + +#: templates/umap/about_summary.html:34 +msgid "Play with the demo" +msgstr "Pokaži preizkusne strani" + +#: templates/umap/home.html:10 +#, python-format +msgid "" +"This is a demo instance, used for tests and pre-rolling releases. If you " +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Preizkusna različica je na voljo za pregled in spoznavanje funkcionalnosti. Če potrebujete stabilno različico, uporabite %(stable_url)s. Seveda lahko vzpostavite svoj strežnik, saj je orodje odprtokodno!" + +#: templates/umap/home.html:17 +msgid "Map of the uMaps" +msgstr "Zemljevid spletišča uMaps" + +#: templates/umap/home.html:24 +msgid "Get inspired, browse maps" +msgstr "Poiščite zamisli, prebrskajte zemljevide" + +#: templates/umap/navigation.html:12 +msgid "My maps" +msgstr "Moji zemljevidi" + +#: templates/umap/navigation.html:14 +msgid "Log in" +msgstr "Prijava" + +#: templates/umap/navigation.html:14 +msgid "Sign in" +msgstr "Vpis" + +#: templates/umap/navigation.html:16 +msgid "About" +msgstr "O projektu" + +#: templates/umap/navigation.html:17 +msgid "Feedback" +msgstr "Odziv" + +#: templates/umap/navigation.html:20 +msgid "Change password" +msgstr "Zamenjaj geslo" + +#: templates/umap/navigation.html:22 +msgid "Log out" +msgstr "Odjava" + +#: templates/umap/password_change.html:6 +msgid "Password change" +msgstr "Spremeni geslo" + +#: templates/umap/password_change.html:7 +msgid "" +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." +msgstr "Iz varnostnih razlogov morate vpisati staro geslo in nato še dvakrat vpisati novo, da se prepričate v pravilnost vpisa." + +#: templates/umap/password_change.html:12 +msgid "Old password" +msgstr "Staro geslo" + +#: templates/umap/password_change.html:14 +msgid "New password" +msgstr "Novo geslo" + +#: templates/umap/password_change.html:16 +msgid "New password confirmation" +msgstr "Potrditev novega gesla" + +#: templates/umap/password_change.html:18 +msgid "Change my password" +msgstr "Spremeni geslo" + +#: templates/umap/password_change_done.html:6 +msgid "Password change successful" +msgstr "Geslo je uspešno spremenjeno." + +#: templates/umap/password_change_done.html:7 +msgid "Your password was changed." +msgstr "Geslo je spremenjeno." + +#: templates/umap/search.html:13 +msgid "Not map found." +msgstr "Zemljevida ni mogoče najti." + +#: templates/umap/search_bar.html:6 +msgid "Search maps" +msgstr "Poišči zemljevide" + +#: templates/umap/search_bar.html:9 +msgid "Search" +msgstr "Poišči" + +#: views.py:190 +msgid "View the map" +msgstr "Pogled zemljevida" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Skrivna povezava za urejanje je %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Vsakdo lahko ureja" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Urejanje je mogoče le prek posebne skrivne povezave" + +#: models.py:20 +msgid "name" +msgstr "ime" + +#: models.py:42 +msgid "No licence set" +msgstr "Ni določenega dovoljenja uporabe" + +#: models.py:51 +msgid "details" +msgstr "podrobnosti" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Povezava do strani, kjer je objavljeno dovoljenje." + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Predloga naslova URL z uporabo zapisa OSM." + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Vrstni red plasti v urejevalniku" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Urejajo lahko le uredniki" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Ureja lahko le lastnik" + +#: models.py:118 +msgid "everyone (public)" +msgstr "kdorkoli (javno)" + +#: models.py:119 +msgid "anyone with link" +msgstr "kdorkoli s povezavo" + +#: models.py:120 +msgid "editors only" +msgstr "le uredniki" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "opis" + +#: models.py:124 +msgid "center" +msgstr "središče" + +#: models.py:125 +msgid "zoom" +msgstr "približaj" + +#: models.py:126 +msgid "locate" +msgstr "določi mesto" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Al naj se ob zagonu določi trenutno mesto uporabnika?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Izbor dovoljenja za zemljevid." + +#: models.py:130 +msgid "licence" +msgstr "dovoljenje" + +#: models.py:135 +msgid "background" +msgstr "ozadje" + +#: models.py:136 +msgid "owner" +msgstr "lastnik" + +#: models.py:137 +msgid "editors" +msgstr "uredniki" + +#: models.py:138 +msgid "edit status" +msgstr "stanje urejanja" + +#: models.py:139 +msgid "share status" +msgstr "stanje souporabe" + +#: models.py:140 +msgid "settings" +msgstr "nastavitve" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Anonimni zemljevid je povezan z računom %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Klon zemljevida" + +#: models.py:262 +msgid "display on load" +msgstr "pokaži ob zagonu" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Pokaži to plast med nalaganjem." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Prijava je uspešno končana. Poteka nalaganje vsebine ..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Dovoljenja za urejanje" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Pred nadaljevanjem se je treba prijaviti." + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Uporabniško ime in geslo nista skladna. Poskusite znova." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Zemljevid je ustvarjen! Za urejanje z drugega računalnika uporabite povezavo: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Zemljevid je uspešno ustvarjen!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Zemljevid je posodobljen!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "seznam urednikov je posodobljen!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Zemljevid lahko izbriše le lastnik." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Zemljevid je kloniran! Za urejanje z drugega računalnika uporabite povezavo: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Zemljevid je uspešno kloniran!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Plast je uspešno izbrisana." diff --git a/umap/locale/uk_UA/LC_MESSAGES/django.mo b/umap/locale/uk_UA/LC_MESSAGES/django.mo index 0626adfc..90c615fe 100644 Binary files a/umap/locale/uk_UA/LC_MESSAGES/django.mo and b/umap/locale/uk_UA/LC_MESSAGES/django.mo differ diff --git a/umap/locale/uk_UA/LC_MESSAGES/django.po b/umap/locale/uk_UA/LC_MESSAGES/django.po index 314911cd..349777a0 100644 --- a/umap/locale/uk_UA/LC_MESSAGES/django.po +++ b/umap/locale/uk_UA/LC_MESSAGES/django.po @@ -3,26 +3,24 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Сергій Дубик , 2014 +# Сергій Дубик , 2014,2017 msgid "" msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2014-09-15 16:05+0000\n" +"PO-Revision-Date: 2017-09-20 04:50+0000\n" "Last-Translator: Сергій Дубик \n" -"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/projects/p/umap/" -"language/uk_UA/)\n" -"Language: uk_UA\n" +"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/yohanboniface/umap/language/uk_UA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Language: uk_UA\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" #: templates/404.html:7 msgid "Take me to the home page" -msgstr "" +msgstr "Перемістіть мене на головну сторінку" #: templates/auth/user_detail.html:7 #, python-format @@ -34,10 +32,8 @@ msgid "Type editors nick to add…" msgstr "Введіть ім’я редактора, щоб додати…" #: templates/leaflet_storage/map_detail.html:27 -#, fuzzy -#| msgid "Type editors nick to add…" msgid "Type new owner nick…" -msgstr "Введіть ім’я редактора, щоб додати…" +msgstr "Введіть нік нового власника..." #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -49,19 +45,19 @@ msgstr "Ще" #: templates/registration/login.html:4 msgid "Please log in with your account" -msgstr "" +msgstr "Будь ласка, увійдіть за обліковим записом" #: templates/registration/login.html:18 msgid "Username" -msgstr "" +msgstr "Ім’я користувача" #: templates/registration/login.html:20 msgid "Password" -msgstr "" +msgstr "Пароль" #: templates/registration/login.html:21 msgid "Login" -msgstr "" +msgstr "Логін" #: templates/registration/login.html:27 msgid "Please choose a provider" @@ -72,9 +68,7 @@ msgstr "Виберіть провайдера автентифікації" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"uMap дає Вам можливість за лічені хвилини створювати мапи на основі даних OpenStreetMap та публікувати їх на своєму сайті." +msgstr "uMap дає Вам можливість за лічені хвилини створювати мапи на основі даних OpenStreetMap та публікувати їх на своєму сайті." #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -90,9 +84,7 @@ msgstr "Вибирайте потрібні кольори та значки д #: templates/umap/about_summary.html:14 msgid "Manage map options: display a minimap, locate user on load…" -msgstr "" -"Змінюйте параметри мапи: відображення мінімапи, встановлення місця " -"користувача при завантаженні …" +msgstr "Змінюйте параметри мапи: відображення мінімапи, встановлення місця користувача при завантаженні …" #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" @@ -123,14 +115,10 @@ msgstr "Погратися з демо-версією" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Це демонстраційний сайт, що використовується для тестів та підготовки " -"стабільних випусків. Якщо Вам потрібна стабільна версія, перейдіть на %(stable_url)s. Ви також можете створити свою " -"інсталяцію, оскільки це відкрите ПЗ!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Це демонстраційний сайт, що використовується для тестів та підготовки стабільних випусків. Якщо Вам потрібна стабільна версія, перейдіть на %(stable_url)s. Ви також можете створити свою інсталяцію, оскільки це відкрите ПЗ!" #: templates/umap/home.html:17 msgid "Map of the uMaps" @@ -162,7 +150,7 @@ msgstr "Зворотній зв’язок" #: templates/umap/navigation.html:20 msgid "Change password" -msgstr "" +msgstr "Зміна паролю" #: templates/umap/navigation.html:22 msgid "Log out" @@ -170,37 +158,37 @@ msgstr "Вийти" #: templates/umap/password_change.html:6 msgid "Password change" -msgstr "" +msgstr "Зміна паролю" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." -msgstr "" +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." +msgstr "Будь ласка, введіть свій старий пароль, для надійності, а потім введіть новий пароль двічі, щоб ми могли переконатися, що Ви ввели його правильно." #: templates/umap/password_change.html:12 msgid "Old password" -msgstr "" +msgstr "Старий пароль" #: templates/umap/password_change.html:14 msgid "New password" -msgstr "" +msgstr "Новий пароль" #: templates/umap/password_change.html:16 msgid "New password confirmation" -msgstr "" +msgstr "Підтвердження для нового паролю" #: templates/umap/password_change.html:18 msgid "Change my password" -msgstr "" +msgstr "Змінити мій пароль" #: templates/umap/password_change_done.html:6 msgid "Password change successful" -msgstr "" +msgstr "Зміна паролю успішна." #: templates/umap/password_change_done.html:7 msgid "Your password was changed." -msgstr "" +msgstr "Ваш пароль змінено." #: templates/umap/search.html:13 msgid "Not map found." @@ -218,5 +206,182 @@ msgstr "Шукати" msgid "View the map" msgstr "Переглянути мапу" -#~ msgid "Map settings" -#~ msgstr "Налаштування мапи" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Секретне посилання для редагування: %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Кожен може редагувати" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Редагування можливе лише за наявності секретного посилання" + +#: models.py:20 +msgid "name" +msgstr "назва" + +#: models.py:42 +msgid "No licence set" +msgstr "Ліцензія не задана" + +#: models.py:51 +msgid "details" +msgstr "подробиці" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Посилання на сторінку з описом ліцензії" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "шаблон посилання використовує формат шару OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Розташуйте шари мап у вікні редагування" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Лише редактори можуть редагувати" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Лише власник може редагувати" + +#: models.py:118 +msgid "everyone (public)" +msgstr "усі (відкритий доступ)" + +#: models.py:119 +msgid "anyone with link" +msgstr "усі, у кого є посилання" + +#: models.py:120 +msgid "editors only" +msgstr "лише редактори" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "опис" + +#: models.py:124 +msgid "center" +msgstr "центр" + +#: models.py:125 +msgid "zoom" +msgstr "масштаб" + +#: models.py:126 +msgid "locate" +msgstr "геолокація" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Використовувати геолокацію при завантаженні?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Виберіть ліцензію для мапи." + +#: models.py:130 +msgid "licence" +msgstr "ліцензія" + +#: models.py:135 +msgid "background" +msgstr "фоновий шар" + +#: models.py:136 +msgid "owner" +msgstr "власник" + +#: models.py:137 +msgid "editors" +msgstr "редактори" + +#: models.py:138 +msgid "edit status" +msgstr "статус редагування" + +#: models.py:139 +msgid "share status" +msgstr "статус спільного використання" + +#: models.py:140 +msgid "settings" +msgstr "налаштування" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Ваша анонімна мапа була приєднана до Вашого облікового запису %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Копія " + +#: models.py:262 +msgid "display on load" +msgstr "показувати при завантаженні" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Показати цей шар при завантаженні." + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Ви увійшли. Продовжимо …" + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Дозволи для мапи" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Щоб продовжити, виконайте вхід" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Ім’я користувача або пароль невірні. Спробуйте ще раз." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Ваша мапа готова! Якщо Ви хочете редагувати її на іншому комп’ютері, використовуйте це посилання: %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Вітаємо, Ваша мапа готова!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Мапа оновлена!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Редактори мапи успішно оновлені!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Лише власник мапи може вилучити її." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Карта була скопійована. Якщо Ви хочете редагувати її на іншому комп’ютері, використовуйте це посилання: %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Вітаємо, Ваша мапа скопійована!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Шар вилучено." diff --git a/umap/locale/vi/LC_MESSAGES/django.mo b/umap/locale/vi/LC_MESSAGES/django.mo index 1ae04e61..de82ae45 100644 Binary files a/umap/locale/vi/LC_MESSAGES/django.mo and b/umap/locale/vi/LC_MESSAGES/django.mo differ diff --git a/umap/locale/vi/LC_MESSAGES/django.po b/umap/locale/vi/LC_MESSAGES/django.po index e18605c3..5ddd34ce 100644 --- a/umap/locale/vi/LC_MESSAGES/django.po +++ b/umap/locale/vi/LC_MESSAGES/django.po @@ -9,14 +9,13 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2014-08-11 00:35+0000\n" -"Last-Translator: Thanh Le Viet \n" -"Language-Team: Vietnamese (http://www.transifex.com/projects/p/umap/language/" -"vi/)\n" -"Language: vi\n" +"PO-Revision-Date: 2017-09-20 09:39+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Vietnamese (http://www.transifex.com/yohanboniface/umap/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" #: templates/404.html:7 @@ -33,10 +32,8 @@ msgid "Type editors nick to add…" msgstr "Nhập nick thành viên để thêm vào..." #: templates/leaflet_storage/map_detail.html:27 -#, fuzzy -#| msgid "Type editors nick to add…" msgid "Type new owner nick…" -msgstr "Nhập nick thành viên để thêm vào..." +msgstr "" #: templates/leaflet_storage/map_list.html:7 views.py:184 msgid "by" @@ -71,9 +68,7 @@ msgstr "Hãy chọn một nhà cung cấp" msgid "" "uMap let you create maps with OpenStreetMap " "layers in a minute and embed them in your site." -msgstr "" -"uMap cho phép bạn tạo bản đồ với các layer của OpenStreetMap trong vài phút và chèn nó vào trong website của bạn" +msgstr "uMap cho phép bạn tạo bản đồ với các layer của OpenStreetMap trong vài phút và chèn nó vào trong website của bạn" #: templates/umap/about_summary.html:11 msgid "Choose the layers of your map" @@ -89,9 +84,7 @@ msgstr "Quản lý màu và biểu tượng POI" #: templates/umap/about_summary.html:14 msgid "Manage map options: display a minimap, locate user on load…" -msgstr "" -"Quản lý thiết lập bản đồ: hiển thị bản đồ con, xác định vị trí người dùng " -"khi tải bản đồ..." +msgstr "Quản lý thiết lập bản đồ: hiển thị bản đồ con, xác định vị trí người dùng khi tải bản đồ..." #: templates/umap/about_summary.html:15 msgid "Batch import geostructured data (geojson, gpx, kml, osm...)" @@ -122,14 +115,10 @@ msgstr "Xem thử demo" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" -msgstr "" -"Đây là một bản demo được dùng để kiểm tra và xuất bản thử. Nếu bạn cần một " -"bản ổ định, hãy sử dụng %(stable_url)s. Bạn " -"cũng có thể chạy nó trên máy tính của mình vì nó là phần mềm nguồn mở" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" +msgstr "Đây là một bản demo được dùng để kiểm tra và xuất bản thử. Nếu bạn cần một bản ổ định, hãy sử dụng %(stable_url)s. Bạn cũng có thể chạy nó trên máy tính của mình vì nó là phần mềm nguồn mở" #: templates/umap/home.html:17 msgid "Map of the uMaps" @@ -173,8 +162,8 @@ msgstr "" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." msgstr "" #: templates/umap/password_change.html:12 @@ -217,5 +206,182 @@ msgstr "Tìm" msgid "View the map" msgstr "Xem bản đồ" -#~ msgid "Map settings" -#~ msgstr "Thiết lập bản đồ" +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "Link chỉnh sửa bí mật là %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "Ai cũng có thể chỉnh sửa" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "Chỉ có thể sửa với liên kết chỉnh sửa bí mật" + +#: models.py:20 +msgid "name" +msgstr "tên" + +#: models.py:42 +msgid "No licence set" +msgstr "Bản quyền không được đặt" + +#: models.py:51 +msgid "details" +msgstr "chi tiết" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "Liên kết đến trang có chi tiết về bản quyền" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "Mẫu URL sử dụng định dạng tile của OSM" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "Thứ tự các titlelayer trong hộp chỉnh sửa" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "Chỉ chỉnh sửa bởi người có quyền" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "Chỉ người sở hữu có thể chỉnh sửa" + +#: models.py:118 +msgid "everyone (public)" +msgstr "mọi người" + +#: models.py:119 +msgid "anyone with link" +msgstr "bất kì ai với liên kết" + +#: models.py:120 +msgid "editors only" +msgstr "chỉ người có quyền" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "mô tả" + +#: models.py:124 +msgid "center" +msgstr "trung tâm" + +#: models.py:125 +msgid "zoom" +msgstr "thu phóng" + +#: models.py:126 +msgid "locate" +msgstr "xác định" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "Xác định người dùng khi tải trang?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "Chọn bản quyền cho bản đồ" + +#: models.py:130 +msgid "licence" +msgstr "bản quyền" + +#: models.py:135 +msgid "background" +msgstr "nền" + +#: models.py:136 +msgid "owner" +msgstr "chủ nhân" + +#: models.py:137 +msgid "editors" +msgstr "người chỉnh sửa" + +#: models.py:138 +msgid "edit status" +msgstr "trạng thái chỉnh sửa" + +#: models.py:139 +msgid "share status" +msgstr "chia sẻ trạng thái" + +#: models.py:140 +msgid "settings" +msgstr "thiết lập" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "Bản đồ chưa đặt tên của bản đã được đính kèm vào tài khoản của bạn %s" + +#: models.py:211 +msgid "Clone of" +msgstr "Sao chép của" + +#: models.py:262 +msgid "display on load" +msgstr "hiển thị khi tải trang" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "Hiển thị layer này khi tải trang" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "Bạn đã đăng nhập, Đang tiếp tục..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "Quyền hạn" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "Vui lòng đăng nhập để thực thi" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "Tên truy cập hoặc mật khẩu không đúng. Vui lòng thử lại." + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Bản đồ của bạn đã được tạo! Nếu bạn muốn chỉnh sửa bản đồ từ máy tính khác, vui lòng sử dụng liên kết này %(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "Chúc mừng, bản đồ của bạn đã được tạo!" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "Bản đồ đã được cập nhật!" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "Bản đồ được cập nhật thành công!" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "Chỉ chủ nhân của bản đồ mới có quyền xóa." + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "Bản đồ của bạn đã được sao chép. Nếu bạn muốn chỉnh sửa bản đồ từ máy tính khác, vui lòng sử dụng liên kết này %(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "Chúc mừng, bản đồ của bạn đã được sao chép!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "Đã xóa layer" diff --git a/umap/locale/zh/LC_MESSAGES/django.mo b/umap/locale/zh/LC_MESSAGES/django.mo index 2d4e4752..9d53af5a 100644 Binary files a/umap/locale/zh/LC_MESSAGES/django.mo and b/umap/locale/zh/LC_MESSAGES/django.mo differ diff --git a/umap/locale/zh/LC_MESSAGES/django.po b/umap/locale/zh/LC_MESSAGES/django.po index 9d54b64b..8125f679 100644 --- a/umap/locale/zh/LC_MESSAGES/django.po +++ b/umap/locale/zh/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # sun wei , 2014 msgid "" @@ -9,14 +9,13 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2014-06-23 01:07+0000\n" -"Last-Translator: sun wei \n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/umap/language/" -"zh/)\n" -"Language: zh\n" +"PO-Revision-Date: 2017-09-20 05:52+0000\n" +"Last-Translator: yohanboniface \n" +"Language-Team: Chinese (http://www.transifex.com/yohanboniface/umap/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" #: templates/404.html:7 @@ -116,9 +115,9 @@ msgstr "试用示例" #, python-format msgid "" "This is a demo instance, used for tests and pre-rolling releases. If you " -"need a stable instance, please use " -"%(stable_url)s. You can also host your own instance, it's open source!" +"need a stable instance, please use %(stable_url)s. You can also host your own " +"instance, it's open source!" msgstr "" #: templates/umap/home.html:17 @@ -163,8 +162,8 @@ msgstr "" #: templates/umap/password_change.html:7 msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." +"Please enter your old password, for security's sake, and then enter your new" +" password twice so we can verify you typed it in correctly." msgstr "" #: templates/umap/password_change.html:12 @@ -206,6 +205,3 @@ msgstr "搜索" #: views.py:190 msgid "View the map" msgstr "浏览地图" - -#~ msgid "Map settings" -#~ msgstr "地图设置" diff --git a/umap/locale/zh_TW/LC_MESSAGES/django.mo b/umap/locale/zh_TW/LC_MESSAGES/django.mo index f9b9c015..32b7b9dd 100644 Binary files a/umap/locale/zh_TW/LC_MESSAGES/django.mo and b/umap/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/umap/locale/zh_TW/LC_MESSAGES/django.po b/umap/locale/zh_TW/LC_MESSAGES/django.po index 94927669..359d4ad3 100644 --- a/umap/locale/zh_TW/LC_MESSAGES/django.po +++ b/umap/locale/zh_TW/LC_MESSAGES/django.po @@ -1,10 +1,10 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Supaplex , 2014 -# Hsin-lin Cheng , 2014 +# Hsin-lin Cheng (lancetw) , 2014 # Sean Young , 2016 # Yuan CHAO , 2014 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: uMap\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-09-09 21:37+0200\n" -"PO-Revision-Date: 2016-12-04 11:18+0000\n" +"PO-Revision-Date: 2017-09-23 20:04+0000\n" "Last-Translator: Sean Young \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/yohanboniface/umap/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -208,3 +208,183 @@ msgstr "搜尋" #: views.py:190 msgid "View the map" msgstr "檢視地圖" + +#: forms.py:43 +#, python-format +msgid "Secret edit link is %s" +msgstr "不公開的私密編輯連結 %s" + +#: forms.py:47 models.py:113 +msgid "Everyone can edit" +msgstr "所有人皆可編輯" + +#: forms.py:48 +msgid "Only editable with secret edit link" +msgstr "僅能由私密連結編輯" + +#: models.py:20 +msgid "name" +msgstr "名稱" + +#: models.py:42 +msgid "No licence set" +msgstr "未指定授權條款" + +#: models.py:51 +msgid "details" +msgstr "詳情" + +#: models.py:52 +msgid "Link to a page where the licence is detailed." +msgstr "連結至授權條款說明網址" + +#: models.py:66 +msgid "URL template using OSM tile format" +msgstr "URL 樣板,使用 OSM 地圖磚格式" + +#: models.py:74 +msgid "Order of the tilelayers in the edit box" +msgstr "編輯方塊中地圖磚的圖層順序" + +#: models.py:114 +msgid "Only editors can edit" +msgstr "僅編輯群可編輯" + +#: models.py:115 +msgid "Only owner can edit" +msgstr "僅擁有者可編輯" + +#: models.py:118 +msgid "everyone (public)" +msgstr "所有人(公開)" + +#: models.py:119 +msgid "anyone with link" +msgstr "任何有連結的人" + +#: models.py:120 +msgid "editors only" +msgstr "只有編輯者允許" + +#: models.py:123 models.py:257 +msgid "description" +msgstr "描述" + +#: models.py:124 +msgid "center" +msgstr "中心" + +#: models.py:125 +msgid "zoom" +msgstr "縮放" + +#: models.py:126 +msgid "locate" +msgstr "定位" + +#: models.py:126 +msgid "Locate user on load?" +msgstr "載入時使用定位功能?" + +#: models.py:129 +msgid "Choose the map licence." +msgstr "選擇地圖授權" + +#: models.py:130 +msgid "licence" +msgstr "授權" + +#: models.py:135 +msgid "background" +msgstr "地圖背景" + +#: models.py:136 +msgid "owner" +msgstr "擁有者" + +#: models.py:137 +msgid "editors" +msgstr "編輯者" + +#: models.py:138 +msgid "edit status" +msgstr "編輯狀態" + +#: models.py:139 +msgid "share status" +msgstr "分享狀態" + +#: models.py:140 +msgid "settings" +msgstr "設定" + +#: models.py:178 +#, python-format +msgid "Your anonymous map has been attached to your account %s" +msgstr "你的匿名地圖已經加入你的帳號 %s " + +#: models.py:211 +msgid "Clone of" +msgstr "複製" + +#: models.py:262 +msgid "display on load" +msgstr "載入時顯示" + +#: models.py:263 +msgid "Display this layer on load." +msgstr "載入此圖層時顯示" + +#: templates/leaflet_storage/login_popup_end.html:2 +msgid "You are logged in. Continuing..." +msgstr "您已登入,繼續中..." + +#: templates/leaflet_storage/map_update_permissions.html:2 +msgid "Map permissions" +msgstr "地圖權限" + +#: templates/registration/login.html:2 +msgid "Please log in to proceed" +msgstr "請先登入" + +#: templates/registration/login.html:4 +msgid "Your username and password didn't match. Please try again." +msgstr "使用者代號或密碼不正確,請重新輸入。" + +#: views.py:232 +#, python-format +msgid "" +"Your map has been created! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "您的地圖已建立完成!如果您想在不同的機器編輯這個地圖,請使用這個連結:%(anonymous_url)s" + +#: views.py:237 +msgid "Congratulations, your map has been created!" +msgstr "恭喜您的地圖已經新增完成" + +#: views.py:264 +msgid "Map has been updated!" +msgstr "地圖已經更新" + +#: views.py:291 +msgid "Map editors updated with success!" +msgstr "地圖編輯者更新完成" + +#: views.py:306 +msgid "Only its owner can delete the map." +msgstr "只有擁有者可以刪除此地圖" + +#: views.py:335 +#, python-format +msgid "" +"Your map has been cloned! If you want to edit this map from another " +"computer, please use this link: %(anonymous_url)s" +msgstr "您的地圖已複製完成!如果您想在不同的機器編輯這個地圖,請使用這個連結:%(anonymous_url)s" + +#: views.py:340 +msgid "Congratulations, your map has been cloned!" +msgstr "恭喜,您的地圖已被複製!" + +#: views.py:526 +msgid "Layer successfully deleted." +msgstr "圖層已刪除" diff --git a/umap/management/commands/anonymous_edit_url.py b/umap/management/commands/anonymous_edit_url.py new file mode 100644 index 00000000..f23d0f56 --- /dev/null +++ b/umap/management/commands/anonymous_edit_url.py @@ -0,0 +1,28 @@ +import sys + +from django.core.management.base import BaseCommand +from django.conf import settings + +from umap.models import Map + + +class Command(BaseCommand): + help = ('Retrieve anonymous edit url of a map. ' + 'Eg.: python manage.py anonymous_edit_url 1234') + + def add_arguments(self, parser): + parser.add_argument('pk', help='PK of the map to retrieve.') + + def abort(self, msg): + self.stderr.write(msg) + sys.exit(1) + + def handle(self, *args, **options): + pk = options['pk'] + try: + map_ = Map.objects.get(pk=pk) + except Map.DoesNotExist: + self.abort('Map with pk {} not found'.format(pk)) + if map_.owner: + self.abort('Map is not anonymous (owner: {})'.format(map_.owner)) + print(settings.SITE_URL + map_.get_anonymous_edit_url()) diff --git a/umap/management/commands/generate_js_locale.py b/umap/management/commands/generate_js_locale.py new file mode 100644 index 00000000..a5754b14 --- /dev/null +++ b/umap/management/commands/generate_js_locale.py @@ -0,0 +1,40 @@ +import io +import os +from pathlib import Path + +from django.core.management.base import BaseCommand +from django.conf import settings +from django.contrib.staticfiles import finders +from django.template.loader import render_to_string +from django.utils.translation import to_locale + +ROOT = Path(settings.PROJECT_DIR) / 'static/umap/locale/' + + +class Command(BaseCommand): + + def handle(self, *args, **options): + self.verbosity = options['verbosity'] + for code, name in settings.LANGUAGES: + code = to_locale(code) + if self.verbosity > 0: + print("Processing", name) + path = ROOT / '{code}.json'.format(code=code) + if not path.exists(): + print(path, 'doest not exist', 'Skipping') + else: + with path.open(encoding="utf-8") as f: + if self.verbosity > 1: + print("Found file", path) + self.render(code, f.read()) + + def render(self, code, json): + path = ROOT / '{code}.js'.format(code=code) + with path.open("w", encoding="utf-8") as f: + content = render_to_string('umap/locale.js', { + "locale": json, + "locale_code": code + }) + if self.verbosity > 1: + print("Exporting to", path) + f.write(content) diff --git a/umap/management/commands/import_pictograms.py b/umap/management/commands/import_pictograms.py index 11cae597..fe3b05c0 100644 --- a/umap/management/commands/import_pictograms.py +++ b/umap/management/commands/import_pictograms.py @@ -3,7 +3,7 @@ import os from django.core.files import File from django.core.management.base import BaseCommand -from leaflet_storage.models import Pictogram +from umap.models import Pictogram class Command(BaseCommand): diff --git a/umap/managers.py b/umap/managers.py new file mode 100644 index 00000000..d1728890 --- /dev/null +++ b/umap/managers.py @@ -0,0 +1,8 @@ +from django.db.models import Manager + + +class PublicManager(Manager): + + def get_queryset(self): + return super(PublicManager, self).get_queryset().filter( + share_status=self.model.PUBLIC) diff --git a/umap/migrations/0001_add_tilelayer.py b/umap/migrations/0001_add_tilelayer.py deleted file mode 100644 index 6f1281ad..00000000 --- a/umap/migrations/0001_add_tilelayer.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.3 on 2016-11-26 16:02 -from __future__ import unicode_literals - -from django.db import migrations - - -def add_tilelayer(apps, *args): - TileLayer = apps.get_model('leaflet_storage', 'TileLayer') - if TileLayer.objects.count(): - return - TileLayer( - name='Positron', - url_template=('https://cartodb-basemaps-{s}.global.ssl.fastly.net/' - 'light_all/{z}/{x}/{y}.png'), - attribution=('© [[http://www.openstreetmap.org/copyright|' - 'OpenStreetMap]] contributors, © ' - '[[https://carto.com/attributions|CARTO]]')).save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('leaflet_storage', '0001_initial'), - ] - - operations = [ - migrations.RunPython(add_tilelayer), - ] diff --git a/umap/migrations/0001_initial.py b/umap/migrations/0001_initial.py new file mode 100644 index 00000000..fff32572 --- /dev/null +++ b/umap/migrations/0001_initial.py @@ -0,0 +1,107 @@ +# Generated by Django 2.0.5 on 2018-05-19 09:27 + +from django.conf import settings +import django.contrib.gis.db.models.fields +from django.db import migrations, models +import django.db.models.deletion +import umap.fields +import umap.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='DataLayer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='name')), + ('description', models.TextField(blank=True, null=True, verbose_name='description')), + ('geojson', models.FileField(blank=True, null=True, upload_to=umap.models.upload_to)), + ('display_on_load', models.BooleanField(default=False, help_text='Display this layer on load.', verbose_name='display on load')), + ('rank', models.SmallIntegerField(default=0)), + ], + options={ + 'ordering': ('rank',), + }, + ), + migrations.CreateModel( + name='Licence', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='name')), + ('details', models.URLField(help_text='Link to a page where the licence is detailed.', verbose_name='details')), + ], + options={ + 'ordering': ('name',), + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Map', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='name')), + ('slug', models.SlugField()), + ('description', models.TextField(blank=True, null=True, verbose_name='description')), + ('center', django.contrib.gis.db.models.fields.PointField(geography=True, srid=4326, verbose_name='center')), + ('zoom', models.IntegerField(default=7, verbose_name='zoom')), + ('locate', models.BooleanField(default=False, help_text='Locate user on load?', verbose_name='locate')), + ('modified_at', models.DateTimeField(auto_now=True)), + ('edit_status', models.SmallIntegerField(choices=[(1, 'Everyone can edit'), (2, 'Only editors can edit'), (3, 'Only owner can edit')], default=3, verbose_name='edit status')), + ('share_status', models.SmallIntegerField(choices=[(1, 'everyone (public)'), (2, 'anyone with link'), (3, 'editors only')], default=1, verbose_name='share status')), + ('settings', umap.fields.DictField(blank=True, null=True, verbose_name='settings')), + ('editors', models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='editors')), + ('licence', models.ForeignKey(default=umap.models.get_default_licence, help_text='Choose the map licence.', on_delete=django.db.models.deletion.SET_DEFAULT, to='umap.Licence', verbose_name='licence')), + ('owner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='owned_maps', to=settings.AUTH_USER_MODEL, verbose_name='owner')), + ], + options={ + 'ordering': ('name',), + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Pictogram', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='name')), + ('attribution', models.CharField(max_length=300)), + ('pictogram', models.ImageField(upload_to='pictogram')), + ], + options={ + 'ordering': ('name',), + 'abstract': False, + }, + ), + migrations.CreateModel( + name='TileLayer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='name')), + ('url_template', models.CharField(help_text='URL template using OSM tile format', max_length=200)), + ('minZoom', models.IntegerField(default=0)), + ('maxZoom', models.IntegerField(default=18)), + ('attribution', models.CharField(max_length=300)), + ('rank', models.SmallIntegerField(blank=True, help_text='Order of the tilelayers in the edit box', null=True)), + ], + options={ + 'ordering': ('rank', 'name'), + }, + ), + migrations.AddField( + model_name='map', + name='tilelayer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='maps', to='umap.TileLayer', verbose_name='background'), + ), + migrations.AddField( + model_name='datalayer', + name='map', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='umap.Map'), + ), + ] diff --git a/umap/migrations/0002_add_licence.py b/umap/migrations/0002_add_licence.py deleted file mode 100644 index 3edfb73d..00000000 --- a/umap/migrations/0002_add_licence.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.3 on 2016-11-26 16:11 -from __future__ import unicode_literals - -from django.db import migrations - - -def add_licence(apps, *args): - Licence = apps.get_model('leaflet_storage', 'Licence') - if Licence.objects.count(): - return - Licence( - name='ODbL', - details='http://opendatacommons.org/licenses/odbl/').save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('umap', '0001_add_tilelayer'), - ] - - operations = [ - migrations.RunPython(add_licence), - ] diff --git a/umap/migrations/0002_tilelayer_tms.py b/umap/migrations/0002_tilelayer_tms.py new file mode 100644 index 00000000..9b966815 --- /dev/null +++ b/umap/migrations/0002_tilelayer_tms.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.5 on 2018-05-19 09:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('umap', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='tilelayer', + name='tms', + field=models.BooleanField(default=False), + ), + ] diff --git a/umap/models.py b/umap/models.py new file mode 100644 index 00000000..0f7e8f16 --- /dev/null +++ b/umap/models.py @@ -0,0 +1,356 @@ +import os +import time + +from django.contrib.gis.db import models +from django.conf import settings +from django.urls import reverse +from django.utils.translation import ugettext_lazy as _ +from django.core.signing import Signer +from django.contrib import messages +from django.template.defaultfilters import slugify +from django.core.files.base import File + +from .fields import DictField +from .managers import PublicManager + + +class NamedModel(models.Model): + name = models.CharField(max_length=200, verbose_name=_("name")) + + class Meta: + abstract = True + ordering = ('name', ) + + def __unicode__(self): + return self.name + + def __str__(self): + return self.name + + +def get_default_licence(): + """ + Returns a default Licence, creates it if it doesn't exist. + Needed to prevent a licence deletion from deleting all the linked + maps. + """ + return Licence.objects.get_or_create( + # can't use ugettext_lazy for database storage, see #13965 + name=getattr(settings, "UMAP_DEFAULT_LICENCE_NAME", + 'No licence set') + )[0] + + +class Licence(NamedModel): + """ + The licence one map is published on. + """ + details = models.URLField( + verbose_name=_('details'), + help_text=_('Link to a page where the licence is detailed.') + ) + + @property + def json(self): + return { + 'name': self.name, + 'url': self.details + } + + +class TileLayer(NamedModel): + url_template = models.CharField( + max_length=200, + help_text=_("URL template using OSM tile format") + ) + minZoom = models.IntegerField(default=0) + maxZoom = models.IntegerField(default=18) + attribution = models.CharField(max_length=300) + rank = models.SmallIntegerField( + blank=True, + null=True, + help_text=_('Order of the tilelayers in the edit box') + ) + # See https://wiki.openstreetmap.org/wiki/TMS#The_Y_coordinate + tms = models.BooleanField(default=False) + + @property + def json(self): + return dict((field.name, getattr(self, field.name)) + for field in self._meta.fields) + + @classmethod + def get_default(cls): + """ + Returns the default tile layer (used for a map when no layer is set). + """ + return cls.objects.order_by('rank')[0] # FIXME, make it administrable + + @classmethod + def get_list(cls, selected=None): + l = [] + for t in cls.objects.all(): + fields = t.json + if selected and selected.pk == t.pk: + fields['selected'] = True + l.append(fields) + return l + + class Meta: + ordering = ('rank', 'name', ) + + +class Map(NamedModel): + """ + A single thematical map. + """ + ANONYMOUS = 1 + EDITORS = 2 + OWNER = 3 + PUBLIC = 1 + OPEN = 2 + PRIVATE = 3 + EDIT_STATUS = ( + (ANONYMOUS, _('Everyone can edit')), + (EDITORS, _('Only editors can edit')), + (OWNER, _('Only owner can edit')), + ) + SHARE_STATUS = ( + (PUBLIC, _('everyone (public)')), + (OPEN, _('anyone with link')), + (PRIVATE, _('editors only')), + ) + slug = models.SlugField(db_index=True) + description = models.TextField(blank=True, null=True, verbose_name=_("description")) + center = models.PointField(geography=True, verbose_name=_("center")) + zoom = models.IntegerField(default=7, verbose_name=_("zoom")) + locate = models.BooleanField(default=False, verbose_name=_("locate"), help_text=_("Locate user on load?")) + licence = models.ForeignKey( + Licence, + help_text=_("Choose the map licence."), + verbose_name=_('licence'), + on_delete=models.SET_DEFAULT, + default=get_default_licence + ) + modified_at = models.DateTimeField(auto_now=True) + tilelayer = models.ForeignKey(TileLayer, blank=True, null=True, related_name="maps", verbose_name=_("background"), on_delete=models.PROTECT) + owner = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, related_name="owned_maps", verbose_name=_("owner"), on_delete=models.PROTECT) + editors = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, verbose_name=_("editors")) + edit_status = models.SmallIntegerField(choices=EDIT_STATUS, default=OWNER, verbose_name=_("edit status")) + share_status = models.SmallIntegerField(choices=SHARE_STATUS, default=PUBLIC, verbose_name=_("share status")) + settings = DictField(blank=True, null=True, verbose_name=_("settings")) + + objects = models.Manager() + public = PublicManager() + + def get_absolute_url(self): + return reverse("map", kwargs={'slug': self.slug or "map", 'pk': self.pk}) + + def get_anonymous_edit_url(self): + signer = Signer() + signature = signer.sign(self.pk) + return reverse('map_anonymous_edit_url', kwargs={'signature': signature}) + + def is_anonymous_owner(self, request): + if self.owner: + # edit cookies are only valid while map hasn't owner + return False + key, value = self.signed_cookie_elements + try: + has_anonymous_cookie = int(request.get_signed_cookie(key, False)) == value + except ValueError: + has_anonymous_cookie = False + return has_anonymous_cookie + + def can_edit(self, user=None, request=None): + """ + Define if a user can edit or not the instance, according to his account + or the request. + """ + can = False + if request and not self.owner: + if (getattr(settings, "UMAP_ALLOW_ANONYMOUS", False) + and self.is_anonymous_owner(request)): + can = True + if user and user.is_authenticated: + # TODO: only when using the anonymous-edit URL with an + # authenticated user + # if user is authenticated, attach as owner + self.owner = user + self.save() + msg = _("Your anonymous map has been attached to your account %s" % user) + messages.info(request, msg) + if self.edit_status == self.ANONYMOUS: + can = True + elif not user.is_authenticated: + pass + elif user == self.owner: + can = True + elif self.edit_status == self.EDITORS and user in self.editors.all(): + can = True + return can + + def can_view(self, request): + if self.owner is None: + can = True + elif self.share_status in [self.PUBLIC, self.OPEN]: + can = True + elif request.user == self.owner: + can = True + else: + can = not (self.share_status == self.PRIVATE and request.user not in self.editors.all()) + return can + + @property + def signed_cookie_elements(self): + return ('anonymous_owner|%s' % self.pk, self.pk) + + def get_tilelayer(self): + return self.tilelayer or TileLayer.get_default() + + def clone(self, **kwargs): + new = self.__class__.objects.get(pk=self.pk) + new.pk = None + new.name = u"%s %s" % (_("Clone of"), self.name) + if "owner" in kwargs: + # can be None in case of anonymous cloning + new.owner = kwargs["owner"] + new.save() + for editor in self.editors.all(): + new.editors.add(editor) + for datalayer in self.datalayer_set.all(): + datalayer.clone(map_inst=new) + return new + + +class Pictogram(NamedModel): + """ + An image added to an icon of the map. + """ + attribution = models.CharField(max_length=300) + pictogram = models.ImageField(upload_to="pictogram") + + @property + def json(self): + return { + "id": self.pk, + "attribution": self.attribution, + "name": self.name, + "src": self.pictogram.url + } + + +# Must be out of Datalayer for Django migration to run, because of python 2 +# serialize limitations. +def upload_to(instance, filename): + if instance.pk: + return instance.upload_to() + name = "%s.geojson" % slugify(instance.name)[:50] or "untitled" + return os.path.join(instance.storage_root(), name) + + +class DataLayer(NamedModel): + """ + Layer to store Features in. + """ + map = models.ForeignKey(Map, on_delete=models.CASCADE) + description = models.TextField( + blank=True, + null=True, + verbose_name=_("description") + ) + geojson = models.FileField(upload_to=upload_to, blank=True, null=True) + display_on_load = models.BooleanField( + default=False, + verbose_name=_("display on load"), + help_text=_("Display this layer on load.") + ) + rank = models.SmallIntegerField(default=0) + + class Meta: + ordering = ('rank',) + + def save(self, force_insert=False, force_update=False, **kwargs): + is_new = not bool(self.pk) + super(DataLayer, self).save(force_insert, force_update, **kwargs) + + if is_new: + force_insert, force_update = False, True + filename = self.upload_to() + old_name = self.geojson.name + new_name = self.geojson.storage.save(filename, self.geojson) + self.geojson.storage.delete(old_name) + self.geojson.name = new_name + super(DataLayer, self).save(force_insert, force_update, **kwargs) + self.purge_old_versions() + + def upload_to(self): + root = self.storage_root() + name = '%s_%s.geojson' % (self.pk, int(time.time() * 1000)) + return os.path.join(root, name) + + def storage_root(self): + path = ["datalayer", str(self.map.pk)[-1]] + if len(str(self.map.pk)) > 1: + path.append(str(self.map.pk)[-2]) + path.append(str(self.map.pk)) + return os.path.join(*path) + + @property + def metadata(self): + return { + "name": self.name, + "id": self.pk, + "displayOnLoad": self.display_on_load + } + + def clone(self, map_inst=None): + new = self.__class__.objects.get(pk=self.pk) + new.pk = None + if map_inst: + new.map = map_inst + new.geojson = File(new.geojson.file.file) + new.save() + return new + + def is_valid_version(self, name): + return name.startswith('%s_' % self.pk) and name.endswith('.geojson') + + def version_metadata(self, name): + els = name.split('.')[0].split('_') + return { + "name": name, + "at": els[1], + "size": self.geojson.storage.size(self.get_version_path(name)) + } + + def get_versions(self): + root = self.storage_root() + names = self.geojson.storage.listdir(root)[1] + names = [name for name in names if self.is_valid_version(name)] + names.sort(reverse=True) # Recent first. + return names + + @property + def versions(self): + names = self.get_versions() + return [self.version_metadata(name) for name in names] + + def get_version(self, name): + path = self.get_version_path(name) + with self.geojson.storage.open(path, 'r') as f: + return f.read() + + def get_version_path(self, name): + return '{root}/{name}'.format(root=self.storage_root(), name=name) + + def purge_old_versions(self): + root = self.storage_root() + names = self.get_versions()[settings.UMAP_KEEP_VERSIONS:] + for name in names: + for ext in ['', '.gz']: + path = os.path.join(root, name + ext) + try: + self.geojson.storage.delete(path) + except FileNotFoundError: + pass diff --git a/umap/settings/__init__.py b/umap/settings/__init__.py index 000bffd2..d58058b8 100644 --- a/umap/settings/__init__.py +++ b/umap/settings/__init__.py @@ -35,4 +35,14 @@ else: print('Loaded local config from', path) for key in dir(d): if key.isupper(): - globals()[key] = getattr(d, key) + value = getattr(d, key) + if key.startswith('LEAFLET_STORAGE'): + # Retrocompat pre 1.0, remove me in 1.1. + globals()['UMAP' + key[15:]] = value + elif key == 'UMAP_CUSTOM_TEMPLATES': + globals()['TEMPLATES'][0]['DIRS'].insert(0, value) + elif key == 'UMAP_CUSTOM_STATICS': + globals()['STATICFILES_DIRS'].insert(0, value) + print(globals()['STATICFILES_DIRS']) + else: + globals()[key] = value diff --git a/umap/settings/base.py b/umap/settings/base.py index 9c9c1166..23a93bc3 100644 --- a/umap/settings/base.py +++ b/umap/settings/base.py @@ -1,17 +1,31 @@ -# -*- coding:utf-8 -*- - """Base settings shared by all environments""" # Import global settings to make it easier to extend settings. from django.conf.global_settings import * # pylint: disable=W0614,W0401 from django.template.defaultfilters import slugify +from django.conf.locale import LANG_INFO -#============================================================================== +# ============================================================================= # Generic Django project settings -#============================================================================== +# ============================================================================= DEBUG = True SITE_ID = 1 +# Add languages we're missing from Django +LANG_INFO.update({ + 'am-et': { + 'bidi': False, + 'name': 'Amharic', + 'code': 'am-et', + 'name_local': 'አማርኛ' + }, + 'zh': { + 'bidi': False, + 'code': 'zh', + 'name': 'Chinese', + 'name_local': '简体中文', + }, +}) # Local time zone for this installation. Choices can be found here: # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name TIME_ZONE = 'UTC' @@ -20,27 +34,32 @@ USE_I18N = True USE_L10N = True LANGUAGE_CODE = 'en' LANGUAGES = ( + ('am-et', 'Amharic'), + ('bg', 'Bulgarian'), + ('ca', 'Catalan'), + ('cs-cz', 'Czech'), + ('da', 'Danish'), + ('de', 'Deutsch'), + ('el', 'Greek'), ('en', 'English'), - ('fr', u'Francais'), - ('it', u'Italiano'), - ('pt', u'Portuguese'), - ('nl', u'Dutch'), - ('es', u'Español'), - ('fi', u'Finnish'), - ('de', u'Deutsch'), - ('da', u'Danish'), - ('ja', u'Japanese'), - ('lt', u'Lithuanian'), - ('cs-cz', u'Czech'), - ('ca', u'Catalan'), - ('zh', u'Chinese'), - ('zh-tw', u'Chinese'), - ('ru', u'Russian'), - ('bg', u'Bulgarian'), - ('vi', u'Vietnamese'), - ('uk-ua', u'Ukrainian'), - ('am-et', u'Amharic'), + ('es', 'Español'), + ('fi', 'Finnish'), + ('fr', 'Francais'), + ('hr', 'Croatian'), + ('hu', 'Hungarian'), + ('it', 'Italiano'), + ('ja', 'Japanese'), + ('lt', 'Lithuanian'), + ('nl', 'Dutch'), + ('pl', 'Polish'), + ('pt', 'Portuguese'), + ('ru', 'Russian'), ('sk-sk', 'Slovak'), + ('sl', 'Slovenian'), + ('uk-ua', 'Ukrainian'), + ('vi', 'Vietnamese'), + ('zh', 'Chinese'), + ('zh-tw', 'Chinese'), ) # Make this unique, and don't share it with anybody. @@ -56,10 +75,10 @@ INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.gis', - 'leaflet_storage', 'umap', 'compressor', 'social_django', + 'agnocomplete', ) # ============================================================================= @@ -88,14 +107,8 @@ MEDIA_URL = '/uploads/' STATIC_ROOT = os.path.join('static') MEDIA_ROOT = os.path.join('uploads') - -STATICFILES_DIRS = ( - os.path.join(PROJECT_DIR, 'static'), -) - STATICFILES_FINDERS = [ 'compressor.finders.CompressorFinder', - # 'npm.finders.NpmFinder', ] + STATICFILES_FINDERS # ============================================================================= @@ -132,7 +145,7 @@ TEMPLATES = [ # Middleware # ============================================================================= -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', @@ -141,30 +154,28 @@ MIDDLEWARE_CLASSES = ( 'django.contrib.messages.middleware.MessageMiddleware', ) + # ============================================================================= # Auth / security # ============================================================================= ENABLE_ACCOUNT_LOGIN = False -AUTHENTICATION_BACKENDS += ( -) # ============================================================================= # Miscellaneous project settings # ============================================================================= -LEAFLET_STORAGE_ALLOW_ANONYMOUS = False -LEAFLET_STORAGE_EXTRA_URLS = { +UMAP_ALLOW_ANONYMOUS = False +UMAP_EXTRA_URLS = { 'routing': 'http://www.openstreetmap.org/directions?engine=osrm_car&route={lat},{lng}&locale={locale}#map={zoom}/{lat}/{lng}', # noqa 'ajax_proxy': '/ajax-proxy/?url={url}' } -LEAFLET_STORAGE_KEEP_VERSIONS = 10 +UMAP_KEEP_VERSIONS = 10 SITE_URL = "http://umap.org" SITE_NAME = 'uMap' UMAP_DEMO_SITE = False UMAP_EXCLUDE_DEFAULT_MAPS = False UMAP_MAPS_PER_PAGE = 5 UMAP_MAPS_PER_PAGE_OWNER = 10 -MAP_SHORT_URL_NAME = "umap_short_url" UMAP_USE_UNACCENT = False UMAP_FEEDBACK_LINK = "https://wiki.openstreetmap.org/wiki/UMap#Feedback_and_help" # noqa USER_MAPS_URL = 'user_maps' diff --git a/umap/settings/local.py.sample b/umap/settings/local.py.sample index 3af92754..6404bf80 100644 --- a/umap/settings/local.py.sample +++ b/umap/settings/local.py.sample @@ -69,7 +69,7 @@ SOCIAL_AUTH_BACKEND_ERROR_URL = "/" UMAP_DEMO_SITE = True # Whether to allow non authenticated people to create maps. -LEAFLET_STORAGE_ALLOW_ANONYMOUS = True +UMAP_ALLOW_ANONYMOUS = True # This setting will exclude empty maps (in fact, it will exclude all maps where # the default center has not been updated) @@ -110,4 +110,4 @@ LEAFLET_LATITUDE = 51 LEAFLET_ZOOM = 6 # Number of old version to keep per datalayer. -LEAFLET_STORAGE_KEEP_VERSIONS = 10 +UMAP_KEEP_VERSIONS = 10 diff --git a/umap/static/umap/base.css b/umap/static/umap/base.css new file mode 100644 index 00000000..db9f033f --- /dev/null +++ b/umap/static/umap/base.css @@ -0,0 +1,813 @@ +/* +* Generic +*/ +body, div, ul, ol, li, a, section, nav, +h1, h2, h3, h4, h5, h6, label, +hr, input, textarea { + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing: border-box; + margin: 0; + padding: 0; + font-family: "fira_sans", -apple-system, BlinkMacSystemFont, + "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", + "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} +body, div, ul, ol, li, a, section, nav, +h1, h2, h3, h4, h5, h6, label, hr { + padding: 0; +} +a { + text-decoration: none; + color: SeaGreen; +} +hr { + clear: both; + width: 100%; + height: 0; + max-width: 980px; + margin: 28px auto; + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + border-color: #ddd; + border-image: none; + border-style: solid; + border-width: 1px 0 0; +} +h1, h2 { + margin-bottom: 28px; +} +h3, h4, h5 { + margin-bottom: 14px; +} +p { + line-height: 21px; + margin-top: 14px; + margin-bottom: 14px; +} + +/* +* List +*/ +ul { + list-style-image:none; + list-style-position:inside; + list-style-type:none; +} + +/* ************************************************* */ +/* *********************** GRID ******************** */ +/* ************************************************* */ +.wrapper { + width: 100%; + clear: both; +} +.wrapper:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; +} +.row { + width: 100%; + max-width: 1200px; + clear: both; + margin-left: auto; + margin-right: auto; + margin-top: 0; + margin-bottom: 2rem; +} +.col { + float: left; +} +.right { + float: right; +} +.col + .col { + padding-left: 20px; +} +.half { + width: 50%; +} +.third { + width: 33.33%; +} +.two-third { + width: 66.66% +} +.quarter { + width: 25%; +} +.wide { + width: 100%; +} +.col + .wide { + padding-left: inherit; +} +.mshow, .tshow { + display: none; +} +.center { + margin-left: auto; + margin-right: auto; + float: none; +} + + +/* *********** */ +/* forms */ +/* *********** */ +input[type="text"], input[type="password"], input[type="date"], +input[type="datetime"], input[type="email"], input[type="number"], +input[type="search"], input[type="tel"], input[type="time"], +input[type="url"], textarea { + background-color: white; + border: 1px solid #CCCCCC; + border-radius: 2px 2px 2px 2px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; + color: rgba(0, 0, 0, 0.75); + display: block; + font-family: inherit; + font-size: 14px; + height: 32px; + margin: 0 0 14px; + padding: 7px; + width: 100%; +} +input[type="range"] { + margin-top: 10px; + margin-bottom: 5px; + width: 100%; +} +input[type="checkbox"] { + margin: 0 5px; + vertical-align: middle; +} +textarea { + height: inherit; + padding: 7px; +} +select { + width: 100%; + height: 28px; + line-height: 28px; + color: #efefef; + border: 1px solid #222; + background-color: #393F3F; + margin-top: 5px; +} +select[multiple="multiple"] { + height: auto; +} +.button, input[type="submit"] { + display: block; + margin-bottom: 14px; + text-align: center; + border-radius: 2px; + font-weight: normal; + cursor: pointer; + padding: 7px; + width: 100%; + min-height: 32px; + line-height: 32px; + border: none; + text-decoration: none; +} +.dark .button { + background-color: #2a2e30; + color: #eeeeec; + border: 1px solid #1b1f20; +} +.dark .button:hover, .dark input[type="submit"]:hover { + background-color: #2e3436; +} +.help-text, .helptext { + display: block; + padding: 7px 7px; + margin-bottom: 14px; + background: #393F3F; + color: #ddd; + font-size: 10px; + border-radius: 0 2px; +} +input + .help-text { + margin-top: -14px; +} +.formbox { + min-height: 36px; + line-height: 28px; + margin-bottom: 14px; +} +.formbox.with-switch { + padding-top: 2px; +} +.formbox select { + width: calc(100% - 14px); +} +label { + display: block; + font-size: 12px; + line-height: 21px; + width: 100%; +} +input[type="checkbox"] + label { + display: inline; + padding: 0 14px; +} +select + .error, +input + .error { + display: block; + padding: 7px 7px; + margin-top: -14px; + margin-bottom: 14px; + background: #ddd; + color: #fff; + background-color: #cc0000; + font-size: 11px; + border-radius: 0 2px; +} +input[type="file"] + .error { + margin-top: 0; +} +.fieldset { + border: 1px solid #222; + margin-bottom: 5px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.fieldset .fields { + visibility: hidden; + opacity: 0; + transition: visibility 0s, opacity 0.5s linear; + height: 0; + overflow: hidden; +} +.fieldset.toggle.on .fields { + visibility: visible; + opacity: 1; + height: initial; + padding: 10px; +} +.fieldset.toggle .legend { + text-align: center; + display: block; + cursor: pointer; + background-color: #232729; + height: 30px; + line-height: 30px; + color: #fff; + margin: 0; + font-family: fira_sans; + font-weight: normal; + font-size: 1.2em; + padding: 0 5px; +} +/* Switch */ +input.switch:empty { + display: none; +} +input.switch:empty ~ label { + white-space: nowrap; + position: relative; + float: left; + line-height: 2em; + height: 2em; + text-indent: 6em; + margin: 0.2em 0; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.1); + width: 80px; +} +input.switch:empty ~ label:before, +input.switch:empty ~ label:after { + position: absolute; + display: block; + top: 0; + bottom: 0; + left: 0; + content: ' '; + width: 6em; + -webkit-transition: all 100ms ease-in; + transition: all 100ms ease-in; + color: #c9c9c7; + font-weight: bold; + background-color: #ededed; +} +.dark input.switch:empty ~ label:before, +.dark input.switch:empty ~ label:after { + background-color: #272c2e; +} +input.switch:empty ~ label:after { + width: 3em; + margin-left: 0.1em; + background-color: #ededed; + content: "OFF"; + text-indent: 3.5em; + border: 1px solid #374E75; + font-weight: bold; +} +.dark input.switch:empty ~ label:after { + border: 1px solid #202425; + background-color: #2c3233; +} +input.switch:checked:empty ~ label:after { + content: ' '; +} +.dark input.switch:checked ~ label:before, +input.switch:checked ~ label:before { + background-color: #215d9c; + content: "ON"; + text-indent: 0.7em; + text-align: left; + font-weight: bold; +} +input.switch:checked ~ label:after { + margin-left: 3em; +} +.button-bar { + margin-top: 5px; + text-align: center; + display: grid; + grid-gap: 7px; + width: 100% +} +.button-bar.half { + grid-template-columns: 1fr 1fr; +} +.button-bar.third { + grid-template-columns: 1fr 1fr 1fr; +} +.button-bar .button { + display: inline-block; +} +.umap-multiplechoice input[type='radio'] { + display: none; +} +.umap-multiplechoice label { + border: 1px solid #374E75; + cursor: pointer; + background-color: #c9c9c7; + height: 30px; + line-height: 30px; + text-align: center; + width: calc(100% / 3); + display: inline-block; +} +.umap-multiplechoice.by4 label { + width: calc(100% / 4); +} +.dark .umap-multiplechoice label { + border: 1px solid black; + background-color: #2c3233; +} +.umap-multiplechoice input[type='radio']:checked + label { + background-color: #215d9c; + box-shadow: inset 0 0 6px 0px #2c3233; + color: #ededed; +} +.inheritable .header, +.inheritable { + clear: both; + overflow: hidden; +} +.inheritable .header { + margin-bottom: 5px; +} +.inheritable .header label { + padding-top: 6px; +} +.inheritable + .inheritable { + border-top: 1px solid #222; + padding-top: 5px; + margin-top: 5px; +} +.inheritable .define, +.inheritable .undefine { + float: right; + width: initial; + min-height: 18px; + line-height: 18px; + margin-bottom: 0; +} +.inheritable .quick-actions { + float: right; +} +.inheritable .quick-actions .formbox { + margin-bottom: 0; +} +.inheritable .quick-actions input { + width: 100px; + margin-right: 5px; +} +.inheritable .define, +.inheritable.undefined .undefine, +.inheritable.undefined .show-on-defined { + display: none; +} +.inheritable.undefined .define { + display: block; +} +i.info { + background-repeat: no-repeat; + background-image: url('./img/16.png'); + background-position: -170px -50px; + display: inline-block; + margin-left: 5px; + vertical-align: middle; + width: 16px; + height: 18px; +} +.dark i.info { + background-image: url('./img/16-white.png'); +} +.with-transition { + /*transition: top .7s, right .7s, left .7s, width .7s, visibility .7s;*/ + transition: all .7s; +} + +.umap-delete:before, .umap-empty:before, .umap-to-polygon:before, +.umap-clone:before, .umap-edit:before, .umap-download:before, +.umap-to-polyline:before { + background-repeat: no-repeat; + text-indent: 38px; + height: 24px; + line-height: 24px; + display: inline-block; + background-image: url('./img/24.png'); + vertical-align: bottom; + content: " "; +} +.dark .umap-delete:before, .dark .umap-empty:before, +.dark .umap-to-polygon:before, +.dark .umap-clone:before, +.dark .umap-edit:before, .dark .umap-download:before, +.dark .umap-to-polyline:before { + background-image: url('./img/24-white.png'); + vertical-align: middle; +} +.umap-to-polygon:before { + background-position: -80px -48px; +} +.umap-to-polyline:before { + background-position: -120px -48px; +} +.umap-clone:before { + background-position: -160px -88px; +} +.umap-delete:before { + background-position: -40px -8px; +} +.umap-edit:before { + background-position: -6px -6px; +} +.umap-empty:before { + background-position: -160px -126px; +} +.umap-download:before { + background-position: -88px -168px; +} +.umap-edit-actions { + padding-top: 5px; + clear: both; +} +.umap-edit-actions li { + height: 36px; + line-height: 36px; + cursor: pointer; + margin-bottom: 5px; + border-radius: 2px; + border: 1px solid #222; +} +.umap-edit-actions li i { + background-image: url('./img/24-white.png'); + background-repeat: no-repeat; + display: table-cell; + width: 36px; + height: 36px; +} +.umap-edit-actions li span { + display: table-cell; + vertical-align: middle; +} +.umap-edit-actions li:hover { + background-color: #353c3e; +} +.umap-form-iconfield { + position: relative; + overflow: hidden; + padding-bottom: 5px; + padding-top: 5px; + line-height: 30px; +} +.umap-icon-list, .umap-pictogram-list { + clear: both; +} +.umap-icon-choice { + display: block; + float: left; + width: 30px; + height: 30px; + line-height: 30px; + position: relative; + cursor: pointer; + background-image: url('./img/icon-bg.png'); + text-align: center; + box-shadow: 0 0 4px 0 black inset; + margin-bottom: 5px; + margin-right: 5px; +} +.umap-icon-choice img { + vertical-align: middle; + max-width: 24px; +} +.umap-icon-choice:hover, +.umap-icon-choice.selected, +.umap-color-picker span:hover { + box-shadow: 0 0 4px 0 black; +} +.umap-icon-choice .leaflet-marker-icon { + bottom: 0; + left: 30px; + position: absolute; +} +.umap-color-picker { + clear: both; + margin-bottom: 20px; + overflow: hidden; + display: none; +} +.umap-color-picker span { + width: 20px; + height: 20px; + display: block; + padding: 0; + margin: 0; + cursor: pointer; + float: left; +} + + +/* *********** */ +/* Panel */ +/* *********** */ +.leaflet-ui-container { + overflow-x: hidden; +} +#umap-ui-container { + width: 400px; + position: fixed; + top: 0; + bottom: 0; + right: -400px; + padding: 0 20px 40px 20px; + border-left: 1px solid #ddd; + overflow-x: auto; + z-index: 1010; + background-color: #fff; + opacity: 0.98; + cursor: initial; +} +#umap-ui-container.dark { + border-left: 1px solid #222; + background-color: #323737; + color: #efefef; +} +#umap-ui-container.fullwidth { + width: 100%; + z-index: 10000; + padding-left: 0; + padding-right: 0; + transition: all .7s; +} +.umap-edit-enabled #umap-ui-container { + top: 46px; +} +.umap-caption-bar-enabled #umap-ui-container { + bottom: 46px; +} +.umap-ui #umap-ui-container { + right: 0; +} +.leaflet-top, +.leaflet-right { + transition: all .7s; +} +.umap-ui .leaflet-right { + right: 400px; +} +#umap-ui-container, +#umap-alert-container, +#umap-tooltip-container { + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing: border-box; +} +#umap-ui-container .umap-popup-content img { + /* See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847 */ + max-width: 99% !important; +} +#umap-ui-container .umap-popup-content { + max-height: inherit; +} +#umap-ui-container .body { + clear: both; + height: calc(100% - 46px); /* Minus size of toolbox */ +} +#umap-ui-container .toolbox { + padding: 5px 0; + overflow: hidden; +} +#umap-ui-container .toolbox li { + color: #2e3436; + line-height: 32px; + cursor: pointer; + float: right; + display: inline; + padding: 0 7px; + border: 1px solid #b6b6b3; + border-radius: 2px; +} +#umap-ui-container.dark .toolbox li { + color: #d3dfeb; + border: 1px solid #202425; +} +#umap-ui-container .toolbox li:hover { + color: #2e3436; + background-color: #d4d4d2; +} +#umap-ui-container.dark .toolbox li:hover { + color: #eeeeec; + background-color: #353c3e; +} +#umap-ui-container .toolbox li + li { + margin-right: 5px; + margin-left: 5px; +} +.dark input, .dark textarea { + background-color: #232729; + border-color: #1b1f20; + /*box-shadow: inset 0 0 0 1px #215d9c;*/ + color: #efefef; +} + +/* *********** */ +/* Alerts */ +/* *********** */ +#umap-alert-container { + min-height: 46px; + line-height: 46px; + padding-left: 10px; + width: calc(100% - 500px); + position: absolute; + top: -46px; + left: 250px; /* Keep save/cancel button accessible. */ + right: 250px; + box-shadow: 0 1px 7px #999999; + visibility: hidden; + background: none repeat scroll 0 0 rgba(20, 22, 23, 0.8); + font-weight: bold; + color: #fff; + font-size: 0.8em; + z-index: 1002; + border-radius: 2px; +} +#umap-alert-container.error { + background-color: #c60f13; +} +.umap-alert #umap-alert-container { + visibility: visible; + top: 23px; +} +.umap-alert .umap-action { + margin-left: 10px; + background-color: #fff; + color: #999; + padding: 5px; + border-radius: 4px; +} +.umap-alert .umap-action:hover { + color: #000; +} +.umap-alert .error .umap-action { + background-color: #666; + color: #eee; +} +.umap-alert .error .umap-action:hover { + color: #fff; +} + +/* *********** */ +/* Tooltip */ +/* *********** */ +#umap-tooltip-container { + line-height: 20px; + padding: 5px 10px; + width: auto; + position: absolute; + box-shadow: 0 1px 7px #999999; + display: none; + background-color: rgba(40, 40, 40, 0.8); + color: #eeeeec; + font-size: 0.8em; + border-radius: 2px; + z-index: 1004; + font-weight: normal; + max-width: 300px; +} +.umap-tooltip #umap-tooltip-container { + display: block; +} +#umap-tooltip-container.tooltip-top:after { + top: 100%; + left: calc(50% - 11px); + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-top-color: rgba(30, 30, 30, 0.8); + border-width: 11px; + margin-left: calc(-50% + 21px); +} +#umap-tooltip-container.tooltip.tooltip-left:after { + left: 100%; + top: 50%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-color: rgba(136, 183, 213, 0); + border-left-color: #333; + border-width: 11px; + margin-top: -10px; +} + + + +/* *********** */ +/* Close link */ +/* *********** */ +.umap-close-icon { + background-repeat: no-repeat; + background-image: url('./img/16.png'); + background-position: -52px -13px; + display: inline; + padding: 0 10px; + vertical-align: middle; +} +.dark .umap-close-icon { + background-image: url('./img/16-white.png'); +} +.dark .umap-close-link { + border: 1px solid #202425; + color: #eeeeec; + padding: 0 7px; + line-height: 32px; + background-color: #323737; +} +.dark .umap-close-link:hover { + background-color: #2e3436; +} +.umap-alert .umap-close-link { + color: #fff; + float: right; + padding-right: 10px; +} +.umap-alert .umap-close-icon { + background-position: -128px -90px; +} + + +/* *********** */ +/* Mobile */ +/* *********** */ +@media all and (orientation:portrait) { + .umap-ui #umap-ui-container { + height: 50%; + max-height: 400px; + width: 100%; + top: inherit!important; + bottom: 0; + right: 0; + left: 0; + } + .umap-ui .leaflet-right { + right: 0; + } + #umap-alert-container { + width: 100%; + left: 0; + right: 0; + } +} diff --git a/umap/static/umap/umap.css b/umap/static/umap/content.css similarity index 56% rename from umap/static/umap/umap.css rename to umap/static/umap/content.css index 25332167..41734935 100644 --- a/umap/static/umap/umap.css +++ b/umap/static/umap/content.css @@ -1,164 +1,6 @@ -/* ************************************************* */ -/* *********************** FONT ******************** */ -/* ************************************************* */ - - -@font-face { - font-family: 'fira_sans'; - src: url('./font/FiraSans-Light.woff2') format('woff2'), - url('./font/FiraSans-Light.woff') format('woff'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'fira_sans'; - src: url('./font/FiraSans-SemiBold.woff2') format('woff2'), - url('./font/FiraSans-SemiBold.woff') format('woff'); - font-weight: bold; - font-style: normal; -} - -@font-face { - font-family: 'fira_sans'; - src: url('./font/FiraSans-LightItalic.woff2') format('woff2'), - url('./font/FiraSans-LightItalic.woff') format('woff'); - font-weight: normal; - font-style: italic; -} - - -/* -* Generic -*/ -body, div, ul, ol, li, a, section, nav, -h1, h2, h3, h4, h5, h6, label, -hr, input, textarea { - -moz-box-sizing:border-box; - -webkit-box-sizing:border-box; - box-sizing: border-box; - margin: 0; - font-family: "fira_sans", -apple-system, BlinkMacSystemFont, - "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", - "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; -} -body, div, ul, ol, li, a, section, nav, -h1, h2, h3, h4, h5, h6, label, hr { - padding: 0; -} -a { - text-decoration: none; - color: SeaGreen; -} -hr { - clear: both; - width: 100%; - height: 0; - max-width: 980px; - margin: 28px auto; - -moz-border-bottom-colors: none; - -moz-border-left-colors: none; - -moz-border-right-colors: none; - -moz-border-top-colors: none; - border-color: #ddd; - border-image: none; - border-style: solid; - border-width: 1px 0 0; -} -h1, h2 { - margin-bottom: 28px; -} -h3, h4, h5 { - margin-bottom: 14px; -} -p { - line-height: 21px; - margin-top: 14px; - margin-bottom: 14px; -} - -/* -* List -*/ -ul { - list-style-image:none; - list-style-position:inside; - list-style-type:none; -} - -/* ************************************************* */ -/* *********************** GRID ******************** */ -/* ************************************************* */ -.wrapper { - width: 100%; - clear: both; -} -.wrapper:after { - visibility: hidden; - display: block; - font-size: 0; - content: " "; - clear: both; - height: 0; -} -.row { - width: 100%; - max-width: 1200px; - clear: both; - margin-left: auto; - margin-right: auto; - margin-top: 0; - margin-bottom: 2rem; -} -.col { - float: left; -} -.right { - float: right; -} -.col + .col { - padding-left: 20px; -} -.half { - width: 50%; -} -.third { - width: 33.33%; -} -.two-third { - width: 66.66% -} -.quarter { - width: 25%; -} -.wide { - width: 100%; -} -.col + .wide { - padding-left: inherit; -} -.mshow, .tshow { - display: none; -} -.center { - margin-left: auto; - margin-right: auto; - float: none; -} - /* * Content */ -.tintbox, .tintbox a { - font-family: serif; -} -.tintbox { - background-color: #f2f2f2; - padding: 28px; -} -.tintbox p { - color: #6f6f6f; -} body.content { width: 100%; height: 100%; @@ -166,23 +8,6 @@ body.content { } -/* - Foundation use a position:relative; on body, which break the 100% rule - on #map -*/ -body.map_detail { - width: 100%; - height: 100%; - position: inherit; -} - -/* Global alert */ -.alert-box.global { - z-index: 1001; - margin-right: auto; - margin-left: auto; -} - /* Search form */ input::-webkit-input-placeholder, ::-webkit-input-placeholder { color: #a5a5a5; @@ -192,19 +17,19 @@ input:-moz-placeholder, :-moz-placeholder { color: #a5a5a5; } -#storage-ui-container textarea { +#umap-ui-container textarea { height: 100px; margin-bottom: 14px; } -#storage-ui-container select { +#umap-ui-container select { margin-bottom: 10px; } -#storage-ui-container.warning .button { +#umap-ui-container.warning .button { background-color: #c60f13; border: 1px solid #7f0a0c; } -#storage-ui-container.warning .button:hover { +#umap-ui-container.warning .button:hover { background-color: #970b0e; } @@ -241,34 +66,6 @@ input:-moz-placeholder, :-moz-placeholder { background-image: url("./openstreetmap.png"); } -/* -* Navigation -*/ -header { - margin: 14px 0; -} - -footer { - height: 140px; - margin-top: 40px; - background-color: #2E3641; - text-align: center; - line-height: 140px; - color: #8F96A3; -} -footer a.branding { - background-image: url("./img/logo_filigree.png"); - background-position: left center; - background-repeat: no-repeat; - background-size: 60px auto; - font-size: 30px; - font-weight: bold; - height: 140px; - padding-left: 70px; - color: #8F96A3; - display: inline-block; -} - /* **************************** */ /* home */ @@ -346,21 +143,6 @@ h2.section { display: inline-block; height: 128px; } -.button-bar { - text-align: center; -} -.button-bar .button { - display: inline-block; -} -.button-bar .button + .button { - margin-left: 14px; -} -.button-bar .button.half { - width: calc(50% - 7px); -} -.button-bar .button.third { - width: calc(100% / 3 - 10px); -} .demo-instance-warning { background-color: #c0392b; color: #efefef; @@ -374,6 +156,9 @@ h2.section { color: #efefef; text-decoration: underline; } +body.content #umap-ui-container { + background-color: #fff; +} /* **************************** */ @@ -479,21 +264,9 @@ ul.umap-autocomplete { /* **************************** */ /* Override Leaflet.Storage */ /* **************************** */ -body.content #storage-ui-container { -/* width: 100%; - top: 0; - right: 0; - left: 0; - bottom: inherit; - height: 30%;*/ - background-color: #fff; -} #id_editors + br + span.helptext { display: none; } -.storage-loader { - background-color: #79c1c0 !important; -} .leaflet-container a.button { color: #eeeeec; } diff --git a/umap/static/umap/font.css b/umap/static/umap/font.css new file mode 100644 index 00000000..5a7dbd05 --- /dev/null +++ b/umap/static/umap/font.css @@ -0,0 +1,30 @@ +/* ************************************************* */ +/* *********************** FONT ******************** */ +/* ************************************************* */ + + +@font-face { + font-family: 'fira_sans'; + src: url('./font/FiraSans-Light.woff2') format('woff2'), + url('./font/FiraSans-Light.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'fira_sans'; + src: url('./font/FiraSans-SemiBold.woff2') format('woff2'), + url('./font/FiraSans-SemiBold.woff') format('woff'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'fira_sans'; + src: url('./font/FiraSans-LightItalic.woff2') format('woff2'), + url('./font/FiraSans-LightItalic.woff') format('woff'); + font-weight: normal; + font-style: italic; +} + + diff --git a/umap/static/umap/img/16-white.png b/umap/static/umap/img/16-white.png new file mode 100644 index 00000000..afdd15aa Binary files /dev/null and b/umap/static/umap/img/16-white.png differ diff --git a/umap/static/umap/img/16-white.svg b/umap/static/umap/img/16-white.svg new file mode 100644 index 00000000..85b6a576 --- /dev/null +++ b/umap/static/umap/img/16-white.svg @@ -0,0 +1,718 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/umap/static/umap/img/16.png b/umap/static/umap/img/16.png new file mode 100644 index 00000000..5aa09823 Binary files /dev/null and b/umap/static/umap/img/16.png differ diff --git a/umap/static/umap/img/16.svg b/umap/static/umap/img/16.svg new file mode 100644 index 00000000..f103cb96 --- /dev/null +++ b/umap/static/umap/img/16.svg @@ -0,0 +1,681 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/umap/static/umap/img/24-white.png b/umap/static/umap/img/24-white.png new file mode 100644 index 00000000..95edf1d6 Binary files /dev/null and b/umap/static/umap/img/24-white.png differ diff --git a/umap/static/umap/img/24-white.svg b/umap/static/umap/img/24-white.svg new file mode 100644 index 00000000..28c7fc4d --- /dev/null +++ b/umap/static/umap/img/24-white.svg @@ -0,0 +1,475 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + +   + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/umap/static/umap/img/24.png b/umap/static/umap/img/24.png new file mode 100644 index 00000000..bfac46be Binary files /dev/null and b/umap/static/umap/img/24.png differ diff --git a/umap/static/umap/img/24.svg b/umap/static/umap/img/24.svg new file mode 100644 index 00000000..083830c9 --- /dev/null +++ b/umap/static/umap/img/24.svg @@ -0,0 +1,461 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/umap/static/umap/img/edit-16.png b/umap/static/umap/img/edit-16.png new file mode 100644 index 00000000..bfe389cb Binary files /dev/null and b/umap/static/umap/img/edit-16.png differ diff --git a/umap/static/umap/img/icon-bg.png b/umap/static/umap/img/icon-bg.png new file mode 100644 index 00000000..1f7144b3 Binary files /dev/null and b/umap/static/umap/img/icon-bg.png differ diff --git a/umap/static/umap/img/marker.png b/umap/static/umap/img/marker.png new file mode 100644 index 00000000..3119b806 Binary files /dev/null and b/umap/static/umap/img/marker.png differ diff --git a/umap/static/umap/img/search.gif b/umap/static/umap/img/search.gif new file mode 100644 index 00000000..c2bf64c0 Binary files /dev/null and b/umap/static/umap/img/search.gif differ diff --git a/umap/static/umap/js/autocomplete.js b/umap/static/umap/js/umap.autocomplete.js similarity index 65% rename from umap/static/umap/js/autocomplete.js rename to umap/static/umap/js/umap.autocomplete.js index 44cafc05..0e180ef7 100644 --- a/umap/static/umap/js/autocomplete.js +++ b/umap/static/umap/js/umap.autocomplete.js @@ -1,4 +1,4 @@ -L.S.AutoComplete = L.Class.extend({ +L.U.AutoComplete = L.Class.extend({ options: { placeholder: 'Start typing...', @@ -12,8 +12,10 @@ L.S.AutoComplete = L.Class.extend({ RESULTS: [], initialize: function (el, options) { - this.el = L.DomUtil.get(el); - L.setOptions(options); + this.el = el; + var ui = new L.U.UI(document.querySelector('header')); + this.xhr = new L.U.Xhr(ui); + L.setOptions(this, options); var CURRENT = null; try { Object.defineProperty(this, 'CURRENT', { @@ -37,9 +39,9 @@ L.S.AutoComplete = L.Class.extend({ this.input = L.DomUtil.element('input', { type: 'text', placeholder: this.options.placeholder, - autocomplete: 'off' - }); - L.DomUtil.before(this.el, this.input); + autocomplete: 'off', + className: this.options.className + }, this.el); L.DomEvent.on(this.input, 'keydown', this.onKeyDown, this); L.DomEvent.on(this.input, 'keyup', this.onKeyUp, this); L.DomEvent.on(this.input, 'blur', this.onBlur, this); @@ -62,22 +64,19 @@ L.S.AutoComplete = L.Class.extend({ onKeyDown: function (e) { switch (e.keyCode) { - case L.S.Keys.TAB: - if(this.CURRENT !== null) - { - this.setChoice(); - } + case L.U.Keys.TAB: + if(this.CURRENT !== null) this.setChoice(); L.DomEvent.stop(e); break; - case L.S.Keys.ENTER: + case L.U.Keys.ENTER: L.DomEvent.stop(e); this.setChoice(); break; - case L.S.Keys.ESC: + case L.U.Keys.ESC: L.DomEvent.stop(e); this.hide(); break; - case L.S.Keys.DOWN: + case L.U.Keys.DOWN: if(this.RESULTS.length > 0) { if(this.CURRENT !== null && this.CURRENT < this.RESULTS.length - 1) { // what if one resutl? this.CURRENT++; @@ -89,7 +88,7 @@ L.S.AutoComplete = L.Class.extend({ } } break; - case L.S.Keys.UP: + case L.U.Keys.UP: if(this.CURRENT !== null) { L.DomEvent.stop(e); } @@ -109,16 +108,16 @@ L.S.AutoComplete = L.Class.extend({ onKeyUp: function (e) { var special = [ - L.S.Keys.TAB, - L.S.Keys.ENTER, - L.S.Keys.LEFT, - L.S.Keys.RIGHT, - L.S.Keys.DOWN, - L.S.Keys.UP, - L.S.Keys.APPLE, - L.S.Keys.SHIFT, - L.S.Keys.ALT, - L.S.Keys.CTRL + L.U.Keys.TAB, + L.U.Keys.ENTER, + L.U.Keys.LEFT, + L.U.Keys.RIGHT, + L.U.Keys.DOWN, + L.U.Keys.UP, + L.U.Keys.APPLE, + L.U.Keys.SHIFT, + L.U.Keys.ALT, + L.U.Keys.CTRL ]; if (special.indexOf(e.keyCode) === -1) { @@ -149,8 +148,8 @@ L.S.AutoComplete = L.Class.extend({ setChoice: function (choice) { choice = choice || this.RESULTS[this.CURRENT]; if (choice) { - this.input.value = choice.display; - this.select(choice); + this.input.value = choice.item.label; + this.options.on_select(choice); this.displaySelected(choice); this.hide(); if (this.options.callback) { @@ -165,26 +164,18 @@ L.S.AutoComplete = L.Class.extend({ this.clear(); return; } - if(!val) { - this.clear(); - return; - } - if( val + '' === this.CACHE + '') { - return; - } - else { - this.CACHE = val; - } - var results = this._do_search(val); - return this.handleResults(results); + if( val + '' === this.CACHE + '') return; + else this.CACHE = val; + this._do_search(val, (data) => { + this.handleResults(data.data); + }); }, createResult: function (item) { var el = L.DomUtil.element('li', {}, this.container); - el.innerHTML = item.display; + el.innerHTML = item.label; var result = { - value: item.value, - display: item.display, + item: item, el: el }; L.DomEvent.on(el, 'mouseover', function () { @@ -223,12 +214,12 @@ L.S.AutoComplete = L.Class.extend({ highlight: function () { var self = this; - this.forEach(this.RESULTS, function (item, index) { + this.forEach(this.RESULTS, function (result, index) { if (index === self.CURRENT) { - L.DomUtil.addClass(item.el, 'on'); + L.DomUtil.addClass(result.el, 'on'); } else { - L.DomUtil.removeClass(item.el, 'on'); + L.DomUtil.removeClass(result.el, 'on'); } }); }, @@ -260,114 +251,69 @@ L.S.AutoComplete = L.Class.extend({ }); -L.S.AutoComplete.BaseSelect = L.S.AutoComplete.extend({ +L.U.AutoComplete.Ajax = L.U.AutoComplete.extend({ initialize: function (el, options) { - L.S.AutoComplete.prototype.initialize.call(this, el, options); + L.U.AutoComplete.prototype.initialize.call(this, el, options); if (!this.el) return this; - this.el.style.display = 'none'; this.createInput(); this.createContainer(); - this.initSelectedContainer(); + this.selected_container = this.initSelectedContainer(); }, optionToResult: function (option) { return { value: option.value, - display: option.innerHTML + label: option.innerHTML }; }, - _do_search: function (val) { - var results = [], - self = this, - count = 0; - val = val.toLowerCase(); - this.forEach(this.el, function (item) { - var candidate = item.innerHTML.toLowerCase(); - if (candidate === val || (candidate.indexOf(val) !== -1 && !item.selected && count < self.options.maxResults)) { - results.push(self.optionToResult(item)); - count++; - } - }); - return results; - }, - - select: function (option) { - this.forEach(this.el, function (item) { - if (item.value == option.value) { - item.selected = true; - } - }); - }, - - unselect: function (option) { - this.forEach(this.el, function (item) { - if (item.value == option.value) { - item.selected = false; - } - }); + _do_search: function (val, callback) { + val = val.toLowerCase(); + this.xhr.get('/agnocomplete/AutocompleteUser/?q=' + encodeURIComponent(val), {callback: callback}); } }); -L.S.AutoComplete.MultiSelect = L.S.AutoComplete.BaseSelect.extend({ +L.U.AutoComplete.Ajax.SelectMultiple = L.U.AutoComplete.Ajax.extend({ initSelectedContainer: function () { - this.selected_container = L.DomUtil.after(this.input, L.DomUtil.element('ul', {className: 'umap-multiresult'})); - var self = this; - this.forEach(this.el, function (option) { - if (option.selected) { - self.displaySelected(self.optionToResult(option)); - } - }); + return L.DomUtil.after(this.input, L.DomUtil.element('ul', {className: 'umap-multiresult'})); }, displaySelected: function (result) { var result_el = L.DomUtil.element('li', {}, this.selected_container); - result_el.innerHTML = result.display; + result_el.innerHTML = result.item.label; var close = L.DomUtil.element('span', {className: 'close'}, result_el); close.innerHTML = '×'; L.DomEvent.on(close, 'click', function () { this.selected_container.removeChild(result_el); - this.unselect(result); + this.options.on_unselect(result); }, this); this.hide(); } }); -L.S.AutoComplete.multiSelect = function (el, options) { - return new L.S.AutoComplete.MultiSelect(el, options); -}; - -L.S.AutoComplete.Select = L.S.AutoComplete.BaseSelect.extend({ +L.U.AutoComplete.Ajax.Select = L.U.AutoComplete.Ajax.extend({ initSelectedContainer: function () { - this.selected_container = L.DomUtil.after(this.input, L.DomUtil.element('div', {className: 'umap-singleresult'})); - var self = this; - if (this.el.selectedIndex !== -1 && this.el[this.el.selectedIndex].value !== '') { - self.displaySelected(self.optionToResult(this.el[this.el.selectedIndex])); - } + return L.DomUtil.after(this.input, L.DomUtil.element('div', {className: 'umap-singleresult'})); }, displaySelected: function (result) { var result_el = L.DomUtil.element('div', {}, this.selected_container); - result_el.innerHTML = result.display; + result_el.innerHTML = result.item.label; var close = L.DomUtil.element('span', {className: 'close'}, result_el); close.innerHTML = '×'; this.input.style.display = 'none'; L.DomEvent.on(close, 'click', function () { this.selected_container.innerHTML = ''; - this.unselect(result); + this.options.on_unselect(result); this.input.style.display = 'block'; }, this); this.hide(); } }); - -L.S.AutoComplete.select = function (el, options) { - return new L.S.AutoComplete.Select(el, options); -}; diff --git a/umap/static/umap/js/umap.controls.js b/umap/static/umap/js/umap.controls.js new file mode 100644 index 00000000..5fe1c986 --- /dev/null +++ b/umap/static/umap/js/umap.controls.js @@ -0,0 +1,1146 @@ +L.U.BaseAction = L.ToolbarAction.extend({ + + initialize: function (map) { + this.map = map; + this.options.toolbarIcon = { + className: this.options.className, + tooltip: this.options.tooltip + }; + L.ToolbarAction.prototype.initialize.call(this); + if (this.options.helpMenu && !this.map.helpMenuActions[this.options.className]) this.map.helpMenuActions[this.options.className] = this; + } + +}); + +L.U.ImportAction = L.U.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'upload-data dark', + tooltip: L._('Import data') + ' (Ctrl+I)' + }, + + addHooks: function () { + this.map.importPanel(); + } + +}); + +L.U.EditPropertiesAction = L.U.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'update-map-settings dark', + tooltip: L._('Edit map settings') + }, + + addHooks: function () { + this.map.edit(); + } + +}); + +L.U.ChangeTileLayerAction = L.U.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'dark update-map-tilelayers', + tooltip: L._('Change tilelayers') + }, + + addHooks: function () { + this.map.updateTileLayers(); + } + +}); + +L.U.ManageDatalayersAction = L.U.BaseAction.extend({ + + options: { + className: 'dark manage-datalayers', + tooltip: L._('Manage layers') + }, + + addHooks: function () { + this.map.manageDatalayers(); + } + +}); + +L.U.UpdateExtentAction = L.U.BaseAction.extend({ + + options: { + className: 'update-map-extent dark', + tooltip: L._('Save this center and zoom') + }, + + addHooks: function () { + this.map.updateExtent(); + } + +}); + +L.U.UpdatePermsAction = L.U.BaseAction.extend({ + + options: { + className: 'update-map-permissions dark', + tooltip: L._('Update permissions and editors') + }, + + addHooks: function () { + this.map.permissions.edit(); + } + +}); + +L.U.DrawMarkerAction = L.U.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'umap-draw-marker dark', + tooltip: L._('Draw a marker') + }, + + addHooks: function () { + this.map.startMarker(); + } + +}); + +L.U.DrawPolylineAction = L.U.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'umap-draw-polyline dark', + tooltip: L._('Draw a polyline') + }, + + addHooks: function () { + this.map.startPolyline(); + } + +}); + +L.U.DrawPolygonAction = L.U.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'umap-draw-polygon dark', + tooltip: L._('Draw a polygon') + }, + + addHooks: function () { + this.map.startPolygon(); + } + +}); + +L.U.AddPolylineShapeAction = L.U.BaseAction.extend({ + + options: { + className: 'umap-draw-polyline-multi dark', + tooltip: L._('Add a line to the current multi') + }, + + addHooks: function () { + this.map.editedFeature.editor.newShape(); + } + +}); + +L.U.AddPolygonShapeAction = L.U.AddPolylineShapeAction.extend({ + + options: { + className: 'umap-draw-polygon-multi dark', + tooltip: L._('Add a polygon to the current multi') + } + +}); + +L.U.BaseFeatureAction = L.ToolbarAction.extend({ + + initialize: function (map, feature, latlng) { + this.map = map; + this.feature = feature; + this.latlng = latlng; + L.ToolbarAction.prototype.initialize.call(this); + this.postInit(); + }, + + postInit: function () {}, + + hideToolbar: function () { + this.map.removeLayer(this.toolbar); + }, + + addHooks: function () { + this.onClick({latlng: this.latlng}); + this.hideToolbar(); + } + +}); + +L.U.CreateHoleAction = L.U.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'umap-new-hole', + tooltip: L._('Start a hole here') + } + }, + + onClick: function (e) { + this.feature.startHole(e); + } + +}); + +L.U.ToggleEditAction = L.U.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'umap-toggle-edit', + tooltip: L._('Toggle edit mode (shift-click)') + } + }, + + onClick: function (e) { + if (this.feature._toggleEditing) this.feature._toggleEditing(e); // Path + else this.feature.edit(e); // Marker + } + +}); + +L.U.DeleteFeatureAction = L.U.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'umap-delete-all', + tooltip: L._('Delete this feature') + } + }, + + postInit: function () { + if (!this.feature.isMulti()) this.options.toolbarIcon.className = 'umap-delete-one-of-one'; + }, + + onClick: function (e) { + this.feature.confirmDelete(e); + } + +}); + +L.U.DeleteShapeAction = L.U.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'umap-delete-one-of-multi', + tooltip: L._('Delete this shape') + } + }, + + onClick: function (e) { + this.feature.enableEdit().deleteShapeAt(e.latlng); + } + +}); + +L.U.ExtractShapeFromMultiAction = L.U.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'umap-extract-shape-from-multi', + tooltip: L._('Extract shape to separate feature') + } + }, + + onClick: function (e) { + this.feature.isolateShape(e.latlng); + } + +}); + +L.U.BaseVertexAction = L.U.BaseFeatureAction.extend({ + + initialize: function (map, feature, latlng, vertex) { + this.vertex = vertex; + L.U.BaseFeatureAction.prototype.initialize.call(this, map, feature, latlng); + } + +}); + +L.U.DeleteVertexAction = L.U.BaseVertexAction.extend({ + + options: { + toolbarIcon: { + className: 'umap-delete-vertex', + tooltip: L._('Delete this vertex (Alt-click)') + } + }, + + onClick: function () { + this.vertex.delete(); + } + +}); + +L.U.SplitLineAction = L.U.BaseVertexAction.extend({ + + options: { + toolbarIcon: { + className: 'umap-split-line', + tooltip: L._('Split line') + } + }, + + onClick: function () { + this.vertex.split(); + } + +}); + +L.U.ContinueLineAction = L.U.BaseVertexAction.extend({ + + options: { + toolbarIcon: { + className: 'umap-continue-line', + tooltip: L._('Continue line') + } + }, + + onClick: function () { + this.vertex.continue(); + } + +}); + +// Leaflet.Toolbar doesn't allow twice same toolbar class… +L.U.SettingsToolbar = L.Toolbar.Control.extend({}); +L.U.DrawToolbar = L.Toolbar.Control.extend({ + + initialize: function (options) { + L.Toolbar.Control.prototype.initialize.call(this, options); + this.map = this.options.map; + this.map.on('seteditedfeature', this.redraw, this); + }, + + appendToContainer: function (container) { + this.options.actions = []; + if (this.map.options.enableMarkerDraw) { + this.options.actions.push(L.U.DrawMarkerAction); + } + if (this.map.options.enablePolylineDraw) { + this.options.actions.push(L.U.DrawPolylineAction); + if (this.map.editedFeature && this.map.editedFeature instanceof L.U.Polyline) { + this.options.actions.push(L.U.AddPolylineShapeAction); + } + } + if (this.map.options.enablePolygonDraw) { + this.options.actions.push(L.U.DrawPolygonAction); + if (this.map.editedFeature && this.map.editedFeature instanceof L.U.Polygon) { + this.options.actions.push(L.U.AddPolygonShapeAction); + } + } + L.Toolbar.Control.prototype.appendToContainer.call(this, container); + }, + + redraw: function () { + var container = this._control.getContainer(); + container.innerHTML = ''; + this.appendToContainer(container); + } + +}); + + +L.U.EditControl = L.Control.extend({ + + options: { + position: 'topright' + }, + + onAdd: function (map) { + var container = L.DomUtil.create('div', 'leaflet-control-edit-enable umap-control'), + edit = L.DomUtil.create('a', '', container); + edit.href = '#'; + edit.title = L._('Enable editing') + ' (Ctrl-E)'; + + L.DomEvent + .addListener(edit, 'click', L.DomEvent.stop) + .addListener(edit, 'click', map.enableEdit, map); + return container; + } + +}); + +/* Share control */ +L.Control.Embed = L.Control.extend({ + + options: { + position: 'topleft' + }, + + onAdd: function (map) { + var container = L.DomUtil.create('div', 'leaflet-control-embed umap-control'); + + var link = L.DomUtil.create('a', '', container); + link.href = '#'; + link.title = L._('Embed and share this map'); + + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', map.renderShareBox, map) + .on(link, 'dblclick', L.DomEvent.stopPropagation); + + return container; + } +}); + +L.U.MoreControls = L.Control.extend({ + + options: { + position: 'topleft' + }, + + onAdd: function () { + var container = L.DomUtil.create('div', ''), + more = L.DomUtil.create('a', 'umap-control-more umap-control-text', container), + less = L.DomUtil.create('a', 'umap-control-less umap-control-text', container); + more.href = '#'; + more.title = L._('More controls'); + + L.DomEvent + .on(more, 'click', L.DomEvent.stop) + .on(more, 'click', this.toggle, this); + + less.href = '#'; + less.title = L._('Hide controls'); + + L.DomEvent + .on(less, 'click', L.DomEvent.stop) + .on(less, 'click', this.toggle, this); + + return container; + }, + + toggle: function () { + var pos = this.getPosition(), + corner = this._map._controlCorners[pos], + className = 'umap-more-controls'; + if (L.DomUtil.hasClass(corner, className)) L.DomUtil.removeClass(corner, className); + else L.DomUtil.addClass(corner, className); + } + +}); + + +L.U.DataLayersControl = L.Control.extend({ + + options: { + position: 'topleft' + }, + + labels: { + zoomToLayer: L._('Zoom to layer extent'), + toggleLayer: L._('Show/hide layer'), + editLayer: L._('Edit') + }, + + initialize: function (map, options) { + this.map = map; + L.Control.prototype.initialize.call(this, options); + }, + + _initLayout: function (map) { + var container = this._container = L.DomUtil.create('div', 'leaflet-control-browse umap-control'), + actions = L.DomUtil.create('div', 'umap-browse-actions', container); + this._datalayers_container = L.DomUtil.create('ul', 'umap-browse-datalayers', actions); + + var link = L.DomUtil.create('a', 'umap-browse-link', actions); + link.href = '#'; + link.title = link.innerHTML = L._('Browse data'); + + var toggle = L.DomUtil.create('a', 'umap-browse-toggle', container); + toggle.href = '#'; + toggle.title = L._('See data layers') + + L.DomEvent + .on(toggle, 'click', L.DomEvent.stop); + + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', map.openBrowser, map); + + map.whenReady(function () { + this.update(); + }, this); + + if (!L.Browser.touch) { + L.DomEvent.disableClickPropagation(container); + L.DomEvent.on(container, 'mousewheel', L.DomEvent.stopPropagation); + L.DomEvent.on(container, 'MozMousePixelScroll', L.DomEvent.stopPropagation); + L.DomEvent.on(container, { + mouseenter: this.expand, + mouseleave: this.collapse + }, this); + } else { + L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation); + L.DomEvent.on(toggle, 'click', L.DomEvent.stop) + .on(toggle, 'click', this.expand, this); + map.on('click', this.collapse, this); + } + + return container; + }, + + onAdd: function (map) { + if (!this._container) this._initLayout(map); + if (map.options.datalayersControl === 'expanded') this.expand(); + return this._container; + }, + + onRemove: function (map) { + this.collapse(); + }, + + update: function () { + if (this._datalayers_container && this._map) { + this._datalayers_container.innerHTML = ''; + this._map.eachDataLayerReverse(function (datalayer) { + this.addDataLayer(this._datalayers_container, datalayer); + }, this) + } + }, + + expand: function () { + L.DomUtil.addClass(this._container, 'expanded'); + }, + + collapse: function () { + if (this._map.options.datalayersControl === 'expanded') return; + L.DomUtil.removeClass(this._container, 'expanded'); + }, + + addDataLayer: function (container, datalayer, draggable) { + var datalayerLi = L.DomUtil.create('li', '', container); + if (draggable) L.DomUtil.element('i', {className: 'drag-handle', title: L._('Drag to reorder')}, datalayerLi); + datalayer.renderToolbox(datalayerLi); + var title = L.DomUtil.add('span', 'layer-title', datalayerLi, datalayer.options.name); + + datalayerLi.id = 'browse_data_toggle_' + L.stamp(datalayer); + L.DomUtil.classIf(datalayerLi, 'off', !datalayer.isVisible()); + + title.innerHTML = datalayer.options.name; + }, + + newDataLayer: function () { + var datalayer = this.map.createDataLayer({}); + datalayer.edit(); + }, + + openPanel: function () { + if (!this.map.editEnabled) return; + var container = L.DomUtil.create('ul', 'umap-browse-datalayers'); + this.map.eachDataLayerReverse(function (datalayer) { + this.addDataLayer(container, datalayer, true); + }, this); + var orderable = new L.U.Orderable(container); + orderable.on('drop', function (e) { + var layer = this.map.datalayers[e.src.dataset.id], + other = this.map.datalayers[e.dst.dataset.id], + minIndex = Math.min(e.initialIndex, e.finalIndex); + if (e.finalIndex === 0) layer.bringToTop(); + else if (e.finalIndex > e.initialIndex) layer.insertBefore(other); + else layer.insertAfter(other); + this.map.eachDataLayerReverse(function (datalayer) { + if (datalayer.getRank() >= minIndex) datalayer.isDirty = true; + }); + this.map.indexDatalayers(); + }, this); + + var bar = L.DomUtil.create('div', 'button-bar', container), + add = L.DomUtil.create('a', 'show-on-edit block add-datalayer button', bar); + add.href = '#'; + add.innerHTML = add.title = L._('Add a layer'); + + L.DomEvent + .on(add, 'click', L.DomEvent.stop) + .on(add, 'click', this.newDataLayer, this); + + this.map.ui.openPanel({data: {html: container}, className: 'dark'}); + } + +}); + +L.U.DataLayer.include({ + + renderToolbox: function (container) { + var toggle = L.DomUtil.create('i', 'layer-toggle', container), + zoomTo = L.DomUtil.create('i', 'layer-zoom_to', container), + edit = L.DomUtil.create('i', 'layer-edit show-on-edit', container), + table = L.DomUtil.create('i', 'layer-table-edit show-on-edit', container), + remove = L.DomUtil.create('i', 'layer-delete show-on-edit', container); + zoomTo.title = L._('Zoom to layer extent'); + toggle.title = L._('Show/hide layer'); + edit.title = L._('Edit'); + table.title = L._('Edit properties in a table'); + remove.title = L._('Delete layer'); + L.DomEvent.on(toggle, 'click', this.toggle, this); + L.DomEvent.on(zoomTo, 'click', this.zoomTo, this); + L.DomEvent.on(edit, 'click', this.edit, this); + L.DomEvent.on(table, 'click', this.tableEdit, this); + L.DomEvent.on(remove, 'click', function () { + if (!this.isVisible()) return; + if (!confirm(L._('Are you sure you want to delete this layer?'))) return; + this._delete(); + this.map.ui.closePanel(); + }, this); + L.DomUtil.addClass(container, this.getHidableClass()); + L.DomUtil.classIf(container, 'off', !this.isVisible()); + container.dataset.id = L.stamp(this); + }, + + getHidableElements: function () { + return document.querySelectorAll('.' + this.getHidableClass()); + }, + + getHidableClass: function () { + return 'show_with_datalayer_' + L.stamp(this); + }, + + propagateRemote: function () { + var els = this.getHidableElements(); + for (var i = 0; i < els.length; i++) { + L.DomUtil.classIf(els[i], 'remotelayer', this.isRemoteLayer()); + } + }, + + propagateHide: function () { + var els = this.getHidableElements(); + for (var i = 0; i < els.length; i++) { + L.DomUtil.addClass(els[i], 'off'); + } + }, + + propagateShow: function () { + this.onceLoaded(function () { + var els = this.getHidableElements(); + for (var i = 0; i < els.length; i++) { + L.DomUtil.removeClass(els[i], 'off'); + } + }, this); + } + +}); + +L.U.DataLayer.addInitHook(function () { + this.on('hide', this.propagateHide); + this.on('show', this.propagateShow); + this.propagateShow(); +}); + + +L.U.Map.include({ + + _openBrowser: function () { + var browserContainer = L.DomUtil.create('div', 'umap-browse-data'), + title = L.DomUtil.add('h3', 'umap-browse-title', browserContainer, this.options.name), + filter = L.DomUtil.create('input', '', browserContainer), + filterValue = '', + featuresContainer = L.DomUtil.create('div', 'umap-browse-features', browserContainer), + filterKeys = this.getFilterKeys(); + filter.type = 'text'; + filter.placeholder = L._('Filter…'); + filter.value = this.options.filter || ''; + + var addFeature = function (feature) { + var feature_li = L.DomUtil.create('li', feature.getClassName() + ' feature'), + zoom_to = L.DomUtil.create('i', 'feature-zoom_to', feature_li), + edit = L.DomUtil.create('i', 'show-on-edit feature-edit', feature_li), + color = L.DomUtil.create('i', 'feature-color', feature_li), + title = L.DomUtil.create('span', 'feature-title', feature_li), + symbol = feature._getIconUrl ? L.U.Icon.prototype.formatUrl(feature._getIconUrl(), feature): null; + zoom_to.title = L._('Bring feature to center'); + edit.title = L._('Edit this feature'); + title.innerHTML = feature.getDisplayName() || '—'; + color.style.backgroundColor = feature.getOption('color'); + if (symbol) { + color.style.backgroundImage = 'url(' + symbol + ')'; + } + L.DomEvent.on(zoom_to, 'click', function (e) { + e.callback = this.view; + this.bringToCenter(e); + }, feature); + L.DomEvent.on(title, 'click', function (e) { + e.callback = this.view + this.bringToCenter(e); + }, feature); + L.DomEvent.on(edit, 'click', function () { + this.edit(); + }, feature); + return feature_li; + }; + + var append = function (datalayer) { + var container = L.DomUtil.create('div', datalayer.getHidableClass(), featuresContainer), + headline = L.DomUtil.create('h5', '', container); + container.id = 'browse_data_datalayer_' + datalayer.umap_id; + datalayer.renderToolbox(headline); + L.DomUtil.add('span', '', headline, datalayer.options.name); + var ul = L.DomUtil.create('ul', '', container); + L.DomUtil.classIf(container, 'off', !datalayer.isVisible()); + + var build = function () { + ul.innerHTML = ''; + datalayer.eachFeature(function (feature) { + if (filterValue && !feature.matchFilter(filterValue, filterKeys)) return; + ul.appendChild(addFeature(feature)); + }); + }; + build(); + datalayer.on('datachanged', build); + datalayer.map.ui.once('panel:closed', function () { + datalayer.off('datachanged', build); + }); + datalayer.map.ui.once('panel:ready', function () { + datalayer.map.ui.once('panel:ready', function () { + datalayer.off('datachanged', build); + }); + }); + }; + + var appendAll = function () { + this.options.filter = filterValue = filter.value; + featuresContainer.innerHTML = ''; + this.eachBrowsableDataLayer(function (datalayer) { + append(datalayer); + }); + }; + var resetLayers = function () { + this.eachBrowsableDataLayer(function (datalayer) { + datalayer.resetLayer(true); + }); + } + L.bind(appendAll, this)(); + L.DomEvent.on(filter, 'input', appendAll, this); + L.DomEvent.on(filter, 'input', resetLayers, this); + var link = L.DomUtil.create('li', ''); + L.DomUtil.create('i', 'umap-icon-16 umap-caption', link); + var label = L.DomUtil.create('span', '', link); + label.innerHTML = label.title = L._('About'); + L.DomEvent.on(link, 'click', this.displayCaption, this); + this.ui.openPanel({data: {html: browserContainer}, actions: [link]}); + } + +}); + + + +L.U.TileLayerControl = L.Control.extend({ + + options: { + position: 'topleft' + }, + + initialize: function (map, options) { + this.map = map; + L.Control.prototype.initialize.call(this, options); + }, + + onAdd: function () { + var container = L.DomUtil.create('div', 'leaflet-control-tilelayers umap-control'); + + var link = L.DomUtil.create('a', '', container); + link.href = '#'; + link.title = L._('Change map background'); + + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', this.openSwitcher, this) + .on(link, 'dblclick', L.DomEvent.stopPropagation); + + return container; + }, + + openSwitcher: function (options) { + this._tilelayers_container = L.DomUtil.create('ul', 'umap-tilelayer-switcher-container'); + this.buildList(options); + }, + + buildList: function (options) { + this.map.eachTileLayer(function (tilelayer) { + this.addTileLayerElement(tilelayer, options); + }, this); + this.map.ui.openPanel({data: {html: this._tilelayers_container}, className: options.className}); + }, + + addTileLayerElement: function (tilelayer, options) { + var selectedClass = this.map.hasLayer(tilelayer) ? 'selected' : '', + el = L.DomUtil.create('li', selectedClass, this._tilelayers_container), + img = L.DomUtil.create('img', '', el), + name = L.DomUtil.create('div', '', el); + img.src = L.Util.template(tilelayer.options.url_template, this.map.demoTileInfos); + name.innerHTML = tilelayer.options.name; + L.DomEvent.on(el, 'click', function () { + this.map.selectTileLayer(tilelayer); + this.map.ui.closePanel(); + if (options && options.callback) options.callback(tilelayer); + }, this); + } + + +}); + +L.U.AttributionControl = L.Control.Attribution.extend({ + + options: { + prefix: '' + }, + + _update: function () { + L.Control.Attribution.prototype._update.call(this); + if (this._map.options.shortCredit) { + L.DomUtil.add('span', '', this._container, ' — ' + L.Util.toHTML(this._map.options.shortCredit)); + } + var link = L.DomUtil.add('a', '', this._container, ' — ' + L._('About')); + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', this._map.displayCaption, this._map) + .on(link, 'dblclick', L.DomEvent.stop); + if (window.top === window.self) { + // We are not in iframe mode + var home = L.DomUtil.add('a', '', this._container, ' — ' + L._('Home')); + home.href = '/'; + } + } + +}); + + +L.U.LocateControl = L.Control.extend({ + + options: { + position: 'topleft' + }, + + onAdd: function (map) { + var container = L.DomUtil.create('div', 'leaflet-control-locate umap-control'), + link = L.DomUtil.create('a', '', container); + link.href = '#'; + link.title = L._('Center map on your location'); + var fn = function () { + map.locate({ + setView: true, + enableHighAccuracy: true + }); + }; + + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', fn, map) + .on(link, 'dblclick', L.DomEvent.stopPropagation); + + return container; + } +}); + + +L.U.Search = L.PhotonSearch.extend({ + + onBlur: function (e) { + // Overrided because we don't want to hide the results on blur. + this.fire('blur'); + }, + + formatResult: function (feature, el) { + var self = this; + var tools = L.DomUtil.create('span', 'search-result-tools', el), + zoom = L.DomUtil.create('i', 'feature-zoom_to', tools), + edit = L.DomUtil.create('i', 'feature-edit show-on-edit', tools); + zoom.title = L._('Zoom to this place'); + edit.title = L._('Save this location as new feature'); + // We need to use "mousedown" because Leaflet.Photon listen to mousedown + // on el. + L.DomEvent.on(zoom, 'mousedown', function (e) { + L.DomEvent.stop(e); + self.zoomToFeature(feature); + }); + L.DomEvent.on(edit, 'mousedown', function (e) { + L.DomEvent.stop(e); + var datalayer = self.map.defaultDataLayer(); + var layer = datalayer.geojsonToFeatures(feature); + layer.isDirty = true; + layer.edit(); + }); + this._formatResult(feature, el); + }, + + zoomToFeature: function (feature) { + var zoom = Math.max(this.map.getZoom(), 16); // Never unzoom. + this.map.setView([feature.geometry.coordinates[1], feature.geometry.coordinates[0]], zoom); + }, + + onSelected: function (feature) { + this.zoomToFeature(feature); + this.map.ui.closePanel(); + } + +}); + +L.U.SearchControl = L.Control.extend({ + + options: { + position: 'topleft', + }, + + onAdd: function (map) { + var container = L.DomUtil.create('div', 'leaflet-control-search umap-control'), + self = this; + + L.DomEvent.disableClickPropagation(container); + var link = L.DomUtil.create('a', '', container); + link.href = '#'; + link.title = L._('Search a place name') + L.DomEvent.on(link, 'click', function (e) { + L.DomEvent.stop(e); + self.openPanel(map); + }); + return container; + }, + + openPanel: function (map) { + var options = { + limit: 10, + noResultLabel: L._('No results'), + } + if (map.options.photonUrl) options.url = map.options.photonUrl; + var container = L.DomUtil.create('div', ''); + + var title = L.DomUtil.create('h3', '', container); + title.textContent = L._('Search location'); + var input = L.DomUtil.create('input', 'photon-input', container); + var resultsContainer = L.DomUtil.create('div', 'photon-autocomplete', container); + this.search = new L.U.Search(map, input, options); + var id = Math.random(); + this.search.on('ajax:send', function () { + map.fire('dataloading', {id: id}); + }); + this.search.on('ajax:return', function () { + map.fire('dataload', {id: id}); + }); + this.search.resultsContainer = resultsContainer; + map.ui.once('panel:ready', function () { + input.focus(); + }); + map.ui.openPanel({data: {html: container}}); + } + +}); + + +L.Control.MiniMap.include({ + + initialize: function (layer, options) { + L.Util.setOptions(this, options); + this._layer = this._cloneLayer(layer); + }, + + onMainMapBaseLayerChange: function (e) { + var layer = this._cloneLayer(e.layer); + if (this._miniMap.hasLayer(this._layer)) { + this._miniMap.removeLayer(this._layer); + } + this._layer = layer; + this._miniMap.addLayer(this._layer); + }, + + _cloneLayer: function (layer) { + return new L.TileLayer(layer._url, L.Util.extend({}, layer.options)); + } + +}); + + +L.Control.Loading.include({ + + onAdd: function (map) { + this._container = L.DomUtil.create('div', 'umap-loader', map._controlContainer); + map.on('baselayerchange', this._layerAdd, this); + this._addMapListeners(map); + this._map = map; + }, + + _showIndicator: function () { + L.DomUtil.addClass(this._map._container, 'umap-loading'); + }, + + _hideIndicator: function() { + L.DomUtil.removeClass(this._map._container, 'umap-loading'); + } + +}); + + +/* +* Make it dynamic +*/ +L.U.ContextMenu = L.Map.ContextMenu.extend({ + + _createItems: function (e) { + this._map.setContextMenuItems(e); + L.Map.ContextMenu.prototype._createItems.call(this); + }, + + _showAtPoint: function (pt, e) { + this._items = []; + this._container.innerHTML = ''; + this._createItems(e); + L.Map.ContextMenu.prototype._showAtPoint.call(this, pt, e); + } + +}); + +L.U.IframeExporter = L.Class.extend({ + includes: [L.Mixin.Events], + + options: { + includeFullScreenLink: true, + currentView: false, + keepCurrentDatalayers: false + }, + + queryString: { + scaleControl: false, + miniMap: false, + scrollWheelZoom: false, + zoomControl: true, + allowEdit: false, + moreControl: true, + searchControl: null, + tilelayersControl: null, + embedControl: null, + datalayersControl: true, + onLoadPanel: 'none', + captionBar: false + }, + + dimensions: { + width: '100%', + height: '300px' + }, + + initialize: function (map) { + this.map = map; + this.baseUrl = window.location.protocol + '//' + window.location.host + window.location.pathname; + // Use map default, not generic default + this.queryString.onLoadPanel = this.map.options.onLoadPanel; + }, + + getMap: function () { + return this.map; + }, + + build: function () { + var datalayers = []; + if (this.options.keepCurrentDatalayers) { + this.map.eachDataLayer(function (datalayer) { + if (datalayer.isVisible() && datalayer.umap_id) { + datalayers.push(datalayer.umap_id); + } + }); + this.queryString.datalayers = datalayers.join(','); + } else { + delete this.queryString.datalayers; + } + var currentView = this.options.currentView ? window.location.hash : '', + iframeUrl = this.baseUrl + '?' + this.map.xhr.buildQueryString(this.queryString) + currentView, + code = ''; + if (this.options.includeFullScreenLink) { + code += '

' + L._('See full screen') + '

'; + } + return code; + } + +}); + +L.U.Editable = L.Editable.extend({ + + initialize: function (map, options) { + L.Editable.prototype.initialize.call(this, map, options); + this.on('editable:drawing:start editable:drawing:click', this.drawingTooltip); + this.on('editable:drawing:end', this.closeTooltip); + // Layer for items added by users + this.on('editable:drawing:cancel', function (e) { + if (e.layer._latlngs && e.layer._latlngs.length < e.layer.editor.MIN_VERTEX) e.layer.del(); + if (e.layer instanceof L.U.Marker) e.layer.del(); + }); + this.on('editable:drawing:commit', function (e) { + e.layer.isDirty = true; + if (this.map.editedFeature !== e.layer) e.layer.edit(e); + }); + this.on('editable:editing', function (e) { + var layer = e.layer; + layer.isDirty = true; + if (layer._tooltip && layer.isTooltipOpen()) { + layer._tooltip.setLatLng(layer.getCenter()); + layer._tooltip.update(); + } + }); + this.on('editable:vertex:ctrlclick', function (e) { + var index = e.vertex.getIndex(); + if (index === 0 || index === e.vertex.getLastIndex() && e.vertex.continue) e.vertex.continue(); + }); + this.on('editable:vertex:altclick', function (e) { + if (e.vertex.editor.vertexCanBeDeleted(e.vertex)) e.vertex.delete(); + }); + this.on('editable:vertex:rawclick', this.onVertexRawClick); + }, + + createPolyline: function (latlngs) { + return new L.U.Polyline(this.map, latlngs); + }, + + createPolygon: function (latlngs) { + var polygon = new L.U.Polygon(this.map, latlngs); + return polygon; + }, + + createMarker: function (latlng) { + return new L.U.Marker(this.map, latlng); + }, + + connectCreatedToMap: function (layer) { + // Overrided from Leaflet.Editable + var datalayer = this.map.defaultDataLayer(); + datalayer.addLayer(layer); + layer.isDirty = true; + return layer; + }, + + drawingTooltip: function (e) { + var content; + if (e.layer instanceof L.Marker) content = L._('Click to add a marker'); + else if (e.layer instanceof L.Polyline) { + if (!e.layer.editor._drawnLatLngs.length) { + if (e.layer instanceof L.Polygon) content = L._('Click to start drawing a polygon'); + else if (e.layer instanceof L.Polyline) content = L._('Click to start drawing a line'); + } else if (e.layer.editor._drawnLatLngs.length < e.layer.editor.MIN_VERTEX) { + content = L._('Click to continue drawing'); + } else { + content = L._('Click last point to finish shape'); + } + } + if (content) this.map.ui.tooltip({content: content}); + }, + + closeTooltip: function () { + this.map.ui.closeTooltip(); + }, + + onVertexRawClick: function (e) { + e.layer.onVertexRawClick(e); + L.DomEvent.stop(e); + e.cancel(); + } + +}); diff --git a/umap/static/umap/js/umap.core.js b/umap/static/umap/js/umap.core.js new file mode 100644 index 00000000..b05aab43 --- /dev/null +++ b/umap/static/umap/js/umap.core.js @@ -0,0 +1,520 @@ +/* Poor man pub/sub handler, enough for now */ + +L.UmapSingleton = L.Evented.extend({}); +L.U = new L.UmapSingleton(); +L.U.Map = L.Map.extend({}); + +/* +* Utils +*/ +L.Util.queryString = function (name, fallback) { + var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, ' ')); }; + var qs = window.location.search.slice(1).split('&'), qa = {}; + for (var i in qs) { + var key = qs[i].split('='); + if (!key) continue; + qa[decode(key[0])] = key[1] ? decode(key[1]) : 1; + } + return qa[name] || fallback; +}; + +L.Util.booleanFromQueryString = function (name) { + var value = L.Util.queryString(name); + return value === '1' || value === 'true'; +}; + +L.Util.setFromQueryString = function (options, name) { + var value = L.Util.queryString(name); + if (typeof value !== 'undefined') options[name] = value; +}; + +L.Util.setBooleanFromQueryString = function (options, name) { + var value = L.Util.queryString(name); + if (typeof value !== 'undefined') options[name] = value == '1' || value == 'true'; +}; +L.Util.setNullableBooleanFromQueryString = function (options, name) { + var value = L.Util.queryString(name); + if (typeof value !== 'undefined') { + if (value === 'null') value = null; + else if (value === '0' || value === 'false') value = false; + else value = true; + options[name] = value; + } +}; +L.Util.escapeHTML = function (s) { + s = s? s.toString() : ''; + return s.replace(/$1'); + r = r.replace(/^## (.*)/gm, '

$1

'); + r = r.replace(/^# (.*)/gm, '

$1

'); + r = r.replace(/^---/gm, '
'); + + // bold, italics + r = r.replace(/\*\*(.*?)\*\*/g, '$1'); + r = r.replace(/\*(.*?)\*/g, '$1'); + + // unordered lists + r = r.replace(/^\*\* (.*)/gm, '
    • $1
'); + r = r.replace(/^\* (.*)/gm, '
  • $1
'); + for (ii = 0; ii < 3; ii++) r = r.replace(new RegExp('' + newline + '
    ', 'g'), newline); + + // links + r = r.replace(/(\[\[http)/g, '[[h_t_t_p'); // Escape for avoiding clash between [[http://xxx]] and http://xxx + r = r.replace(/({{http)/g, '{{h_t_t_p'); + r = r.replace(/(https?:[^ \<)\n]*)/g, '$1'); + r = r.replace(/\[\[(h_t_t_ps?:[^\]|]*?)\]\]/g, '$1'); + r = r.replace(/\[\[(h_t_t_ps?:[^|]*?)\|(.*?)\]\]/g, '$2'); + r = r.replace(/\[\[([^\]|]*?)\]\]/g, '$1'); + r = r.replace(/\[\[([^|]*?)\|(.*?)\]\]/g, '$2'); + + // iframe + r = r.replace(/{{{(h_t_t_ps?[^ |]*)}}}/g, ''); + r = r.replace(/{{{(h_t_t_ps?[^ |]*)\|(\d*)(px)?}}}/g, ''); + r = r.replace(/{{{(h_t_t_ps?[^ |]*)\|(\d*)(px)?\*(\d*)(px)?}}}/g, ''); + + // images + r = r.replace(/{{([^\]|]*?)}}/g, ''); + r = r.replace(/{{([^|]*?)\|(\d*?)}}/g, ''); + + //Unescape http + r = r.replace(/(h_t_t_p)/g, 'http'); + + // Preserver line breaks + if (newline) r = r.replace(new RegExp(newline + '(?=[^]+)', 'g'), '
    ' + newline); + + return r; +}; +L.Util.isObject = function (what) { + return typeof what === 'object' && what !== null; +}; +L.Util.CopyJSON = function (geojson) { + return JSON.parse(JSON.stringify(geojson)); +}; +L.Util.detectFileType = function (f) { + var filename = f.name ? escape(f.name.toLowerCase()) : ''; + function ext(_) { + return filename.indexOf(_) !== -1; + } + if (f.type === 'application/vnd.google-earth.kml+xml' || ext('.kml')) { + return 'kml'; + } + if (ext('.gpx')) return 'gpx'; + if (ext('.geojson') || ext('.json')) return 'geojson'; + if (f.type === 'text/csv' || ext('.csv') || ext('.tsv') || ext('.dsv')) { + return 'csv'; + } + if (ext('.xml') || ext('.osm')) return 'osm'; + if (ext('.umap')) return 'umap'; +}; + +L.Util.usableOption = function (options, option) { + return typeof options[option] !== 'undefined' && options[option] !== '' && options[option] !== null; +}; + +L.Util.greedyTemplate = function (str, data, ignore) { + // Don't throw error if some key is missing + return str.replace(/\{ *([\w_\:]+) *\}/g, function (str, key) { + var value = data[key]; + if (value === undefined) { + if (ignore) value = str; + else value = ''; + } + return value; + }); +}; + +L.Util.sortFeatures = function (features, sortKey) { + var sortKeys = (sortKey || 'name').split(','); + + var sort = function (a, b, i) { + var sortKey = sortKeys[i], score, + valA = a.properties[sortKey] || '', + valB = b.properties[sortKey] || ''; + if (!valA) { + score = -1; + } else if (!valB) { + score = 1; + } else { + score = valA.toString().toLowerCase().localeCompare(valB.toString().toLowerCase()); + } + if (score === 0 && sortKeys[i + 1]) return sort(a, b, i + 1); + return score; + }; + + features.sort(function (a, b) { + if (!a.properties || !b.properties) { + return 0; + } + return sort(a, b, 0); + }); + + + return features; +}; + +L.Util.flattenCoordinates = function (coords) { + while (coords[0] && typeof coords[0][0] !== 'number') coords = coords[0]; + return coords; +}; + +L.DomUtil.add = function (tagName, className, container, content) { + var el = L.DomUtil.create(tagName, className, container); + if (content) { + if (content.nodeType && content.nodeType === 1) { + el.appendChild(content); + } + else { + el.innerHTML = content; + } + } + return el; +}; + +L.DomUtil.createFieldset = function (container, legend, options) { + options = options || {}; + var fieldset = L.DomUtil.create('div', 'fieldset toggle', container); + var legendEl = L.DomUtil.add('h5', 'legend style_options_toggle', fieldset, legend); + var fieldsEl = L.DomUtil.add('div', 'fields with-transition', fieldset); + L.DomEvent.on(legendEl, 'click', function () { + if (L.DomUtil.hasClass(fieldset, 'on')) { + L.DomUtil.removeClass(fieldset, 'on'); + } else { + L.DomUtil.addClass(fieldset, 'on'); + if (options.callback) options.callback.call(options.context || this); + } + }); + return fieldsEl; +}; + +L.DomUtil.classIf = function (el, className, bool) { + if (bool) L.DomUtil.addClass(el, className); + else L.DomUtil.removeClass(el, className); +}; + + +L.DomUtil.element = function (what, attrs, parent) { + var el = document.createElement(what); + for (var attr in attrs) { + el[attr] = attrs[attr]; + } + if (typeof parent !== 'undefined') { + parent.appendChild(el); + } + return el; +}; + + +L.DomUtil.before = function (target, el) { + target.parentNode.insertBefore(el, target); + return el; +}; + +L.DomUtil.after = function (target, el) +{ + target.parentNode.insertBefore(el, target.nextSibling); + return el; +}; + +L.DomUtil.RGBRegex = /rgb *\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\)/; + +L.DomUtil.TextColorFromBackgroundColor = function (el) { + var out = '#000000'; + if (!window.getComputedStyle) {return out;} + var rgb = window.getComputedStyle(el).getPropertyValue('background-color'); + rgb = L.DomUtil.RGBRegex.exec(rgb); + if (!rgb || rgb.length !== 4) {return out;} + rgb = parseInt(rgb[1], 10) + parseInt(rgb[2], 10) + parseInt(rgb[3], 10); + if (rgb < (255 * 3 / 2)) { + out = '#ffffff'; + } + return out; +}; +L.DomEvent.once = function (el, types, fn, context) { + // cf https://github.com/Leaflet/Leaflet/pull/3528#issuecomment-134551575 + + if (typeof types === 'object') { + for (var type in types) { + L.DomEvent.once(el, type, types[type], fn); + } + return L.DomEvent; + } + + var handler = L.bind(function () { + L.DomEvent + .off(el, types, fn, context) + .off(el, types, handler, context); + }, L.DomEvent); + + // add a listener that's executed once and removed after that + return L.DomEvent + .on(el, types, fn, context) + .on(el, types, handler, context); +}; + + +/* +* Global events +*/ +L.U.Keys = { + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + TAB: 9, + ENTER: 13, + ESC: 27, + APPLE: 91, + SHIFT: 16, + ALT: 17, + CTRL: 18, + E: 69, + F: 70, + H: 72, + I: 73, + L: 76, + M: 77, + P: 80, + S: 83, + Z: 90 +}; + + +L.U.Help = L.Class.extend({ + + initialize: function (map) { + this.map = map; + this.box = L.DomUtil.create('div', 'umap-help-box with-transition dark', document.body); + var closeLink = L.DomUtil.create('a', 'umap-close-link', this.box); + closeLink.href = '#'; + L.DomUtil.add('i', 'umap-close-icon', closeLink); + var label = L.DomUtil.create('span', '', closeLink); + label.title = label.innerHTML = L._('Close'); + this.content = L.DomUtil.create('div', 'umap-help-content', this.box); + L.DomEvent.on(closeLink, 'click', this.hide, this); + }, + + onKeyDown: function (e) { + var key = e.keyCode, + ESC = 27; + if (key === ESC) { + this.hide(); + } + }, + + show: function () { + this.content.innerHTML = ''; + for (var i = 0, name; i < arguments.length; i++) { + name = arguments[i]; + L.DomUtil.add('div', 'umap-help-entry', this.content, this.resolve(name)); + } + L.DomUtil.addClass(document.body, 'umap-help-on'); + }, + + hide: function () { + L.DomUtil.removeClass(document.body, 'umap-help-on'); + }, + + visible: function () { + return L.DomUtil.hasClass(document.body, 'umap-help-on') + }, + + resolve: function (name) { + return typeof this[name] === 'function' ? this[name]() : this[name]; + }, + + button: function (container, entries) { + var helpButton = L.DomUtil.create('a', 'umap-help-button', container); + helpButton.href = '#'; + if (entries) { + L.DomEvent + .on(helpButton, 'click', L.DomEvent.stop) + .on(helpButton, 'click', function (e) { + var args = typeof entries === 'string' ? [entries] : entries; + this.show.apply(this, args); + }, this); + } + return helpButton; + }, + + edit: function () { + var container = L.DomUtil.create('div', ''), + self = this, + title = L.DomUtil.create('h3', '', container), + actionsContainer = L.DomUtil.create('ul', 'umap-edit-actions', container); + var addAction = function (action) { + var actionContainer = L.DomUtil.add('li', '', actionsContainer); + L.DomUtil.add('i', action.options.className, actionContainer), + L.DomUtil.add('span', '', actionContainer, action.options.tooltip); + L.DomEvent.on(actionContainer, 'click', action.addHooks, action); + L.DomEvent.on(actionContainer, 'click', self.hide, self); + }; + title.innerHTML = L._('Where do we go from here?'); + for (var id in this.map.helpMenuActions) { + addAction(this.map.helpMenuActions[id]); + } + return container; + }, + + importFormats: function () { + var container = L.DomUtil.create('div'); + L.DomUtil.add('h3', '', container, 'GeojSON'); + L.DomUtil.add('p', '', container, L._('All properties are imported.')); + L.DomUtil.add('h3', '', container, 'GPX'); + L.DomUtil.add('p', '', container, L._('Properties imported:') + 'name, desc'); + L.DomUtil.add('h3', '', container, 'KML'); + L.DomUtil.add('p', '', container, L._('Properties imported:') + 'name, description'); + L.DomUtil.add('h3', '', container, 'CSV'); + L.DomUtil.add('p', '', container, L._('Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.')); + L.DomUtil.add('h3', '', container, 'uMap'); + L.DomUtil.add('p', '', container, L._('Imports all umap data, including layers and settings.')); + return container; + }, + + textFormatting: function () { + var container = L.DomUtil.create('div'), + title = L.DomUtil.add('h3', '', container, L._('Text formatting')), + elements = L.DomUtil.create('ul', '', container); + L.DomUtil.add('li', '', elements, L._('*simple star for italic*')); + L.DomUtil.add('li', '', elements, L._('**double star for bold**')); + L.DomUtil.add('li', '', elements, L._('# one hash for main heading')); + L.DomUtil.add('li', '', elements, L._('## two hashes for second heading')); + L.DomUtil.add('li', '', elements, L._('### three hashes for third heading')); + L.DomUtil.add('li', '', elements, L._('Simple link: [[http://example.com]]')); + L.DomUtil.add('li', '', elements, L._('Link with text: [[http://example.com|text of the link]]')); + L.DomUtil.add('li', '', elements, L._('Image: {{http://image.url.com}}')); + L.DomUtil.add('li', '', elements, L._('Image with custom width (in px): {{http://image.url.com|width}}')); + L.DomUtil.add('li', '', elements, L._('Iframe: {{{http://iframe.url.com}}}')); + L.DomUtil.add('li', '', elements, L._('Iframe with custom height (in px): {{{http://iframe.url.com|height}}}')); + L.DomUtil.add('li', '', elements, L._('Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}')); + L.DomUtil.add('li', '', elements, L._('--- for an horizontal rule')); + return container; + }, + + dynamicProperties: function () { + var container = L.DomUtil.create('div'); + L.DomUtil.add('h3', '', container, L._('Dynamic properties')); + L.DomUtil.add('p', '', container, L._('Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.')); + return container; + }, + + formatURL: L._('Supported variables that will be dynamically replaced') + ': {bbox}, {lat}, {lng}, {zoom}, {east}, {north}..., {left}, {top}...', + formatIconURL: L._('You can use feature properties as variables: ex.: with "http://myserver.org/images/{name}.png", the {name} variable will be replaced by the "name" value of each markers.'), + colorValue: L._('Must be a valid CSS value (eg.: DarkBlue or #123456)'), + smoothFactor: L._('How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)'), + dashArray: L._('A comma separated list of numbers that defines the stroke dash pattern. Ex.: "5, 10, 15".'), + zoomTo: L._('Zoom level for automatic zooms'), + labelKey: L._('The name of the property to use as feature label (ex.: "nom")'), + stroke: L._('Whether to display or not polygons paths.'), + fill: L._('Whether to fill polygons with color.'), + fillColor: L._('Optional. Same as color if not set.'), + shortCredit: L._('Will be displayed in the bottom right corner of the map'), + longCredit: L._('Will be visible in the caption of the map'), + sortKey: L._('Property to use for sorting features'), + filterKey: L._('Comma separated list of properties to use when filtering features'), + interactive: L._('If false, the polygon will act as a part of the underlying map.'), + outlink: L._('Define link to open in a new window on polygon click.'), + dynamicRemoteData: L._('Fetch data each time map view changes.'), + proxyRemoteData: L._('To use if remote server doesn\'t allow cross domain (slower)'), + browsable: L._('Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…') +}); + + +L.U.Orderable = L.Evented.extend({ + + options: { + selector: 'li', + color: '#374E75' + }, + + initialize: function (parent, options) { + L.Util.setOptions(this, options); + this.parent = parent; + this.src = null; + this.dst = null; + this.els = this.parent.querySelectorAll(this.options.selector); + for (var i = 0; i < this.els.length; i++) this.makeDraggable(this.els[i]); + }, + + makeDraggable: function (node) { + node.draggable = true; + L.DomEvent.on(node, 'dragstart', this.onDragStart, this); + L.DomEvent.on(node, 'dragenter', this.onDragEnter, this); + L.DomEvent.on(node, 'dragover', this.onDragOver, this); + L.DomEvent.on(node, 'dragleave', this.onDragLeave, this); + L.DomEvent.on(node, 'drop', this.onDrop, this); + L.DomEvent.on(node, 'dragend', this.onDragEnd, this); + }, + + nodeIndex: function (node) { + return Array.prototype.indexOf.call(this.parent.children, node); + }, + + findTarget: function (node) { + while (node) { + if (this.nodeIndex(node) !== -1) return node; + node = node.parentNode; + } + }, + + onDragStart: function (e) { + // e.target is the source node. + this.src = e.target; + this.initialIndex = this.nodeIndex(this.src); + this.srcBackgroundColor = this.src.style.backgroundColor; + this.src.style.backgroundColor = this.options.color; + e.dataTransfer.effectAllowed = 'move'; + e.dataTransfer.setData('text/html', this.src.innerHTML); + }, + + onDragOver: function (e) { + if (e.preventDefault) e.preventDefault(); // Necessary. Allows us to drop. + e.dataTransfer.dropEffect = 'move'; + return false; + }, + + onDragEnter: function (e) { + // e.target is the current hover target. + var dst = this.findTarget(e.target); + if (!dst || dst === this.src) return; + this.dst = dst; + var targetIndex = this.nodeIndex(this.dst), + srcIndex = this.nodeIndex(this.src); + if (targetIndex > srcIndex) this.parent.insertBefore(this.dst, this.src); + else this.parent.insertBefore(this.src, this.dst); + }, + + onDragLeave: function (e) { + // e.target is previous target element. + }, + + onDrop: function (e) { + // e.target is current target element. + if (e.stopPropagation) e.stopPropagation(); // Stops the browser from redirecting. + if (!this.dst) return; + this.fire('drop', { + src: this.src, + initialIndex: this.initialIndex, + finalIndex: this.nodeIndex(this.src), + dst: this.dst + }); + return false; + }, + + onDragEnd: function (e) { + // e.target is the source node. + this.src.style.backgroundColor = this.srcBackgroundColor; + } + +}); diff --git a/umap/static/umap/js/umap.features.js b/umap/static/umap/js/umap.features.js new file mode 100644 index 00000000..e35c23b4 --- /dev/null +++ b/umap/static/umap/js/umap.features.js @@ -0,0 +1,1026 @@ +L.U.FeatureMixin = { + + staticOptions: {}, + + initialize: function (map, latlng, options) { + this.map = map; + if(typeof options === 'undefined') { + options = {}; + } + // DataLayer the marker belongs to + this.datalayer = options.datalayer || null; + this.properties = {_umap_options: {}}; + if (options.geojson) { + this.populate(options.geojson); + } + var isDirty = false, + self = this; + try { + Object.defineProperty(this, 'isDirty', { + get: function () { + return isDirty; + }, + set: function (status) { + if (!isDirty && status) { + self.fire('isdirty'); + } + isDirty = status; + if (self.datalayer) { + self.datalayer.isDirty = status; + } + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + this.preInit(); + this.addInteractions(); + this.parentClass.prototype.initialize.call(this, latlng, options); + }, + + preInit: function () {}, + + isReadOnly: function () { + return this.datalayer && this.datalayer.isRemoteLayer(); + }, + + view: function(e) { + if (this.map.editEnabled) return; + var outlink = this.properties._umap_options.outlink, + target = this.properties._umap_options.outlinkTarget + if (outlink) { + switch (target) { + case 'self': + window.location = outlink; + break; + case 'parent': + window.top.location = outlink; + break; + default: + var win = window.open(this.properties._umap_options.outlink); + } + return; + } + if (this.map.slideshow) this.map.slideshow.current = this; + this.attachPopup(); + this.openPopup(e && e.latlng || this.getCenter()); + }, + + openPopup: function () { + if (this.map.editEnabled) return; + this.parentClass.prototype.openPopup.apply(this, arguments); + }, + + edit: function(e) { + if(!this.map.editEnabled || this.isReadOnly()) return; + var container = L.DomUtil.create('div'); + + var builder = new L.U.FormBuilder(this, ['datalayer'], { + callback: function () {this.edit(e);} // removeLayer step will close the edit panel, let's reopen it + }); + container.appendChild(builder.build()); + + var properties = [], property; + for (var i = 0; i < this.datalayer._propertiesIndex.length; i++) { + property = this.datalayer._propertiesIndex[i]; + if (L.Util.indexOf(['name', 'description'], property) !== -1) {continue;} + properties.push(['properties.' + property, {label: property}]); + } + // We always want name and description for now (properties management to come) + properties.unshift('properties.description'); + properties.unshift('properties.name'); + builder = new L.U.FormBuilder(this, properties, + { + id: 'umap-feature-properties', + callback: this.resetTooltip + } + ); + container.appendChild(builder.build()); + this.appendEditFieldsets(container); + var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')); + this.getAdvancedEditActions(advancedActions); + this.map.ui.openPanel({data: {html: container}, className: 'dark'}); + this.map.editedFeature = this; + if (!this.isOnScreen()) this.bringToCenter(e); + }, + + getAdvancedEditActions: function (container) { + var deleteLink = L.DomUtil.create('a', 'button umap-delete', container); + deleteLink.href = '#'; + deleteLink.innerHTML = L._('Delete'); + L.DomEvent.on(deleteLink, 'click', function (e) { + L.DomEvent.stop(e); + if (this.confirmDelete()) this.map.ui.closePanel(); + }, this); + }, + + appendEditFieldsets: function (container) { + var optionsFields = this.getShapeOptions(); + var builder = new L.U.FormBuilder(this, optionsFields, { + id: 'umap-feature-shape-properties', + callback: this._redraw + }); + var shapeProperties = L.DomUtil.createFieldset(container, L._('Shape properties')); + shapeProperties.appendChild(builder.build()); + + var advancedOptions = this.getAdvancedOptions(); + var builder = new L.U.FormBuilder(this, advancedOptions, { + id: 'umap-feature-advanced-properties', + callback: this._redraw + }); + var advancedProperties = L.DomUtil.createFieldset(container, L._('Advanced properties')); + advancedProperties.appendChild(builder.build()); + + var interactionOptions = this.getInteractionOptions(); + builder = new L.U.FormBuilder(this, interactionOptions, { + callback: this._redraw + }); + var popupFieldset = L.DomUtil.createFieldset(container, L._('Interaction options')); + popupFieldset.appendChild(builder.build()); + + }, + + getInteractionOptions: function () { + return [ + 'properties._umap_options.popupTemplate', + 'properties._umap_options.showLabel', + 'properties._umap_options.labelDirection', + 'properties._umap_options.labelInteractive' + ]; + }, + + endEdit: function () {}, + + getDisplayName: function (fallback) { + if (fallback === undefined) fallback = this.datalayer.options.name; + var key = this.getOption('labelKey') || 'name'; + return this.properties[key] || this.properties.title || fallback; + }, + + hasPopupFooter: function () { + if (L.Browser.ielt9) return false; + if (this.datalayer.isRemoteLayer() && this.datalayer.options.remoteData.dynamic) return false; + return this.map.options.displayPopupFooter; + }, + + getPopupClass: function () { + return L.U.Popup[this.getOption('popupTemplate')] || L.U.Popup; + }, + + attachPopup: function () { + var Class = this.getPopupClass(); + this.bindPopup(new Class(this)); + }, + + confirmDelete: function () { + if (confirm(L._('Are you sure you want to delete the feature?'))) { + this.del(); + return true; + } + return false; + }, + + del: function () { + this.isDirty = true; + this.map.closePopup(); + if (this.datalayer) { + this.datalayer.removeLayer(this); + this.disconnectFromDataLayer(this.datalayer); + } + }, + + connectToDataLayer: function (datalayer) { + this.datalayer = datalayer; + this.options.renderer = this.datalayer.renderer; + }, + + disconnectFromDataLayer: function (datalayer) { + if (this.datalayer === datalayer) { + this.datalayer = null; + } + }, + + populate: function (feature) { + this.properties = L.extend({}, feature.properties); + this.properties._umap_options = L.extend({}, this.properties._storage_options, this.properties._umap_options); + // Retrocompat + if (this.properties._umap_options.clickable === false) { + this.properties._umap_options.interactive = false; + delete this.properties._umap_options.clickable; + } + }, + + changeDataLayer: function(datalayer) { + if(this.datalayer) { + this.datalayer.isDirty = true; + this.datalayer.removeLayer(this); + } + datalayer.addLayer(this); + datalayer.isDirty = true; + this._redraw(); + }, + + getOption: function (option, fallback) { + var value = fallback; + if (typeof this.staticOptions[option] !== 'undefined') { + value = this.staticOptions[option]; + } + else if (L.Util.usableOption(this.properties._umap_options, option)) { + value = this.properties._umap_options[option]; + } + else if (this.datalayer) { + value = this.datalayer.getOption(option); + } + else { + value = this.map.getOption(option); + } + return value; + }, + + bringToCenter: function (e) { + e = e || {}; + var latlng = e.latlng || this.getCenter(); + this.map.setView(latlng, e.zoomTo || this.map.getZoom()); + if (e.callback) e.callback.call(this); + }, + + zoomTo: function (e) { + e = e || {}; + var easing = e.easing !== undefined ? e.easing : this.map.options.easing; + if (easing) this.flyTo(); + else this.bringToCenter({zoomTo: this.getBestZoom(), callback: e.callback}); + }, + + getBestZoom: function () { + return this.getOption('zoomTo'); + }, + + flyTo: function () { + this.map.flyTo(this.getCenter(), this.getBestZoom()); + }, + + getNext: function () { + return this.datalayer.getNextFeature(this); + }, + + getPrevious: function () { + return this.datalayer.getPreviousFeature(this); + }, + + cloneProperties: function () { + var properties = L.extend({}, this.properties); + properties._umap_options = L.extend({}, properties._umap_options); + if (Object.keys && Object.keys(properties._umap_options).length === 0) { + delete properties._umap_options; // It can make a difference on big data sets + } + return properties; + }, + + deleteProperty: function (property) { + delete this.properties[property]; + this.makeDirty(); + }, + + renameProperty: function (from, to) { + this.properties[to] = this.properties[from]; + this.deleteProperty(from); + }, + + toGeoJSON: function () { + var geojson = this.parentClass.prototype.toGeoJSON.call(this); + geojson.properties = this.cloneProperties(); + return geojson; + }, + + addInteractions: function () { + this.on('contextmenu editable:vertex:contextmenu', this._showContextMenu, this); + this.on('click', this._onClick); + }, + + _onClick: function (e) { + if (this.map.measureTools && this.map.measureTools.enabled()) return; + this._popupHandlersAdded = true; // Prevent leaflet from managing event + if(!this.map.editEnabled) { + this.view(e); + } else if (!this.isReadOnly()) { + if(e.originalEvent.shiftKey) { + if(this._toggleEditing) + this._toggleEditing(e); + else + this.edit(e); + } + else { + new L.Toolbar.Popup(e.latlng, { + className: 'leaflet-inplace-toolbar', + anchor: this.getPopupToolbarAnchor(), + actions: this.getInplaceToolbarActions(e) + }).addTo(this.map, this, e.latlng); + } + } + L.DomEvent.stop(e); + }, + + getPopupToolbarAnchor: function () { + return [0, 0]; + }, + + getInplaceToolbarActions: function (e) { + return [L.U.ToggleEditAction, L.U.DeleteFeatureAction]; + }, + + _showContextMenu: function (e) { + L.DomEvent.stop(e); + var pt = this.map.mouseEventToContainerPoint(e.originalEvent); + e.relatedTarget = this; + this.map.contextmenu.showAt(pt, e); + }, + + makeDirty: function () { + this.isDirty = true; + }, + + getMap: function () { + return this.map; + }, + + getContextMenuItems: function (e) { + var items = []; + if (this.map.editEnabled && !this.isReadOnly()) { + items = items.concat(this.getContextMenuEditItems(e)); + } + return items; + }, + + getContextMenuEditItems: function () { + var items = ['-']; + if (this.map.editedFeature !== this) { + items.push( + { + text: L._('Edit this feature'), + callback: this.edit, + context: this, + iconCls: 'umap-edit' + } + ); + } + items = items.concat( + { + text: L._('Edit feature\'s layer'), + callback: this.datalayer.edit, + context: this.datalayer, + iconCls: 'umap-edit' + }, + { + text: L._('Delete this feature'), + callback: this.confirmDelete, + context: this, + iconCls: 'umap-delete' + }, + { + text: L._('Clone this feature'), + callback: this.clone, + context: this + } + ); + return items; + }, + + onRemove: function (map) { + this.parentClass.prototype.onRemove.call(this, map); + if (this.map.editedFeature === this) { + this.endEdit(); + this.map.ui.closePanel(); + } + }, + + resetTooltip: function () { + var displayName = this.getDisplayName(null), + showLabel = this.getOption('showLabel'), + oldLabelHover = this.getOption('labelHover'), + options = { + direction: this.getOption('labelDirection'), + interactive: this.getOption('labelInteractive') + }; + if (oldLabelHover && showLabel) showLabel = null; // Retrocompat. + options.permanent = showLabel === true; + this.unbindTooltip(); + if ((showLabel === true || showLabel === null) && displayName) this.bindTooltip(L.Util.escapeHTML(displayName), options); + }, + + matchFilter: function (filter, keys) { + filter = filter.toLowerCase(); + for (var i = 0; i < keys.length; i++) { + if ((this.properties[keys[i]] || '').toLowerCase().indexOf(filter) !== -1) return true; + } + return false; + }, + + onVertexRawClick: function (e) { + new L.Toolbar.Popup(e.latlng, { + className: 'leaflet-inplace-toolbar', + actions: this.getVertexActions(e) + }).addTo(this.map, this, e.latlng, e.vertex); + }, + + getVertexActions: function () { + return [L.U.DeleteVertexAction]; + }, + + isMulti: function () { + return false; + }, + + clone: function () { + var layer = this.datalayer.geojsonToFeatures(this.toGeoJSON()); + layer.isDirty = true; + layer.edit(); + return layer; + } + +}; + +L.U.Marker = L.Marker.extend({ + parentClass: L.Marker, + includes: [L.U.FeatureMixin, L.Mixin.Events], + + preInit: function () { + this.setIcon(this.getIcon()); + }, + + addInteractions: function () { + L.U.FeatureMixin.addInteractions.call(this); + this.on('dragend', function (e) { + this.isDirty = true; + this.edit(e); + }, this); + if (!this.isReadOnly()) this.on('mouseover', this._enableDragging); + this.on('mouseout', this._onMouseOut); + this._popupHandlersAdded = true; // prevent Leaflet from binding event on bindPopup + }, + + _onMouseOut: function () { + if(this.dragging && this.dragging._draggable && !this.dragging._draggable._moving) { + // Do not disable if the mouse went out while dragging + this._disableDragging(); + } + }, + + _enableDragging: function () { + // TODO: start dragging after 1 second on mouse down + if(this.map.editEnabled) { + if (!this.editEnabled()) this.enableEdit(); + // Enabling dragging on the marker override the Draggable._OnDown + // event, which, as it stopPropagation, refrain the call of + // _onDown with map-pane element, which is responsible to + // set the _moved to false, and thus to enable the click. + // We should find a cleaner way to handle this. + this.map.dragging._draggable._moved = false; + } + }, + + _disableDragging: function () { + if(this.map.editEnabled) { + if (this.editor && this.editor.drawing) return; // when creating a new marker, the mouse can trigger the mouseover/mouseout event + // do not listen to them + this.disableEdit(); + } + }, + + _redraw: function() { + if (this.datalayer && this.datalayer.isVisible()) { + this._initIcon(); + this.update(); + } + }, + + _initIcon: function () { + this.options.icon = this.getIcon(); + L.Marker.prototype._initIcon.call(this); + this.resetTooltip(); + }, + + disconnectFromDataLayer: function (datalayer) { + this.options.icon.datalayer = null; + L.U.FeatureMixin.disconnectFromDataLayer.call(this, datalayer); + }, + + _getIconUrl: function (name) { + if (typeof name === 'undefined') name = 'icon'; + return this.getOption(name + 'Url'); + }, + + getIconClass: function () { + return this.getOption('iconClass'); + }, + + getIcon: function () { + var Class = L.U.Icon[this.getIconClass()] || L.U.Icon.Default; + return new Class(this.map, {feature: this}); + }, + + getCenter: function () { + return this._latlng; + }, + + getClassName: function () { + return 'marker'; + }, + + getShapeOptions: function () { + return [ + 'properties._umap_options.color', + 'properties._umap_options.iconClass', + 'properties._umap_options.iconUrl' + ]; + }, + + getAdvancedOptions: function () { + return [ + 'properties._umap_options.zoomTo' + ]; + }, + + appendEditFieldsets: function (container) { + L.U.FeatureMixin.appendEditFieldsets.call(this, container); + var coordinatesOptions = [ + ['_latlng.lat', {handler: 'FloatInput', label: L._('Latitude')}], + ['_latlng.lng', {handler: 'FloatInput', label: L._('Longitude')}] + ]; + var builder = new L.U.FormBuilder(this, coordinatesOptions, { + callback: function () { + this._redraw(); + this.bringToCenter(); + }, + callbackContext: this + }); + var fieldset = L.DomUtil.createFieldset(container, L._('Coordinates')); + fieldset.appendChild(builder.build()); + }, + + bringToCenter: function (e) { + if (this.datalayer.isClustered() && !this._icon) { + // callback is mandatory for zoomToShowLayer + this.datalayer.layer.zoomToShowLayer(this, e.callback || function (){}); + } else { + L.U.FeatureMixin.bringToCenter.call(this, e); + } + }, + + isOnScreen: function () { + var bounds = this.map.getBounds(); + return bounds.contains(this._latlng); + }, + + getPopupToolbarAnchor: function () { + return this.options.icon.options.popupAnchor; + } + +}); + + +L.U.PathMixin = { + + connectToDataLayer: function (datalayer) { + L.U.FeatureMixin.connectToDataLayer.call(this, datalayer); + // We keep markers on their own layer on top of the paths. + this.options.pane = this.datalayer.pane; + }, + + edit: function (e) { + if(this.map.editEnabled) { + if (!this.editEnabled()) this.enableEdit(); + L.U.FeatureMixin.edit.call(this, e); + } + }, + + _toggleEditing: function(e) { + if(this.map.editEnabled) { + if(this.editEnabled()) { + this.endEdit(); + this.map.ui.closePanel(); + } + else { + this.edit(e); + } + } + // FIXME: disable when disabling global edit + L.DomEvent.stop(e); + }, + + styleOptions: [ + 'smoothFactor', + 'color', + 'opacity', + 'stroke', + 'weight', + 'fill', + 'fillColor', + 'fillOpacity', + 'dashArray', + 'interactive' + ], + + getShapeOptions: function () { + return [ + 'properties._umap_options.color', + 'properties._umap_options.opacity', + 'properties._umap_options.weight' + ]; + }, + + getAdvancedOptions: function () { + return [ + 'properties._umap_options.smoothFactor', + 'properties._umap_options.dashArray', + 'properties._umap_options.zoomTo' + ]; + }, + + setStyle: function (options) { + options = options || {}; + var option; + for (var idx in this.styleOptions) { + option = this.styleOptions[idx]; + options[option] = this.getOption(option); + } + if (options.interactive) this.options.pointerEvents = 'visiblePainted'; + else this.options.pointerEvents = 'stroke'; + this.parentClass.prototype.setStyle.call(this, options); + }, + + _redraw: function () { + this.setStyle(); + this.resetTooltip(); + }, + + onAdd: function (map) { + this._container = null; + this.setStyle(); + // Show tooltip again when Leaflet.label allow static label on path. + // cf https://github.com/Leaflet/Leaflet/pull/3952 + // this.map.on('showmeasure', this.showMeasureTooltip, this); + // this.map.on('hidemeasure', this.removeTooltip, this); + this.parentClass.prototype.onAdd.call(this, map); + if (this.editing && this.editing.enabled()) this.editing.addHooks(); + this.resetTooltip(); + }, + + onRemove: function (map) { + // this.map.off('showmeasure', this.showMeasureTooltip, this); + // this.map.off('hidemeasure', this.removeTooltip, this); + if (this.editing && this.editing.enabled()) this.editing.removeHooks(); + L.U.FeatureMixin.onRemove.call(this, map); + }, + + getBestZoom: function () { + if (this.options.zoomTo) return this.options.zoomTo; + var bounds = this.getBounds(); + return this.map.getBoundsZoom(bounds, true); + }, + + endEdit: function () { + this.disableEdit(); + L.U.FeatureMixin.endEdit.call(this); + }, + + _onMouseOver: function () { + if (this.map.measureTools && this.map.measureTools.enabled()) { + this.map.ui.tooltip({content: this.getMeasure(), anchor: this}); + } else if (this.map.editEnabled && !this.map.editedFeature) { + this.map.ui.tooltip({content: L._('Click to edit'), anchor: this}); + } + }, + + addInteractions: function () { + L.U.FeatureMixin.addInteractions.call(this); + this.on('mouseover', this._onMouseOver); + this.on('edit', this.makeDirty); + this.on('drag editable:drag', this._onDrag); + }, + + _onDrag: function () { + if (this._tooltip) this._tooltip.setLatLng(this.getCenter()); + }, + + transferShape: function (at, to) { + var shape = this.enableEdit().deleteShapeAt(at); + this.disableEdit(); + if (!shape) return; + to.enableEdit().appendShape(shape); + if (!this._latlngs.length || !this._latlngs[0].length) this.del(); + }, + + isolateShape: function (at) { + if (!this.isMulti()) return; + var shape = this.enableEdit().deleteShapeAt(at); + this.disableEdit(); + if (!shape) return; + var properties = this.cloneProperties(); + var other = new (this instanceof L.U.Polyline ? L.U.Polyline : L.U.Polygon)(this.map, shape, {geojson: {properties: properties}}); + this.datalayer.addLayer(other); + other.edit(); + return other; + }, + + getContextMenuItems: function (e) { + var items = L.U.FeatureMixin.getContextMenuItems.call(this, e); + items.push({ + text: L._('Display measure'), + callback: function () { + this.map.ui.alert({content: this.getMeasure(), level: 'info'}) + }, + context: this + }) + if (this.map.editEnabled && !this.isReadOnly() && this.isMulti()) { + items = items.concat(this.getContextMenuMultiItems(e)); + } + return items; + }, + + getContextMenuMultiItems: function (e) { + var items = ['-', { + text: L._('Remove shape from the multi'), + callback: function () { + this.enableEdit().deleteShapeAt(e.latlng); + }, + context: this + }]; + var shape = this.shapeAt(e.latlng); + if (this._latlngs.indexOf(shape) > 0) { + items.push({ + text: L._('Make main shape'), + callback: function () { + this.enableEdit().deleteShape(shape); + this.editor.prependShape(shape); + }, + context: this + }); + } + return items; + }, + + getContextMenuEditItems: function (e) { + var items = L.U.FeatureMixin.getContextMenuEditItems.call(this, e); + if (this.map.editedFeature && this.isSameClass(this.map.editedFeature) && this.map.editedFeature !== this) { + items.push({ + text: L._('Transfer shape to edited feature'), + callback: function () { + this.transferShape(e.latlng, this.map.editedFeature); + }, + context: this + }); + } + if (this.isMulti()) { + items.push({ + text: L._('Extract shape to separate feature'), + callback: function () { + this.isolateShape(e.latlng, this.map.editedFeature); + }, + context: this + }); + } + return items; + }, + + getInplaceToolbarActions: function (e) { + var items = L.U.FeatureMixin.getInplaceToolbarActions.call(this, e); + if (this.isMulti()) { + items.push(L.U.DeleteShapeAction); + items.push(L.U.ExtractShapeFromMultiAction); + } + return items; + }, + + isOnScreen: function () { + var bounds = this.map.getBounds(); + return bounds.overlaps(this.getBounds()); + } + +}; + +L.U.Polyline = L.Polyline.extend({ + parentClass: L.Polyline, + includes: [L.U.FeatureMixin, L.U.PathMixin, L.Mixin.Events], + + staticOptions: { + stroke: true, + fill: false + }, + + isSameClass: function (other) { + return other instanceof L.U.Polyline; + }, + + getClassName: function () { + return 'polyline'; + }, + + getMeasure: function () { + var length = L.GeoUtil.lineLength(this.map, this._defaultShape()); + return L.GeoUtil.readableDistance(length, this.map.measureTools.getMeasureUnit()); + }, + + getContextMenuEditItems: function (e) { + var items = L.U.PathMixin.getContextMenuEditItems.call(this, e), + vertexClicked = e.vertex, index; + if (!this.isMulti()) { + items.push({ + text: L._('Transform to polygon'), + callback: this.toPolygon, + context: this + }); + } + if (vertexClicked) { + index = e.vertex.getIndex(); + if (index !== 0 && index !== e.vertex.getLastIndex()) { + items.push({ + text: L._('Split line'), + callback: e.vertex.split, + context: e.vertex + }); + } else if (index === 0 || index === e.vertex.getLastIndex()) { + items.push({ + text: L._('Continue line (Ctrl-click)'), + callback: e.vertex.continue, + context: e.vertex.continue + }); + } + } + return items; + }, + + getContextMenuMultiItems: function (e) { + var items = L.U.PathMixin.getContextMenuMultiItems.call(this, e); + items.push({ + text: L._('Merge lines'), + callback: this.mergeShapes, + context: this + }); + return items; + }, + + toPolygon: function () { + var geojson = this.toGeoJSON(); + geojson.geometry.type = 'Polygon'; + geojson.geometry.coordinates = [L.Util.flattenCoordinates(geojson.geometry.coordinates)]; + var polygon = this.datalayer.geojsonToFeatures(geojson); + polygon.edit(); + this.del(); + }, + + getAdvancedEditActions: function (container) { + L.U.FeatureMixin.getAdvancedEditActions.call(this, container); + var toPolygon = L.DomUtil.create('a', 'button umap-to-polygon', container); + toPolygon.href = '#'; + toPolygon.innerHTML = L._('Transform to polygon'); + L.DomEvent.on(toPolygon, 'click', this.toPolygon, this); + }, + + _mergeShapes: function (from, to) { + var toLeft = to[0], + toRight = to[to.length - 1], + fromLeft = from[0], + fromRight = from[from.length - 1], + l2ldistance = toLeft.distanceTo(fromLeft), + l2rdistance = toLeft.distanceTo(fromRight), + r2ldistance = toRight.distanceTo(fromLeft), + r2rdistance = toRight.distanceTo(fromRight), + toMerge; + if (l2rdistance < Math.min(l2ldistance, r2ldistance, r2rdistance)) { + toMerge = [from, to]; + } else if (r2ldistance < Math.min(l2ldistance, l2rdistance, r2rdistance)) { + toMerge = [to, from]; + } else if (r2rdistance < Math.min(l2ldistance, l2rdistance, r2ldistance)) { + from.reverse(); + toMerge = [to, from]; + } else { + from.reverse(); + toMerge = [from, to]; + } + var a = toMerge[0], + b = toMerge[1], + p1 = this.map.latLngToContainerPoint(a[a.length - 1]), + p2 = this.map.latLngToContainerPoint(b[0]), + tolerance = 5; // px on screen + if (Math.abs(p1.x - p2.x) <= tolerance && Math.abs(p1.y - p2.y) <= tolerance) { + a.pop(); + } + return a.concat(b); + }, + + mergeShapes: function () { + if (!this.isMulti()) return; + var latlngs = this.getLatLngs(); + if (!latlngs.length) return; + while (latlngs.length > 1) { + latlngs.splice(0, 2, this._mergeShapes(latlngs[1], latlngs[0])); + } + this.setLatLngs(latlngs[0]); + if (!this.editEnabled()) this.edit(); + this.editor.reset(); + this.isDirty = true; + }, + + isMulti: function () { + return !L.LineUtil.isFlat(this._latlngs) && this._latlngs.length > 1; + }, + + getVertexActions: function (e) { + var actions = L.U.FeatureMixin.getVertexActions.call(this, e), + index = e.vertex.getIndex(); + if (index === 0 || index === e.vertex.getLastIndex()) actions.push(L.U.ContinueLineAction); + else actions.push(L.U.SplitLineAction); + return actions; + } + +}); + +L.U.Polygon = L.Polygon.extend({ + parentClass: L.Polygon, + includes: [L.U.FeatureMixin, L.U.PathMixin, L.Mixin.Events], + + isSameClass: function (other) { + return other instanceof L.U.Polygon; + }, + + getClassName: function () { + return 'polygon'; + }, + + getShapeOptions: function () { + var options = L.U.PathMixin.getShapeOptions(); + options.push('properties._umap_options.stroke', + 'properties._umap_options.fill', + 'properties._umap_options.fillColor', + 'properties._umap_options.fillOpacity' + ); + return options; + }, + + getInteractionOptions: function () { + var options = [ + ['properties._umap_options.interactive', {handler: 'Switch', label: L._('Allow interactions'), helpEntries: 'interactive', inheritable: true}], + ['properties._umap_options.outlink', {label: L._('Link to…'), helpEntries: 'outlink', placeholder: 'http://...', inheritable: true}], + ['properties._umap_options.outlinkTarget', {handler: 'OutlinkTarget', label: L._('Open link in…'), inheritable: true}] + ]; + return options.concat(L.U.FeatureMixin.getInteractionOptions()); + }, + + getMeasure: function () { + var area = L.GeoUtil.geodesicArea(this._defaultShape()); + return L.GeoUtil.readableArea(area, this.map.measureTools.getMeasureUnit()); + }, + + getContextMenuEditItems: function (e) { + var items = L.U.PathMixin.getContextMenuEditItems.call(this, e), + shape = this.shapeAt(e.latlng); + // No multi and no holes. + if (shape && !this.isMulti() && (L.LineUtil.isFlat(shape) || shape.length === 1)) { + items.push({ + text: L._('Transform to lines'), + callback: this.toPolyline, + context: this + }); + } + items.push({ + text: L._('Start a hole here'), + callback: this.startHole, + context: this + }); + return items; + }, + + startHole: function (e) { + this.enableEdit().newHole(e.latlng); + }, + + toPolyline: function () { + var geojson = this.toGeoJSON(); + geojson.geometry.type = 'LineString'; + geojson.geometry.coordinates = L.Util.flattenCoordinates(geojson.geometry.coordinates); + var polyline = this.datalayer.geojsonToFeatures(geojson); + polyline.edit(); + this.del(); + }, + + getAdvancedEditActions: function (container) { + L.U.FeatureMixin.getAdvancedEditActions.call(this, container); + var toPolyline = L.DomUtil.create('a', 'button umap-to-polyline', container); + toPolyline.href = '#'; + toPolyline.innerHTML = L._('Transform to lines'); + L.DomEvent.on(toPolyline, 'click', this.toPolyline, this); + }, + + isMulti: function () { + // Change me when Leaflet#3279 is merged. + return !L.LineUtil.isFlat(this._latlngs) && !L.LineUtil.isFlat(this._latlngs[0]) && this._latlngs.length > 1; + }, + + getInplaceToolbarActions: function (e) { + var items = L.U.PathMixin.getInplaceToolbarActions.call(this, e); + items.push(L.U.CreateHoleAction); + return items; + } + +}); diff --git a/umap/static/umap/js/umap.forms.js b/umap/static/umap/js/umap.forms.js new file mode 100644 index 00000000..bc8c72c5 --- /dev/null +++ b/umap/static/umap/js/umap.forms.js @@ -0,0 +1,744 @@ +L.FormBuilder.Element.include({ + + getParentNode: function () { + if (this.options.wrapper) { + return L.DomUtil.create(this.options.wrapper, this.options.wrapperClass || '', this.form); + } + var className = 'formbox'; + if (this.options.inheritable) { + className += this.get(true) === undefined ? ' inheritable undefined' : ' inheritable '; + } + className += ' umap-field-' + this.name; + this.wrapper = L.DomUtil.create('div', className, this.form); + this.header = L.DomUtil.create('div', 'header', this.wrapper); + if (this.options.inheritable) { + var undefine = L.DomUtil.add('a', 'button undefine', this.header, L._('clear')); + var define = L.DomUtil.add('a', 'button define', this.header, L._('define')); + L.DomEvent.on(define, 'click', function (e) { + L.DomEvent.stop(e); + this.fetch(); + this.fire('define'); + L.DomUtil.removeClass(this.wrapper, 'undefined'); + }, this); + L.DomEvent.on(undefine, 'click', function (e) { + L.DomEvent.stop(e); + L.DomUtil.addClass(this.wrapper, 'undefined'); + this.clear(); + this.sync(); + }, this); + } + this.quickContainer = L.DomUtil.create('span', 'quick-actions show-on-defined', this.header); + this.extendedContainer = L.DomUtil.create('div', 'show-on-defined', this.wrapper); + return this.extendedContainer; + }, + + getLabelParent: function () { + return this.header; + }, + + clear: function () { + this.input.value = ''; + }, + + get: function (own) { + if (!this.options.inheritable || own) return this.builder.getter(this.field); + var path = this.field.split('.'), + key = path[path.length - 1]; + return this.obj.getOption(key); + }, + + buildLabel: function () { + if (this.options.label) { + this.label = L.DomUtil.create('label', '', this.getLabelParent()); + this.label.innerHTML = this.label.title = this.options.label; + if (this.options.helpEntries) this.builder.map.help.button(this.label, this.options.helpEntries); + else if (this.options.helpText) { + var info = L.DomUtil.create('i', 'info', this.label); + L.DomEvent.on(info, 'mouseover', function () { + this.builder.map.ui.tooltip({anchor: info, content: this.options.helpText, position: 'top'}); + }, this); + } + } + } + +}); + +L.FormBuilder.Select.include({ + + clear: function () { + this.select.value = ''; + }, + + getDefault: function () { + if (this.options.inheritable) return undefined + else return L.FormBuilder.Select.prototype.getDefault.call(this) + } + +}); + +L.FormBuilder.CheckBox.include({ + + value: function () { + return L.DomUtil.hasClass(this.wrapper, 'undefined') ? undefined : this.input.checked; + }, + + clear: function () { + this.fetch(); + } + +}); + +L.FormBuilder.ColorPicker = L.FormBuilder.Input.extend({ + + colors: [ + 'Black', 'Navy', 'DarkBlue', 'MediumBlue', 'Blue', 'DarkGreen', + 'Green', 'Teal', 'DarkCyan', 'DeepSkyBlue', 'DarkTurquoise', + 'MediumSpringGreen', 'Lime', 'SpringGreen', 'Aqua', 'Cyan', + 'MidnightBlue', 'DodgerBlue', 'LightSeaGreen', 'ForestGreen', + 'SeaGreen', 'DarkSlateGray', 'DarkSlateGrey', 'LimeGreen', + 'MediumSeaGreen', 'Turquoise', 'RoyalBlue', 'SteelBlue', + 'DarkSlateBlue', 'MediumTurquoise', 'Indigo', 'DarkOliveGreen', + 'CadetBlue', 'CornflowerBlue', 'MediumAquaMarine', 'DimGray', + 'DimGrey', 'SlateBlue', 'OliveDrab', 'SlateGray', 'SlateGrey', + 'LightSlateGray', 'LightSlateGrey', 'MediumSlateBlue', 'LawnGreen', + 'Chartreuse', 'Aquamarine', 'Maroon', 'Purple', 'Olive', 'Gray', + 'Grey', 'SkyBlue', 'LightSkyBlue', 'BlueViolet', 'DarkRed', + 'DarkMagenta', 'SaddleBrown', 'DarkSeaGreen', 'LightGreen', + 'MediumPurple', 'DarkViolet', 'PaleGreen', 'DarkOrchid', + 'YellowGreen', 'Sienna', 'Brown', 'DarkGray', 'DarkGrey', + 'LightBlue', 'GreenYellow', 'PaleTurquoise', 'LightSteelBlue', + 'PowderBlue', 'FireBrick', 'DarkGoldenRod', 'MediumOrchid', + 'RosyBrown', 'DarkKhaki', 'Silver', 'MediumVioletRed', 'IndianRed', + 'Peru', 'Chocolate', 'Tan', 'LightGray', 'LightGrey', 'Thistle', + 'Orchid', 'GoldenRod', 'PaleVioletRed', 'Crimson', 'Gainsboro', + 'Plum', 'BurlyWood', 'LightCyan', 'Lavender', 'DarkSalmon', + 'Violet', 'PaleGoldenRod', 'LightCoral', 'Khaki', 'AliceBlue', + 'HoneyDew', 'Azure', 'SandyBrown', 'Wheat', 'Beige', 'WhiteSmoke', + 'MintCream', 'GhostWhite', 'Salmon', 'AntiqueWhite', 'Linen', + 'LightGoldenRodYellow', 'OldLace', 'Red', 'Fuchsia', 'Magenta', + 'DeepPink', 'OrangeRed', 'Tomato', 'HotPink', 'Coral', 'DarkOrange', + 'LightSalmon', 'Orange', 'LightPink', 'Pink', 'Gold', 'PeachPuff', + 'NavajoWhite', 'Moccasin', 'Bisque', 'MistyRose', 'BlanchedAlmond', + 'PapayaWhip', 'LavenderBlush', 'SeaShell', 'Cornsilk', + 'LemonChiffon', 'FloralWhite', 'Snow', 'Yellow', 'LightYellow', + 'Ivory', 'White' + ], + + getParentNode: function () { + L.FormBuilder.CheckBox.prototype.getParentNode.call(this); + return this.quickContainer; + }, + + build: function () { + L.FormBuilder.Input.prototype.build.call(this); + this.input.placeholder = this.options.placeholder || L._('Inherit'); + this.container = L.DomUtil.create('div', 'umap-color-picker', this.extendedContainer); + this.container.style.display = 'none'; + for (var idx in this.colors) { + this.addColor(this.colors[idx]); + } + this.spreadColor(); + this.input.autocomplete = 'off'; + L.DomEvent.on(this.input, 'focus', this.onFocus, this); + L.DomEvent.on(this.input, 'blur', this.onBlur, this); + L.DomEvent.on(this.input, 'change', this.sync, this); + this.on('define', this.onFocus); + }, + + onFocus: function () { + this.container.style.display = 'block'; + this.spreadColor(); + }, + + onBlur: function () { + var self = this, + closePicker = function () { + self.container.style.display = 'none'; + }; + // We must leave time for the click to be listened. + window.setTimeout(closePicker, 100); + }, + + sync: function () { + this.spreadColor(); + L.FormBuilder.Input.prototype.sync.call(this); + }, + + spreadColor: function () { + if (this.input.value) this.input.style.backgroundColor = this.input.value; + else this.input.style.backgroundColor = 'inherit'; + }, + + addColor: function (colorName) { + var span = L.DomUtil.create('span', '', this.container); + span.style.backgroundColor = span.title = colorName; + var updateColorInput = function () { + this.input.value = colorName; + this.sync(); + this.container.style.display = 'none'; + }; + L.DomEvent.on(span, 'mousedown', updateColorInput, this); + } + +}); + +L.FormBuilder.TextColorPicker = L.FormBuilder.ColorPicker.extend({ + colors: [ + 'Black', 'DarkSlateGrey', 'DimGrey', 'SlateGrey', 'LightSlateGrey', + 'Grey', 'DarkGrey', 'LightGrey', 'White' + ] + +}); + +L.FormBuilder.IconClassSwitcher = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['Default', L._('Default')], + ['Circle', L._('Circle')], + ['Drop', L._('Drop')], + ['Ball', L._('Ball')] + ] + +}); + +L.FormBuilder.PopupTemplate = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['Default', L._('Name and description')], + ['Large', L._('Name and description (large)')], + ['Table', L._('Table')], + ['GeoRSSImage', L._('GeoRSS (title + image)')], + ['GeoRSSLink', L._('GeoRSS (only link)')], + ['SimplePanel', L._('Side panel')] + ], + + toJS: function () { + var value = L.FormBuilder.Select.prototype.toJS.apply(this); + if (value === 'table') { value = 'Table'; } + return value; + } + +}); + +L.FormBuilder.LayerTypeChooser = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['Default', L._('Default')], + ['Cluster', L._('Clustered')], + ['Heat', L._('Heatmap')] + ] + +}); + +L.FormBuilder.SlideshowDelay = L.FormBuilder.IntSelect.extend({ + + getOptions: function () { + var options = []; + for (var i = 1; i < 30; i++) { + options.push([i * 1000, L._('{delay} seconds', {delay: i})]); + } + return options; + } + +}); + +L.FormBuilder.DataLayerSwitcher = L.FormBuilder.Select.extend({ + + getOptions: function () { + var options = []; + this.builder.map.eachDataLayerReverse(function (datalayer) { + if(datalayer.isLoaded() && !datalayer.isRemoteLayer() && datalayer.canBrowse()) { + options.push([L.stamp(datalayer), datalayer.getName()]); + } + }); + return options; + }, + + toHTML: function () { + return L.stamp(this.obj.datalayer); + }, + + toJS: function () { + return this.builder.map.datalayers[this.value()]; + }, + + set: function () { + this.builder.map.lastUsedDataLayer = this.toJS(); + this.obj.changeDataLayer(this.toJS()); + } + +}); + +L.FormBuilder.onLoadPanel = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['none', L._('None')], + ['caption', L._('Caption')], + ['databrowser', L._('Data browser')] + ] + +}); + +L.FormBuilder.DataFormat = L.FormBuilder.Select.extend({ + + selectOptions: [ + [undefined, L._('Choose the data format')], + ['geojson', 'geojson'], + ['osm', 'osm'], + ['csv', 'csv'], + ['gpx', 'gpx'], + ['kml', 'kml'], + ['georss', 'georss'] + ] + +}); + +L.FormBuilder.LabelDirection = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['auto', L._('Automatic')], + ['left', L._('On the left')], + ['right', L._('On the right')], + ['top', L._('On the top')], + ['bottom', L._('On the bottom')] + ] + +}); + +L.FormBuilder.LicenceChooser = L.FormBuilder.Select.extend({ + + getOptions: function () { + var licences = [], + licencesList = this.builder.obj.options.licences, + licence; + for (var i in licencesList) { + licence = licencesList[i]; + licences.push([i, licence.name]); + } + return licences; + }, + + toHTML: function () { + return this.get().name; + }, + + toJS: function () { + return this.builder.obj.options.licences[this.value()]; + } + +}); + + +L.FormBuilder.NullableBoolean = L.FormBuilder.Select.extend({ + selectOptions: [ + [undefined, L._('inherit')], + [true, L._('yes')], + [false, L._('no')] + ], + + toJS: function () { + var value = this.value(); + switch (value) { + case 'true': + case true: + value = true; + break; + case 'false': + case false: + value = false; + break; + default: + value = undefined; + } + return value; + } + +}); + +L.FormBuilder.IconUrl = L.FormBuilder.Input.extend({ + + type: function () { + return 'hidden'; + }, + + build: function () { + L.FormBuilder.Input.prototype.build.call(this); + this.parentContainer = L.DomUtil.create('div', 'umap-form-iconfield', this.parentNode); + this.buttonsContainer = L.DomUtil.create('div', '', this.parentContainer); + this.pictogramsContainer = L.DomUtil.create('div', 'umap-pictogram-list', this.parentContainer); + this.input.type = 'hidden'; + this.input.placeholder = L._('Url'); + this.udpatePreview(); + this.on('define', this.fetchIconList); + }, + + udpatePreview: function () { + if (this.value() && this.value().indexOf('{') === -1) { // Do not try to render URL with variables + var img = L.DomUtil.create('img', '', L.DomUtil.create('div', 'umap-icon-choice', this.buttonsContainer)); + img.src = this.value(); + L.DomEvent.on(img, 'click', this.fetchIconList, this); + } + this.button = L.DomUtil.create('a', '', this.buttonsContainer); + this.button.innerHTML = this.value() ? L._('Change symbol') : L._('Add symbol'); + this.button.href = '#'; + L.DomEvent + .on(this.button, 'click', L.DomEvent.stop) + .on(this.button, 'click', this.fetchIconList, this); + }, + + addIconPreview: function (pictogram) { + var baseClass = 'umap-icon-choice', + value = pictogram.src, + className = value === this.value() ? baseClass + ' selected' : baseClass, + container = L.DomUtil.create('div', className, this.pictogramsContainer), + img = L.DomUtil.create('img', '', container); + img.src = value; + if (pictogram.name && pictogram.attribution) { + img.title = pictogram.name + ' — © ' + pictogram.attribution; + } + L.DomEvent.on(container, 'click', function (e) { + this.input.value = value; + this.sync(); + this.unselectAll(this.pictogramsContainer); + L.DomUtil.addClass(container, 'selected'); + this.pictogramsContainer.innerHTML = ''; + this.udpatePreview(); + }, this); + }, + + clear: function () { + this.input.value = ''; + this.unselectAll(this.pictogramsContainer); + this.sync(); + this.pictogramsContainer.innerHTML = ''; + this.udpatePreview(); + }, + + buildIconList: function (data) { + this.pictogramsContainer.innerHTML = ''; + this.buttonsContainer.innerHTML = ''; + for (var idx in data.pictogram_list) { + this.addIconPreview(data.pictogram_list[idx]); + } + var cancelButton = L.DomUtil.create('a', '', this.pictogramsContainer); + cancelButton.innerHTML = L._('Cancel'); + cancelButton.href = '#'; + cancelButton.style.display = 'block'; + cancelButton.style.clear = 'both'; + L.DomEvent + .on(cancelButton, 'click', L.DomEvent.stop) + .on(cancelButton, 'click', function (e) { + this.pictogramsContainer.innerHTML = ''; + this.udpatePreview(); + }, this); + var customButton = L.DomUtil.create('a', '', this.pictogramsContainer); + customButton.innerHTML = L._('Set URL'); + customButton.href = '#'; + customButton.style.display = 'block'; + customButton.style.clear = 'both'; + this.builder.map.help.button(customButton, 'formatIconURL'); + L.DomEvent + .on(customButton, 'click', L.DomEvent.stop) + .on(customButton, 'click', function (e) { + this.input.type = 'url'; + this.pictogramsContainer.innerHTML = ''; + }, this); + }, + + fetchIconList: function (e) { + this.builder.map.get(this.builder.map.options.urls.pictogram_list_json, { + callback: this.buildIconList, + context: this + }); + }, + + unselectAll: function (container) { + var els = container.querySelectorAll('div.selected'); + for (var el in els) { + if (els.hasOwnProperty(el)) L.DomUtil.removeClass(els[el], 'selected'); + } + } + +}); + +L.FormBuilder.Url = L.FormBuilder.Input.extend({ + + type: function () { + return 'url'; + } + +}); + +L.FormBuilder.Switch = L.FormBuilder.CheckBox.extend({ + + getParentNode: function () { + L.FormBuilder.CheckBox.prototype.getParentNode.call(this); + if (this.options.inheritable) return this.quickContainer; + return this.extendedContainer; + }, + + build: function () { + L.FormBuilder.CheckBox.prototype.build.apply(this); + if (this.options.inheritable) this.label = L.DomUtil.create('label', '', this.input.parentNode); + else this.input.parentNode.appendChild(this.label); + L.DomUtil.addClass(this.input.parentNode, 'with-switch'); + var id = (this.builder.options.id || Date.now()) + '.' + this.name; + this.label.setAttribute('for', id); + L.DomUtil.addClass(this.input, 'switch'); + this.input.id = id; + } + +}); + +L.FormBuilder.MultiChoice = L.FormBuilder.Element.extend({ + + default: 'null', + className: 'umap-multiplechoice', + + clear: function () { + var checked = this.container.querySelector('input[type="radio"]:checked'); + if (checked) checked.checked = false; + }, + + fetch: function () { + var value = this.backup = this.toHTML(); + if (value === null || value === undefined) value = this.default; + this.container.querySelector('input[type="radio"][value="' + value + '"]').checked = true; + }, + + value: function () { + var checked = this.container.querySelector('input[type="radio"]:checked'); + if (checked) return checked.value; + }, + + getChoices: function () { + return this.options.choices || this.choices; + }, + + build: function () { + var choices = this.getChoices(); + this.container = L.DomUtil.create('div', this.className + ' by' + choices.length, this.parentNode); + for (var i = 0; i < choices.length; i++) { + this.addChoice(choices[i][0], choices[i][1], i); + } + this.fetch(); + }, + + addChoice: function (value, label, counter) { + var input = L.DomUtil.create('input', '', this.container); + label = L.DomUtil.add('label', '', this.container, label); + input.type = 'radio'; + input.name = this.name; + input.value = value; + var id = Date.now() + '.' + this.name + '.' + counter; + label.setAttribute('for', id); + input.id = id; + L.DomEvent.on(input, 'change', this.sync, this); + } + +}); + +L.FormBuilder.TernaryChoices = L.FormBuilder.MultiChoice.extend({ + + default: 'null', + + toJS: function () { + var value = this.value(); + switch (value) { + case 'true': + case true: + value = true; + break; + case 'false': + case false: + value = false; + break; + default: + value = null; + } + return value; + } + +}); + +L.FormBuilder.ControlChoice = L.FormBuilder.TernaryChoices.extend({ + + choices: [ + [true, L._('always')], + [false, L._('never')], + ['null', L._('hidden')] + ] + +}); + + +L.FormBuilder.LabelChoice = L.FormBuilder.TernaryChoices.extend({ + + default: false, + + choices: [ + [true, L._('always')], + [false, L._('never')], + ['null', L._('on hover')] + ] + +}); + +L.FormBuilder.DataLayersControl = L.FormBuilder.ControlChoice.extend({ + + choices: [ + [true, L._('collapsed')], + ['expanded', L._('expanded')], + [false, L._('never')], + ['null', L._('hidden')] + ], + + toJS: function () { + var value = this.value(); + if (value !== 'expanded') value = L.FormBuilder.ControlChoice.prototype.toJS.call(this); + return value; + } + +}); + +L.FormBuilder.OutlinkTarget = L.FormBuilder.MultiChoice.extend({ + + default: 'blank', + + choices: [ + ['blank', L._('new window')], + ['self', L._('iframe')], + ['parent', L._('parent window')] + ] + +}); + +L.FormBuilder.Range = L.FormBuilder.Input.extend({ + + type: function () { + return 'range'; + }, + + value: function () { + return L.DomUtil.hasClass(this.wrapper, 'undefined') ? undefined : this.input.value; + } + +}); + + +L.FormBuilder.ManageOwner = L.FormBuilder.Element.extend({ + + build: function () { + var options = {className: 'edit-owner'}; + options.on_select = (choice) => { + this._value = { + 'id': choice.item.value, + 'name': choice.item.label, + 'url': choice.item.url + }; + this.set(); + } + this.autocomplete = new L.U.AutoComplete.Ajax.Select(this.parentNode, options); + var owner = this.toHTML(); + if (owner) this.autocomplete.displaySelected({'item': {'value': owner.id, 'label': owner.name}}); + }, + + value: function () { + return this._value; + } + +}); + + +L.FormBuilder.ManageEditors = L.FormBuilder.Element.extend({ + + build: function () { + var options = {className: 'edit-editors'}; + options.on_select = (choice) => { + this._values.push({ + 'id': choice.item.value, + 'name': choice.item.label, + 'url': choice.item.url + }); + this.set(); + } + options.on_unselect = (choice) => { + var index = this._values.findIndex((item) => item.id === choice.item.value); + if (index !== -1) { + this._values.splice(index, 1); + this.set(); + } + } + this.autocomplete = new L.U.AutoComplete.Ajax.SelectMultiple(this.parentNode, options); + this._values = this.toHTML(); + if (this._values) for (var i = 0; i < this._values.length; i++) this.autocomplete.displaySelected({'item': {'value': this._values[i].id, 'label': this._values[i].name}}); + }, + + value: function () { + return this._values; + } + +}); + +L.U.FormBuilder = L.FormBuilder.extend({ + + options: { + className: 'umap-form' + }, + + defaultOptions: { + name: {label: L._('name')}, + description: {label: L._('description'), handler: 'Textarea', helpEntries: 'textFormatting'}, + color: {handler: 'ColorPicker', label: L._('color'), helpEntries: 'colorValue', inheritable: true}, + opacity: {handler: 'Range', min: 0.1, max: 1, step: 0.1, label: L._('opacity'), inheritable: true}, + stroke: {handler: 'Switch', label: L._('stroke'), helpEntries: 'stroke', inheritable: true}, + weight: {handler: 'Range', min: 1, max: 20, step: 1, label: L._('weight'), inheritable: true}, + fill: {handler: 'Switch', label: L._('fill'), helpEntries: 'fill', inheritable: true}, + fillColor: {handler: 'ColorPicker', label: L._('fill color'), helpEntries: 'fillColor', inheritable: true}, + fillOpacity: {handler: 'Range', min: 0.1, max: 1, step: 0.1, label: L._('fill opacity'), inheritable: true}, + smoothFactor: {handler: 'Range', min: 0, max: 10, step: 0.5, label: L._('Simplify'), helpEntries: 'smoothFactor', inheritable: true}, + dashArray: {label: L._('dash array'), helpEntries: 'dashArray', inheritable: true}, + iconClass: {handler: 'IconClassSwitcher', label: L._('Icon shape'), inheritable: true}, + iconUrl: {handler: 'IconUrl', label: L._('Icon symbol'), inheritable: true}, + popupTemplate: {handler: 'PopupTemplate', label: L._('Popup style'), inheritable: true}, + popupContentTemplate: {label: L._('Popup content template'), handler: 'Textarea', helpEntries: ['dynamicProperties', 'textFormatting'], placeholder: '# {name}', inheritable: true}, + datalayer: {handler: 'DataLayerSwitcher', label: L._('Choose the layer of the feature')}, + moreControl: {handler: 'Switch', label: L._('Do you want to display the «more» control?')}, + scrollWheelZoom: {handler: 'Switch', label: L._('Allow scroll wheel zoom?')}, + miniMap: {handler: 'Switch', label: L._('Do you want to display a minimap?')}, + scaleControl: {handler: 'Switch', label: L._('Do you want to display the scale control?')}, + onLoadPanel: {handler: 'onLoadPanel', label: L._('Do you want to display a panel on load?')}, + displayPopupFooter: {handler: 'Switch', label: L._('Do you want to display popup footer?')}, + captionBar: {handler: 'Switch', label: L._('Do you want to display a caption bar?')}, + zoomTo: {handler: 'IntInput', placeholder: L._('Inherit'), helpEntries: 'zoomTo', label: L._('Default zoom level'), inheritable: true}, + showLabel: {handler: 'LabelChoice', label: L._('Display label'), inheritable: true}, + labelDirection: {handler: 'LabelDirection', label: L._('Label direction'), inheritable: true}, + labelInteractive: {handler: 'Switch', label: L._('Labels are clickable'), inheritable: true}, + labelKey: {helpEntries: 'labelKey', placeholder: L._('Default: name'), label: L._('Label key'), inheritable: true}, + zoomControl: {handler: 'ControlChoice', label: L._('Display the zoom control')}, + searchControl: {handler: 'ControlChoice', label: L._('Display the search control')}, + fullscreenControl: {handler: 'ControlChoice', label: L._('Display the fullscreen control')}, + embedControl: {handler: 'ControlChoice', label: L._('Display the embed control')}, + locateControl: {handler: 'ControlChoice', label: L._('Display the locate control')}, + measureControl: {handler: 'ControlChoice', label: L._('Display the measure control')}, + tilelayersControl: {handler: 'ControlChoice', label: L._('Display the tile layers control')}, + editinosmControl: {handler: 'ControlChoice', label: L._('Display the control to open OpenStreetMap editor')}, + datalayersControl: {handler: 'DataLayersControl', label: L._('Display the data layers control')}, + }, + + initialize: function (obj, fields, options) { + this.map = obj.getMap(); + L.FormBuilder.prototype.initialize.call(this, obj, fields, options); + this.on('finish', this.finish); + }, + + setter: function (field, value) { + L.FormBuilder.prototype.setter.call(this, field, value); + this.obj.isDirty = true; + }, + + finish: function () { + this.map.ui.closePanel(); + } + +}); diff --git a/umap/static/umap/js/umap.icon.js b/umap/static/umap/js/umap.icon.js new file mode 100644 index 00000000..f98cc0c4 --- /dev/null +++ b/umap/static/umap/js/umap.icon.js @@ -0,0 +1,181 @@ +L.U.Icon = L.DivIcon.extend({ + initialize: function(map, options) { + this.map = map; + var default_options = { + iconSize: null, // Made in css + iconUrl: this.map.getDefaultOption('iconUrl'), + feature: null + }; + options = L.Util.extend({}, default_options, options); + L.Icon.prototype.initialize.call(this, options); + this.feature = this.options.feature; + if (this.feature && this.feature.isReadOnly()) { + this.options.className += ' readonly'; + } + }, + + _getIconUrl: function (name) { + var url; + if(this.feature && this.feature._getIconUrl(name)) url = this.feature._getIconUrl(name); + else url = this.options[name + 'Url']; + return this.formatUrl(url, this.feature); + }, + + _getColor: function () { + var color; + if(this.feature) color = this.feature.getOption('color'); + else if (this.options.color) color = this.options.color; + else color = this.map.getDefaultOption('color'); + return color; + }, + + formatUrl: function (url, feature) { + return L.Util.greedyTemplate(url || '', feature ? feature.properties : {}); + } + +}); + +L.U.Icon.Default = L.U.Icon.extend({ + default_options: { + iconAnchor: new L.Point(16, 40), + popupAnchor: new L.Point(0, -40), + tooltipAnchor: new L.Point(16, -24), + className: 'umap-div-icon' + }, + + initialize: function(map, options) { + options = L.Util.extend({}, this.default_options, options); + L.U.Icon.prototype.initialize.call(this, map, options); + }, + + _setColor: function() { + var color = this._getColor(); + this.elements.container.style.backgroundColor = color; + this.elements.arrow.style.borderTopColor = color; + }, + + createIcon: function() { + this.elements = {}; + this.elements.main = L.DomUtil.create('div'); + this.elements.container = L.DomUtil.create('div', 'icon_container', this.elements.main); + this.elements.arrow = L.DomUtil.create('div', 'icon_arrow', this.elements.main); + this.elements.img = L.DomUtil.create('img', null, this.elements.container); + var src = this._getIconUrl('icon'); + if (src) this.elements.img.src = src; + this._setColor(); + this._setIconStyles(this.elements.main, 'icon'); + return this.elements.main; + } + +}); + +L.U.Icon.Circle = L.U.Icon.extend({ + initialize: function(map, options) { + var default_options = { + iconAnchor: new L.Point(6, 6), + popupAnchor: new L.Point(0, -6), + tooltipAnchor: new L.Point(6, 0), + className: 'umap-circle-icon' + }; + options = L.Util.extend({}, default_options, options); + L.U.Icon.prototype.initialize.call(this, map, options); + }, + + _setColor: function() { + this.elements.main.style.backgroundColor = this._getColor(); + }, + + createIcon: function() { + this.elements = {}; + this.elements.main = L.DomUtil.create('div'); + this.elements.main.innerHTML = ' '; + this._setColor(); + this._setIconStyles(this.elements.main, 'icon'); + return this.elements.main; + } + +}); + +L.U.Icon.Drop = L.U.Icon.Default.extend({ + default_options: { + iconAnchor: new L.Point(16, 42), + popupAnchor: new L.Point(0, -42), + tooltipAnchor: new L.Point(16, -24), + className: 'umap-drop-icon' + } +}); + +L.U.Icon.Ball = L.U.Icon.Default.extend({ + default_options: { + iconAnchor: new L.Point(8, 30), + popupAnchor: new L.Point(0, -28), + tooltipAnchor: new L.Point(8, -23), + className: 'umap-ball-icon' + }, + + createIcon: function() { + this.elements = {}; + this.elements.main = L.DomUtil.create('div'); + this.elements.container = L.DomUtil.create('div', 'icon_container', this.elements.main); + this.elements.arrow = L.DomUtil.create('div', 'icon_arrow', this.elements.main); + this._setColor(); + this._setIconStyles(this.elements.main, 'icon'); + return this.elements.main; + }, + + _setColor: function() { + var color = this._getColor('color'), + background; + if (L.Browser.ielt9) { + background = color; + } + else if (L.Browser.webkit) { + background = '-webkit-gradient( radial, 6 38%, 0, 6 38%, 8, from(white), to(' + color + ') )'; + } + else { + background = 'radial-gradient(circle at 6px 38% , white -4px, ' + color + ' 8px) repeat scroll 0 0 transparent'; + } + this.elements.container.style.background = background; + } + +}); + +var _CACHE_COLOR = {}; +L.U.Icon.Cluster = L.DivIcon.extend({ + options: { + iconSize: [40, 40] + }, + + initialize: function (datalayer, cluster) { + this.datalayer = datalayer; + this.cluster = cluster; + }, + + createIcon: function () { + var container = L.DomUtil.create('div', 'leaflet-marker-icon marker-cluster'), + div = L.DomUtil.create('div', '', container), + span = L.DomUtil.create('span', '', div), + backgroundColor = this.datalayer.getColor(); + span.innerHTML = this.cluster.getChildCount(); + div.style.backgroundColor = backgroundColor; + return container; + }, + + computeTextColor: function (el) { + var color, + backgroundColor = this.datalayer.getColor(); + if (this.datalayer.options.cluster && this.datalayer.options.cluster.textColor) { + color = this.datalayer.options.cluster.textColor; + } + if (!color) { + if (typeof _CACHE_COLOR[backgroundColor] === 'undefined') { + color = L.DomUtil.TextColorFromBackgroundColor(el); + _CACHE_COLOR[backgroundColor] = color; + } else { + color = _CACHE_COLOR[backgroundColor]; + } + } + return color; + } + +}); diff --git a/umap/static/umap/js/umap.js b/umap/static/umap/js/umap.js new file mode 100644 index 00000000..27f3aeed --- /dev/null +++ b/umap/static/umap/js/umap.js @@ -0,0 +1,1647 @@ +L.Map.mergeOptions({ + base_layers: null, + overlay_layers: null, + datalayers: [], + center: [4, 50], + zoom: 6, + hash: true, + default_color: 'DarkBlue', + default_smoothFactor: 1.0, + default_opacity: 0.5, + default_fillOpacity: 0.3, + default_stroke: true, + default_fill: true, + default_weight: 3, + default_iconClass: 'Default', + default_zoomTo: 16, + default_popupContentTemplate: '# {name}\n{description}', + default_interactive: true, + default_labelDirection: 'auto', + attributionControl: false, + allowEdit: true, + embedControl: true, + zoomControl: true, + datalayersControl: true, + searchControl: true, + editInOSMControl: false, + editInOSMControlOptions: false, + scaleControl: true, + noControl: false, // Do not render any control. + miniMap: false, + name: '', + description: '', + displayPopupFooter: false, + demoTileInfos: {s: 'a', z: 9, x: 265, y: 181, r: ''}, + licences: [], + licence: '', + enableMarkerDraw: true, + enablePolygonDraw: true, + enablePolylineDraw: true, + limitBounds: {}, + importPresets: [ + // {url: 'http://localhost:8019/en/datalayer/1502/', label: 'Simplified World Countries', format: 'geojson'} + ], + moreControl: true, + captionBar: false, + slideshow: {}, + clickable: true, + easing: true +}); + +L.U.Map.include({ + + HIDDABLE_CONTROLS: ['zoom', 'search', 'fullscreen', 'embed', 'locate', 'measure', 'tilelayers', 'editinosm', 'datalayers'], + + initialize: function (el, geojson) { + + if (geojson.properties && geojson.properties.locale) L.setLocale(geojson.properties.locale); + + // Don't let default autocreation of controls + var zoomControl = typeof geojson.properties.zoomControl !== 'undefined' ? geojson.properties.zoomControl : true; + geojson.properties.zoomControl = false; + var fullscreenControl = typeof geojson.properties.fullscreenControl !== 'undefined' ? geojson.properties.fullscreenControl : true; + geojson.properties.fullscreenControl = false; + L.Util.setBooleanFromQueryString(geojson.properties, 'scrollWheelZoom'); + L.Map.prototype.initialize.call(this, el, geojson.properties); + + this.ui = new L.U.UI(this._container); + this.xhr = new L.U.Xhr(this.ui); + this.xhr.on('dataloding', function (e) { + this.fire('dataloding', e); + }); + this.xhr.on('datalaod', function (e) { + this.fire('datalaod', e); + }); + + this.initLoader(); + this.name = this.options.name; + this.description = this.options.description; + this.demoTileInfos = this.options.demoTileInfos; + if (geojson.geometry) this.options.center = geojson.geometry; + this.options.zoomControl = zoomControl; + this.options.fullscreenControl = fullscreenControl; + L.Util.setBooleanFromQueryString(this.options, 'moreControl'); + L.Util.setBooleanFromQueryString(this.options, 'scaleControl'); + L.Util.setBooleanFromQueryString(this.options, 'miniMap'); + L.Util.setBooleanFromQueryString(this.options, 'allowEdit'); + L.Util.setBooleanFromQueryString(this.options, 'displayDataBrowserOnLoad'); + L.Util.setBooleanFromQueryString(this.options, 'displayCaptionOnLoad'); + L.Util.setBooleanFromQueryString(this.options, 'captionBar'); + for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { + L.Util.setNullableBooleanFromQueryString(this.options, this.HIDDABLE_CONTROLS[i] + 'Control'); + } + this.datalayersOnLoad = L.Util.queryString('datalayers'); + this.options.onLoadPanel = L.Util.queryString('onLoadPanel', this.options.onLoadPanel); + if (this.datalayersOnLoad) this.datalayersOnLoad = this.datalayersOnLoad.toString().split(','); + + if (L.Browser.ielt9) this.options.allowEdit = false; // TODO include ie9 + + var editedFeature = null, + self = this; + try { + Object.defineProperty(this, 'editedFeature', { + get: function () { + return editedFeature; + }, + set: function (feature) { + if (editedFeature && editedFeature !== feature) { + editedFeature.endEdit(); + } + editedFeature = feature; + self.fire('seteditedfeature'); + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + + if (this.options.hash) this.addHash(); + this.initCenter(); + this.handleLimitBounds(); + + this.initTileLayers(this.options.tilelayers); + + // Global storage for retrieving datalayers + this.datalayers = {}; + this.datalayers_index = []; + this.dirty_datalayers = []; + + // Retrocompat + if (this.options.slideshow && this.options.slideshow.delay && this.options.slideshow.active === undefined) this.options.slideshow.active = true; + + this.initControls(); + + // create datalayers + this.initDatalayers(); + + if (this.options.displayCaptionOnLoad) { + // Retrocompat + if (!this.options.onLoadPanel) { + this.options.onLoadPanel = 'caption'; + } + delete this.options.displayCaptionOnLoad; + } + if (this.options.displayDataBrowserOnLoad) { + // Retrocompat + if (!this.options.onLoadPanel) { + this.options.onLoadPanel = 'databrowser'; + } + delete this.options.displayDataBrowserOnLoad; + } + + this.ui.on('panel:closed', function () { + this.invalidateSize({pan: false}); + }, this); + + var isDirty = false; // global status + try { + Object.defineProperty(this, 'isDirty', { + get: function () { + return isDirty || this.dirty_datalayers.length; + }, + set: function (status) { + if (!isDirty && status) self.fire('isdirty'); + isDirty = status; + self.checkDirty(); + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + this.on('baselayerchange', function (e) { + if (this._controls.miniMap) this._controls.miniMap.onMainMapBaseLayerChange(e); + }, this); + + // Creation mode + if (!this.options.umap_id) { + this.isDirty = true; + this.options.name = L._('Untitled map'); + this.options.allowEdit = true; + var datalayer = this.createDataLayer(); + datalayer.connectToMap(); + this.enableEdit(); + var dataUrl = L.Util.queryString('dataUrl', null), + dataFormat = L.Util.queryString('dataFormat', 'geojson'); + if (dataUrl) { + dataUrl = decodeURIComponent(dataUrl); + dataUrl = this.localizeUrl(dataUrl); + dataUrl = this.proxyUrl(dataUrl); + datalayer.importFromUrl(dataUrl, dataFormat); + } + } + + this.help = new L.U.Help(this); + this.slideshow = new L.U.Slideshow(this, this.options.slideshow); + this.permissions = new L.U.MapPermissions(this, this.options.permissions); + this.initCaptionBar(); + if (this.options.allowEdit) { + this.editTools = new L.U.Editable(this); + this.ui.on('panel:closed panel:open', function () { + this.editedFeature = null; + }, this); + this.initEditBar(); + } + this.initShortcuts(); + this.onceDatalayersLoaded(function () { + if (this.options.onLoadPanel === 'databrowser') this.openBrowser(); + else if (this.options.onLoadPanel === 'caption') this.displayCaption(); + }); + + + window.onbeforeunload = function (e) { + var msg = L._('You have unsaved changes.'); + if (self.isDirty) { + e.returnValue = msg; + return msg; + } + }; + this.backup(); + this.initContextMenu(); + this.on('click contextmenu.show', this.closeInplaceToolbar); + }, + + initControls: function () { + this.helpMenuActions = {}; + this._controls = {}; + + if (this.options.allowEdit && !this.options.noControl) { + new L.U.EditControl(this).addTo(this); + + new L.U.DrawToolbar({map: this}).addTo(this); + + var editActions = [ + L.U.ImportAction, + L.U.EditPropertiesAction, + L.U.ChangeTileLayerAction, + L.U.ManageDatalayersAction, + L.U.UpdateExtentAction, + L.U.UpdatePermsAction + ]; + new L.U.SettingsToolbar({actions: editActions}).addTo(this); + } + this._controls.zoom = new L.Control.Zoom({zoomInTitle: L._('Zoom in'), zoomOutTitle: L._('Zoom out')}); + this._controls.datalayers = new L.U.DataLayersControl(this); + this._controls.locate = new L.U.LocateControl(); + this._controls.fullscreen = new L.Control.Fullscreen({title: {'false': L._('View Fullscreen'), 'true': L._('Exit Fullscreen')}}); + this._controls.search = new L.U.SearchControl(); + this._controls.embed = new L.Control.Embed(this, this.options.embedOptions); + this._controls.tilelayers = new L.U.TileLayerControl(this); + this._controls.editinosm = new L.Control.EditInOSM({ + position: 'topleft', + widgetOptions: {helpText: L._('Open this map extent in a map editor to provide more accurate data to OpenStreetMap')} + }); + this._controls.measure = (new L.MeasureControl()).initHandler(this); + this._controls.more = new L.U.MoreControls(); + this._controls.scale = L.control.scale(); + if (this.options.scrollWheelZoom) this.scrollWheelZoom.enable(); + else this.scrollWheelZoom.disable(); + this.renderControls(); + }, + + renderControls: function () { + L.DomUtil.classIf(document.body, 'umap-caption-bar-enabled', this.options.captionBar || (this.options.slideshow && this.options.slideshow.active)); + L.DomUtil.classIf(document.body, 'umap-slideshow-enabled', this.options.slideshow && this.options.slideshow.active); + for (var i in this._controls) { + this.removeControl(this._controls[i]); + } + if (this.options.noControl) return; + + this._controls.attribution = (new L.U.AttributionControl()).addTo(this); + if (this.options.miniMap && !this.options.noControl) { + this.whenReady(function () { + if (this.selected_tilelayer) { + this._controls.miniMap = new L.Control.MiniMap(this.selected_tilelayer).addTo(this); + this._controls.miniMap._miniMap.invalidateSize(); + } + }); + } + var name, status, control; + for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { + name = this.HIDDABLE_CONTROLS[i]; + status = this.options[name + 'Control']; + if (status === false) continue; + control = this._controls[name]; + control.addTo(this); + if (status === undefined || status === null) L.DomUtil.addClass(control._container, 'display-on-more'); + else L.DomUtil.removeClass(control._container, 'display-on-more'); + } + if (this.options.moreControl) this._controls.more.addTo(this); + if (this.options.scaleControl) this._controls.scale.addTo(this); + }, + + initDatalayers: function () { + var toload = 0, datalayer, seen = 0, self = this; + var loaded = function () { + self.datalayersLoaded = true; + self.fire('datalayersloaded'); + }; + var decrementToLoad = function () { + toload--; + if (toload === 0) loaded(); + }; + for (var j = 0; j < this.options.datalayers.length; j++) { + toload++; + seen++; + datalayer = this.createDataLayer(this.options.datalayers[j]); + if (datalayer.displayedOnLoad()) datalayer.onceLoaded(decrementToLoad); + else decrementToLoad(); + } + if (seen === 0) loaded(); // no datalayer + }, + + indexDatalayers: function () { + var panes = this.getPane('overlayPane'), + pane; + this.datalayers_index = []; + for (var i = 0; i < panes.children.length; i++) { + pane = panes.children[i]; + if (!pane.dataset || !pane.dataset.id) continue; + this.datalayers_index.push(this.datalayers[pane.dataset.id]); + } + this.updateDatalayersControl(); + }, + + ensurePanesOrder: function () { + this.eachDataLayer(function (datalayer) { + datalayer.bringToTop(); + }); + }, + + onceDatalayersLoaded: function (callback, context) { + if (this.datalayersLoaded) { + callback.call(context || this, this); + } else { + this.once('datalayersloaded', callback, context); + } + return this; + }, + + updateDatalayersControl: function () { + if (this._controls.datalayers) this._controls.datalayers.update(); + }, + + backupOptions: function () { + this._backupOptions = L.extend({}, this.options); + this._backupOptions.tilelayer = L.extend({}, this.options.tilelayer); + this._backupOptions.limitBounds = L.extend({}, this.options.limitBounds); + this._backupOptions.permissions = L.extend({}, this.permissions.options); + }, + + resetOptions: function () { + this.options = L.extend({}, this._backupOptions); + this.options.tilelayer = L.extend({}, this._backupOptions.tilelayer); + this.permissions.options = L.extend({}, this._backupOptions.permissions); + }, + + initShortcuts: function () { + var globalShortcuts = function (e) { + var key = e.keyCode, + modifierKey = e.ctrlKey || e.metaKey; + + /* Generic shortcuts */ + if (key === L.U.Keys.F && modifierKey) { + L.DomEvent.stop(e); + this.search(); + } else if (e.keyCode === L.U.Keys.ESC) { + if (this.help.visible()) this.help.hide(); + else this.ui.closePanel(); + } + + if (!this.options.allowEdit) return; + + /* Edit mode only shortcuts */ + if (key === L.U.Keys.E && modifierKey && !this.editEnabled) { + L.DomEvent.stop(e); + this.enableEdit(); + } else if (key === L.U.Keys.E && modifierKey && this.editEnabled && !this.isDirty) { + L.DomEvent.stop(e); + this.disableEdit(); + this.ui.closePanel(); + } + if (key === L.U.Keys.S && modifierKey) { + L.DomEvent.stop(e); + if (this.isDirty) { + this.save(); + } + } + if (key === L.U.Keys.Z && modifierKey && this.isDirty) { + L.DomEvent.stop(e); + this.askForReset(); + } + if (key === L.U.Keys.M && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.editTools.startMarker(); + } + if (key === L.U.Keys.P && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.editTools.startPolygon(); + } + if (key === L.U.Keys.L && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.editTools.startPolyline(); + } + if (key === L.U.Keys.I && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.importPanel(); + } + if (key === L.U.Keys.H && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.help.show('edit'); + } + if (e.keyCode === L.U.Keys.ESC) { + if (this.editEnabled) this.editTools.stopDrawing(); + if (this.measureTools.enabled()) this.measureTools.stopDrawing(); + } + }; + L.DomEvent.addListener(document, 'keydown', globalShortcuts, this); + }, + + initTileLayers: function () { + this.tilelayers = []; + for(var i in this.options.tilelayers) { + if(this.options.tilelayers.hasOwnProperty(i)) { + this.tilelayers.push(this.createTileLayer(this.options.tilelayers[i])); + if (this.options.tilelayer && this.options.tilelayer.url_template === this.options.tilelayers[i].url_template) { + // Keep control over the displayed attribution for non custom tilelayers + this.options.tilelayer.attribution = this.options.tilelayers[i].attribution; + } + } + } + if (this.options.tilelayer && this.options.tilelayer.url_template && this.options.tilelayer.attribution) { + this.customTilelayer = this.createTileLayer(this.options.tilelayer); + this.selectTileLayer(this.customTilelayer); + } else { + this.selectTileLayer(this.tilelayers[0]); + } + }, + + createTileLayer: function (tilelayer) { + return new L.TileLayer(tilelayer.url_template, tilelayer); + }, + + selectTileLayer: function (tilelayer) { + if (tilelayer === this.selected_tilelayer) { return; } + try { + this.addLayer(tilelayer); + this.fire('baselayerchange', {layer: tilelayer}); + if (this.selected_tilelayer) { + this.removeLayer(this.selected_tilelayer); + } + this.selected_tilelayer = tilelayer; + if (!isNaN(this.selected_tilelayer.options.minZoom) && this.getZoom() < this.selected_tilelayer.options.minZoom) { + this.setZoom(this.selected_tilelayer.options.minZoom); + } + if (!isNaN(this.selected_tilelayer.options.maxZoom) && this.getZoom() > this.selected_tilelayer.options.maxZoom) { + this.setZoom(this.selected_tilelayer.options.maxZoom); + } + } catch (e) { + this.removeLayer(tilelayer); + this.ui.alert({content: L._('Error in the tilelayer URL') + ': ' + tilelayer._url, level: 'error'}); + // Users can put tilelayer URLs by hand, and if they add wrong {variable}, + // Leaflet throw an error, and then the map is no more editable + } + }, + + eachTileLayer: function (method, context) { + var urls = []; + for (var i in this.tilelayers) { + if (this.tilelayers.hasOwnProperty(i)) { + method.call(context, this.tilelayers[i]); + urls.push(this.tilelayers[i]._url); + } + } + if (this.customTilelayer && (Array.prototype.indexOf && urls.indexOf(this.customTilelayer._url) === -1)) { + method.call(context || this, this.customTilelayer); + } + }, + + initCenter: function () { + if (this.options.hash && this._hash.parseHash(location.hash)) { + // FIXME An invalid hash will cause the load to fail + this._hash.update(); + } + else if(this.options.locate && this.options.locate.setView) { + // Prevent from making two setViews at init + // which is not very fluid... + this.locate(this.options.locate); + } + else { + this.options.center = this.latLng(this.options.center); + this.setView(this.options.center, this.options.zoom); + } + }, + + latLng: function(a, b, c) { + // manage geojson case and call original method + if (!(a instanceof L.LatLng) && a.coordinates) { + // Guess it's a geojson + a = [a.coordinates[1], a.coordinates[0]]; + } + return L.latLng(a, b, c); + }, + + handleLimitBounds: function () { + var south = parseFloat(this.options.limitBounds.south), + west = parseFloat(this.options.limitBounds.west), + north = parseFloat(this.options.limitBounds.north), + east = parseFloat(this.options.limitBounds.east); + if (!isNaN(south) && !isNaN(west) && !isNaN(north) && !isNaN(east)) { + var bounds = L.latLngBounds([[south, west], [north, east]]); + this.options.minZoom = this.getBoundsZoom(bounds, false); + try { + this.setMaxBounds(bounds); + } catch (e) { + // Unusable bounds, like -2 -2 -2 -2? + console.error('Error limiting bounds', e); + } + } else { + this.options.minZoom = 0; + this.setMaxBounds(); + } + }, + + setMaxBounds: function (bounds) { + // Hack. Remove me when fix is released: + // https://github.com/Leaflet/Leaflet/pull/4494 + bounds = L.latLngBounds(bounds); + + if (!bounds.isValid()) { + this.options.maxBounds = null; + return this.off('moveend', this._panInsideMaxBounds); + } + return L.Map.prototype.setMaxBounds.call(this, bounds); + }, + + createDataLayer: function(datalayer) { + datalayer = datalayer || {name: L._('Layer') + ' ' + (this.datalayers_index.length + 1)}; + return new L.U.DataLayer(this, datalayer); + }, + + getDefaultOption: function (option) { + return this.options['default_' + option]; + }, + + getOption: function (option) { + if (L.Util.usableOption(this.options, option)) return this.options[option]; + else return this.getDefaultOption(option); + }, + + updateExtent: function() { + this.options.center = this.getCenter(); + this.options.zoom = this.getZoom(); + this.isDirty = true; + this.ui.alert({content: L._('The zoom and center have been setted.'), 'level': 'info'}); + }, + + updateTileLayers: function () { + var self = this, + callback = function (tilelayer) { + self.options.tilelayer = tilelayer.toJSON(); + self.isDirty = true; + }; + if (this._controls.tilelayers) this._controls.tilelayers.openSwitcher({callback: callback, className: 'dark'}); + }, + + manageDatalayers: function () { + if (this._controls.datalayers) this._controls.datalayers.openPanel(); + }, + + renderShareBox: function () { + var container = L.DomUtil.create('div', 'umap-share'), + embedTitle = L.DomUtil.add('h4', '', container, L._('Embed the map')), + iframe = L.DomUtil.create('textarea', 'umap-share-iframe', container), + option; + var UIFields = [ + ['dimensions.width', {handler: 'Input', label: L._('width')}], + ['dimensions.height', {handler: 'Input', label: L._('height')}], + ['options.includeFullScreenLink', {handler: 'Switch', label: L._('Include full screen link?')}], + ['options.currentView', {handler: 'Switch', label: L._('Current view instead of default map view?')}], + ['options.keepCurrentDatalayers', {handler: 'Switch', label: L._('Keep current visible layers')}], + 'queryString.moreControl', + 'queryString.scrollWheelZoom', + 'queryString.miniMap', + 'queryString.scaleControl', + 'queryString.onLoadPanel', + 'queryString.captionBar' + ]; + for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { + UIFields.push('queryString.' + this.HIDDABLE_CONTROLS[i] + 'Control'); + } + var iframeExporter = new L.U.IframeExporter(this); + var buildIframeCode = function () { + iframe.innerHTML = iframeExporter.build(); + }; + buildIframeCode(); + var builder = new L.U.FormBuilder(iframeExporter, UIFields, { + callback: buildIframeCode + }); + var iframeOptions = L.DomUtil.createFieldset(container, L._('Iframe export options')); + iframeOptions.appendChild(builder.build()); + if (this.options.shortUrl) { + L.DomUtil.create('hr', '', container); + L.DomUtil.add('h4', '', container, L._('Short URL')); + var shortUrl = L.DomUtil.create('input', 'umap-short-url', container); + shortUrl.type = 'text'; + shortUrl.value = this.options.shortUrl; + } + L.DomUtil.create('hr', '', container); + L.DomUtil.add('h4', '', container, L._('Download data')); + var typeInput = L.DomUtil.create('select', '', container); + typeInput.name = 'format'; + var exportCaveat = L.DomUtil.add('small', 'help-text', container, L._('Only visible features will be downloaded.')); + exportCaveat.id = 'export_caveat_text'; + var toggleCaveat = function () { + if (typeInput.value === 'umap') exportCaveat.style.display = 'none'; + else exportCaveat.style.display = 'inherit'; + } + L.DomEvent.on(typeInput, 'change', toggleCaveat); + var types = { + geojson: { + formatter: function (map) {return JSON.stringify(map.toGeoJSON(), null, 2);}, + ext: '.geojson', + filetype: 'application/json' + }, + gpx: { + formatter: function (map) {return togpx(map.toGeoJSON());}, + ext: '.gpx', + filetype: 'application/xml' + }, + kml: { + formatter: function (map) {return tokml(map.toGeoJSON());}, + ext: '.kml', + filetype: 'application/vnd.google-earth.kml+xml' + }, + umap: { + name: L._('Full map data'), + formatter: function (map) {return map.serialize();}, + ext: '.umap', + filetype: 'application/json', + selected: true + } + }; + for (var key in types) { + if (types.hasOwnProperty(key)) { + option = L.DomUtil.create('option', '', typeInput); + option.value = key; + option.innerHTML = types[key].name || key; + if (types[key].selected) option.selected = true; + } + } + toggleCaveat(); + var download = L.DomUtil.create('a', 'button', container); + download.innerHTML = L._('Download data'); + L.DomEvent.on(download, 'click', function () { + var type = types[typeInput.value], + content = type.formatter(this), + name = this.options.name || 'data'; + name = name.replace(/[^a-z0-9]/gi, '_').toLowerCase(); + download.download = name + type.ext; + window.URL = window.URL || window.webkitURL; + var blob = new Blob([content], {type: type.filetype}); + download.href = window.URL.createObjectURL(blob); + }, this); + this.ui.openPanel({data: {html: container}}); + }, + + toGeoJSON: function () { + var features = []; + this.eachDataLayer(function (datalayer) { + if (datalayer.isVisible()) { + features = features.concat(datalayer.featuresToGeoJSON()); + } + }); + var geojson = { + type: 'FeatureCollection', + features: features + }; + return geojson; + }, + + importPanel: function () { + var container = L.DomUtil.create('div', 'umap-upload'), + title = L.DomUtil.create('h4', '', container), + presetBox = L.DomUtil.create('div', 'formbox', container), + presetSelect = L.DomUtil.create('select', '', presetBox), + fileBox = L.DomUtil.create('div', 'formbox', container), + fileInput = L.DomUtil.create('input', '', fileBox), + urlInput = L.DomUtil.create('input', '', container), + rawInput = L.DomUtil.create('textarea', '', container), + typeLabel = L.DomUtil.create('label', '', container), + layerLabel = L.DomUtil.create('label', '', container), + clearLabel = L.DomUtil.create('label', '', container), + submitInput = L.DomUtil.create('input', '', container), + map = this, option, + types = ['geojson', 'csv', 'gpx', 'kml', 'osm', 'georss', 'umap']; + title.innerHTML = L._('Import data'); + fileInput.type = 'file'; + fileInput.multiple = 'multiple'; + submitInput.type = 'button'; + submitInput.value = L._('Import'); + submitInput.className = 'button'; + typeLabel.innerHTML = L._('Choose the format of the data to import'); + this.help.button(typeLabel, 'importFormats'); + var typeInput = L.DomUtil.create('select', '', typeLabel); + typeInput.name = 'format'; + layerLabel.innerHTML = L._('Choose the layer to import in'); + var layerInput = L.DomUtil.create('select', '', layerLabel); + layerInput.name = 'datalayer'; + urlInput.type = 'text'; + urlInput.placeholder = L._('Provide an URL here'); + rawInput.placeholder = L._('Paste here your data'); + clearLabel.textContent = L._('Replace layer content'); + var clearFlag = L.DomUtil.create('input', '', clearLabel); + clearFlag.type = 'checkbox'; + clearFlag.name = 'clear'; + this.eachDataLayerReverse(function (datalayer) { + if (datalayer.isLoaded()) { + var id = L.stamp(datalayer); + option = L.DomUtil.create('option', '', layerInput); + option.value = id; + option.innerHTML = datalayer.options.name; + } + }); + L.DomUtil.element('option', {value: '', innerHTML: L._('Import in a new layer')}, layerInput); + L.DomUtil.element('option', {value: '', innerHTML: L._('Choose the data format')}, typeInput); + for (var i = 0; i < types.length; i++) { + option = L.DomUtil.create('option', '', typeInput); + option.value = option.innerHTML = types[i]; + } + if (this.options.importPresets.length) { + var noPreset = L.DomUtil.create('option', '', presetSelect); + noPreset.value = noPreset.innerHTML = L._('Choose a preset'); + for (var j = 0; j < this.options.importPresets.length; j++) { + option = L.DomUtil.create('option', '', presetSelect); + option.value = this.options.importPresets[j].url; + option.innerHTML = this.options.importPresets[j].label; + } + } else { + presetBox.style.display = 'none'; + } + + var submit = function () { + var type = typeInput.value, + layerId = layerInput[layerInput.selectedIndex].value, + layer; + if (type === 'umap') { + this.once('postsync', function () { + this.setView(this.latLng(this.options.center), this.options.zoom); + }); + } + if (layerId) layer = map.datalayers[layerId]; + if (layer && clearFlag.checked) layer.empty(); + if (fileInput.files.length) { + var file; + for (var i = 0, file; file = fileInput.files[i]; i++) { + type = type || L.Util.detectFileType(file); + if (!type) { + this.ui.alert({content: L._('Unable to detect format of file {filename}', {filename: file.name}), level: 'error'}); + continue; + } + if (type === 'umap') { + this.importFromFile(file, 'umap'); + } else { + var importLayer = layer; + if (!layer) importLayer = this.createDataLayer({name: file.name}); + importLayer.importFromFile(file, type); + } + } + } else { + if (!type) return this.ui.alert({content: L._('Please choose a format'), level: 'error'}); + if (rawInput.value && type === 'umap') { + try { + this.importRaw(rawInput.value, type); + } catch (e) { + this.ui.alert({content: L._('Invalid umap data'), level: 'error'}); + console.error(e); + } + } else { + if (!layer) layer = this.createDataLayer(); + if (rawInput.value) layer.importRaw(rawInput.value, type); + else if (urlInput.value) layer.importFromUrl(urlInput.value, type); + else if (presetSelect.selectedIndex > 0) layer.importFromUrl(presetSelect[presetSelect.selectedIndex].value, type); + } + } + }; + L.DomEvent.on(submitInput, 'click', submit, this); + L.DomEvent.on(fileInput, 'change', function (e) { + var type = '', newType; + for (var i = 0; i < e.target.files.length; i++) { + newType = L.Util.detectFileType(e.target.files[i]); + if (!type && newType) type = newType; + if (type && newType !== type) { + type = ''; + break; + } + } + typeInput.value = type; + }, this); + this.ui.openPanel({data: {html: container}, className: 'dark'}); + }, + + importRaw: function(rawData) { + var importedData = JSON.parse(rawData); + + var mustReindex = false; + + for (var i = 0; i < this.editableOptions.length; i++) { + var option = this.editableOptions[i]; + if (typeof importedData.properties[option] !== 'undefined') { + this.options[option] = importedData.properties[option]; + if (option === 'sortKey') mustReindex = true; + } + } + + if (importedData.geometry) this.options.center = this.latLng(importedData.geometry); + var self = this; + importedData.layers.forEach( function (geojson) { + var dataLayer = self.createDataLayer(); + dataLayer.fromUmapGeoJSON(geojson); + }); + + this.initTileLayers(); + this.renderControls(); + this.handleLimitBounds(); + this.eachDataLayer(function (datalayer) { + if (mustReindex) datalayer.reindex(); + datalayer.redraw(); + }); + this.fire('postsync'); + this.isDirty = true; + }, + + importFromFile: function (file) { + var reader = new FileReader(); + reader.readAsText(file); + var self = this; + reader.onload = function (e) { + var rawData = e.target.result; + try { + self.importRaw(rawData); + } catch (e) { + console.error('Error importing data', e); + self.ui.alert({content: L._('Invalid umap data in {filename}', {filename: file.name}), level: 'error'}); + } + }; + }, + + openBrowser: function () { + this.onceDatalayersLoaded(function () { + this._openBrowser(); + }); + }, + + displayCaption: function () { + var container = L.DomUtil.create('div', 'umap-caption'), + title = L.DomUtil.create('h3', '', container); + title.innerHTML = this.options.name; + this.permissions.addOwnerLink('h5', container); + if (this.options.description) { + var description = L.DomUtil.create('div', 'umap-map-description', container); + description.innerHTML = L.Util.toHTML(this.options.description); + } + var datalayerContainer = L.DomUtil.create('div', 'datalayer-container', container); + this.eachBrowsableDataLayer(function (datalayer) { + var p = L.DomUtil.create('p', '', datalayerContainer), + color = L.DomUtil.create('span', 'datalayer-color', p), + headline = L.DomUtil.create('strong', '', p), + description = L.DomUtil.create('span', '', p); + datalayer.onceLoaded(function () { + color.style.backgroundColor = this.getColor(); + if (datalayer.options.description) { + description.innerHTML = L.Util.toHTML(datalayer.options.description); + } + }); + datalayer.renderToolbox(headline); + L.DomUtil.add('span', '', headline, datalayer.options.name + ' '); + }); + var creditsContainer = L.DomUtil.create('div', 'credits-container', container), + credits = L.DomUtil.createFieldset(creditsContainer, L._('Credits')); + title = L.DomUtil.add('h5', '', credits, L._('User content credits')); + if (this.options.shortCredit || this.options.longCredit) { + L.DomUtil.add('p', '', credits, L.Util.toHTML(this.options.longCredit || this.options.shortCredit)); + } + if (this.options.licence) { + var licence = L.DomUtil.add('p', '', credits, L._('Map user content has been published under licence') + ' '), + link = L.DomUtil.add('a', '', licence, this.options.licence.name); + link.href = this.options.licence.url; + } else { + L.DomUtil.add('p', '', credits, L._('No licence has been set')); + } + L.DomUtil.create('hr', '', credits); + title = L.DomUtil.create('h5', '', credits); + title.innerHTML = L._('Map background credits'); + var tilelayerCredit = L.DomUtil.create('p', '', credits), + name = L.DomUtil.create('strong', '', tilelayerCredit), + attribution = L.DomUtil.create('span', '', tilelayerCredit); + name.innerHTML = this.selected_tilelayer.options.name + ' '; + attribution.innerHTML = this.selected_tilelayer.getAttribution(); + L.DomUtil.create('hr', '', credits); + var umapCredit = L.DomUtil.create('p', '', credits), + urls = { + leaflet: 'http://leafletjs.com', + django: 'https://www.djangoproject.com', + umap: 'http://wiki.openstreetmap.org/wiki/UMap' + }; + umapCredit.innerHTML = L._('Powered by Leaflet and Django, glued by uMap project.', urls); + var browser = L.DomUtil.create('li', ''); + L.DomUtil.create('i', 'umap-icon-16 umap-list', browser); + var label = L.DomUtil.create('span', '', browser); + label.innerHTML = label.title = L._('Browse data'); + L.DomEvent.on(browser, 'click', this.openBrowser, this); + this.ui.openPanel({data: {html: container}, actions: [browser]}); + }, + + eachDataLayer: function (method, context) { + for (var i = 0; i < this.datalayers_index.length; i++) { + method.call(context, this.datalayers_index[i]); + } + }, + + eachDataLayerReverse: function (method, context, filter) { + for (var i = this.datalayers_index.length - 1; i >= 0; i--) { + if (filter && !filter.call(context, this.datalayers_index[i])) continue; + method.call(context, this.datalayers_index[i]); + } + }, + + eachBrowsableDataLayer: function (method, context, filter) { + this.eachDataLayerReverse(method, context, function (d) { return d.allowBrowse(); }); + }, + + findDataLayer: function (method, context) { + for (var i = this.datalayers_index.length - 1; i >= 0; i--) { + if (method.call(context, this.datalayers_index[i])) return this.datalayers_index[i]; + } + }, + + backup: function () { + this.backupOptions(); + this._datalayers_index_bk = [].concat(this.datalayers_index); + }, + + reset: function () { + if (this.editTools) this.editTools.stopDrawing(); + this.resetOptions(); + this.datalayers_index = [].concat(this._datalayers_index_bk); + this.dirty_datalayers.slice().forEach(function (datalayer) { + if (datalayer.isDeleted) datalayer.connectToMap(); + datalayer.reset(); + }); + this.ensurePanesOrder(); + this.dirty_datalayers = []; + this.updateDatalayersControl(); + this.initTileLayers(); + this.isDirty = false; + }, + + checkDirty: function () { + L.DomUtil.classIf(this._container, 'umap-is-dirty', this.isDirty); + }, + + addDirtyDatalayer: function (datalayer) { + if (this.dirty_datalayers.indexOf(datalayer) === -1) { + this.dirty_datalayers.push(datalayer); + this.isDirty = true; + } + }, + + removeDirtyDatalayer: function (datalayer) { + if (this.dirty_datalayers.indexOf(datalayer) !== -1) { + this.dirty_datalayers.splice(this.dirty_datalayers.indexOf(datalayer), 1); + this.checkDirty(); + } + }, + + continueSaving: function () { + if (this.dirty_datalayers.length) this.dirty_datalayers[0].save(); + else this.fire('saved'); + }, + + editableOptions: [ + 'zoom', + 'scrollWheelZoom', + 'scaleControl', + 'moreControl', + 'miniMap', + 'displayPopupFooter', + 'onLoadPanel', + 'tilelayersControl', + 'name', + 'description', + 'licence', + 'tilelayer', + 'limitBounds', + 'color', + 'iconClass', + 'iconUrl', + 'smoothFactor', + 'opacity', + 'weight', + 'fill', + 'fillColor', + 'fillOpacity', + 'dashArray', + 'popupTemplate', + 'popupContentTemplate', + 'zoomTo', + 'captionBar', + 'slideshow', + 'sortKey', + 'labelKey', + 'filterKey', + 'showLabel', + 'labelDirection', + 'labelInteractive', + 'shortCredit', + 'longCredit', + 'zoomControl', + 'datalayersControl', + 'searchControl', + 'locateControl', + 'fullscreenControl', + 'editinosmControl', + 'embedControl', + 'measureControl', + 'tilelayersControl', + 'easing' + ], + + exportOptions: function () { + var properties = {}; + for (var i = this.editableOptions.length - 1; i >= 0; i--) { + if (typeof this.options[this.editableOptions[i]] !== 'undefined') { + properties[this.editableOptions[i]] = this.options[this.editableOptions[i]]; + } + } + return properties; + }, + + serialize: function () { + var umapfile = { + type: 'umap', + properties: this.exportOptions(), + geometry: this.geometry(), + layers: [] + }; + + this.eachDataLayer(function (datalayer) { + umapfile.layers.push(datalayer.umapGeoJSON()); + }); + + return JSON.stringify(umapfile, null, 2); + }, + + save: function () { + if (!this.isDirty) return; + var geojson = { + type: 'Feature', + geometry: this.geometry(), + properties: this.exportOptions() + }; + this.backup(); + var formData = new FormData(); + formData.append('name', this.options.name); + formData.append('center', JSON.stringify(this.geometry())); + formData.append('settings', JSON.stringify(geojson)); + this.post(this.getSaveUrl(), { + data: formData, + context: this, + callback: function (data) { + var duration = 3000; + if (!this.options.umap_id) { + duration = 100000; // we want a longer message at map creation (TODO UGLY) + this.options.umap_id = data.id; + } + // Update URL in case the name has changed. + if (history && history.pushState) history.pushState({}, this.options.name, data.url); + else window.location = data.url; + if (data.info) msg = data.info; + else msg = L._('Map has been saved!'); + this.once('saved', function () { + this.isDirty = false; + this.ui.alert({content: msg, level: 'info', duration: duration}); + }); + this.ui.closePanel(); + this.permissions.save(); + } + }); + }, + + getEditUrl: function() { + return L.Util.template(this.options.urls.map_update, {'map_id': this.options.umap_id}); + }, + + getCreateUrl: function() { + return L.Util.template(this.options.urls.map_create); + }, + + getSaveUrl: function () { + return (this.options.umap_id && this.getEditUrl()) || this.getCreateUrl(); + }, + + geometry: function() { + /* Return a GeoJSON geometry Object */ + var latlng = this.latLng(this.options.center || this.getCenter()); + return { + type: 'Point', + coordinates: [ + latlng.lng, + latlng.lat + ] + }; + }, + + defaultDataLayer: function () { + var datalayer, fallback; + datalayer = this.lastUsedDataLayer; + if (datalayer && !datalayer.isRemoteLayer() && datalayer.canBrowse() && datalayer.isVisible()) { + return datalayer; + } + datalayer = this.findDataLayer(function (datalayer) { + if (!datalayer.isRemoteLayer() && datalayer.canBrowse()) { + fallback = datalayer; + if (datalayer.isVisible()) return true; + } + }); + if (datalayer) return datalayer; + if (fallback) { + // No datalayer visible, let's force one + this.addLayer(fallback.layer); + return fallback; + } + return this.createDataLayer(); + }, + + getDataLayerByUmapId: function (umap_id) { + return this.findDataLayer(function (d) { return d.umap_id == umap_id; }); + }, + + edit: function () { + if(!this.editEnabled) return; + var container = L.DomUtil.create('div'), + metadataFields = [ + 'options.name', + 'options.description' + ], + title = L.DomUtil.create('h4', '', container); + title.innerHTML = L._('Edit map properties'); + var builder = new L.U.FormBuilder(this, metadataFields); + var form = builder.build(); + container.appendChild(form); + var UIFields = []; + for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { + UIFields.push('options.' + this.HIDDABLE_CONTROLS[i] + 'Control'); + } + UIFields = UIFields.concat([ + 'options.moreControl', + 'options.scrollWheelZoom', + 'options.miniMap', + 'options.scaleControl', + 'options.onLoadPanel', + 'options.displayPopupFooter', + 'options.captionBar' + ]); + builder = new L.U.FormBuilder(this, UIFields, { + callback: this.renderControls, + callbackContext: this + }); + var controlsOptions = L.DomUtil.createFieldset(container, L._('User interface options')); + controlsOptions.appendChild(builder.build()); + + var shapeOptions = [ + 'options.color', + 'options.iconClass', + 'options.iconUrl', + 'options.opacity', + 'options.weight', + 'options.fill', + 'options.fillColor', + 'options.fillOpacity' + ]; + + builder = new L.U.FormBuilder(this, shapeOptions, { + callback: function (e) { + this.eachDataLayer(function (datalayer) { + datalayer.redraw(); + }); + } + }); + var defaultShapeProperties = L.DomUtil.createFieldset(container, L._('Default shape properties')); + defaultShapeProperties.appendChild(builder.build()); + + var optionsFields = [ + 'options.smoothFactor', + 'options.dashArray', + 'options.zoomTo', + ['options.easing', {handler: 'Switch', label: L._('Advanced transition')}], + 'options.labelKey', + ['options.sortKey', {handler: 'BlurInput', helpEntries: 'sortKey', placeholder: L._('Default: name'), label: L._('Sort key'), inheritable: true}], + ['options.filterKey', {handler: 'Input', helpEntries: 'filterKey', placeholder: L._('Default: name'), label: L._('Filter keys'), inheritable: true}] + ]; + + builder = new L.U.FormBuilder(this, optionsFields, { + callback: function (e) { + this.eachDataLayer(function (datalayer) { + if (e.helper.field === 'options.sortKey') datalayer.reindex(); + datalayer.redraw(); + }); + } + }); + var defaultProperties = L.DomUtil.createFieldset(container, L._('Default properties')); + defaultProperties.appendChild(builder.build()); + + var popupFields = [ + 'options.popupTemplate', + 'options.popupContentTemplate', + 'options.showLabel', + 'options.labelDirection', + 'options.labelInteractive' + ]; + builder = new L.U.FormBuilder(this, popupFields, { + callback: function (e) { + if (e.helper.field === 'options.popupTemplate' || e.helper.field === 'options.popupContentTemplate') return; + this.eachDataLayer(function (datalayer) { + datalayer.redraw(); + }) + } + }); + var popupFieldset = L.DomUtil.createFieldset(container, L._('Default interaction options')); + popupFieldset.appendChild(builder.build()); + + if (!L.Util.isObject(this.options.tilelayer)) { + this.options.tilelayer = {}; + } + var tilelayerFields = [ + ['options.tilelayer.name', {handler: 'BlurInput', placeholder: L._('display name')}], + ['options.tilelayer.url_template', {handler: 'BlurInput', helpText: L._('Supported scheme') + ': http://{s}.domain.com/{z}/{x}/{y}.png', placeholder: 'url'}], + ['options.tilelayer.maxZoom', {handler: 'BlurIntInput', placeholder: L._('max zoom')}], + ['options.tilelayer.minZoom', {handler: 'BlurIntInput', placeholder: L._('min zoom')}], + ['options.tilelayer.attribution', {handler: 'BlurInput', placeholder: L._('attribution')}], + ['options.tilelayer.tms', {handler: 'Switch', label: L._('TMS format')}] + ]; + var customTilelayer = L.DomUtil.createFieldset(container, L._('Custom background')); + builder = new L.U.FormBuilder(this, tilelayerFields, { + callback: this.initTileLayers, + callbackContext: this + }); + customTilelayer.appendChild(builder.build()); + + if (!L.Util.isObject(this.options.limitBounds)) { + this.options.limitBounds = {}; + } + var limitBounds = L.DomUtil.createFieldset(container, L._('Limit bounds')); + var boundsFields = [ + ['options.limitBounds.south', {handler: 'BlurFloatInput', placeholder: L._('max South')}], + ['options.limitBounds.west', {handler: 'BlurFloatInput', placeholder: L._('max West')}], + ['options.limitBounds.north', {handler: 'BlurFloatInput', placeholder: L._('max North')}], + ['options.limitBounds.east', {handler: 'BlurFloatInput', placeholder: L._('max East')}] + ]; + var boundsBuilder = new L.U.FormBuilder(this, boundsFields, { + callback: this.handleLimitBounds, + callbackContext: this + }); + limitBounds.appendChild(boundsBuilder.build()); + var boundsButtons = L.DomUtil.create('div', 'button-bar half', limitBounds); + var setCurrentButton = L.DomUtil.add('a', 'button', boundsButtons, L._('Use current bounds')); + setCurrentButton.href = '#'; + L.DomEvent.on(setCurrentButton, 'click', function () { + var bounds = this.getBounds(); + this.options.limitBounds.south = L.Util.formatNum(bounds.getSouth()); + this.options.limitBounds.west = L.Util.formatNum(bounds.getWest()); + this.options.limitBounds.north = L.Util.formatNum(bounds.getNorth()); + this.options.limitBounds.east = L.Util.formatNum(bounds.getEast()); + boundsBuilder.fetchAll(); + this.isDirty = true; + this.handleLimitBounds(); + }, this); + var emptyBounds = L.DomUtil.add('a', 'button', boundsButtons, L._('Empty')); + emptyBounds.href = '#'; + L.DomEvent.on(emptyBounds, 'click', function () { + this.options.limitBounds.south = null; + this.options.limitBounds.west = null; + this.options.limitBounds.north = null; + this.options.limitBounds.east = null; + boundsBuilder.fetchAll(); + this.isDirty = true; + this.handleLimitBounds(); + }, this); + + var slideshow = L.DomUtil.createFieldset(container, L._('Slideshow')); + var slideshowFields = [ + ['options.slideshow.active', {handler: 'Switch', label: L._('Activate slideshow mode')}], + ['options.slideshow.delay', {handler: 'SlideshowDelay', helpText: L._('Delay between two transitions when in play mode')}], + ['options.slideshow.easing', {handler: 'Switch', label: L._('Smart transitions'), inheritable: true}], + ['options.slideshow.autoplay', {handler: 'Switch', label: L._('Autostart when map is loaded')}] + ]; + var slideshowHandler = function () { + this.slideshow.setOptions(this.options.slideshow); + this.renderControls(); + }; + var slideshowBuilder = new L.U.FormBuilder(this, slideshowFields, { + callback: slideshowHandler, + callbackContext: this + }); + slideshow.appendChild(slideshowBuilder.build()); + + var credits = L.DomUtil.createFieldset(container, L._('Credits')); + var creditsFields = [ + ['options.licence', {handler: 'LicenceChooser', label: L._('licence')}], + ['options.shortCredit', {handler: 'Input', label: L._('Short credits'), helpEntries: ['shortCredit', 'textFormatting']}], + ['options.longCredit', {handler: 'Textarea', label: L._('Long credits'), helpEntries: ['longCredit', 'textFormatting']}] + ]; + var creditsBuilder = new L.U.FormBuilder(this, creditsFields, { + callback: function () {this._controls.attribution._update();}, + callbackContext: this + }); + credits.appendChild(creditsBuilder.build()); + + var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')); + var advancedButtons = L.DomUtil.create('div', 'button-bar half', advancedActions); + var del = L.DomUtil.create('a', 'button umap-delete', advancedButtons); + del.href = '#'; + del.innerHTML = L._('Delete'); + L.DomEvent + .on(del, 'click', L.DomEvent.stop) + .on(del, 'click', this.del, this); + var clone = L.DomUtil.create('a', 'button umap-clone', advancedButtons); + clone.href = '#'; + clone.innerHTML = L._('Clone'); + clone.title = L._('Clone this map'); + L.DomEvent + .on(clone, 'click', L.DomEvent.stop) + .on(clone, 'click', this.clone, this); + var empty = L.DomUtil.create('a', 'button umap-empty', advancedButtons); + empty.href = '#'; + empty.innerHTML = L._('Empty'); + empty.title = L._('Delete all layers'); + L.DomEvent + .on(empty, 'click', L.DomEvent.stop) + .on(empty, 'click', this.empty, this); + var download = L.DomUtil.create('a', 'button umap-download', advancedButtons); + download.href = '#'; + download.innerHTML = L._('Download'); + download.title = L._('Open download panel'); + L.DomEvent + .on(download, 'click', L.DomEvent.stop) + .on(download, 'click', this.renderShareBox, this); + this.ui.openPanel({data: {html: container}, className: 'dark'}); + }, + + enableEdit: function() { + L.DomUtil.addClass(document.body, 'umap-edit-enabled'); + this.editEnabled = true; + this.fire('edit:enabled'); + }, + + disableEdit: function() { + if (this.isDirty) return; + L.DomUtil.removeClass(document.body, 'umap-edit-enabled'); + this.editedFeature = null; + this.editEnabled = false; + this.fire('edit:disabled'); + }, + + getDisplayName: function () { + return this.options.name || L._('Untitled map'); + }, + + initCaptionBar: function () { + var container = L.DomUtil.create('div', 'umap-caption-bar', this._controlContainer), + name = L.DomUtil.create('h3', '', container); + L.DomEvent.disableClickPropagation(container); + this.permissions.addOwnerLink('span', container); + var about = L.DomUtil.add('a', 'umap-about-link', container, ' — ' + L._('About')); + about.href = '#'; + L.DomEvent.on(about, 'click', this.displayCaption, this); + var browser = L.DomUtil.add('a', 'umap-open-browser-link', container, ' | ' + L._('Browse data')); + browser.href = '#'; + L.DomEvent.on(browser, 'click', L.DomEvent.stop) + .on(browser, 'click', this.openBrowser, this); + var setName = function () { + name.innerHTML = this.getDisplayName(); + }; + L.bind(setName, this)(); + this.on('postsync', L.bind(setName, this)); + this.onceDatalayersLoaded(function () { + this.slideshow.renderToolbox(container); + }); + }, + + initEditBar: function () { + var container = L.DomUtil.create('div', 'umap-main-edit-toolbox with-transition dark', this._controlContainer), + title = L.DomUtil.add('h3', '', container, L._('Editing') + ' '), + name = L.DomUtil.create('a', 'umap-click-to-edit', title), + setName = function () { + name.innerHTML = this.getDisplayName(); + }; + L.bind(setName, this)(); + L.DomEvent.on(name, 'click', this.edit, this); + this.on('postsync', L.bind(setName, this)); + this.help.button(title, 'edit'); + var save = L.DomUtil.create('a', 'leaflet-control-edit-save button', container); + save.href = '#'; + save.title = L._('Save current edits') + ' (Ctrl-S)'; + save.innerHTML = L._('Save'); + var cancel = L.DomUtil.create('a', 'leaflet-control-edit-cancel button', container); + cancel.href = '#'; + cancel.title = L._('Cancel edits'); + cancel.innerHTML = L._('Cancel'); + var disable = L.DomUtil.create('a', 'leaflet-control-edit-disable', container); + disable.href = '#'; + disable.title = disable.innerHTML = L._('Disable editing'); + + + L.DomEvent + .addListener(disable, 'click', L.DomEvent.stop) + .addListener(disable, 'click', function (e) { + this.disableEdit(e); + this.ui.closePanel(); + }, this); + + L.DomEvent + .addListener(save, 'click', L.DomEvent.stop) + .addListener(save, 'click', this.save, this); + + L.DomEvent + .addListener(cancel, 'click', L.DomEvent.stop) + .addListener(cancel, 'click', this.askForReset, this); + }, + + askForReset: function (e) { + if (!confirm(L._('Are you sure you want to cancel your changes?'))) return; + this.reset(); + this.disableEdit(e); + this.ui.closePanel(); + }, + + startMarker: function () { + return this.editTools.startMarker(); + }, + + startPolyline: function () { + return this.editTools.startPolyline(); + }, + + startPolygon: function () { + return this.editTools.startPolygon(); + }, + + del: function () { + if (confirm(L._('Are you sure you want to delete this map?'))) { + var url = L.Util.template(this.options.urls.map_delete, {'map_id': this.options.umap_id}); + this.post(url); + } + }, + + clone: function () { + if (confirm(L._('Are you sure you want to clone this map and all its datalayers?'))) { + var url = L.Util.template(this.options.urls.map_clone, {'map_id': this.options.umap_id}); + this.post(url); + } + }, + + empty: function () { + this.eachDataLayerReverse(function (datalayer) { + datalayer._delete(); + }); + }, + + initLoader: function () { + this.loader = new L.Control.Loading(); + this.loader.onAdd(this); + }, + + post: function (url, options) { + options = options || {}; + options.listener = this; + this.xhr.post(url, options); + }, + + get: function (url, options) { + options = options || {}; + options.listener = this; + this.xhr.get(url, options); + }, + + ajax: function (options) { + options.listener = this; + this.xhr._ajax(options); + }, + + initContextMenu: function () { + this.contextmenu = new L.U.ContextMenu(this); + this.contextmenu.enable(); + }, + + setContextMenuItems: function (e) { + var items = []; + if (this._zoom !== this.getMaxZoom()) { + items.push({ + text: L._('Zoom in'), + callback: function () {this.zoomIn();} + }); + } + if (this._zoom !== this.getMinZoom()) { + items.push({ + text: L._('Zoom out'), + callback: function () {this.zoomOut();} + }); + } + if (e && e.relatedTarget) { + if (e.relatedTarget.getContextMenuItems) { + items = items.concat(e.relatedTarget.getContextMenuItems(e)); + } + } + if (this.options.allowEdit) { + items.push('-'); + if (this.editEnabled) { + if (!this.isDirty) { + items.push({ + text: L._('Stop editing') + ' (Ctrl+E)', + callback: this.disableEdit + }); + } + if (this.options.enableMarkerDraw) { + items.push( + { + text: L._('Draw a marker') + ' (Ctrl-M)', + callback: this.startMarker, + context: this + }); + } + if (this.options.enablePolylineDraw) { + items.push( + { + text: L._('Draw a polygon') + ' (Ctrl-P)', + callback: this.startPolygon, + context: this + }); + } + if (this.options.enablePolygonDraw) { + items.push( + { + text: L._('Draw a line') + ' (Ctrl-L)', + callback: this.startPolyline, + context: this + }); + } + items.push('-'); + items.push({ + text: L._('Help'), + callback: function () { this.help.show('edit');} + }); + } else { + items.push({ + text: L._('Start editing') + ' (Ctrl+E)', + callback: this.enableEdit + }); + } + } + items.push('-', + { + text: L._('Browse data'), + callback: this.openBrowser + }, + { + text: L._('About'), + callback: this.displayCaption + }, + { + text: L._('Search location'), + callback: this.search + } + ); + if (this.options.urls.routing) { + items.push('-', + { + text: L._('Directions from here'), + callback: this.openExternalRouting + } + ); + } + this.options.contextmenuItems = items; + }, + + openExternalRouting: function (e) { + var url = this.options.urls.routing; + if (url) { + var params = { + lat: e.latlng.lat, + lng: e.latlng.lng, + locale: L.locale, + zoom: this.getZoom() + }; + window.open(L.Util.template(url, params)); + } + return; + }, + + getMap: function () { + return this; + }, + + getGeoContext: function () { + var context = { + bbox: this.getBounds().toBBoxString(), + north: this.getBounds().getNorthEast().lat, + east: this.getBounds().getNorthEast().lng, + south: this.getBounds().getSouthWest().lat, + west: this.getBounds().getSouthWest().lng, + lat: this.getCenter().lat, + lng: this.getCenter().lng, + zoom: this.getZoom() + }; + context.left = context.west; + context.bottom = context.south; + context.right = context.east; + context.top = context.north; + return context; + }, + + localizeUrl: function (url) { + return L.Util.greedyTemplate(url, this.getGeoContext(), true); + }, + + proxyUrl: function (url) { + if (this.options.urls.ajax_proxy) { + url = L.Util.template(this.options.urls.ajax_proxy, {url: encodeURIComponent(url)}); + } + return url; + }, + + closeInplaceToolbar: function () { + var toolbar = this._toolbars[L.Toolbar.Popup._toolbar_class_id]; + if (toolbar) toolbar.remove(); + }, + + search: function () { + if (this._controls.search) this._controls.search.openPanel(this); + }, + + getFilterKeys: function () { + return (this.options.filterKey || this.options.sortKey || 'name').split(','); + } + +}); diff --git a/umap/static/umap/js/umap.layer.js b/umap/static/umap/js/umap.layer.js new file mode 100644 index 00000000..b9dd679e --- /dev/null +++ b/umap/static/umap/js/umap.layer.js @@ -0,0 +1,1071 @@ +L.U.Layer = { + canBrowse: true, + + getFeatures: function () { + return this._layers; + }, + + getEditableOptions: function () {return [];}, + + postUpdate: function () {} + +}; + +L.U.Layer.Default = L.FeatureGroup.extend({ + _type: 'Default', + includes: [L.U.Layer], + + initialize: function (datalayer) { + this.datalayer = datalayer; + L.FeatureGroup.prototype.initialize.call(this); + } + +}); + + +L.U.MarkerCluster = L.MarkerCluster.extend({ +// Custom class so we can call computeTextColor +// when element is already on the DOM. + + _initIcon: function () { + L.MarkerCluster.prototype._initIcon.call(this); + var div = this._icon.querySelector('div'); + // Compute text color only when icon is added to the DOM. + div.style.color = this._iconObj.computeTextColor(div); + } + +}); + +L.U.Layer.Cluster = L.MarkerClusterGroup.extend({ + _type: 'Cluster', + includes: [L.U.Layer], + + initialize: function (datalayer) { + this.datalayer = datalayer; + var options = { + polygonOptions: { + color: this.datalayer.getColor() + }, + iconCreateFunction: function (cluster) { + return new L.U.Icon.Cluster(datalayer, cluster); + } + }; + if (this.datalayer.options.cluster && this.datalayer.options.cluster.radius) { + options.maxClusterRadius = this.datalayer.options.cluster.radius; + } + L.MarkerClusterGroup.prototype.initialize.call(this, options); + this._markerCluster = L.U.MarkerCluster; + }, + + getEditableOptions: function () { + if (!L.Util.isObject(this.datalayer.options.cluster)) { + this.datalayer.options.cluster = {}; + } + return [ + ['options.cluster.radius', {handler: 'BlurIntInput', placeholder: L._('Clustering radius'), helpText: L._('Override clustering radius (default 80)')}], + ['options.cluster.textColor', {handler: 'TextColorPicker', placeholder: L._('Auto'), helpText: L._('Text color for the cluster label')}], + ]; + + }, + + postUpdate: function (e) { + if (e.helper.field === 'options.cluster.radius') { + // No way to reset radius of an already instanciated MarkerClusterGroup... + this.datalayer.resetLayer(true); + return; + } + if (e.helper.field === 'options.color') { + this.options.polygonOptions.color = this.datalayer.getColor(); + } + } + +}); + +L.U.Layer.Heat = L.HeatLayer.extend({ + _type: 'Heat', + includes: [L.U.Layer], + canBrowse: false, + + initialize: function (datalayer) { + this.datalayer = datalayer; + L.HeatLayer.prototype.initialize.call(this, [], this.datalayer.options.heat); + }, + + addLayer: function (layer) { + if (layer instanceof L.Marker) { + var latlng = layer.getLatLng(), alt; + if (this.datalayer.options.heat && this.datalayer.options.heat.intensityProperty) { + alt = parseFloat(layer.properties[this.datalayer.options.heat.intensityProperty || 0]); + latlng = new L.LatLng(latlng.lat, latlng.lng, alt); + } + this.addLatLng(latlng); + } + }, + + clearLayers: function () { + this.setLatLngs([]); + }, + + redraw: function () { + // setlalngs call _redraw through setAnimFrame, thus async, so this + // can ends with race condition if we remove the layer very faslty after. + // Remove me when https://github.com/Leaflet/Leaflet.heat/pull/53 is released. + if (!this._map) return; + L.HeatLayer.prototype.redraw.call(this); + }, + + getFeatures: function () { + return {}; + }, + + getBounds: function () { + return L.latLngBounds(this._latlngs); + }, + + getEditableOptions: function () { + if (!L.Util.isObject(this.datalayer.options.heat)) { + this.datalayer.options.heat = {}; + } + return [ + ['options.heat.radius', {handler: 'BlurIntInput', placeholder: L._('Heatmap radius'), helpText: L._('Override heatmap radius (default 25)')}], + ['options.heat.intensityProperty', {handler: 'BlurInput', placeholder: L._('Heatmap intensity property'), helpText: L._('Optional intensity property for heatmap')}] + ]; + + }, + + postUpdate: function (e) { + if (e.helper.field === 'options.heat.intensityProperty') { + this.datalayer.resetLayer(true); // We need to repopulate the latlngs + return; + } + if (e.helper.field === 'options.heat.radius') { + this.options.radius = this.datalayer.options.heat.radius; + } + this._updateOptions(); + } + +}); + +L.U.DataLayer = L.Class.extend({ + + includes: [L.Mixin.Events], + + options: { + displayOnLoad: true, + browsable: true + }, + + initialize: function (map, data) { + this.map = map; + this._index = Array(); + this._layers = {}; + this._geojson = null; + this._propertiesIndex = []; + + this.parentPane = this.map.getPane('overlayPane'); + this.pane = this.map.createPane('datalayer' + L.stamp(this), this.parentPane); + this.pane.dataset.id = L.stamp(this); + this.renderer = L.svg({pane: this.pane}); + + var isDirty = false, + isDeleted = false, + self = this; + try { + Object.defineProperty(this, 'isDirty', { + get: function () { + return isDirty; + }, + set: function (status) { + if (!isDirty && status) self.fire('dirty'); + isDirty = status; + if (status) { + self.map.addDirtyDatalayer(self); + // A layer can be made dirty by indirect action (like dragging layers) + // we need to have it loaded before saving it. + if (!self.isLoaded()) self.fetchData(); + } else { + self.map.removeDirtyDatalayer(self); + self.isDeleted = false; + } + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + try { + Object.defineProperty(this, 'isDeleted', { + get: function () { + return isDeleted; + }, + set: function (status) { + if (!isDeleted && status) self.fire('deleted'); + isDeleted = status; + if (status) self.isDirty = status; + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + this.setUmapId(data.id); + this.setOptions(data); + this.backupOptions(); + this.connectToMap(); + if (this.displayedOnLoad()) this.show(); + if (!this.umap_id) this.isDirty = true; + this.onceLoaded(function () { + this.map.on('moveend', this.fetchRemoteData, this); + }); + }, + + displayedOnLoad: function () { + return ((this.map.datalayersOnLoad && this.umap_id && this.map.datalayersOnLoad.indexOf(this.umap_id.toString()) !== -1) || + (!this.map.datalayersOnLoad && this.options.displayOnLoad)); + }, + + insertBefore: function (other) { + if (!other) return; + this.parentPane.insertBefore(this.pane, other.pane); + }, + + insertAfter: function (other) { + if (!other) return; + this.parentPane.insertBefore(this.pane, other.pane.nextSibling); + }, + + bringToTop: function () { + this.parentPane.appendChild(this.pane); + }, + + resetLayer: function (force) { + if (this.layer && this.options.type === this.layer._type && !force) return; + var visible = this.isVisible(); + if (this.layer) this.layer.clearLayers(); + // delete this.layer? + if (visible) this.map.removeLayer(this.layer); + var Class = L.U.Layer[this.options.type] || L.U.Layer.Default; + this.layer = new Class(this); + var filterKeys = this.map.getFilterKeys(), + filter = this.map.options.filter; + this.eachLayer(function (layer) { + if (filter && !layer.matchFilter(filter, filterKeys)) return; + this.layer.addLayer(layer); + }); + if (visible) this.map.addLayer(this.layer); + this.propagateRemote(); + }, + + eachLayer: function (method, context) { + for (var i in this._layers) { + method.call(context || this, this._layers[i]); + } + return this; + }, + + eachFeature: function (method, context) { + if (this.layer && this.layer.canBrowse) { + for (var i = 0; i < this._index.length; i++) { + method.call(context || this, this._layers[this._index[i]]); + } + } + return this; + }, + + fetchData: function () { + if (!this.umap_id) return; + this.map.get(this._dataUrl(), { + callback: function (geojson, response) { + this._etag = response.getResponseHeader('ETag'); + this.fromUmapGeoJSON(geojson); + this.backupOptions(); + this.fire('loaded'); + }, + context: this + }); + }, + + fromGeoJSON: function (geojson) { + this.addData(geojson); + this._geojson = geojson; + this.fire('dataloaded'); + this.fire('datachanged'); + }, + + fromUmapGeoJSON: function (geojson) { + if (geojson._storage) geojson._umap_options = geojson._storage; // Retrocompat + if (geojson._umap_options) this.setOptions(geojson._umap_options); + if (this.isRemoteLayer()) this.fetchRemoteData(); + else this.fromGeoJSON(geojson); + this._loaded = true; + }, + + clear: function () { + this.layer.clearLayers(); + this._layers = {}; + this._index = Array(); + if (this._geojson) { + this.backupData(); + this._geojson = null; + } + }, + + backupData: function () { + this._geojson_bk = L.Util.CopyJSON(this._geojson); + }, + + reindex: function () { + var features = []; + this.eachFeature(function (feature) { + features.push(feature); + }); + L.Util.sortFeatures(features, this.map.getOption('sortKey')); + this._index = []; + for (var i = 0; i < features.length; i++) { + this._index.push(L.Util.stamp(features[i])); + } + }, + + fetchRemoteData: function () { + if (!this.isRemoteLayer()) return; + var from = parseInt(this.options.remoteData.from, 10), + to = parseInt(this.options.remoteData.to, 10); + if ((!isNaN(from) && this.map.getZoom() < from) || + (!isNaN(to) && this.map.getZoom() > to) ) { + this.clear(); + return; + } + if (!this.options.remoteData.dynamic && this.hasDataLoaded()) return; + if (!this.isVisible()) return; + var self = this, + url = this.map.localizeUrl(this.options.remoteData.url); + if (this.options.remoteData.proxy) url = this.map.proxyUrl(url); + this.map.ajax({ + uri: url, + verb: 'GET', + callback: function (raw) { + self.clear(); + self.rawToGeoJSON(raw, self.options.remoteData.format, function (geojson) {self.fromGeoJSON(geojson);}); + } + }); + }, + + onceLoaded: function (callback, context) { + if (this.isLoaded()) callback.call(context || this, this); + else this.once('loaded', callback, context); + return this; + }, + + onceDataLoaded: function (callback, context) { + if (this.hasDataLoaded()) callback.call(context || this, this); + else this.once('dataloaded', callback, context); + return this; + }, + + isLoaded: function () { + return !this.umap_id || this._loaded; + }, + + hasDataLoaded: function () { + return !this.umap_id || this._geojson !== null; + }, + + setUmapId: function (id) { + // Datalayer is null when listening creation form + if (!this.umap_id && id) this.umap_id = id; + }, + + backupOptions: function () { + this._backupOptions = L.Util.CopyJSON(this.options); + }, + + resetOptions: function () { + this.options = L.Util.CopyJSON(this._backupOptions); + }, + + setOptions: function (options) { + this.options = L.Util.CopyJSON(L.U.DataLayer.prototype.options); // Start from fresh. + this.updateOptions(options); + }, + + updateOptions: function (options) { + L.Util.setOptions(this, options); + this.resetLayer(); + }, + + connectToMap: function () { + var id = L.stamp(this); + if (!this.map.datalayers[id]) { + this.map.datalayers[id] = this; + if (L.Util.indexOf(this.map.datalayers_index, this) === -1) this.map.datalayers_index.push(this); + } + this.map.updateDatalayersControl(); + }, + + _dataUrl: function() { + var template = this.map.options.urls.datalayer_view; + return L.Util.template(template, {'pk': this.umap_id, 'map_id': this.map.options.umap_id}); + }, + + isRemoteLayer: function () { + return !!(this.options.remoteData && this.options.remoteData.url && this.options.remoteData.format); + }, + + isClustered: function () { + return this.options.type === 'Cluster'; + }, + + addLayer: function (feature) { + var id = L.stamp(feature); + feature.connectToDataLayer(this); + this._index.push(id); + this._layers[id] = feature; + this.layer.addLayer(feature); + this.indexProperties(feature); + if (this.hasDataLoaded()) this.fire('datachanged'); + }, + + removeLayer: function (feature) { + var id = L.stamp(feature); + feature.disconnectFromDataLayer(this); + this._index.splice(this._index.indexOf(id), 1); + delete this._layers[id]; + this.layer.removeLayer(feature); + if (this.hasDataLoaded()) this.fire('datachanged'); + }, + + indexProperties: function (feature) { + for (var i in feature.properties) if (typeof feature.properties[i] !== 'object') this.indexProperty(i); + }, + + indexProperty: function (name) { + if (!name) return; + if (name.indexOf('_') === 0) return; + if (L.Util.indexOf(this._propertiesIndex, name) !== -1) return; + this._propertiesIndex.push(name); + }, + + deindexProperty: function (name) { + var idx = this._propertiesIndex.indexOf(name); + if (idx !== -1) this._propertiesIndex.splice(idx, 1); + }, + + addData: function (geojson) { + try { + // Do not fail if remote data is somehow invalid, + // otherwise the layer becomes uneditable. + this.geojsonToFeatures(geojson); + } catch (err) { + console.log("Error with DataLayer", this.umap_id); + console.error(err); + } + }, + + addRawData: function (c, type) { + var self = this; + this.rawToGeoJSON(c, type, function (geojson) { + self.addData(geojson); + }); + }, + + rawToGeoJSON: function (c, type, callback) { + var self = this; + var toDom = function (x) { + return (new DOMParser()).parseFromString(x, 'text/xml'); + }; + + // TODO add a duck typing guessType + if (type === 'csv') { + csv2geojson.csv2geojson(c, { + delimiter: 'auto', + includeLatLon: false + }, function(err, result) { + if (err) { + var message; + if (err.type === 'Error') { + message = err.message; + } else { + message = L._('{count} errors during import: {message}', {count: err.length, message: err[0].message}); + } + self.map.ui.alert({content: message, level: 'error', duration: 10000}); + console.log(err); + } + if (result && result.features.length) { + callback(result); + } + }); + } else if (type === 'gpx') { + callback(toGeoJSON.gpx(toDom(c))); + } else if (type === 'georss') { + callback(GeoRSSToGeoJSON(toDom(c))); + } else if (type === 'kml') { + callback(toGeoJSON.kml(toDom(c))); + } else if (type === 'osm') { + var d; + try { + d = JSON.parse(c); + } catch (e) { + d = toDom(c); + } + callback(osmtogeojson(d)); + } else if (type === 'geojson') { + try { + var gj = JSON.parse(c); + callback(gj); + } catch(err) { + self.map.ui.alert({content: 'Invalid JSON file: ' + err}); + return; + } + } + }, + + geojsonToFeatures: function (geojson) { + if (!geojson) return; + var features = geojson instanceof Array ? geojson : geojson.features, + i, len, latlng, latlngs; + + if (features) { + L.Util.sortFeatures(features, this.map.getOption('sortKey')); + for (i = 0, len = features.length; i < len; i++) { + this.geojsonToFeatures(features[i]); + } + return this; + } + + var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson; + if (!geometry) return; // null geometry is valid geojson. + var coords = geometry.coordinates, + layer, tmp; + + switch (geometry.type) { + case 'Point': + try { + latlng = L.GeoJSON.coordsToLatLng(coords); + } catch (e) { + console.error('Invalid latlng object from', coords); + break; + } + layer = this._pointToLayer(geojson, latlng); + break; + + case 'MultiLineString': + case 'LineString': + latlngs = L.GeoJSON.coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1); + if (!latlngs.length) break; + layer = this._lineToLayer(geojson, latlngs); + break; + + case 'MultiPolygon': + case 'Polygon': + latlngs = L.GeoJSON.coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2); + layer = this._polygonToLayer(geojson, latlngs); + break; + case 'GeometryCollection': + return this.geojsonToFeatures(geometry.geometries); + + default: + this.map.ui.alert({content: L._('Skipping unkown geometry.type: {type}', {type: geometry.type}), level: 'error'}); + } + if (layer) { + this.addLayer(layer); + return layer; + } + }, + + _pointToLayer: function(geojson, latlng) { + return new L.U.Marker( + this.map, + latlng, + {'geojson': geojson, 'datalayer': this} + ); + }, + + _lineToLayer: function(geojson, latlngs) { + return new L.U.Polyline( + this.map, + latlngs, + {'geojson': geojson, 'datalayer': this, color: null} + ); + }, + + _polygonToLayer: function(geojson, latlngs) { + // Ensure no empty hole + // for (var i = latlngs.length - 1; i > 0; i--) { + // if (!latlngs.slice()[i].length) latlngs.splice(i, 1); + // } + return new L.U.Polygon( + this.map, + latlngs, + {'geojson': geojson, 'datalayer': this} + ); + }, + + importRaw: function (raw, type) { + this.addRawData(raw, type); + this.isDirty = true; + this.zoomTo(); + }, + + importFromFiles: function (files, type) { + for (var i = 0, f; f = files[i]; i++) { + this.importFromFile(f, type); + } + }, + + importFromFile: function (f, type) { + var reader = new FileReader(), + self = this; + type = type || L.Util.detectFileType(f); + reader.readAsText(f); + reader.onload = function (e) { + self.importRaw(e.target.result, type); + }; + }, + + importFromUrl: function (url, type) { + url = this.map.localizeUrl(url); + var self = this; + this.map.xhr._ajax({verb: 'GET', uri: url, callback: function (data) { + self.importRaw(data, type); + }}); + }, + + getEditUrl: function() { + return L.Util.template(this.map.options.urls.datalayer_update, {'map_id': this.map.options.umap_id, 'pk': this.umap_id}); + }, + + getCreateUrl: function() { + return L.Util.template(this.map.options.urls.datalayer_create, {'map_id': this.map.options.umap_id}); + }, + + getSaveUrl: function () { + return (this.umap_id && this.getEditUrl()) || this.getCreateUrl(); + }, + + getColor: function () { + return this.options.color || this.map.getOption('color'); + }, + + getDeleteUrl: function () { + return L.Util.template(this.map.options.urls.datalayer_delete, {'pk': this.umap_id, 'map_id': this.map.options.umap_id}); + + }, + + getVersionsUrl: function () { + return L.Util.template(this.map.options.urls.datalayer_versions, {'pk': this.umap_id, 'map_id': this.map.options.umap_id}); + }, + + getVersionUrl: function (name) { + return L.Util.template(this.map.options.urls.datalayer_version, {'pk': this.umap_id, 'map_id': this.map.options.umap_id, name: name}); + }, + + _delete: function () { + this.isDeleted = true; + this.erase(); + }, + + empty: function () { + if (this.isRemoteLayer()) return; + this.clear(); + this.isDirty = true; + }, + + clone: function () { + var options = L.Util.CopyJSON(this.options); + options.name = L._('Clone of {name}', {name: this.options.name}); + delete options.id; + var geojson = L.Util.CopyJSON(this._geojson), + datalayer = this.map.createDataLayer(options); + datalayer.fromGeoJSON(geojson); + return datalayer; + }, + + erase: function () { + this.hide(); + delete this.map.datalayers[L.stamp(this)]; + this.map.datalayers_index.splice(this.getRank(), 1); + this.parentPane.removeChild(this.pane); + this.map.updateDatalayersControl(); + this.fire('erase'); + this._leaflet_events_bk = this._leaflet_events; + this.off(); + this.clear(); + delete this._loaded; + }, + + reset: function () { + if (!this.umap_id) this.erase(); + + this.resetOptions(); + this.parentPane.appendChild(this.pane); + if (this._leaflet_events_bk && !this._leaflet_events) { + this._leaflet_events = this._leaflet_events_bk; + } + this.clear(); + this.hide(); + if (this.isRemoteLayer()) this.fetchRemoteData(); + else if (this._geojson_bk) this.fromGeoJSON(this._geojson_bk); + this._loaded = true; + this.show(); + this.isDirty = false; + }, + + redraw: function () { + this.hide(); + this.show(); + }, + + edit: function () { + if(!this.map.editEnabled || !this.isLoaded()) {return;} + var container = L.DomUtil.create('div'), + metadataFields = [ + 'options.name', + 'options.description', + ['options.type', {handler: 'LayerTypeChooser', label: L._('Type of layer')}], + ['options.displayOnLoad', {label: L._('Display on load'), handler: 'Switch'}], + ['options.browsable', {label: L._('Data is browsable'), handler: 'Switch', helpEntries: 'browsable'}] + ]; + var title = L.DomUtil.add('h3', '', container, L._('Layer properties')); + var builder = new L.U.FormBuilder(this, metadataFields, { + callback: function (e) { + this.map.updateDatalayersControl(); + if (e.helper.field === 'options.type') { + this.resetLayer(); + this.edit(); + } + } + }); + container.appendChild(builder.build()); + + var shapeOptions = [ + 'options.color', + 'options.iconClass', + 'options.iconUrl', + 'options.opacity', + 'options.stroke', + 'options.weight', + 'options.fill', + 'options.fillColor', + 'options.fillOpacity', + ]; + + shapeOptions = shapeOptions.concat(this.layer.getEditableOptions()); + + var redrawCallback = function (field) { + this.hide(); + this.layer.postUpdate(field); + this.show(); + }; + + builder = new L.U.FormBuilder(this, shapeOptions, { + id: 'datalayer-advanced-properties', + callback: redrawCallback + }); + var shapeProperties = L.DomUtil.createFieldset(container, L._('Shape properties')); + shapeProperties.appendChild(builder.build()); + + var optionsFields = [ + 'options.smoothFactor', + 'options.dashArray', + 'options.zoomTo', + 'options.labelKey' + ]; + + optionsFields = optionsFields.concat(this.layer.getEditableOptions()); + + builder = new L.U.FormBuilder(this, optionsFields, { + id: 'datalayer-advanced-properties', + callback: redrawCallback + }); + var advancedProperties = L.DomUtil.createFieldset(container, L._('Advanced properties')); + advancedProperties.appendChild(builder.build()); + + var popupFields = [ + 'options.popupTemplate', + 'options.popupContentTemplate', + 'options.showLabel', + 'options.labelDirection', + 'options.labelInteractive', + ]; + builder = new L.U.FormBuilder(this, popupFields, {callback: redrawCallback}); + var popupFieldset = L.DomUtil.createFieldset(container, L._('Interaction options')); + popupFieldset.appendChild(builder.build()); + + if (!L.Util.isObject(this.options.remoteData)) { + this.options.remoteData = {}; + } + var remoteDataFields = [ + ['options.remoteData.url', {handler: 'Url', label: L._('Url'), helpEntries: 'formatURL'}], + ['options.remoteData.format', {handler: 'DataFormat', label: L._('Format')}], + ['options.remoteData.from', {label: L._('From zoom'), helpText: L._('Optionnal.')}], + ['options.remoteData.to', {label: L._('To zoom'), helpText: L._('Optionnal.')}], + ['options.remoteData.dynamic', {handler: 'Switch', label: L._('Dynamic'), helpEntries: 'dynamicRemoteData'}], + ['options.remoteData.licence', {label: L._('Licence'), helpText: L._('Please be sure the licence is compliant with your use.')}] + ]; + if (this.map.options.urls.ajax_proxy) { + remoteDataFields.push(['options.remoteData.proxy', {handler: 'Switch', label: L._('Proxy request'), helpEntries: 'proxyRemoteData'}]); + } + + var remoteDataContainer = L.DomUtil.createFieldset(container, L._('Remote data')); + builder = new L.U.FormBuilder(this, remoteDataFields); + remoteDataContainer.appendChild(builder.build()); + + if (this.map.options.urls.datalayer_versions) this.buildVersionsFieldset(container); + + var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')); + var advancedButtons = L.DomUtil.create('div', 'button-bar half', advancedActions); + var deleteLink = L.DomUtil.create('a', 'button delete_datalayer_button umap-delete', advancedButtons); + deleteLink.innerHTML = L._('Delete'); + deleteLink.href = '#'; + L.DomEvent.on(deleteLink, 'click', L.DomEvent.stop) + .on(deleteLink, 'click', function () { + this._delete(); + this.map.ui.closePanel(); + }, this); + if (!this.isRemoteLayer()) { + var emptyLink = L.DomUtil.create('a', 'button umap-empty', advancedButtons); + emptyLink.innerHTML = L._('Empty'); + emptyLink.href = '#'; + L.DomEvent.on(emptyLink, 'click', L.DomEvent.stop) + .on(emptyLink, 'click', this.empty, this); + } + var cloneLink = L.DomUtil.create('a', 'button umap-clone', advancedButtons); + cloneLink.innerHTML = L._('Clone'); + cloneLink.href = '#'; + L.DomEvent.on(cloneLink, 'click', L.DomEvent.stop) + .on(cloneLink, 'click', function () { + var datalayer = this.clone(); + datalayer.edit(); + }, this); + if (this.umap_id) { + var download = L.DomUtil.create('a', 'button umap-download', advancedButtons); + download.innerHTML = L._('Download'); + download.href = this._dataUrl(); + download.target = '_blank'; + } + this.map.ui.openPanel({data: {html: container}, className: 'dark'}); + + }, + + getOption: function (option) { + if (L.Util.usableOption(this.options, option)) return this.options[option]; + else return this.map.getOption(option); + }, + + buildVersionsFieldset: function (container) { + + var appendVersion = function (data) { + var date = new Date(parseInt(data.at, 10)); + var content = date.toLocaleDateString(L.locale) + ' (' + parseInt(data.size) / 1000 + 'Kb)'; + var el = L.DomUtil.create('div', 'umap-datalayer-version', versionsContainer); + var a = L.DomUtil.create('a', '', el); + L.DomUtil.add('span', '', el, content); + a.href = '#'; + a.title = L._('Restore this version'); + L.DomEvent.on(a, 'click', L.DomEvent.stop) + .on(a, 'click', function () { + this.restore(data.name); + }, this); + }; + + var versionsContainer = L.DomUtil.createFieldset(container, L._('Versions'), {callback: function () { + this.map.xhr.get(this.getVersionsUrl(), { + callback: function (data) { + for (var i = 0; i < data.versions.length; i++) { + appendVersion.call(this, data.versions[i]); + }; + }, + context: this + }); + }, context: this}); + }, + + restore: function (version) { + if (!this.map.editEnabled) return; + if (!confirm(L._('Are you sure you want to restore this version?'))) return; + this.map.xhr.get(this.getVersionUrl(version), { + callback: function (geojson) { + if (geojson._storage) geojson._umap_options = geojson._storage; // Retrocompat. + if (geojson._umap_options) this.setOptions(geojson._umap_options); + this.empty(); + if (this.isRemoteLayer()) this.fetchRemoteData(); + else this.addData(geojson); + this.isDirty = true; + }, + context: this + }) + }, + + featuresToGeoJSON: function () { + var features = []; + this.eachLayer(function (layer) { + features.push(layer.toGeoJSON()); + }); + return features; + }, + + show: function () { + if(!this.isLoaded()) this.fetchData(); + this.map.addLayer(this.layer); + this.fire('show'); + }, + + hide: function () { + this.map.removeLayer(this.layer); + this.fire('hide'); + }, + + toggle: function () { + if (!this.isVisible()) this.show(); + else this.hide(); + }, + + zoomTo: function () { + if (!this.isVisible()) return; + var bounds = this.layer.getBounds(); + if (bounds.isValid()) this.map.fitBounds(bounds); + }, + + allowBrowse: function () { + return !!this.options.browsable && this.canBrowse() && this.isVisible() && this._index.length; + }, + + isVisible: function () { + return this.map.hasLayer(this.layer); + }, + + canBrowse: function () { + return this.layer && this.layer.canBrowse; + }, + + getFeatureByIndex: function (index) { + if (index === -1) index = this._index.length - 1; + var id = this._index[index]; + return this._layers[id]; + }, + + getNextFeature: function (feature) { + var id = this._index.indexOf(L.stamp(feature)), + nextId = this._index[id + 1]; + return nextId? this._layers[nextId]: this.getNextBrowsable().getFeatureByIndex(0); + }, + + getPreviousFeature: function (feature) { + if (this._index <= 1) { return null; } + var id = this._index.indexOf(L.stamp(feature)), + previousId = this._index[id - 1]; + return previousId? this._layers[previousId]: this.getPreviousBrowsable().getFeatureByIndex(-1); + }, + + getPreviousBrowsable: function () { + var id = this.getRank(), next, index = this.map.datalayers_index; + while(id = index[++id] ? id : 0, next = index[id]) { + if (next === this || next.allowBrowse()) break; + } + return next; + }, + + getNextBrowsable: function () { + var id = this.getRank(), prev, index = this.map.datalayers_index; + while(id = index[--id] ? id : index.length - 1, prev = index[id]) { + if (prev === this || prev.allowBrowse()) break; + } + return prev; + }, + + umapGeoJSON: function () { + return { + type: 'FeatureCollection', + features: this.isRemoteLayer() ? [] : this.featuresToGeoJSON(), + _umap_options: this.options + }; + }, + + metadata: function () { + return { + id: this.umap_id, + name: this.options.name, + displayOnLoad: this.options.displayOnLoad + } + }, + + getRank: function () { + return this.map.datalayers_index.indexOf(this); + }, + + save: function () { + if (this.isDeleted) return this.saveDelete(); + if (!this.isLoaded()) {return;} + var geojson = this.umapGeoJSON(); + var formData = new FormData(); + formData.append('name', this.options.name); + formData.append('display_on_load', !!this.options.displayOnLoad); + formData.append('rank', this.getRank()); + // Filename support is shaky, don't do it for now. + var blob = new Blob([JSON.stringify(geojson)], {type: 'application/json'}); + formData.append('geojson', blob); + this.map.post(this.getSaveUrl(), { + data: formData, + callback: function (data, response) { + this._geojson = geojson; + this._etag = response.getResponseHeader('ETag'); + this.setUmapId(data.id); + this.updateOptions(data); + this.backupOptions(); + this.connectToMap(); + this._loaded = true; + this.redraw(); // Needed for reordering features + this.isDirty = false; + this.map.continueSaving(); + }, + context: this, + headers: {'If-Match': this._etag || ''} + }); + }, + + saveDelete: function () { + var callback = function () { + this.isDirty = false; + this.map.continueSaving(); + } + if (!this.umap_id) return callback.call(this); + this.map.xhr.post(this.getDeleteUrl(), { + callback: callback, + context: this + }); + }, + + getMap: function () { + return this.map; + }, + + getName: function () { + return this.options.name || L._('Untitled layer'); + }, + + tableEdit: function () { + if (this.isRemoteLayer() || !this.isVisible()) return; + var editor = new L.U.TableEditor(this); + editor.edit(); + } + +}); + +L.TileLayer.include({ + + toJSON: function () { + return { + minZoom: this.options.minZoom, + maxZoom: this.options.maxZoom, + attribution: this.options.attribution, + url_template: this._url, + name: this.options.name, + tms: this.options.tms + }; + }, + + getAttribution: function () { + return L.Util.toHTML(this.options.attribution); + } + +}); diff --git a/umap/static/umap/js/umap.permissions.js b/umap/static/umap/js/umap.permissions.js new file mode 100644 index 00000000..6f7e7c92 --- /dev/null +++ b/umap/static/umap/js/umap.permissions.js @@ -0,0 +1,119 @@ +// Dedicated object so we can deal with a separate dirty status, and thus +// call the endpoint only when needed, saving one call at each save. +L.U.MapPermissions = L.Class.extend({ + + options: { + owner: null, + editors: [], + share_status: null, + edit_status: null + }, + + initialize: function (map) { + this.options = map.options.permissions || {}; + this.map = map; + var isDirty = false, + self = this; + try { + Object.defineProperty(this, 'isDirty', { + get: function () { + return isDirty; + }, + set: function (status) { + isDirty = status; + if (status) self.map.isDirty = status; + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + + }, + + isOwner: function () { + return this.map.options.user && this.options.owner && this.map.options.user.id == this.options.owner.id; + }, + + isAnonymousMap: function () { + return !this.options.owner; + }, + + getMap: function () { + return this.map; + }, + + edit: function () { + if (!this.map.options.umap_id) return this.map.ui.alert({content: L._('Please save the map before'), level: 'info'}); + var container = L.DomUtil.create('div', 'permissions-panel'), + fields = [], + title = L.DomUtil.create('h4', '', container); + if (this.isAnonymousMap()) { + if (this.map.options.anonymous_edit_url) { + var helpText = L._('Secret edit link is:
    {link}', {link: this.map.options.anonymous_edit_url}); + fields.push(['options.edit_status', {handler: 'IntSelect', label: L._('Who can edit'), selectOptions: this.map.options.anonymous_edit_statuses, helpText: helpText}]); + } + } else { + if (this.isOwner()) { + fields.push(['options.edit_status', {handler: 'IntSelect', label: L._('Who can edit'), selectOptions: this.map.options.edit_statuses}]); + fields.push(['options.share_status', {handler: 'IntSelect', label: L._('Who can view'), selectOptions: this.map.options.share_statuses}]); + fields.push(['options.owner', {handler: 'ManageOwner', label: L._("Map's owner")}]); + } + fields.push(['options.editors', {handler: 'ManageEditors', label: L._("Map's editors")}]); + } + title.innerHTML = L._('Update permissions'); + var builder = new L.U.FormBuilder(this, fields); + var form = builder.build(); + container.appendChild(form); + this.map.ui.openPanel({data: {html: container}, className: 'dark'}); + }, + + anonymousMapPanel: function () { + var container = L.DomUtil.create('div'), + fields = [], + title = L.DomUtil.create('h4', '', container); + fields.push(['options.edit_status', {handler: 'IntSelect', label: L._('Who can edit'), selectOptions: this.map.options.edit_statuses}]); + title.innerHTML = L._('Update permissions'); + var builder = new L.U.FormBuilder(this, fields); + var form = builder.build(); + container.appendChild(form); + this.map.ui.openPanel({data: {html: container}, className: 'dark'}); + }, + + save: function () { + if (!this.isDirty) return this.map.continueSaving(); + var formData = new FormData(); + if (!this.isAnonymousMap() && this.options.editors) { + const editors = this.options.editors.map((u) => u.id); + for (var i = 0; i < this.options.editors.length; i++) formData.append('editors', this.options.editors[i].id); + } + if (this.isOwner() || this.isAnonymousMap()) formData.append('edit_status', this.options.edit_status); + if (this.isOwner()) { + formData.append('owner', this.options.owner && this.options.owner.id); + formData.append('share_status', this.options.share_status); + } + this.map.post(this.getUrl(), { + data: formData, + context: this, + callback: function (data) { + this.isDirty = false; + this.map.continueSaving(); + } + }); + }, + + getUrl: function () { + return L.Util.template(this.map.options.urls.map_update_permissions, {'map_id': this.map.options.umap_id}); + }, + + addOwnerLink: function (element, container) { + if (this.options.owner && this.options.owner.name && this.options.owner.url) { + var ownerContainer = L.DomUtil.add(element, 'umap-map-owner', container, ' ' + L._('by') + ' '), + owner = L.DomUtil.create('a'); + owner.href = this.options.owner.url; + owner.innerHTML = this.options.owner.name; + ownerContainer.appendChild(owner); + } + } + +}); diff --git a/umap/static/umap/js/umap.popup.js b/umap/static/umap/js/umap.popup.js new file mode 100644 index 00000000..99491bd7 --- /dev/null +++ b/umap/static/umap/js/umap.popup.js @@ -0,0 +1,218 @@ +L.U.Popup = L.Popup.extend({ + + options: { + parseTemplate: true + }, + + initialize: function (feature) { + this.feature = feature; + this.container = L.DomUtil.create('div', 'umap-popup'); + this.format(); + L.Popup.prototype.initialize.call(this, {}, feature); + this.setContent(this.container); + }, + + hasFooter: function () { + return this.feature.hasPopupFooter(); + }, + + renderTitle: function () {}, + + renderBody: function () { + var template = this.feature.getOption('popupContentTemplate'), + container = L.DomUtil.create('div', ''), + content, properties, center; + if (this.options.parseTemplate) { + // Include context properties + properties = this.feature.map.getGeoContext(); + center = this.feature.getCenter(); + properties.lat = center.lat; + properties.lon = center.lng; + properties.lng = center.lng; + if (typeof this.feature.getMeasure !== 'undefined') { + properties.measure = this.feature.getMeasure(); + } + properties = L.extend(properties, this.feature.properties); + // Resolve properties inside description + properties.description = L.Util.greedyTemplate(this.feature.properties.description || '', properties); + content = L.Util.greedyTemplate(template, properties); + } + content = L.Util.toHTML(content); + container.innerHTML = content; + var els = container.querySelectorAll('img,iframe'); + for (var i = 0; i < els.length; i++) { + this.onElementLoaded(els[i]); + } + if (!els.length && container.textContent.replace('\n', '') === '') { + container.innerHTML = ''; + L.DomUtil.add('h3', '', container, this.feature.getDisplayName()); + } + return container; + }, + + renderFooter: function () { + if (this.hasFooter()) { + var footer = L.DomUtil.create('ul', 'umap-popup-footer', this.container), + previousLi = L.DomUtil.create('li', 'previous', footer), + zoomLi = L.DomUtil.create('li', 'zoom', footer), + nextLi = L.DomUtil.create('li', 'next', footer), + next = this.feature.getNext(), + prev = this.feature.getPrevious(); + if (next) { + nextLi.title = L._('Go to «{feature}»', {feature: next.properties.name || L._('next')}); + } + if (prev) { + previousLi.title = L._('Go to «{feature}»', {feature: prev.properties.name || L._('previous')}); + } + zoomLi.title = L._('Zoom to this feature'); + L.DomEvent.on(nextLi, 'click', function () { + if (next) next.bringToCenter({zoomTo: next.getOption('zoomTo'), callback: next.view}); + }); + L.DomEvent.on(previousLi, 'click', function () { + if (prev) prev.bringToCenter({zoomTo: prev.getOption('zoomTo'), callback: prev.view}); + }); + L.DomEvent.on(zoomLi, 'click', function () { + this.bringToCenter({zoomTo: this.getOption('zoomTo')}); + }, this.feature); + } + }, + + format: function () { + var title = this.renderTitle(); + if (title) this.container.appendChild(title); + var body = this.renderBody(); + if (body) L.DomUtil.add('div', 'umap-popup-content', this.container, body); + this.renderFooter(); + }, + + onElementLoaded: function (el) { + L.DomEvent.on(el, 'load', function () { + this._updateLayout(); + this._updatePosition(); + this._adjustPan(); + }, this); + } + +}); + +L.U.Popup.Large = L.U.Popup.extend({ + options: { + maxWidth: 500, + className: 'umap-popup-large' + } +}); + +L.U.Popup.BaseWithTitle = L.U.Popup.extend({ + + renderTitle: function () { + var title; + if (this.feature.getDisplayName()) { + title = L.DomUtil.create('h3', 'popup-title'); + title.innerHTML = L.Util.escapeHTML(this.feature.getDisplayName()); + } + return title; + } + +}); + +L.U.Popup.Table = L.U.Popup.BaseWithTitle.extend({ + + formatRow: function (key, value) { + if (value.indexOf('http') === 0) { + value = '' + value + ''; + } + return value; + }, + + addRow: function (container, key, value) { + var tr = L.DomUtil.create('tr', '', container); + L.DomUtil.add('th', '', tr, key); + L.DomUtil.add('td', '', tr, this.formatRow(key, value)); + }, + + renderBody: function () { + var table = L.DomUtil.create('table'); + + for (var key in this.feature.properties) { + if (typeof this.feature.properties[key] === 'object' || key === 'name') continue; + // TODO, manage links (url, mailto, wikipedia...) + this.addRow(table, key, L.Util.escapeHTML(this.feature.properties[key]).trim()); + } + return table; + } + +}); + +L.U.Popup.table = L.U.Popup.Table; // backward compatibility + +L.U.Popup.GeoRSSImage = L.U.Popup.BaseWithTitle.extend({ + + options: { + minWidth: 300, + maxWidth: 500, + className: 'umap-popup-large umap-georss-image' + }, + + renderBody: function () { + var container = L.DomUtil.create('a'); + container.href = this.feature.properties.link; + container.target = '_blank'; + if (this.feature.properties.img) { + var img = L.DomUtil.create('img', '', container); + img.src = this.feature.properties.img; + // Sadly, we are unable to override this from JS the clean way + // See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847 + img.style.maxWidth = this.options.maxWidth + 'px'; + img.style.maxHeight = this.options.maxWidth + 'px'; + this.onElementLoaded(img); + } + return container; + } + +}); + +L.U.Popup.GeoRSSLink = L.U.Popup.extend({ + + options: { + className: 'umap-georss-link' + }, + + renderBody: function () { + var title = this.renderTitle(this), + a = L.DomUtil.add('a'); + a.href = this.feature.properties.link; + a.target = '_blank'; + a.appendChild(title); + return a; + } +}); + +L.U.Popup.SimplePanel = L.U.Popup.extend({ + + options: { + zoomAnimation: false + }, + + allButton: function () { + var button = L.DomUtil.create('li', ''); + L.DomUtil.create('i', 'umap-icon-16 umap-list', button); + var label = L.DomUtil.create('span', '', button); + label.innerHTML = label.title = L._('See all'); + L.DomEvent.on(button, 'click', this.feature.map.openBrowser, this.feature.map); + return button; + }, + + update: function () { + this.feature.map.ui.openPanel({data: {html: this._content}, actions: [this.allButton()]}); + }, + + onRemove: function (map) { + map.ui.closePanel(); + L.U.Popup.prototype.onRemove.call(this, map); + }, + + _initLayout: function () {this._container = L.DomUtil.create('span');}, + _updateLayout: function () {}, + _updatePosition: function () {}, + _adjustPan: function () {} +}); diff --git a/umap/static/umap/js/umap.slideshow.js b/umap/static/umap/js/umap.slideshow.js new file mode 100644 index 00000000..610dc4f2 --- /dev/null +++ b/umap/static/umap/js/umap.slideshow.js @@ -0,0 +1,164 @@ +L.U.Slideshow = L.Class.extend({ + + statics: { + CLASSNAME: 'umap-slideshow-active' + }, + + options: { + delay: 5000, + autoplay: false + }, + + initialize: function (map, options) { + this.setOptions(options); + this.map = map; + this._id = null; + var current = null, // current feature + self = this; + try { + Object.defineProperty(this, 'current', { + get: function () { + if (!current) { + var datalayer = this.defaultDatalayer(); + if (datalayer) current = datalayer.getFeatureByIndex(0); + } + return current; + }, + set: function (feature) { + current = feature; + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + try { + Object.defineProperty(this, 'next', { + get: function () { + if (!current) { + return self.current; + } + return current.getNext(); + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + if (this.options.autoplay) { + this.map.onceDatalayersLoaded(function () { + this.play(); + }, this); + } + this.map.on('edit:enabled', function () { + this.stop(); + }, this); + }, + + setOptions: function (options) { + L.setOptions(this, options); + this.timeSpinner(); + }, + + defaultDatalayer: function () { + return this.map.findDataLayer(function (d) { return d.allowBrowse(); }); + }, + + timeSpinner: function () { + var time = parseInt(this.options.delay, 10); + if (!time) return; + var css = 'rotation ' + time / 1000 + 's infinite linear', + spinners = document.querySelectorAll('.umap-slideshow-toolbox .play .spinner'); + for (var i = 0; i < spinners.length; i++) { + spinners[i].style.animation = css; + spinners[i].style['-webkit-animation'] = css; + spinners[i].style['-moz-animation'] = css; + spinners[i].style['-o-animation'] = css; + } + }, + + resetSpinners: function () { + // Make that animnation is coordinated with user actions + var spinners = document.querySelectorAll('.umap-slideshow-toolbox .play .spinner'), + el, newOne; + for (var i = 0; i < spinners.length; i++) { + el = spinners[i]; + newOne = el.cloneNode(true); + el.parentNode.replaceChild(newOne, el); + } + }, + + play: function () { + if (this._id) return; + if (this.map.editEnabled) return; + L.DomUtil.addClass(document.body, L.U.Slideshow.CL.USNAME); + this._id = window.setInterval(L.bind(this.loop, this), this.options.delay); + this.resetSpinners(); + this.loop(); + }, + + loop: function () { + this.current = this.next; + this.step(); + }, + + pause: function () { + if (this._id) { + L.DomUtil.removeClass(document.body, L.U.Slideshow.CL.USNAME); + window.clearInterval(this._id); + this._id = null; + } + }, + + stop: function () { + this.pause(); + this.current = null; + }, + + forward: function () { + this.pause(); + this.current = this.next; + this.step(); + }, + + backward: function () { + this.pause(); + if (this.current) this.current = this.current.getPrevious(); + this.step(); + }, + + step: function () { + if(!this.current) return this.stop(); + this.current.zoomTo({easing: this.options.easing}); + this.current.view(); + }, + + renderToolbox: function (container) { + var box = L.DomUtil.create('ul', 'umap-slideshow-toolbox'), + play = L.DomUtil.create('li', 'play', box), + stop = L.DomUtil.create('li', 'stop', box), + prev = L.DomUtil.create('li', 'prev', box), + next = L.DomUtil.create('li', 'next', box); + L.DomUtil.create('div', 'spinner', play); + play.title = L._('Start slideshow'); + stop.title = L._('Stop slideshow'); + next.title = L._('Zoom to the next'); + prev.title = L._('Zoom to the previous'); + var toggle = function () { + if (this._id) this.pause(); + else this.play(); + }; + L.DomEvent.on(play, 'click', L.DomEvent.stop) + .on(play, 'click', toggle, this); + L.DomEvent.on(stop, 'click', L.DomEvent.stop) + .on(stop, 'click', this.stop, this); + L.DomEvent.on(prev, 'click', L.DomEvent.stop) + .on(prev, 'click', this.backward, this); + L.DomEvent.on(next, 'click', L.DomEvent.stop) + .on(next, 'click', this.forward, this); + container.appendChild(box); + this.timeSpinner(); + return box; + } + +}); diff --git a/umap/static/umap/js/umap.tableeditor.js b/umap/static/umap/js/umap.tableeditor.js new file mode 100644 index 00000000..192978ed --- /dev/null +++ b/umap/static/umap/js/umap.tableeditor.js @@ -0,0 +1,99 @@ +L.U.TableEditor = L.Class.extend({ + + initialize: function (datalayer) { + this.datalayer = datalayer; + this.table = L.DomUtil.create('div', 'table'); + this.header = L.DomUtil.create('div', 'thead', this.table); + this.body = L.DomUtil.create('div', 'tbody', this.table); + this.resetProperties(); + }, + + renderHeaders: function () { + this.header.innerHTML = ''; + for (var i = 0; i < this.properties.length; i++) { + this.renderHeader(this.properties[i]); + } + }, + + renderHeader: function (property) { + var container = L.DomUtil.create('div', 'tcell', this.header), + title = L.DomUtil.add('span', '', container, property), + del = L.DomUtil.create('i', 'umap-delete', container), + rename = L.DomUtil.create('i', 'umap-edit', container); + del.title = L._('Delete this property on all the features'); + rename.title = L._('Rename this property on all the features'); + var doDelete = function () { + if (confirm(L._('Are you sure you want to delete this property on all the features?'))) { + this.datalayer.eachLayer(function (feature) { + feature.deleteProperty(property); + }); + this.datalayer.deindexProperty(property); + this.resetProperties(); + this.edit(); + } + }; + var doRename = function () { + var newName = prompt(L._('Please enter the new name of this property'), property); + if (!newName) return; + this.datalayer.eachLayer(function (feature) { + feature.renameProperty(property, newName); + }); + this.datalayer.deindexProperty(property); + this.datalayer.indexProperty(newName); + this.resetProperties(); + this.edit(); + }; + L.DomEvent.on(del, 'click', doDelete, this); + L.DomEvent.on(rename, 'click', doRename, this); + }, + + renderRow: function (feature) { + var builder = new L.U.FormBuilder(feature, this.field_properties, + { + id: 'umap-feature-properties_' + L.stamp(feature), + className: 'trow', + callback: feature.resetTooltip + } + ); + this.body.appendChild(builder.build()); + }, + + compileProperties: function () { + if (this.properties.length === 0) this.properties = ['name']; + // description is a forced textarea, don't edit it in a text input, or you lose cariage returns + if (this.properties.indexOf('description') !== -1) this.properties.splice(this.properties.indexOf('description'), 1); + this.properties.sort(); + this.field_properties = []; + for (var i = 0; i < this.properties.length; i++) { + this.field_properties.push(['properties.' + this.properties[i], {wrapper: 'div', wrapperClass: 'tcell'}]); + } + }, + + resetProperties: function () { + this.properties = this.datalayer._propertiesIndex; + }, + + edit: function () { + var id = 'tableeditor:edit'; + this.datalayer.map.fire('dataloading', {id: id}); + this.compileProperties(); + this.renderHeaders(); + this.body.innerHTML = ''; + this.datalayer.eachLayer(this.renderRow, this); + var addButton = L.DomUtil.create('li', 'add-property'); + L.DomUtil.create('i', 'umap-icon-16 umap-add', addButton); + var label = L.DomUtil.create('span', '', addButton); + label.innerHTML = label.title = L._('Add a new property'); + var addProperty = function () { + var newName = prompt(L._('Please enter the name of the property')); + if (!newName) return; + this.datalayer.indexProperty(newName); + this.edit(); + }; + L.DomEvent.on(addButton, 'click', addProperty, this); + var className = (this.properties.length > 2) ? 'umap-table-editor fullwidth dark' : 'umap-table-editor dark'; + this.datalayer.map.ui.openPanel({data: {html: this.table}, className: className, actions: [addButton]}); + this.datalayer.map.fire('dataload', {id: id}); + } + +}); diff --git a/umap/static/umap/js/umap.ui.js b/umap/static/umap/js/umap.ui.js new file mode 100644 index 00000000..a664cb30 --- /dev/null +++ b/umap/static/umap/js/umap.ui.js @@ -0,0 +1,176 @@ +/* +* Modals +*/ +L.U.UI = L.Evented.extend({ + + ALERTS: Array(), + ALERT_ID: null, + TOOLTIP_ID: null, + + initialize: function (parent) { + this.parent = parent; + this.container = L.DomUtil.create('div', 'leaflet-ui-container', this.parent); + L.DomEvent.disableClickPropagation(this.container); + L.DomEvent.on(this.container, 'contextmenu', L.DomEvent.stopPropagation); // Do not activate our custom context menu. + L.DomEvent.on(this.container, 'mousewheel', L.DomEvent.stopPropagation); + L.DomEvent.on(this.container, 'MozMousePixelScroll', L.DomEvent.stopPropagation); + this._panel = L.DomUtil.create('div', '', this.container); + this._panel.id = 'umap-ui-container'; + this._alert = L.DomUtil.create('div', 'with-transition', this.container); + this._alert.id = 'umap-alert-container'; + this._tooltip = L.DomUtil.create('div', '', this.container); + this._tooltip.id = 'umap-tooltip-container'; + }, + + resetPanelClassName: function () { + this._panel.className = 'with-transition'; + }, + + openPanel: function (e) { + this.fire('panel:open'); + // We reset all because we can't know which class has been added + // by previous ui processes... + this.resetPanelClassName(); + this._panel.innerHTML = ''; + var actionsContainer = L.DomUtil.create('ul', 'toolbox', this._panel); + var body = L.DomUtil.create('div', 'body', this._panel); + if (e.data.html.nodeType && e.data.html.nodeType === 1) body.appendChild(e.data.html); + else body.innerHTML = e.data.html; + var closeLink = L.DomUtil.create('li', 'umap-close-link', actionsContainer); + L.DomUtil.add('i', 'umap-close-icon', closeLink); + var label = L.DomUtil.create('span', '', closeLink); + label.title = label.innerHTML = L._('Close'); + if (e.actions) { + for (var i = 0; i < e.actions.length; i++) { + actionsContainer.appendChild(e.actions[i]); + } + } + if (e.className) L.DomUtil.addClass(this._panel, e.className); + if (L.DomUtil.hasClass(this.parent, 'umap-ui')) { + // Already open. + this.fire('panel:ready'); + } else { + L.DomEvent.once(this._panel, 'transitionend', function (e) { + this.fire('panel:ready'); + }, this); + L.DomUtil.addClass(this.parent, 'umap-ui'); + } + L.DomEvent.on(closeLink, 'click', this.closePanel, this); + }, + + closePanel: function () { + this.resetPanelClassName(); + L.DomUtil.removeClass(this.parent, 'umap-ui'); + this.fire('panel:closed'); + }, + + alert: function (e) { + if (L.DomUtil.hasClass(this.parent, 'umap-alert')) this.ALERTS.push(e); + else this.popAlert(e); + }, + + popAlert: function (e) { + var self = this; + if(!e) { + if (this.ALERTS.length) e = this.ALERTS.pop(); + else return; + } + var timeoutID, + level_class = e.level && e.level == 'info'? 'info': 'error'; + this._alert.innerHTML = ''; + L.DomUtil.addClass(this.parent, 'umap-alert'); + L.DomUtil.addClass(this._alert, level_class); + var close = function () { + if (timeoutID !== this.ALERT_ID) { return;} // Another alert has been forced + this._alert.innerHTML = ''; + L.DomUtil.removeClass(this.parent, 'umap-alert'); + L.DomUtil.removeClass(this._alert, level_class); + if (timeoutID) window.clearTimeout(timeoutID); + this.popAlert(); + }; + var closeLink = L.DomUtil.create('a', 'umap-close-link', this._alert); + closeLink.href = '#'; + L.DomUtil.add('i', 'umap-close-icon', closeLink); + var label = L.DomUtil.create('span', '', closeLink); + label.title = label.innerHTML = L._('Close'); + L.DomEvent.on(closeLink, 'click', L.DomEvent.stop) + .on(closeLink, 'click', close, this); + L.DomUtil.add('div', '', this._alert, e.content); + if (e.actions) { + var action, el; + for (var i = 0; i < e.actions.length; i++) { + action = e.actions[i]; + el = L.DomUtil.element('a', {'className': 'umap-action'}, this._alert); + el.href = '#'; + el.innerHTML = action.label; + L.DomEvent.on(el, 'click', L.DomEvent.stop) + .on(el, 'click', close, this); + if (action.callback) L.DomEvent.on(el, 'click', action.callback, action.callbackContext || this.map); + } + } + self.ALERT_ID = timeoutID = window.setTimeout(L.bind(close, this), e.duration || 3000); + }, + + tooltip: function (e) { + this.TOOLTIP_ID = Math.random(); + var id = this.TOOLTIP_ID; + L.DomUtil.addClass(this.parent, 'umap-tooltip'); + if (e.anchor && e.position === 'top') this.anchorTooltipTop(e.anchor); + else if (e.anchor && e.position === 'left') this.anchorTooltipLeft(e.anchor); + else this.anchorTooltipAbsolute(); + this._tooltip.innerHTML = e.content; + function closeIt () { this.closeTooltip(id); } + if (e.anchor) L.DomEvent.once(e.anchor, 'mouseout', closeIt, this); + if (e.duration !== Infinity) window.setTimeout(L.bind(closeIt, this), e.duration || 3000); + }, + + anchorTooltipAbsolute: function () { + this._tooltip.className = ''; + var left = this.parent.offsetLeft + (this.parent.clientWidth / 2) - (this._tooltip.clientWidth / 2), + top = this.parent.offsetTop + 75; + this.setTooltipPosition({top: top, left: left}); + }, + + anchorTooltipTop: function (el) { + this._tooltip.className = 'tooltip-top'; + var coords = this.getPosition(el); + this.setTooltipPosition({left: coords.left - 10, bottom: this.getDocHeight() - coords.top + 11}); + }, + + anchorTooltipLeft: function (el) { + this._tooltip.className = 'tooltip-left'; + var coords = this.getPosition(el); + this.setTooltipPosition({top: coords.top, right: document.documentElement.offsetWidth - coords.left + 11}); + }, + + closeTooltip: function (id) { + if (id && id !== this.TOOLTIP_ID) return; + this._tooltip.innerHTML = ''; + L.DomUtil.removeClass(this.parent, 'umap-tooltip'); + }, + + getPosition: function (el) { + return el.getBoundingClientRect(); + }, + + setTooltipPosition: function (coords) { + if (coords.left) this._tooltip.style.left = coords.left + 'px'; + else this._tooltip.style.left = 'initial'; + if (coords.right) this._tooltip.style.right = coords.right + 'px'; + else this._tooltip.style.right = 'initial'; + if (coords.top) this._tooltip.style.top = coords.top + 'px'; + else this._tooltip.style.top = 'initial'; + if (coords.bottom) this._tooltip.style.bottom = coords.bottom + 'px'; + else this._tooltip.style.bottom = 'initial'; + }, + + getDocHeight: function () { + var D = document; + return Math.max( + D.body.scrollHeight, D.documentElement.scrollHeight, + D.body.offsetHeight, D.documentElement.offsetHeight, + D.body.clientHeight, D.documentElement.clientHeight + ); + }, + +}); diff --git a/umap/static/umap/js/umap.xhr.js b/umap/static/umap/js/umap.xhr.js new file mode 100644 index 00000000..d1b011f9 --- /dev/null +++ b/umap/static/umap/js/umap.xhr.js @@ -0,0 +1,293 @@ +L.U.Xhr = L.Evented.extend({ + + initialize: function (ui) { + this.ui = ui; + }, + + _wrapper: function () { + var wrapper; + if (window.XMLHttpRequest === undefined) { + wrapper = function() { + try { + return new window.ActiveXObject('Microsoft.XMLHTTP.6.0'); + } + catch (e1) { + try { + return new window.ActiveXObject('Microsoft.XMLHTTP.3.0'); + } + catch (e2) { + throw new Error('XMLHttpRequest is not supported'); + } + } + }; + } + else { + wrapper = window.XMLHttpRequest; + } + return new wrapper(); + }, + + _ajax: function (settings) { + var xhr = this._wrapper(), id = Math.random(), self = this; + this.fire('dataloading', {id: id}); + var loaded = function () {self.fire('dataload', {id: id});}; + + try { + xhr.open(settings.verb, settings.uri, true); + } catch (err) { + // Unknown protocol? + this.ui.alert({content: L._('Error while fetching {url}', {url: settings.uri}), level: 'error'}); + loaded(); + return + } + + if (settings.uri.indexOf('http') !== 0 || settings.uri.indexOf(window.location.origin) === 0) { + // "X-" mode headers cause the request to be in preflight mode, + // we don"t want that by default for CORS requests + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + } + if (settings.headers) { + for (var name in settings.headers) { + xhr.setRequestHeader(name, settings.headers[name]); + } + } + + + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + if (xhr.status == 200) { + settings.callback.call(settings.context || xhr, xhr.responseText, xhr); + } + else if (xhr.status === 403) { + self.ui.alert({content: L._('Action not allowed :('), level: 'error'}); + } + else if (xhr.status === 412) { + var msg = L._('Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.'); + var actions = [ + { + label: L._('Save anyway'), + callback: function () { + delete settings.headers['If-Match']; + self._ajax(settings); + }, + callbackContext: self + }, + { + label: L._('Cancel') + } + ]; + self.ui.alert({content: msg, level: 'error', duration: 100000, actions: actions}); + } + else { + if (xhr.status !== 0) { // 0 === request cut by user + self.ui.alert({'content': L._('Problem in the response'), 'level': 'error'}); + } + } + loaded(); + } + }; + + try { + xhr.send(settings.data); + } catch (e) { + // Pass + loaded(); + console.error('Bad Request', e); + } + }, + + // supports only JSON as response data type + _json: function (verb, uri, options) { + var args = arguments, + self = this; + var default_options = { + 'async': true, + 'callback': null, + 'responseType': 'text', + 'data': null, + 'listen_form': null // optional form to listen in default callback + }; + var settings = L.Util.extend({}, default_options, options); + + if (verb === 'POST') { + // find a way not to make this django specific + var token = document.cookie.replace(/(?:(?:^|.*;\s*)csrftoken\s*\=\s*([^;]*).*$)|^.*$/, '$1'); + if (token) { + settings.headers = settings.headers || {}; + settings.headers['X-CSRFToken'] = token; + } + } + + var callback = function(responseText, response) { + var data; + try { + data = JSON.parse(responseText); + } + catch (err) { + console.log(err); + self.ui.alert({content: L._('Problem in the response format'), level: 'error'}); + return; + } + if (data.errors) { + console.log(data.errors); + self.ui.alert({content: L._('An error occured'), level: 'error'}); + } else if (data.login_required) { + // login_required should be an URL for the login form + if (settings.login_callback) settings.login_callback(data); + else self.login(data, args); + } + else { + if (settings.callback) L.bind(settings.callback, settings.context || this)(data, response); + else self.default_callback(data, settings, response); + } + }; + + this._ajax({ + verb: verb, + uri: uri, + data: settings.data, + callback: callback, + headers: settings.headers, + listener: settings.listener + }); + }, + + get: function(uri, options) { + this._json('GET', uri, options); + }, + + post: function(uri, options) { + this._json('POST', uri, options); + }, + + submit_form: function(form_id, options) { + if(typeof options === 'undefined') options = {}; + var form = L.DomUtil.get(form_id); + var formData = new FormData(form); + if(options.extraFormData) formData.append(options.extraFormData); + options.data = formData; + this.post(form.action, options); + return false; + }, + + listen_form: function (form_id, options) { + var form = L.DomUtil.get(form_id), self = this; + if (!form) return; + L.DomEvent + .on(form, 'submit', L.DomEvent.stopPropagation) + .on(form, 'submit', L.DomEvent.preventDefault) + .on(form, 'submit', function () { + self.submit_form(form_id, options); + }); + }, + + listen_link: function (link_id, options) { + var link = L.DomUtil.get(link_id), self = this; + if (link) { + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', function () { + if (options.confirm && !confirm(options.confirm)) { return;} + self.get(link.href, options); + }); + } + }, + + default_callback: function (data, options) { + // default callback, to avoid boilerplate + if (data.redirect) { + var newPath = data.redirect; + if (window.location.pathname == newPath) window.location.reload(); // Keep the hash, so the current view + else window.location = newPath; + } + else if (data.info) { + this.ui.alert({content: data.info, level: 'info'}); + this.ui.closePanel(); + } + else if (data.error) { + this.ui.alert({content: data.error, level: 'error'}); + } + else if (data.html) { + var ui_options = {'data': data}, + listen_options; + if (options.className) ui_options.className = options.className; + this.ui.openPanel(ui_options); + // To low boilerplate, if there is a form, listen it + if (options.listen_form) { + // Listen form again + listen_options = L.Util.extend({}, options, options.listen_form.options); + this.listen_form(options.listen_form.id, listen_options); + } + if (options.listen_link) { + for (var i=0, l=options.listen_link.length; iLeaflet and Django, glued by uMap project.": "በ ሊፍሌት እየታገዘ በ ጃንጎ ታግዞ በ uMap ፕሮጀክት አማካኝነት የቀረበ", + "Zoom level for automatic zooms": "አውቶማቲክ ዙሞች የሚጎሉበት መጠን", + "Do you want to display the «more» control?": "የ «ተጨማሪ» መቆጣጠሪያውን ማሳየት ትፈልጋለህ", + "Auto": "አውቶ", + "Default: name": "ዲፎልት፡ ስም", + "Property to use for sorting features": "ፊችሮችን ለመደርደር የሚጥቀምበት ባህርይ", + "Slideshow": "ስላይድሾው", + "Start slideshow": "ስላይድሾውን አስጀምር", + "Stop slideshow": "ስላይድሾውን አስቁም", + "Text color for the cluster label": "የክላስተሩን ሌብ ፅሑፍ ከለር", + "Zoom to the next": "ወደ ሚቀጥለው አጉላ", + "Zoom to the previous": "ቀደም ወዳለው አጉላ", + "Add a new property": "አዲስ ባህርይ ጨምር", + "Are you sure you want to delete this property on all the features?": "እርግጠኛ ነህ ይህንንባህርይ ከሁሉም ፊቸሮች ላይ መሰረዝ ትችላለህ", + "Close": "ዝጋ", + "Delete this property on all the features": "በሁሉም ፊቸሮች ላይ ይህንን ባህርይ ሰርዝ", + "Edit properties in a table": "በሰንጠረዡ ውስጥ ያሉትን ባህርያት አርም", + "Please enter the name of the property": "እባክዎ የባህርይውን ስም ያስገቡ", + "Please enter the new name of this property": "እባክዎን አዲሱን የባህርይውን ስም ያስገቡ", + "Rename this property on all the features": "በሁሉም ፊቸሮች ይህንን ያባህርይ መጠሪያ ያሻሽሉ", + "If false, the polygon will act as a part of the underlying map.": "ስህተት ከሆነ ፖሊጎኑ ከስር እንደተነጠፈ ካርታ ያገለግላል", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "|ፍሬሙ ከተሻሻለ ቁመት ጋር (በፒክሰል)፡ {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "|ፍሬም፡ {{{http://iframe.url.com}}}", + "See all": "ሁሉንም ተመልከት", + "Dynamic properties": "ዳይናሚክ ባህርያት", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "በቅንፎች መሀከል የፊቸር ባህርያት ያላቸው ቦታያዦችን ተጠቀም፣ ለምሳሌ {name} ዳይናሚካሊ በተቀራራቢ ዋጋችወ ይተካሉ", + "Long credits": "ክሬዲቶች በመጫን ላይ", + "No licence has been set": "ምንም ፈቃድ አልተሰጠም", + "Popup content template": "የፖፕ-አፕ ኮንቴንት ተምሳሌ", + "Short credits": "አጭር ክሬዲት", + "Will be displayed in the bottom right corner of the map": "ከታች በቀኝ ኮርነሩ ላይ ይታያል", + "Will be visible in the caption of the map": "በካርታው ካፕሽን ላይ እንዲታይ ይደረጋል", + "Map has been saved!": "ካርታው ተቀምጧል/ድኗል", + "Save anyway": "ለማንኛውም አስቀምጥ/አድን", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "ውይ! ሌላ ሰው መረጃውን ሳያርመው አይቀርም። ለማንኛውም ማዳን/ማስቀመጥ ይቻላል፣ ነገር ግን የሌሎች እርማቶች ይሰረዛሉ", + "Comma separated list of properties to use when filtering features": "ፊቸሮችን በሚያጣሩበት ጊዜ ሊጠቀሙ የሚችሏቸው በኮማ የተከፋፈሉ የባህርያት ዝርዝር", + "Keep current visible layers": "በወቅቱ የሚታየውን ሌየር አቆይ", + "Coordinates": "ኮርዲኔቶች", + "Latitude": "ላቲትዩድ", + "Longitude": "ሎንጊትዩድ", + "Continue line (Ctrl-click)": "መስመሩን ቀጥል", + "Start a hole here": "እዚህ ጋር ቀዳዳ ጀምር", + "Click last point to finish shape": "ቅርፁን ለማስጨረስ የመጨረሻውን ነጥብ ጠቅ ያድርጉ", + "Click to add a marker": "መለያ ለመጨመር ጠቅ አድርግ", + "Click to continue drawing": "መሳል ለመቀጠል ጠቅ አድርግ", + "Click to start drawing a line": "መስመር ለመሳል ጠቅ አድርግ", + "Click to start drawing a polygon": "ፖሊጎን ለመሳል ጠቅ አድርግ", + "Import in a new layer": "አዲስ ሌየር አምጣ", + "Layer": "ሌየር", + "Please choose a format": "እባክዎ ፎርማት ይምረጡ", + "Imports all umap data, including layers and settings.": "ሌየር እና ሁኔታዎቹን ጨምሮ ሁሉንም የዩማፕ መረጃ ያመጣል", + "Invalid umap data": "ያልተፈቀደ የዩማፕ መረጃ", + "Invalid umap data in {filename}": "ያልተፈቀደ የዩማፕ መረጃ በ {filename} ውስጥ", + "Add a line to the current multi": "ላሁኑ ብዝሀ መስመር ጨምር", + "Add a polygon to the current multi": "ላሁኑ ብዝሀ ፖሊጎን ጨምር", + "Click to edit": "ለማረም ጠቅ አድርግ", + "Continue line": "መስመሩን ቀጥል", + "Delete this shape": "ይህንን ቅርፅ ሰርዝ", + "Make main shape": "ዋና ቅርፅ አድርግ", + "Merge lines": "መስመሮችን ቀላቅል", + "Remove shape from the multi": "ከብዝሀው ላይ ቅርፁን አስወግድ", + "Transfer shape to edited feature": "ቅርፁን ወደ ታረመ ፊቸር አስተላልፍ", + "next": "ቀጥሎ", + "previous": "ቀድሞ", + "Measure distances": "ርቀቶችን ለካ", + "NM": "ኤን.ኤም.", + "kilometers": "ኪሎሜትሮች", + "km": "ኪ.ሜ.", + "mi": "ማ.", + "miles": "ማይሎች", + "nautical miles": "ናውቲካል ማይል", + "{area} acres": "{area} ሄክታሮች", + "{area} ha": "{area} ሄ.", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} ኤን.ኤም.", + "{distance} km": "{distance} ኪ.ሜ.", + "{distance} m": "{distance} ሜ.", + "{distance} miles": "{distance} ማይሎች", + "{distance} yd": "{distance} ያርድ", + "Are you sure you want to restore this version?": "እርግጠኛ ነዎት ወደዚህኛው እትም መመለስ ይልጋሉ?", + "Extract shape to separate feature": "ፊቸሩን ለመለየት ቅርፁን ነጥለህ አውጣ", + "Layer properties": "የሌየር ባህርያት", + "Restore this version": "ይህንን እትም መልስ", + "Versions": "እትሞች", + "You have unsaved changes.": "ያልዳኑ/ያልተቀመጡ ለውጦች አሉ", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("am_ET", locale); +L.setLocale("am_ET"); \ No newline at end of file diff --git a/umap/static/umap/locale/am_ET.json b/umap/static/umap/locale/am_ET.json new file mode 100644 index 00000000..e47daedd --- /dev/null +++ b/umap/static/umap/locale/am_ET.json @@ -0,0 +1,350 @@ +{ + "About": "ስለ", + "Action not allowed :(": "አይፈቀድም :(", + "Add a layer": "ሌየር ጨምር", + "Add symbol": "ምልክት ጨምር", + "Advanced actions": "ተጨማሪ ተግባራት", + "Advanced properties": "ተጨማሪ ባህርያት", + "Allow scroll wheel zoom?": "በማውሱ መሀከለኛ ተሽከርካሪ ማጉላት ይፈቀድ?", + "An error occured": "ስህተት ተፈጥሯል", + "Are you sure you want to cancel your changes?": "እርግጠኛ ነዎት ያሻሻሉትም ማስቀመጥ አይፈልጉም?", + "Are you sure you want to clone this map and all its datalayers?": "እርግጠኛ ነዎት ይህንን ካርታ እና ሁሉንም የመረጃ ገጾች ማባዛት ይፈልጋሉ?", + "Are you sure you want to delete the feature?": "እርግጠኛ ነዎት ይህንን ተግባሩን መሰረዝ ይፈልጋሉ?", + "Are you sure you want to delete this map?": "እርግጠኛ ነዎት ይህንን ካርታ መሰረዝ ይፈልጋሉ?", + "Ball": "ኳስ", + "Bring feature to center": "ፊቸርሩን ወደመሀከል አምጣ", + "Browse data": "መረጃዎቹን አሥሥ", + "Cancel": "አቁም/ሰርዝ", + "Cancel edits": "እርማቶችን ሰርዝ", + "Center map on your location": "መገኛዎን የሚያሳየውን ካርታ ወደ መሀል ያድርጉ", + "Change map background": "የካርታውን የጀርባ ገፅታ ይቀይሩ", + "Change symbol": "ምልክቱን ይቀይሩ", + "Change tilelayers": "የታይልሌየሩን", + "Choose the format of the data to import": "ሊያመጡ የፈለጉትን የመረጃ ፎርማት ይምረጡ", + "Choose the layer of the feature": "የፊቸሩን ሌየር ይምረጡ", + "Choose the layer to import in": "የሚያስገቡበት ሌየር ይምረጡ", + "Circle": "አክብብ/ክብ", + "Clone this map": "ይህንን ካርታ አባዛ", + "Default": "ዋና ምርጫ (ዲፎልት)", + "Delete": "ሰርዝ", + "Delete this feature": "ይህንን ፊቸር ሰርዝ", + "Disable editing": "ማረም ከልክል ነው", + "Display on load": "በመጫን ላይ እያለ አሳይ", + "Do you want to display a minimap?": "ትንሿን ካርታ ማሳየት ይፈልጋሉ?", + "Do you want to display popup footer?": "ፖፕ አፕ ፉተሩን ማሳየት ይፈልጋሉ?", + "Do you want to display the scale control?": "የመጠን መቆጣጠሪያውን ማሳየት ይፈልጋሉ?", + "Download data": "መረጃውን አውርድ", + "Draw a line": "መስመር አስምር", + "Draw a marker": "መለያ ሳል", + "Draw a polygon": "ፖሊጎን ሳል", + "Draw a polyline": "ባለነጠላ መስመር ሳል", + "Drop": "ጣል", + "Dynamic": "ዳይናሚክ", + "Edit": "አርም", + "Edit feature's layer": "የፊቸሩን ሌይር አርም", + "Edit map properties": "የካርታውን ባህርያት አርም", + "Edit map settings": "የካርታውን ሁነቶች አርም", + "Edit this feature": "ይህንን ፊቸር አርም", + "Embed and share this map": "ይህንን ካርታ አካትት እና ሼር አድርግ", + "Enable editing": "እርማትን ፍቀድ", + "Format": "ፎርማት", + "From zoom": "ከዙም", + "Go to «{feature}»": "ወደ «{feature}» ተመለስ", + "Hide controls": "መቆጣጠሪያዎቹን ደብቅ", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "በእያንዳንዱ የዙም መጠን ፖሊላይኑን ምን ያህል ያቃልል (ብዙ = ጥሩ አገልግሎት እና ጥሩ መልክ፣ ትንሽ = ይበልጥ ትክክለኛ)", + "Import": "አምጣ", + "Import data": "መረጃ አምጣ", + "Inherit": "ውረስ", + "Licence": "ፈቃድ", + "Map background credits": "የካርታ የጀርባ ክሬዲትስ", + "Map user content has been published under licence": "የካርታ ይዘት በሚከተለው ፈቃድ አማካኝነት ታትሟል", + "More controls": "ተጨማሪ መቆጣጠሪያዎች", + "Optional. Same as color if not set.": "አማራጭ፣ ካልተመረጠለት እንደቀለሙ የሚሆን", + "Optionnal.": "አማራጭ", + "Paste here your data": "መረጃውን እዚህ ጋር ለጥፍ", + "Please be sure the licence is compliant with your use.": "እባክዎ ፈቃዱ እስርዎ ሊጠቀሙ ካሉበት አገልግሎት ጋር መጣጣሙን ያረጋግጡ", + "Problem in the response": "በምላሹ ላይ ችግር ተፈጥሯል", + "Problem in the response format": "በምላሹ ፎርማት ላይ ችግር ተፈጥሯል", + "Provide an URL here": "የድረገፁን መገኛ አድራሻ ያስገቡ", + "Remote data": "ሪሞት ዳታ", + "Save": "አድን/አስቀምጥ", + "Save current edits": "የአሁኑን እርማቶች አስቀምጥ/አድን", + "Save this center and zoom": "ይህንን ዙም እና መሀከል አስቀምጥ/አድን", + "Show/hide layer": "ሌየሩን አሳይ/ደብቅ", + "Start editing": "ማረም ጀምር", + "Stop editing": "ማረም አቁም", + "The zoom and center have been setted.": "ዙሙ እና መሀከሉ ተወስነዋል", + "To zoom": "ለማጉላት", + "Untitled layer": "ያልተሰየመ ሌየር", + "Untitled map": "ያለተሰየመ ካርታ", + "Update permissions and editors": "ፍቃዶችን እና አራሚዎችን አሻሽል", + "Url": "የድረ-ገፅ መገኛ", + "User content credits": "የይዘቱን ክሬዲቶች ተጠቀም", + "Where do we go from here?": "ከዚህ ቀጥሎ ወደየት ነው የምንሄደው?", + "Zoom in": "አጉላ", + "Zoom out": "አርቅ", + "Zoom to layer extent": "የሌየሩ ኤክስቴንት ድረስ አጉላ", + "Zoom to this feature": "ፊቸሩ ድረስ አጉላ", + "color": "ከለር", + "dash array": "ዳሽ አሬይ", + "description": "መገለጫ", + "fill": "ሙላ", + "fill color": "ከለር ሙላ", + "fill opacity": "ኦፓሲቲውን ሙላ", + "inherit": "ውረስ", + "licence": "ፈቃድ", + "name": "ስም", + "no": "አይደለም", + "opacity": "ኦፓሲቲ", + "stroke": "ሳል/ጫር", + "weight": "ክብደት", + "yes": "አዎን", + "Editing": "በማረም ላይ", + "Embed the map": "ካርታውን አካትት", + "Short URL": "አጭር የድረ-ገፅ መገኛ", + "# one hash for main heading": "# አንድ ፓውንድ ምልክት ለዋናው አርእስት", + "## two hashes for second heading": "## ሁለት ፓውንድ ምልክቶች ለንዑስ አርእስቱ", + "### three hashes for third heading": "### ሶስት ፓውንድ ምልክቶች ለሶስተኛው ደረጃ አርእስት", + "**double star for bold**": "** ሁለት ኮኮብ ለማወፈር **", + "*simple star for italic*": "* አንድ ኮከብ ለማጣመም *", + "--- for an horizontal rule": "--- ለአግድም መስመር", + "All properties are imported.": "ሁሉም ባህርያት መጥተዋል", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "በኮማ፣ታብ፣ግማሽኮለን የተከፋፈሉ ውጤቶች። SRSWG84 ተመላክቷል። የነጥብ ጂኦሜትሪዎች ብቻ መጥተዋል። የማምጣት ሂደቱ የኮለምን ሄደሮችን በማሰስ «ላቲትዩድ» እና «ሎንጊትዩድ» የሚሉትን ቃላት መኖር ከመጀመሪያው በመነሳት ያጣራል። ሁሉም ኮለምኖች እንደባህርይ መጥተዋል።", + "Custom background": "የተስተካከለ ጀርባ", + "Help": "እርዳታ", + "Image: {{http://image.url.com}}": "ምስል፡{{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "ከዚህ ፅሁፍ ጋር አስተሳስር፡ [[http://example.com|text of the link]]", + "Properties imported:": "ባህርያት መጥተዋል", + "Simple link: [[http://example.com]]": "ቀላል መገኛ: [[http://example.com]]", + "Supported scheme": "የሚደገፉ ስኪሞች", + "Supported variables that will be dynamically replaced": "ዳይናሚካሊ የሚቀየሩ የሚደገፉ ቫርያብሎች", + "Text formatting": "ፅሁፍ ማስተካከያ", + "attribution": "አትሪብዩሽን", + "display name": "ስሙን አሳይ", + "max zoom": "የመጨረሻው ዙም", + "min zoom": "ትንሹ ዙም", + "Skipping unkown geometry.type: {type}": "ያልታወቁ ጂኦሜትሪዎችን በማለፍ ላይ።አይነት ፡{TYPE}", + "Please save the map before": "እባክዎን ካርታውን በመጀመሪያ ያድኑ/ያስቀምጡ", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "የፊቸር ቫሪያብሎችን ባህርያት እንደ ቫርያብል መጠቀም ይቻላል፡ ለምሳሌ ከ \"http://myserver.org/images/{name}.png\" ፣ {name} ቫርያብሎች ይተካሉ", + "Transform to polygon": "ወደፖሊጎን ቀይር", + "Transform to lines": "ወደመስመር ቀይር", + "Choose the data format": "የረጃውን ፎርማት ቀይር", + "Error in the tilelayer URL": "በታይልሌየሩ የድረ-ገፅ መገኛ ላይ ስህተት ተፈጥሯል", + "Directions from here": "ከዚህ የሚነሱ አቅጣጫዎች", + "Choose a preset": "ፕሪሴት ምረጥ", + "Limit bounds": "መድረሻዎቹን ምረጥ", + "Use current bounds": "የአሁንኖቹን መደረሻዎች ተጠቀም", + "max East": "በምስራቅ ከፍተናው", + "max North": "በደቡብ ከፍተኛው", + "max South": "በሰሜን ከፍተኛው", + "max West": "በምዕራብ ከፍተኛው", + "TMS format": "ቲ.ኤም.ኤስ. ፎርማት", + "Credits": "ክሬዲቶች", + "Only visible features will be downloaded.": "የሚታዩት ፊቸሮች ብቻ ይወርዳሉ", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "ለOpernStreetMap ይበልጥ ትክክል ይሆነ መረጃ ለመስጠ የካርታውን ኤክስቴንት በካርታ ማረሚያ ክፈት", + "Default properties": "ዲፎልት ባህርያት", + "User interface options": "የኢንተርፌስ ምርጫዎች", + "Image with custom width (in px): {{http://image.url.com|width}}": "የተስተካከለ ጉን ያለው ምስል (በፒክስል)፡ {{http://image.url.com|width}}", + "Current view instead of default map view?": "ከዲፎልት የካርታ እይታው ፋንታ የአሁኑ እይታ?", + "Iframe export options": "የፍሬም ኤክስፖርት ምርጫዎች", + "Include full screen link?": "ሙሉ ስክሪን ሊክን ያካትት?", + "See full screen": "ሙሉውን ስክሪን ተመልከት", + "height": "ቁመት", + "width": "ጎን", + "Clustered": "ክለስተርድ", + "Clustering radius": "ክለስተሪንግ ራዲየስ", + "GeoRSS (only link)": "GeoRSS (ሊንክ ብቻ)", + "GeoRSS (title + image)": "GeoRSS (መጠሪያ + ምስል)", + "Heatmap": "የሙቀት ካርታ", + "Heatmap radius": "የሙቀት ካርታ ራዲየስ ", + "Name and description": "ስም እና መግለጫ", + "Override clustering radius (default 80)": "የራዲየስ ክለስተሪንግ አልፈህ ሂድ (ዲፎልት 80)", + "Override heatmap radius (default 25)": "የሙቀት ካርታውን ራዲየስ አልፈህ ሂድ (ዲፎልት 25)", + "Proxy request": "የፕሮክሲ ጥያቄ", + "Table": "ሰንጠረዥ", + "To use if remote server doesn't allow cross domain (slower)": "ሪሞት ሰርቨሩ የዶሜይን ልውውጥን የማይፈቅድ ከሆነ ይህን ለመጠቀም (አዝጋሚ)", + "Type of layer": "የሌየሩ ዓይነት", + "Filter…": "አጣራ", + "Heatmap intensity property": "የሙቀት ካርታ ኢንቴንሲቲ ባህርይ", + "Optional intensity property for heatmap": "ለሙቀት ካርታው ባህርይ አማራጭ ኢንቴንሲቲ", + "Caption": "ካፕሽን", + "Data browser": "የመረጃ ማሰሻ", + "Do you want to display a caption bar?": "የካፕሽን ባሩን ማሳየት ትፈልጋለህ?", + "Do you want to display a panel on load?": "ፓኔሉ በመጫን ላይ እያለ ማሳየት ትፈልጋለህ?", + "None": "ምንም", + "by": "በ", + "Name and description (large)": "ስም እና መግለጫ (ትልቅ)", + "Empty": "ባዶ", + "Split line": "መስመሩን ክፈል", + "Clone": "አዳቅል", + "Clone of {name}": "የ {name} ድቃይ", + "Side panel": "የጎን ፓኔል", + "Powered by Leaflet and Django, glued by uMap project.": "በ ሊፍሌት እየታገዘ በ ጃንጎ ታግዞ በ uMap ፕሮጀክት አማካኝነት የቀረበ", + "Zoom level for automatic zooms": "አውቶማቲክ ዙሞች የሚጎሉበት መጠን", + "Do you want to display the «more» control?": "የ «ተጨማሪ» መቆጣጠሪያውን ማሳየት ትፈልጋለህ", + "Auto": "አውቶ", + "Default: name": "ዲፎልት፡ ስም", + "Property to use for sorting features": "ፊችሮችን ለመደርደር የሚጥቀምበት ባህርይ", + "Slideshow": "ስላይድሾው", + "Start slideshow": "ስላይድሾውን አስጀምር", + "Stop slideshow": "ስላይድሾውን አስቁም", + "Text color for the cluster label": "የክላስተሩን ሌብ ፅሑፍ ከለር", + "Zoom to the next": "ወደ ሚቀጥለው አጉላ", + "Zoom to the previous": "ቀደም ወዳለው አጉላ", + "Add a new property": "አዲስ ባህርይ ጨምር", + "Are you sure you want to delete this property on all the features?": "እርግጠኛ ነህ ይህንንባህርይ ከሁሉም ፊቸሮች ላይ መሰረዝ ትችላለህ", + "Close": "ዝጋ", + "Delete this property on all the features": "በሁሉም ፊቸሮች ላይ ይህንን ባህርይ ሰርዝ", + "Edit properties in a table": "በሰንጠረዡ ውስጥ ያሉትን ባህርያት አርም", + "Please enter the name of the property": "እባክዎ የባህርይውን ስም ያስገቡ", + "Please enter the new name of this property": "እባክዎን አዲሱን የባህርይውን ስም ያስገቡ", + "Rename this property on all the features": "በሁሉም ፊቸሮች ይህንን ያባህርይ መጠሪያ ያሻሽሉ", + "If false, the polygon will act as a part of the underlying map.": "ስህተት ከሆነ ፖሊጎኑ ከስር እንደተነጠፈ ካርታ ያገለግላል", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "|ፍሬሙ ከተሻሻለ ቁመት ጋር (በፒክሰል)፡ {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "|ፍሬም፡ {{{http://iframe.url.com}}}", + "See all": "ሁሉንም ተመልከት", + "Dynamic properties": "ዳይናሚክ ባህርያት", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "በቅንፎች መሀከል የፊቸር ባህርያት ያላቸው ቦታያዦችን ተጠቀም፣ ለምሳሌ {name} ዳይናሚካሊ በተቀራራቢ ዋጋችወ ይተካሉ", + "Long credits": "ክሬዲቶች በመጫን ላይ", + "No licence has been set": "ምንም ፈቃድ አልተሰጠም", + "Popup content template": "የፖፕ-አፕ ኮንቴንት ተምሳሌ", + "Short credits": "አጭር ክሬዲት", + "Will be displayed in the bottom right corner of the map": "ከታች በቀኝ ኮርነሩ ላይ ይታያል", + "Will be visible in the caption of the map": "በካርታው ካፕሽን ላይ እንዲታይ ይደረጋል", + "Map has been saved!": "ካርታው ተቀምጧል/ድኗል", + "Save anyway": "ለማንኛውም አስቀምጥ/አድን", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "ውይ! ሌላ ሰው መረጃውን ሳያርመው አይቀርም። ለማንኛውም ማዳን/ማስቀመጥ ይቻላል፣ ነገር ግን የሌሎች እርማቶች ይሰረዛሉ", + "Comma separated list of properties to use when filtering features": "ፊቸሮችን በሚያጣሩበት ጊዜ ሊጠቀሙ የሚችሏቸው በኮማ የተከፋፈሉ የባህርያት ዝርዝር", + "Keep current visible layers": "በወቅቱ የሚታየውን ሌየር አቆይ", + "Coordinates": "ኮርዲኔቶች", + "Latitude": "ላቲትዩድ", + "Longitude": "ሎንጊትዩድ", + "Continue line (Ctrl-click)": "መስመሩን ቀጥል", + "Start a hole here": "እዚህ ጋር ቀዳዳ ጀምር", + "Click last point to finish shape": "ቅርፁን ለማስጨረስ የመጨረሻውን ነጥብ ጠቅ ያድርጉ", + "Click to add a marker": "መለያ ለመጨመር ጠቅ አድርግ", + "Click to continue drawing": "መሳል ለመቀጠል ጠቅ አድርግ", + "Click to start drawing a line": "መስመር ለመሳል ጠቅ አድርግ", + "Click to start drawing a polygon": "ፖሊጎን ለመሳል ጠቅ አድርግ", + "Import in a new layer": "አዲስ ሌየር አምጣ", + "Layer": "ሌየር", + "Please choose a format": "እባክዎ ፎርማት ይምረጡ", + "Imports all umap data, including layers and settings.": "ሌየር እና ሁኔታዎቹን ጨምሮ ሁሉንም የዩማፕ መረጃ ያመጣል", + "Invalid umap data": "ያልተፈቀደ የዩማፕ መረጃ", + "Invalid umap data in {filename}": "ያልተፈቀደ የዩማፕ መረጃ በ {filename} ውስጥ", + "Add a line to the current multi": "ላሁኑ ብዝሀ መስመር ጨምር", + "Add a polygon to the current multi": "ላሁኑ ብዝሀ ፖሊጎን ጨምር", + "Click to edit": "ለማረም ጠቅ አድርግ", + "Continue line": "መስመሩን ቀጥል", + "Delete this shape": "ይህንን ቅርፅ ሰርዝ", + "Make main shape": "ዋና ቅርፅ አድርግ", + "Merge lines": "መስመሮችን ቀላቅል", + "Remove shape from the multi": "ከብዝሀው ላይ ቅርፁን አስወግድ", + "Transfer shape to edited feature": "ቅርፁን ወደ ታረመ ፊቸር አስተላልፍ", + "next": "ቀጥሎ", + "previous": "ቀድሞ", + "Measure distances": "ርቀቶችን ለካ", + "NM": "ኤን.ኤም.", + "kilometers": "ኪሎሜትሮች", + "km": "ኪ.ሜ.", + "mi": "ማ.", + "miles": "ማይሎች", + "nautical miles": "ናውቲካል ማይል", + "{area} acres": "{area} ሄክታሮች", + "{area} ha": "{area} ሄ.", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} ኤን.ኤም.", + "{distance} km": "{distance} ኪ.ሜ.", + "{distance} m": "{distance} ሜ.", + "{distance} miles": "{distance} ማይሎች", + "{distance} yd": "{distance} ያርድ", + "Are you sure you want to restore this version?": "እርግጠኛ ነዎት ወደዚህኛው እትም መመለስ ይልጋሉ?", + "Extract shape to separate feature": "ፊቸሩን ለመለየት ቅርፁን ነጥለህ አውጣ", + "Layer properties": "የሌየር ባህርያት", + "Restore this version": "ይህንን እትም መልስ", + "Versions": "እትሞች", + "You have unsaved changes.": "ያልዳኑ/ያልተቀመጡ ለውጦች አሉ", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ar.json b/umap/static/umap/locale/ar.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/ar.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ast.json b/umap/static/umap/locale/ast.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/ast.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/bg.js b/umap/static/umap/locale/bg.js new file mode 100644 index 00000000..7583a668 --- /dev/null +++ b/umap/static/umap/locale/bg.js @@ -0,0 +1,352 @@ +var locale = { + "About": "относно", + "Action not allowed :(": " Не позволено действие", + "Add a layer": "Добавете слой", + "Add symbol": "Добави символ", + "Advanced actions": "Разширено действия", + "Advanced properties": "Разширени свойства", + "Allow scroll wheel zoom?": "Позволете скрол колело мащабиране?", + "An error occured": "Възникна грешка", + "Are you sure you want to cancel your changes?": "Наистина ли искате да отмените вашите промени?", + "Are you sure you want to clone this map and all its datalayers?": "Наистина ли искате да клонирате тази карта и всички негови слоеве данни ?", + "Are you sure you want to delete the feature?": "Сигурни ли сте, че искате да изтриете тази функция?", + "Are you sure you want to delete this map?": "Сигурни ли сте, че искате да изтриете тази карта?", + "Ball": "топка", + "Bring feature to center": "Bring feature to center", + "Browse data": "Преглед данни", + "Cancel": "Отмени", + "Cancel edits": "Отмени редакциите", + "Center map on your location": "Center map on your location", + "Change map background": "Промяна фона на картата", + "Change symbol": "Промяна символ", + "Change tilelayers": "Променете слоевете ", + "Choose the format of the data to import": "Изберете формат на данните за внос", + "Choose the layer of the feature": "Изберете слой на функцията", + "Choose the layer to import in": "Избери слой за внасяне в", + "Circle": "окръжност", + "Clone this map": "клонира тази карта", + "Default": "по подразбиране", + "Delete": "Изтрий", + "Delete this feature": "Изтриване на тази функция", + "Disable editing": "Забранете редакция", + "Display on load": "Дисплей на зареждане", + "Do you want to display a minimap?": "Искате ли да се покаже миникартата?", + "Do you want to display popup footer?": "Искате ли да се покаже изскачащ колонтитул?", + "Do you want to display the scale control?": "Искате ли да се показва мащаб контрола?", + "Download data": "Изтегляне на данни", + "Draw a line": "Начертайте линия", + "Draw a marker": "Начертайте маркер", + "Draw a polygon": "Начертайте полигон", + "Draw a polyline": "Начертайте полилиния", + "Drop": "Drop", + "Dynamic": "динамичен", + "Edit": "Редактиране", + "Edit feature's layer": "Редактиране функцията на слоя", + "Edit map properties": "Редактирай свойствата на картата", + "Edit map settings": "Редактиране на настройките на картата", + "Edit this feature": "Редактирайте тази характеристика", + "Embed and share this map": "Вграждане и споделяне тази карта", + "Enable editing": "Разрешаване на редактирането", + "Format": "формат", + "From zoom": "От мащабиране", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Скрий контролите", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Колко да опрости полилинията на всяко ниво увеличение (повече = по-добра производителност и по-гладко на вид, по-малко = по-точно)", + "Import": "внасяне", + "Import data": "Внасям данни", + "Inherit": "Наследи", + "Licence": "Лиценз", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "Още контроли", + "Optional. Same as color if not set.": "По избор Същото като цвят, ако не е настроена.", + "Optionnal.": "По избор", + "Paste here your data": "Залепете тук вашите данни", + "Please be sure the licence is compliant with your use.": "Моля, бъдете сигурни, че лицензът е съвместим с вашата употреба.", + "Problem in the response": "Проблем в отзивите", + "Problem in the response format": "Проблем във формата на отговор", + "Provide an URL here": "Представете URL тук", + "Remote data": "отдалечена база данни", + "Save": "запазвам", + "Save current edits": "Запиши текущите редакции", + "Save this center and zoom": "Запази този център и размер", + "Show/hide layer": "Покажи / скрий слой", + "Start editing": "Започнете редактиране", + "Stop editing": "Спри редактирането", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "За да увеличите", + "Untitled layer": "Неозаглавен слой", + "Untitled map": "Неозаглавена карта", + "Update permissions and editors": "Актуализиране на разрешения и редактори", + "Url": "URL адрес", + "User content credits": "User content credits", + "Where do we go from here?": "Къде да отидем от тук?", + "Zoom in": "Zoom in", + "Zoom out": "Намаляване на мащаба", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Увеличаване на тази характеристика", + "color": "цвят", + "dash array": "dash array", + "description": "описание", + "fill": "запълни", + "fill color": "попълнете цвят", + "fill opacity": "попълнете непрозрачност", + "inherit": "наследи", + "licence": "лиценз", + "name": "име", + "no": "не", + "opacity": "непрозрачност", + "stroke": "stroke", + "weight": "тегло", + "yes": "да", + "Editing": "За редактиране", + "Embed the map": "Вграждане на карта", + "Short URL": "Кратко URL", + "# one hash for main heading": "# един хеш за главната позиция", + "## two hashes for second heading": "двата хешове за втората таблица ", + "### three hashes for third heading": "# # # Три хеша за трета позиция", + "**double star for bold**": "двойна звезда за удебеление", + "*simple star for italic*": "* проста звезда за курсив *", + "--- for an horizontal rule": "---за хоризонтална линия", + "All properties are imported.": "Всички свойства са внесени.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Потребителски фон", + "Help": "Помощ", + "Image: {{http://image.url.com}}": "изображение: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Връзка с текст: [[http://example.com|текст на връзката]]", + "Properties imported:": "Внесени свойства:", + "Simple link: [[http://example.com]]": "проста връзка:[[http://example.com]]", + "Supported scheme": "Поддържана схема", + "Supported variables that will be dynamically replaced": "Поддържаните променливи, които ще бъдат динамично заменени", + "Text formatting": "форматиране на текст", + "attribution": "приписване", + "display name": "показвано име", + "max zoom": "максимум мащабиране", + "min zoom": "минимално мащабиране", + "Skipping unkown geometry.type: {type}": ":Пропускане на неизвестна тип геометрия: {type}", + "Please save the map before": "Моля, запазете картата преди", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Трансформация на полигон", + "Transform to lines": "Трансформация на линии", + "Choose the data format": "Изберете формата на данните", + "Error in the tilelayer URL": "Грешка в URL адреса на слоя", + "Directions from here": "Упътвания от тук", + "Choose a preset": "Изберете предварително зададен", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "максимум Източен", + "max North": "максимум Северен", + "max South": "максимум Южен", + "max West": "максимум Западна", + "TMS format": "TMS формат", + "Credits": "приемам като достоверен", + "Only visible features will be downloaded.": "Само видими функции ще бъдат изтеглени.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Отворете тази карта в степен редактор на карта, за да предостави по-точни данни,OpenStreetMap", + "Default properties": "По подразбиране свойства", + "User interface options": "Опции на потребителския интерфейс", + "Image with custom width (in px): {{http://image.url.com|width}}": "Изображение с поръчкова ширина (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Текущ изглед, вместо по подразбиране вижте карта?", + "Iframe export options": "вградена рамка,възможности за износ", + "Include full screen link?": "Включи пълна връзка на екрана?", + "See full screen": "Виж на цял екран", + "height": "височина", + "width": "широчина", + "Clustered": "Клъстер", + "Clustering radius": "радиус на клъстери", + "GeoRSS (only link)": "GeoRSS (само за връзка)", + "GeoRSS (title + image)": "GeoRSS (заглавие + изображение)", + "Heatmap": "Топлинна карта", + "Heatmap radius": "радиус на Топлинна карта", + "Name and description": "Име и описание", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "За да се използва, ако отдалечен сървър не позволява кръстосан домейн (по-бавно)", + "Type of layer": "Вид на слой", + "Filter…": "Филтър ...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Надпис", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Искате ли да се покаже надпис бар?", + "Do you want to display a panel on load?": "Искате ли да се покаже панел на зареждане?", + "None": "Нищо", + "by": "чрез", + "Name and description (large)": "Наименование и описание (голям)", + "Empty": "Празно", + "Split line": "Split line", + "Clone": "Клонинг", + "Clone of {name}": "Клонинг на {име}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Измерва разстояния", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("bg", locale); +L.setLocale("bg"); \ No newline at end of file diff --git a/umap/static/umap/locale/bg.json b/umap/static/umap/locale/bg.json new file mode 100644 index 00000000..7586e2c3 --- /dev/null +++ b/umap/static/umap/locale/bg.json @@ -0,0 +1,350 @@ +{ + "About": "относно", + "Action not allowed :(": " Не позволено действие", + "Add a layer": "Добавете слой", + "Add symbol": "Добави символ", + "Advanced actions": "Разширено действия", + "Advanced properties": "Разширени свойства", + "Allow scroll wheel zoom?": "Позволете скрол колело мащабиране?", + "An error occured": "Възникна грешка", + "Are you sure you want to cancel your changes?": "Наистина ли искате да отмените вашите промени?", + "Are you sure you want to clone this map and all its datalayers?": "Наистина ли искате да клонирате тази карта и всички негови слоеве данни ?", + "Are you sure you want to delete the feature?": "Сигурни ли сте, че искате да изтриете тази функция?", + "Are you sure you want to delete this map?": "Сигурни ли сте, че искате да изтриете тази карта?", + "Ball": "топка", + "Bring feature to center": "Bring feature to center", + "Browse data": "Преглед данни", + "Cancel": "Отмени", + "Cancel edits": "Отмени редакциите", + "Center map on your location": "Center map on your location", + "Change map background": "Промяна фона на картата", + "Change symbol": "Промяна символ", + "Change tilelayers": "Променете слоевете ", + "Choose the format of the data to import": "Изберете формат на данните за внос", + "Choose the layer of the feature": "Изберете слой на функцията", + "Choose the layer to import in": "Избери слой за внасяне в", + "Circle": "окръжност", + "Clone this map": "клонира тази карта", + "Default": "по подразбиране", + "Delete": "Изтрий", + "Delete this feature": "Изтриване на тази функция", + "Disable editing": "Забранете редакция", + "Display on load": "Дисплей на зареждане", + "Do you want to display a minimap?": "Искате ли да се покаже миникартата?", + "Do you want to display popup footer?": "Искате ли да се покаже изскачащ колонтитул?", + "Do you want to display the scale control?": "Искате ли да се показва мащаб контрола?", + "Download data": "Изтегляне на данни", + "Draw a line": "Начертайте линия", + "Draw a marker": "Начертайте маркер", + "Draw a polygon": "Начертайте полигон", + "Draw a polyline": "Начертайте полилиния", + "Drop": "Drop", + "Dynamic": "динамичен", + "Edit": "Редактиране", + "Edit feature's layer": "Редактиране функцията на слоя", + "Edit map properties": "Редактирай свойствата на картата", + "Edit map settings": "Редактиране на настройките на картата", + "Edit this feature": "Редактирайте тази характеристика", + "Embed and share this map": "Вграждане и споделяне тази карта", + "Enable editing": "Разрешаване на редактирането", + "Format": "формат", + "From zoom": "От мащабиране", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Скрий контролите", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Колко да опрости полилинията на всяко ниво увеличение (повече = по-добра производителност и по-гладко на вид, по-малко = по-точно)", + "Import": "внасяне", + "Import data": "Внасям данни", + "Inherit": "Наследи", + "Licence": "Лиценз", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "Още контроли", + "Optional. Same as color if not set.": "По избор Същото като цвят, ако не е настроена.", + "Optionnal.": "По избор", + "Paste here your data": "Залепете тук вашите данни", + "Please be sure the licence is compliant with your use.": "Моля, бъдете сигурни, че лицензът е съвместим с вашата употреба.", + "Problem in the response": "Проблем в отзивите", + "Problem in the response format": "Проблем във формата на отговор", + "Provide an URL here": "Представете URL тук", + "Remote data": "отдалечена база данни", + "Save": "запазвам", + "Save current edits": "Запиши текущите редакции", + "Save this center and zoom": "Запази този център и размер", + "Show/hide layer": "Покажи / скрий слой", + "Start editing": "Започнете редактиране", + "Stop editing": "Спри редактирането", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "За да увеличите", + "Untitled layer": "Неозаглавен слой", + "Untitled map": "Неозаглавена карта", + "Update permissions and editors": "Актуализиране на разрешения и редактори", + "Url": "URL адрес", + "User content credits": "User content credits", + "Where do we go from here?": "Къде да отидем от тук?", + "Zoom in": "Zoom in", + "Zoom out": "Намаляване на мащаба", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Увеличаване на тази характеристика", + "color": "цвят", + "dash array": "dash array", + "description": "описание", + "fill": "запълни", + "fill color": "попълнете цвят", + "fill opacity": "попълнете непрозрачност", + "inherit": "наследи", + "licence": "лиценз", + "name": "име", + "no": "не", + "opacity": "непрозрачност", + "stroke": "stroke", + "weight": "тегло", + "yes": "да", + "Editing": "За редактиране", + "Embed the map": "Вграждане на карта", + "Short URL": "Кратко URL", + "# one hash for main heading": "# един хеш за главната позиция", + "## two hashes for second heading": "двата хешове за втората таблица ", + "### three hashes for third heading": "# # # Три хеша за трета позиция", + "**double star for bold**": "двойна звезда за удебеление", + "*simple star for italic*": "* проста звезда за курсив *", + "--- for an horizontal rule": "---за хоризонтална линия", + "All properties are imported.": "Всички свойства са внесени.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Потребителски фон", + "Help": "Помощ", + "Image: {{http://image.url.com}}": "изображение: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Връзка с текст: [[http://example.com|текст на връзката]]", + "Properties imported:": "Внесени свойства:", + "Simple link: [[http://example.com]]": "проста връзка:[[http://example.com]]", + "Supported scheme": "Поддържана схема", + "Supported variables that will be dynamically replaced": "Поддържаните променливи, които ще бъдат динамично заменени", + "Text formatting": "форматиране на текст", + "attribution": "приписване", + "display name": "показвано име", + "max zoom": "максимум мащабиране", + "min zoom": "минимално мащабиране", + "Skipping unkown geometry.type: {type}": ":Пропускане на неизвестна тип геометрия: {type}", + "Please save the map before": "Моля, запазете картата преди", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Трансформация на полигон", + "Transform to lines": "Трансформация на линии", + "Choose the data format": "Изберете формата на данните", + "Error in the tilelayer URL": "Грешка в URL адреса на слоя", + "Directions from here": "Упътвания от тук", + "Choose a preset": "Изберете предварително зададен", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "максимум Източен", + "max North": "максимум Северен", + "max South": "максимум Южен", + "max West": "максимум Западна", + "TMS format": "TMS формат", + "Credits": "приемам като достоверен", + "Only visible features will be downloaded.": "Само видими функции ще бъдат изтеглени.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Отворете тази карта в степен редактор на карта, за да предостави по-точни данни,OpenStreetMap", + "Default properties": "По подразбиране свойства", + "User interface options": "Опции на потребителския интерфейс", + "Image with custom width (in px): {{http://image.url.com|width}}": "Изображение с поръчкова ширина (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Текущ изглед, вместо по подразбиране вижте карта?", + "Iframe export options": "вградена рамка,възможности за износ", + "Include full screen link?": "Включи пълна връзка на екрана?", + "See full screen": "Виж на цял екран", + "height": "височина", + "width": "широчина", + "Clustered": "Клъстер", + "Clustering radius": "радиус на клъстери", + "GeoRSS (only link)": "GeoRSS (само за връзка)", + "GeoRSS (title + image)": "GeoRSS (заглавие + изображение)", + "Heatmap": "Топлинна карта", + "Heatmap radius": "радиус на Топлинна карта", + "Name and description": "Име и описание", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "За да се използва, ако отдалечен сървър не позволява кръстосан домейн (по-бавно)", + "Type of layer": "Вид на слой", + "Filter…": "Филтър ...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Надпис", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Искате ли да се покаже надпис бар?", + "Do you want to display a panel on load?": "Искате ли да се покаже панел на зареждане?", + "None": "Нищо", + "by": "чрез", + "Name and description (large)": "Наименование и описание (голям)", + "Empty": "Празно", + "Split line": "Split line", + "Clone": "Клонинг", + "Clone of {name}": "Клонинг на {име}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Измерва разстояния", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ca.js b/umap/static/umap/locale/ca.js new file mode 100644 index 00000000..4aadf38a --- /dev/null +++ b/umap/static/umap/locale/ca.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Quant a", + "Action not allowed :(": "Acció no permesa :(", + "Add a layer": "Afegeix una capa", + "Add symbol": "Afegeix un símbol", + "Advanced actions": "Opcions avançades", + "Advanced properties": "Propietats avançades", + "Allow scroll wheel zoom?": "Voleu permetre el zoom amb la roda de desplaçament?", + "An error occured": "S'ha produït un error", + "Are you sure you want to cancel your changes?": "Esteu segur de voler cancel·lar els canvis?", + "Are you sure you want to clone this map and all its datalayers?": "Esteu segur de voler clonar aquest mapa i totes les capes de dades?", + "Are you sure you want to delete the feature?": "Segur que voleu suprimir la característica?", + "Are you sure you want to delete this map?": "Esteu segur de voler suprimir aquest mapa?", + "Ball": "Bola", + "Bring feature to center": "Bring feature to center", + "Browse data": "Explora les dades", + "Cancel": "Cancel·la", + "Cancel edits": "Cancel·la les edicions", + "Center map on your location": "Centra el mapa a la vostra ubicació", + "Change map background": "Canvia el fons del mapa", + "Change symbol": "Canvia el símbol", + "Change tilelayers": "Canvia les capes de tessel·les", + "Choose the format of the data to import": "Trieu el format de les dades a importar", + "Choose the layer of the feature": "Trieu la capa de la característica", + "Choose the layer to import in": "Trieu la capa que on voleu importar", + "Circle": "Cercle", + "Clone this map": "Clona aquest mapa", + "Default": "Per defecte", + "Delete": "Suprimeix", + "Delete this feature": "Suprimeix aquesta característica", + "Disable editing": "Inhabilita l'edició", + "Display on load": "Mostrar en carregar", + "Do you want to display a minimap?": "Voleu mostrar un minimapa?", + "Do you want to display popup footer?": "Voleu mostrar un peu emergent?", + "Do you want to display the scale control?": "Voleu mostrar el control d'escala?", + "Download data": "Baixa les dades", + "Draw a line": "Dibuixa una línia", + "Draw a marker": "Dibuixa un marcador", + "Draw a polygon": "Dibuixa un polígon", + "Draw a polyline": "Dibuixa una polilínia", + "Drop": "Deixar", + "Dynamic": "Dinàmic", + "Edit": "Edita", + "Edit feature's layer": "Edita la capa de la característica", + "Edit map properties": "Edita les propietats del mapa", + "Edit map settings": "Edita els paràmetres del mapa", + "Edit this feature": "Edita aquesta característica", + "Embed and share this map": "Incrusta i comparteix aquest mapa", + "Enable editing": "Habilita l'edició", + "Format": "Format", + "From zoom": "Del zoom", + "Go to «{feature}»": "Vés a «{feature}»", + "Hide controls": "Amaga els controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Importa", + "Import data": "Importa dades", + "Inherit": "Hereta", + "Licence": "Llicència", + "Map background credits": "Crèdits del fons del mapa", + "Map user content has been published under licence": "El contingut de l'usuari del mapa s'ha publicat sota la llicència", + "More controls": "Més controls", + "Optional. Same as color if not set.": "Opcional. El mateix color si no s'estableix.", + "Optionnal.": "Opcional", + "Paste here your data": "Enganxeu aquí les vostres dades", + "Please be sure the licence is compliant with your use.": "Assegureu-vos que la llicència és compatible amb l'ús que en feu.", + "Problem in the response": "Hi ha un problema en la resposta", + "Problem in the response format": "Hi ha un problema en el format de resposta", + "Provide an URL here": "Proporcioneu un URL aquí", + "Remote data": "Dades remotes", + "Save": "Desa", + "Save current edits": "Desa les edicions actuals", + "Save this center and zoom": "Desa aquest centre i escala", + "Show/hide layer": "Mostra/amaga la capa", + "Start editing": "Inicia l'edició", + "Stop editing": "Atura l'edició", + "The zoom and center have been setted.": "S'han establert l'escala i el centre.", + "To zoom": "A l'escala", + "Untitled layer": "Capa sense títol", + "Untitled map": "Mapa sense títol", + "Update permissions and editors": "Actualitza els permisos i editors", + "Url": "URL", + "User content credits": "Crèdits dels continguts de l'usuari", + "Where do we go from here?": "On anem des d'aquí?", + "Zoom in": "Apropa't", + "Zoom out": "Allunya't", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Fes zoom a aquesta característica", + "color": "color", + "dash array": "dash array", + "description": "descripció", + "fill": "emplena", + "fill color": "emplena el color", + "fill opacity": "opacitat d'emplenament", + "inherit": "heretat", + "licence": "llicència", + "name": "nom", + "no": "no", + "opacity": "opacitat", + "stroke": "stroke", + "weight": "pes", + "yes": "sí", + "Editing": "Edició", + "Embed the map": "Incrusta el mapa", + "Short URL": "URL curt", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## dos coixinets per a capçalera secundària", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**doble asteric per a negreta**", + "*simple star for italic*": "*un asterisc per a cursiva*", + "--- for an horizontal rule": "--- per a una línia horitzontal", + "All properties are imported.": "S'han importat totes les propietats", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Fons personalitzat", + "Help": "Ajuda", + "Image: {{http://image.url.com}}": "Imatge: {{http://imatge.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Enllaceu amb el text: [[http://exemple.com|text de l'enllaç]]", + "Properties imported:": "Propietats importades:", + "Simple link: [[http://example.com]]": "Enllaç simple: [[http://exemple.com]]", + "Supported scheme": "Esquema suportat", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Format del text", + "attribution": "atribució", + "display name": "mostra el nom", + "max zoom": "escala màxima", + "min zoom": "escala mínima", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Deseu el mapa abans", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transforma a polígon", + "Transform to lines": "Transforma a línies", + "Choose the data format": "Trieu el format de dades", + "Error in the tilelayer URL": "Hi ha un error en l'URL de la cap de tessel·les", + "Directions from here": "Direccions des d'aquí", + "Choose a preset": "Choose a preset", + "Limit bounds": "Límits", + "Use current bounds": "Usa els límits actuals", + "max East": "Est màxim", + "max North": "Nord màxim", + "max South": "Sud màxim", + "max West": "Oest màxim", + "TMS format": "Format TMS", + "Credits": "Crèdits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Propietats predeterminades", + "User interface options": "Opcions de la interfície d'usuari", + "Image with custom width (in px): {{http://image.url.com|width}}": "Imatge amb amplada personalitzada (en px): {{http://imatge.url.com|amplada}}", + "Current view instead of default map view?": "Voleu la visualització actual en comptes de la visualització predeterminada?", + "Iframe export options": "Opcions de l'exportació iframe", + "Include full screen link?": "Voleu incloure l'enllaç a pantalla completa?", + "See full screen": "Mostra-ho a pantalla completa", + "height": "alçada", + "width": "amplada", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (només enllaç)", + "GeoRSS (title + image)": "GeoRSS (títol i imatge)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Nom i descripció", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Petició proxy", + "Table": "Taula", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Tipus de capa", + "Filter…": "Filtre...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Llegenda", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Voleu mostrar la barra de llegenda?", + "Do you want to display a panel on load?": "Voleu mostrar el quandre en carregar?", + "None": "Cap", + "by": "per", + "Name and description (large)": "Nom i descripció (gran)", + "Empty": "Buit", + "Split line": "Split line", + "Clone": "Clona", + "Clone of {name}": "Clona de {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Presentació", + "Start slideshow": "Inicia la presentació", + "Stop slideshow": "Atura la presentació", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Tanca", + "Delete this property on all the features": "Suprimeix aquesta propietat a totes les característiques", + "Edit properties in a table": "Edita les propietats en una taula", + "Please enter the name of the property": "Introduïu el nom de la propietat", + "Please enter the new name of this property": "Introduïu el nom d'aquesta propietat", + "Rename this property on all the features": "Canvia el nom d'aquesta propietat en totes les característiques", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "S'ha desat el mapa!", + "Save anyway": "Desa-ho igualment", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordenades", + "Latitude": "Latitud", + "Longitude": "Longitud", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Feu clic per a afegir una marca", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Capa", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Mesura distàncies", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("ca", locale); +L.setLocale("ca"); \ No newline at end of file diff --git a/umap/static/umap/locale/ca.json b/umap/static/umap/locale/ca.json new file mode 100644 index 00000000..55625204 --- /dev/null +++ b/umap/static/umap/locale/ca.json @@ -0,0 +1,350 @@ +{ + "About": "Quant a", + "Action not allowed :(": "Acció no permesa :(", + "Add a layer": "Afegeix una capa", + "Add symbol": "Afegeix un símbol", + "Advanced actions": "Opcions avançades", + "Advanced properties": "Propietats avançades", + "Allow scroll wheel zoom?": "Voleu permetre el zoom amb la roda de desplaçament?", + "An error occured": "S'ha produït un error", + "Are you sure you want to cancel your changes?": "Esteu segur de voler cancel·lar els canvis?", + "Are you sure you want to clone this map and all its datalayers?": "Esteu segur de voler clonar aquest mapa i totes les capes de dades?", + "Are you sure you want to delete the feature?": "Segur que voleu suprimir la característica?", + "Are you sure you want to delete this map?": "Esteu segur de voler suprimir aquest mapa?", + "Ball": "Bola", + "Bring feature to center": "Bring feature to center", + "Browse data": "Explora les dades", + "Cancel": "Cancel·la", + "Cancel edits": "Cancel·la les edicions", + "Center map on your location": "Centra el mapa a la vostra ubicació", + "Change map background": "Canvia el fons del mapa", + "Change symbol": "Canvia el símbol", + "Change tilelayers": "Canvia les capes de tessel·les", + "Choose the format of the data to import": "Trieu el format de les dades a importar", + "Choose the layer of the feature": "Trieu la capa de la característica", + "Choose the layer to import in": "Trieu la capa que on voleu importar", + "Circle": "Cercle", + "Clone this map": "Clona aquest mapa", + "Default": "Per defecte", + "Delete": "Suprimeix", + "Delete this feature": "Suprimeix aquesta característica", + "Disable editing": "Inhabilita l'edició", + "Display on load": "Mostrar en carregar", + "Do you want to display a minimap?": "Voleu mostrar un minimapa?", + "Do you want to display popup footer?": "Voleu mostrar un peu emergent?", + "Do you want to display the scale control?": "Voleu mostrar el control d'escala?", + "Download data": "Baixa les dades", + "Draw a line": "Dibuixa una línia", + "Draw a marker": "Dibuixa un marcador", + "Draw a polygon": "Dibuixa un polígon", + "Draw a polyline": "Dibuixa una polilínia", + "Drop": "Deixar", + "Dynamic": "Dinàmic", + "Edit": "Edita", + "Edit feature's layer": "Edita la capa de la característica", + "Edit map properties": "Edita les propietats del mapa", + "Edit map settings": "Edita els paràmetres del mapa", + "Edit this feature": "Edita aquesta característica", + "Embed and share this map": "Incrusta i comparteix aquest mapa", + "Enable editing": "Habilita l'edició", + "Format": "Format", + "From zoom": "Del zoom", + "Go to «{feature}»": "Vés a «{feature}»", + "Hide controls": "Amaga els controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Importa", + "Import data": "Importa dades", + "Inherit": "Hereta", + "Licence": "Llicència", + "Map background credits": "Crèdits del fons del mapa", + "Map user content has been published under licence": "El contingut de l'usuari del mapa s'ha publicat sota la llicència", + "More controls": "Més controls", + "Optional. Same as color if not set.": "Opcional. El mateix color si no s'estableix.", + "Optionnal.": "Opcional", + "Paste here your data": "Enganxeu aquí les vostres dades", + "Please be sure the licence is compliant with your use.": "Assegureu-vos que la llicència és compatible amb l'ús que en feu.", + "Problem in the response": "Hi ha un problema en la resposta", + "Problem in the response format": "Hi ha un problema en el format de resposta", + "Provide an URL here": "Proporcioneu un URL aquí", + "Remote data": "Dades remotes", + "Save": "Desa", + "Save current edits": "Desa les edicions actuals", + "Save this center and zoom": "Desa aquest centre i escala", + "Show/hide layer": "Mostra/amaga la capa", + "Start editing": "Inicia l'edició", + "Stop editing": "Atura l'edició", + "The zoom and center have been setted.": "S'han establert l'escala i el centre.", + "To zoom": "A l'escala", + "Untitled layer": "Capa sense títol", + "Untitled map": "Mapa sense títol", + "Update permissions and editors": "Actualitza els permisos i editors", + "Url": "URL", + "User content credits": "Crèdits dels continguts de l'usuari", + "Where do we go from here?": "On anem des d'aquí?", + "Zoom in": "Apropa't", + "Zoom out": "Allunya't", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Fes zoom a aquesta característica", + "color": "color", + "dash array": "dash array", + "description": "descripció", + "fill": "emplena", + "fill color": "emplena el color", + "fill opacity": "opacitat d'emplenament", + "inherit": "heretat", + "licence": "llicència", + "name": "nom", + "no": "no", + "opacity": "opacitat", + "stroke": "stroke", + "weight": "pes", + "yes": "sí", + "Editing": "Edició", + "Embed the map": "Incrusta el mapa", + "Short URL": "URL curt", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## dos coixinets per a capçalera secundària", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**doble asteric per a negreta**", + "*simple star for italic*": "*un asterisc per a cursiva*", + "--- for an horizontal rule": "--- per a una línia horitzontal", + "All properties are imported.": "S'han importat totes les propietats", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Fons personalitzat", + "Help": "Ajuda", + "Image: {{http://image.url.com}}": "Imatge: {{http://imatge.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Enllaceu amb el text: [[http://exemple.com|text de l'enllaç]]", + "Properties imported:": "Propietats importades:", + "Simple link: [[http://example.com]]": "Enllaç simple: [[http://exemple.com]]", + "Supported scheme": "Esquema suportat", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Format del text", + "attribution": "atribució", + "display name": "mostra el nom", + "max zoom": "escala màxima", + "min zoom": "escala mínima", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Deseu el mapa abans", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transforma a polígon", + "Transform to lines": "Transforma a línies", + "Choose the data format": "Trieu el format de dades", + "Error in the tilelayer URL": "Hi ha un error en l'URL de la cap de tessel·les", + "Directions from here": "Direccions des d'aquí", + "Choose a preset": "Choose a preset", + "Limit bounds": "Límits", + "Use current bounds": "Usa els límits actuals", + "max East": "Est màxim", + "max North": "Nord màxim", + "max South": "Sud màxim", + "max West": "Oest màxim", + "TMS format": "Format TMS", + "Credits": "Crèdits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Propietats predeterminades", + "User interface options": "Opcions de la interfície d'usuari", + "Image with custom width (in px): {{http://image.url.com|width}}": "Imatge amb amplada personalitzada (en px): {{http://imatge.url.com|amplada}}", + "Current view instead of default map view?": "Voleu la visualització actual en comptes de la visualització predeterminada?", + "Iframe export options": "Opcions de l'exportació iframe", + "Include full screen link?": "Voleu incloure l'enllaç a pantalla completa?", + "See full screen": "Mostra-ho a pantalla completa", + "height": "alçada", + "width": "amplada", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (només enllaç)", + "GeoRSS (title + image)": "GeoRSS (títol i imatge)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Nom i descripció", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Petició proxy", + "Table": "Taula", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Tipus de capa", + "Filter…": "Filtre...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Llegenda", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Voleu mostrar la barra de llegenda?", + "Do you want to display a panel on load?": "Voleu mostrar el quandre en carregar?", + "None": "Cap", + "by": "per", + "Name and description (large)": "Nom i descripció (gran)", + "Empty": "Buit", + "Split line": "Split line", + "Clone": "Clona", + "Clone of {name}": "Clona de {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Presentació", + "Start slideshow": "Inicia la presentació", + "Stop slideshow": "Atura la presentació", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Tanca", + "Delete this property on all the features": "Suprimeix aquesta propietat a totes les característiques", + "Edit properties in a table": "Edita les propietats en una taula", + "Please enter the name of the property": "Introduïu el nom de la propietat", + "Please enter the new name of this property": "Introduïu el nom d'aquesta propietat", + "Rename this property on all the features": "Canvia el nom d'aquesta propietat en totes les característiques", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "S'ha desat el mapa!", + "Save anyway": "Desa-ho igualment", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordenades", + "Latitude": "Latitud", + "Longitude": "Longitud", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Feu clic per a afegir una marca", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Capa", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Mesura distàncies", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/cs_CZ.js b/umap/static/umap/locale/cs_CZ.js new file mode 100644 index 00000000..44015ea6 --- /dev/null +++ b/umap/static/umap/locale/cs_CZ.js @@ -0,0 +1,352 @@ +var locale = { + "About": "O mapě", + "Action not allowed :(": "Akce nepovolena :(", + "Add a layer": "Přidat vrstvu", + "Add symbol": "Přidat symbol", + "Advanced actions": "Pokročilé akce", + "Advanced properties": "Pokročilé vlastnosti", + "Allow scroll wheel zoom?": "Povolit přibližování kolečkem myši?", + "An error occured": "Došlo k chybě", + "Are you sure you want to cancel your changes?": "Jste si jisti že chcete stornovat vaše úpravy?", + "Are you sure you want to clone this map and all its datalayers?": "Určitě chcete vytvořit kopii celé této mapy a všech jejich vrstev?", + "Are you sure you want to delete the feature?": "Určitě chcete vymazat tento objekt?", + "Are you sure you want to delete this map?": "Jste si jisti, že chcete vymazat tuto celou mapu?", + "Ball": "špendlík", + "Bring feature to center": "Centruj mapu na objektu", + "Browse data": "Prohlížet data", + "Cancel": "Storno", + "Cancel edits": "Stornovat úpravy", + "Center map on your location": "Přemístit se na mapě na vaši polohu", + "Change map background": "Změnit pozadí mapy", + "Change symbol": "Změnit symbol značky", + "Change tilelayers": "Změnit pozadí mapy", + "Choose the format of the data to import": "Zvolte v jakém formátu jsou importovaná data ", + "Choose the layer of the feature": "Zvolte vrstvu do které objekt patří", + "Choose the layer to import in": "Zvolte vrstvu, do které se bude importovat", + "Circle": "Kruh", + "Clone this map": "Vytvořit vlastní kopii této mapy", + "Default": "Výchozí", + "Delete": "Vymazat", + "Delete this feature": "Vymazat objekt", + "Disable editing": "Zakázat úpravy", + "Display on load": "Zobrazit na startu", + "Do you want to display a minimap?": "Chcete zobrazit minimapu?", + "Do you want to display popup footer?": "Chcete v bublině zobrazit navigační panel?", + "Do you want to display the scale control?": "Chcete zobrazit měřítko mapy?", + "Download data": "Stáhnout data", + "Draw a line": "Nakreslit jednoduchou čáru", + "Draw a marker": "Umístit značku místa", + "Draw a polygon": "Vyznačit oblast", + "Draw a polyline": "Nakreslit čáru", + "Drop": "Pustit", + "Dynamic": "Dynamicky", + "Edit": "Upravit", + "Edit feature's layer": "Upravit vrstvu objektu", + "Edit map properties": "Nastavení mapy", + "Edit map settings": "Nastavení mapy", + "Edit this feature": "Upravit tento objekt", + "Embed and share this map": "Sílet mapu nebo ji vložit do jiného webu", + "Enable editing": "Povolit úpravy", + "Format": "Formát", + "From zoom": "Maximální oddálení", + "Go to «{feature}»": "Jdi na \"{feature}\"", + "Hide controls": "Skrýt ovládací prvky", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Jak moc zahlazovat a zjednodušovat při oddálení (větší = rychlejší odezva a plynulejší vzhled, menší = přesnější)", + "Import": "Importovat", + "Import data": "Import dat", + "Inherit": "výchozí", + "Licence": "Licence", + "Map background credits": "Autorství pozadí mapy", + "Map user content has been published under licence": "Uživatelská data jsou zveřejněna pod licencí", + "More controls": "Více ovládacích prvků", + "Optional. Same as color if not set.": "Nepovinné. Stejné jako barva, pokud není nastaveno.", + "Optionnal.": "Nepovinné.", + "Paste here your data": "Sem vložte vaše data", + "Please be sure the licence is compliant with your use.": "Prosíme ujistěte se, že licence je ve shodě s tím jak mapu používáte.", + "Problem in the response": "Problém při odpovědi", + "Problem in the response format": "Problém ve formátu odpovědi", + "Provide an URL here": "Sem vložte odkaz", + "Remote data": "Vzdálená data", + "Save": "Ulož", + "Save current edits": "Ulož nedávné změny", + "Save this center and zoom": "Ulož tuto pozici mapy a její přiblížení", + "Show/hide layer": "Skrytí/zobrazení vrstvy", + "Start editing": "Začít editaci", + "Stop editing": "Přerušit úpravy", + "The zoom and center have been setted.": "Přiblížení a střed mapy byly nastaveny", + "To zoom": "Maximální přiblížení", + "Untitled layer": "Nepojmenovaná vrstva", + "Untitled map": "Mapa bez názvu", + "Update permissions and editors": "Nastavení přístupu a práva editace", + "Url": "Url", + "User content credits": "Autorství uživatelského obsahu", + "Where do we go from here?": "Co všechno teď můžete udělat?", + "Zoom in": "Přiblížit", + "Zoom out": "Oddálit", + "Zoom to layer extent": "Přizpůsobit přiblížení vrstvě", + "Zoom to this feature": "Přiblížit na tento objekt", + "color": "barva", + "dash array": "styl přerušované čáry", + "description": "popis", + "fill": "výplň", + "fill color": "barva výplně", + "fill opacity": "průhlednost výplně", + "inherit": "výchozí", + "licence": "licence", + "name": "název", + "no": "ne", + "opacity": "průhlednost", + "stroke": "linka", + "weight": "šířka linky", + "yes": "ano", + "Editing": "Upravujete", + "Embed the map": "Vložit mapu do jiného webu", + "Short URL": "Krátký odkaz", + "# one hash for main heading": "# jedna mřížka pro hlavní nadpis", + "## two hashes for second heading": "## dvě mřížky pro nadpis druhé úrovně", + "### three hashes for third heading": "### podnadpis třetí úrovně", + "**double star for bold**": "**vše mezi dvěma hvězdičkami je tučně**", + "*simple star for italic*": "*vše mezi hvězdičkami bude kurzívou*", + "--- for an horizontal rule": "--- vytvoří vodorovnou linku", + "All properties are imported.": "Všechny vlastnosti jsou importovány.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Hodnoty oddělené čárkou, tabulátorem, nebo středníkem. předpokládá se SRS WGS84 a jsou importovány jen polohy bodů. Import hledá záhlaví sloupců začínající na \"lat\" nebo \"lon\" a ty považuje za souřadnice (na velikosti písmen nesejde). Ostatní sloupce jsou importovány jako vlastnosti.", + "Custom background": "Vlastní pozadí", + "Help": "Nápověda", + "Image: {{http://image.url.com}}": "Obrázek: {{http://priklad.cz/obrazek.jpg}}", + "Link with text: [[http://example.com|text of the link]]": "Odkaz: [[http://priklad.cz/stranka|text odkazu]]", + "Properties imported:": "Importované vlastnosti:", + "Simple link: [[http://example.com]]": "Jednoduchý odkaz: [[http://priklad.cz]]", + "Supported scheme": "Podporované schéma", + "Supported variables that will be dynamically replaced": "Podporované proměnné, které budou automaticky nahrazeny", + "Text formatting": "Formátování textu", + "attribution": "autorství", + "display name": "zobrazit název", + "max zoom": "maximální přiblížení", + "min zoom": "maximální oddálení", + "Skipping unkown geometry.type: {type}": "Přeskakuji neznámý typ geometrie: {type}", + "Please save the map before": "Prosíme, uložte nejdříve mapu", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Můžete používat vlastnosti objektů jako proměnné, např. v \"http://myserver.org/images/{name}.png\" je {name} nahrazeno hodnotou \"name\" každého objektu.", + "Transform to polygon": "Převést na polygon", + "Transform to lines": "Převést na čáry", + "Choose the data format": "Vyberte formát dat", + "Error in the tilelayer URL": "Chyba v URL vrstvy dlaždic", + "Directions from here": "Navigovat odsud", + "Choose a preset": "Zvolte přednastavení", + "Limit bounds": "Hranice zobrazení", + "Use current bounds": "Použít současné hranice", + "max East": "maximálně na Východ", + "max North": "maximálně na Sever", + "max South": "maximálně na Jih", + "max West": "maximálně na Západ", + "TMS format": "formát TMS", + "Credits": "Autorství", + "Only visible features will be downloaded.": "Budou staženy jen viditelné objekty", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Otevři tuto oblast v editoru OpenStreetMap. Toto vám umožní editovat přímo základní mapová data a přispět tak v tvorbě svobodné mapy pro všechny.", + "Default properties": "Výchozí vlastnosti", + "User interface options": "Nastavení ovládacích prvků mapy", + "Image with custom width (in px): {{http://image.url.com|width}}": "Obrázek s vlastní šířkou (v px): {{http://obrazek.url.com|šířka}}", + "Current view instead of default map view?": "Současný pohled namísto výchozího?", + "Iframe export options": "Možnosti exportu pro iframe", + "Include full screen link?": "Zahrnout odkaz na celou obrazovku?", + "See full screen": "Na celou obrazovku", + "height": "výška", + "width": "šířka", + "Clustered": "Shluková", + "Clustering radius": "Poloměr shlukování", + "GeoRSS (only link)": "GeoRSS (jen odkaz)", + "GeoRSS (title + image)": "GeoRSS (titulek + obrázek)", + "Heatmap": "Teplotní mapa", + "Heatmap radius": "Poloměr teplotní mapy", + "Name and description": "Jméno a popis", + "Override clustering radius (default 80)": "Přepsat shlukovací poloměr (výchozí hodnota 80)", + "Override heatmap radius (default 25)": "Přepsat poloměr teplotní mapy (výchozí hodnota 25)", + "Proxy request": "Požadavky přes proxy", + "Table": "Tabulka", + "To use if remote server doesn't allow cross domain (slower)": "Pro případ že vzdálený server neumožňuje cross domain (pomalejší)", + "Type of layer": "Druh vrstvy", + "Filter…": "Filter ...", + "Heatmap intensity property": "Vlastnost pro intenzitu teplotní mapy", + "Optional intensity property for heatmap": "Volitelná vlastnost pro výpočet intenzity v teplotní mapě", + "Caption": "Popisek", + "Data browser": "Prohlížeč dat", + "Do you want to display a caption bar?": "Chcete zobrazit panel s popiskem?", + "Do you want to display a panel on load?": "Chcete při načtení zobrazit panel?", + "None": "Žádný", + "by": "od", + "Name and description (large)": "Jméno a popis (velké)", + "Empty": "Vyprázdnit", + "Split line": "Rozdělit čáru", + "Clone": "Klonovat", + "Clone of {name}": "Klon objektu {name}", + "Side panel": "Boční panel", + "Powered by Leaflet and Django, glued by uMap project.": "Sestaveno z Leaflet a Django, propojených pomocí projektu uMap.", + "Zoom level for automatic zooms": "Úroveň přiblížení pro automatické přiblížení", + "Do you want to display the «more» control?": "Přejete si zobrazovat ovládací prvek «více»?", + "Auto": "Automatická", + "Default: name": "Výchozí: name (název objektu)", + "Property to use for sorting features": "Vlastnost použitá pro řazení objektů", + "Slideshow": "Prezentace", + "Start slideshow": "Spustit prezentaci", + "Stop slideshow": "Zastavit prezentaci", + "Text color for the cluster label": "Barva textu popisku shluku", + "Zoom to the next": "Skočit na následující", + "Zoom to the previous": "Skočit na předchozí", + "Add a new property": "Přidat novou vlastnost", + "Are you sure you want to delete this property on all the features?": "Určitě chcete smazat tuto vlastnost na všech objektech?", + "Close": "Zavřít", + "Delete this property on all the features": "Smazat tuto vlastnost na všech objektech", + "Edit properties in a table": "Upravit vlastnosti v tabulce", + "Please enter the name of the property": "Zadejte prosím název vlastnosti", + "Please enter the new name of this property": "Zadejte prosím nový název této vlastnosti", + "Rename this property on all the features": "Přejmenovat tuto vlastnost na všech objektech", + "If false, the polygon will act as a part of the underlying map.": "Pokud je vypnuto, polygon se bude chovat jako součást mapového podkladu.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe s vlastní výškou (v px): {{{http://iframe.url.com|výška}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Zobraz vše", + "Dynamic properties": "Dynamické vlastnosti", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Použijte zástupný text s vlastnostmi objektů mezi složenými závorkami, např. {name} — budou dynamicky nahrazeny odpovídajícími hodnotami.", + "Long credits": "Dlouhý text autorství", + "No licence has been set": "Nebyla nastavena licence", + "Popup content template": "Šablona obsahu bubliny", + "Short credits": "Krátký text autorství", + "Will be displayed in the bottom right corner of the map": "Bude zobrazeno s mapou napravo dole", + "Will be visible in the caption of the map": "Bude zobrazeno v popisu mapy", + "Map has been saved!": "Mapa byla uložena", + "Save anyway": "I tak uložit", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ojoj! Někdo jiný mezitím také upravil data. Můžete je uložit bez ohledu na to, ale smažete tak jeho změny.", + "Comma separated list of properties to use when filtering features": "Čárkami oddělený seznam vlastností pro filtrování objektů", + "Keep current visible layers": "Použít aktuální zobrazení vrstev", + "Coordinates": "Souřadnice", + "Latitude": "Sev. šířka", + "Longitude": "Délka", + "Continue line (Ctrl-click)": "Pokračovat v čáře (Ctrl-klik)", + "Start a hole here": "Začít tady díru", + "Click last point to finish shape": "Klikněte na poslední bod pro dokončení tvaru", + "Click to add a marker": "Kliknutím přidáš značku", + "Click to continue drawing": "Kliknutím můžeš pokračovat v kreslení", + "Click to start drawing a line": "Klikněte pro začátek kreslení čáry", + "Click to start drawing a polygon": "Klikněte pro začátek kreslení polygonu", + "Import in a new layer": "Importovat do nové vrstvy", + "Layer": "Vrstva", + "Please choose a format": "Zvolte formát", + "Imports all umap data, including layers and settings.": "Importuje všechy data umapy, včetně vrstev a nastavení", + "Invalid umap data": "Neplatná data umapy", + "Invalid umap data in {filename}": "Neplatná data umapy v souboru {filename}", + "Add a line to the current multi": "Přidat čáru k současnému multi", + "Add a polygon to the current multi": "Přidat polygon k současnému multi", + "Click to edit": "Klikněte pro úpravy", + "Continue line": "Pokračovat v čáře", + "Delete this shape": "Smazat tento tvar", + "Make main shape": "Učinit hlavním tvarem", + "Merge lines": "Spojit čáry", + "Remove shape from the multi": "Odebrat tvar z multi", + "Transfer shape to edited feature": "Přenést tvar do editovaného objektu", + "next": "další", + "previous": "předchozí", + "Measure distances": "Měřit vzdálenost", + "NM": "NM", + "kilometers": "kilometrů", + "km": "km", + "mi": "mi", + "miles": "mil", + "nautical miles": "námořních mil", + "{area} acres": "{area} akrů", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} mil", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Opravdu si přejete obnovit tuto verzi?", + "Extract shape to separate feature": "Vyjmout tvar do samostatného objektu", + "Layer properties": "Vlastnosti vrstvy", + "Restore this version": "Obnovit tuto verzi", + "Versions": "Verze", + "You have unsaved changes.": "Máte neuložené změny.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Čárkami oddělený seznam čísel, který popisuje vzorek přerušované čáry. Např. «5, 10, 15».", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Výchozí přiblížení", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Smazat tento bod (Alt-klik)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Tvar ikony", + "Icon symbol": "Symbol ikony", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Platný název v CSS (např.: Red, Blue nebo #123456)", + "No results": "Žádné výsledky", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("cs_CZ", locale); +L.setLocale("cs_CZ"); \ No newline at end of file diff --git a/umap/static/umap/locale/cs_CZ.json b/umap/static/umap/locale/cs_CZ.json new file mode 100644 index 00000000..0641d46f --- /dev/null +++ b/umap/static/umap/locale/cs_CZ.json @@ -0,0 +1,350 @@ +{ + "About": "O mapě", + "Action not allowed :(": "Akce nepovolena :(", + "Add a layer": "Přidat vrstvu", + "Add symbol": "Přidat symbol", + "Advanced actions": "Pokročilé akce", + "Advanced properties": "Pokročilé vlastnosti", + "Allow scroll wheel zoom?": "Povolit přibližování kolečkem myši?", + "An error occured": "Došlo k chybě", + "Are you sure you want to cancel your changes?": "Jste si jisti že chcete stornovat vaše úpravy?", + "Are you sure you want to clone this map and all its datalayers?": "Určitě chcete vytvořit kopii celé této mapy a všech jejich vrstev?", + "Are you sure you want to delete the feature?": "Určitě chcete vymazat tento objekt?", + "Are you sure you want to delete this map?": "Jste si jisti, že chcete vymazat tuto celou mapu?", + "Ball": "špendlík", + "Bring feature to center": "Centruj mapu na objektu", + "Browse data": "Prohlížet data", + "Cancel": "Storno", + "Cancel edits": "Stornovat úpravy", + "Center map on your location": "Přemístit se na mapě na vaši polohu", + "Change map background": "Změnit pozadí mapy", + "Change symbol": "Změnit symbol značky", + "Change tilelayers": "Změnit pozadí mapy", + "Choose the format of the data to import": "Zvolte v jakém formátu jsou importovaná data ", + "Choose the layer of the feature": "Zvolte vrstvu do které objekt patří", + "Choose the layer to import in": "Zvolte vrstvu, do které se bude importovat", + "Circle": "Kruh", + "Clone this map": "Vytvořit vlastní kopii této mapy", + "Default": "Výchozí", + "Delete": "Vymazat", + "Delete this feature": "Vymazat objekt", + "Disable editing": "Zakázat úpravy", + "Display on load": "Zobrazit na startu", + "Do you want to display a minimap?": "Chcete zobrazit minimapu?", + "Do you want to display popup footer?": "Chcete v bublině zobrazit navigační panel?", + "Do you want to display the scale control?": "Chcete zobrazit měřítko mapy?", + "Download data": "Stáhnout data", + "Draw a line": "Nakreslit jednoduchou čáru", + "Draw a marker": "Umístit značku místa", + "Draw a polygon": "Vyznačit oblast", + "Draw a polyline": "Nakreslit čáru", + "Drop": "Pustit", + "Dynamic": "Dynamicky", + "Edit": "Upravit", + "Edit feature's layer": "Upravit vrstvu objektu", + "Edit map properties": "Nastavení mapy", + "Edit map settings": "Nastavení mapy", + "Edit this feature": "Upravit tento objekt", + "Embed and share this map": "Sílet mapu nebo ji vložit do jiného webu", + "Enable editing": "Povolit úpravy", + "Format": "Formát", + "From zoom": "Maximální oddálení", + "Go to «{feature}»": "Jdi na \"{feature}\"", + "Hide controls": "Skrýt ovládací prvky", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Jak moc zahlazovat a zjednodušovat při oddálení (větší = rychlejší odezva a plynulejší vzhled, menší = přesnější)", + "Import": "Importovat", + "Import data": "Import dat", + "Inherit": "výchozí", + "Licence": "Licence", + "Map background credits": "Autorství pozadí mapy", + "Map user content has been published under licence": "Uživatelská data jsou zveřejněna pod licencí", + "More controls": "Více ovládacích prvků", + "Optional. Same as color if not set.": "Nepovinné. Stejné jako barva, pokud není nastaveno.", + "Optionnal.": "Nepovinné.", + "Paste here your data": "Sem vložte vaše data", + "Please be sure the licence is compliant with your use.": "Prosíme ujistěte se, že licence je ve shodě s tím jak mapu používáte.", + "Problem in the response": "Problém při odpovědi", + "Problem in the response format": "Problém ve formátu odpovědi", + "Provide an URL here": "Sem vložte odkaz", + "Remote data": "Vzdálená data", + "Save": "Ulož", + "Save current edits": "Ulož nedávné změny", + "Save this center and zoom": "Ulož tuto pozici mapy a její přiblížení", + "Show/hide layer": "Skrytí/zobrazení vrstvy", + "Start editing": "Začít editaci", + "Stop editing": "Přerušit úpravy", + "The zoom and center have been setted.": "Přiblížení a střed mapy byly nastaveny", + "To zoom": "Maximální přiblížení", + "Untitled layer": "Nepojmenovaná vrstva", + "Untitled map": "Mapa bez názvu", + "Update permissions and editors": "Nastavení přístupu a práva editace", + "Url": "Url", + "User content credits": "Autorství uživatelského obsahu", + "Where do we go from here?": "Co všechno teď můžete udělat?", + "Zoom in": "Přiblížit", + "Zoom out": "Oddálit", + "Zoom to layer extent": "Přizpůsobit přiblížení vrstvě", + "Zoom to this feature": "Přiblížit na tento objekt", + "color": "barva", + "dash array": "styl přerušované čáry", + "description": "popis", + "fill": "výplň", + "fill color": "barva výplně", + "fill opacity": "průhlednost výplně", + "inherit": "výchozí", + "licence": "licence", + "name": "název", + "no": "ne", + "opacity": "průhlednost", + "stroke": "linka", + "weight": "šířka linky", + "yes": "ano", + "Editing": "Upravujete", + "Embed the map": "Vložit mapu do jiného webu", + "Short URL": "Krátký odkaz", + "# one hash for main heading": "# jedna mřížka pro hlavní nadpis", + "## two hashes for second heading": "## dvě mřížky pro nadpis druhé úrovně", + "### three hashes for third heading": "### podnadpis třetí úrovně", + "**double star for bold**": "**vše mezi dvěma hvězdičkami je tučně**", + "*simple star for italic*": "*vše mezi hvězdičkami bude kurzívou*", + "--- for an horizontal rule": "--- vytvoří vodorovnou linku", + "All properties are imported.": "Všechny vlastnosti jsou importovány.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Hodnoty oddělené čárkou, tabulátorem, nebo středníkem. předpokládá se SRS WGS84 a jsou importovány jen polohy bodů. Import hledá záhlaví sloupců začínající na \"lat\" nebo \"lon\" a ty považuje za souřadnice (na velikosti písmen nesejde). Ostatní sloupce jsou importovány jako vlastnosti.", + "Custom background": "Vlastní pozadí", + "Help": "Nápověda", + "Image: {{http://image.url.com}}": "Obrázek: {{http://priklad.cz/obrazek.jpg}}", + "Link with text: [[http://example.com|text of the link]]": "Odkaz: [[http://priklad.cz/stranka|text odkazu]]", + "Properties imported:": "Importované vlastnosti:", + "Simple link: [[http://example.com]]": "Jednoduchý odkaz: [[http://priklad.cz]]", + "Supported scheme": "Podporované schéma", + "Supported variables that will be dynamically replaced": "Podporované proměnné, které budou automaticky nahrazeny", + "Text formatting": "Formátování textu", + "attribution": "autorství", + "display name": "zobrazit název", + "max zoom": "maximální přiblížení", + "min zoom": "maximální oddálení", + "Skipping unkown geometry.type: {type}": "Přeskakuji neznámý typ geometrie: {type}", + "Please save the map before": "Prosíme, uložte nejdříve mapu", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Můžete používat vlastnosti objektů jako proměnné, např. v \"http://myserver.org/images/{name}.png\" je {name} nahrazeno hodnotou \"name\" každého objektu.", + "Transform to polygon": "Převést na polygon", + "Transform to lines": "Převést na čáry", + "Choose the data format": "Vyberte formát dat", + "Error in the tilelayer URL": "Chyba v URL vrstvy dlaždic", + "Directions from here": "Navigovat odsud", + "Choose a preset": "Zvolte přednastavení", + "Limit bounds": "Hranice zobrazení", + "Use current bounds": "Použít současné hranice", + "max East": "maximálně na Východ", + "max North": "maximálně na Sever", + "max South": "maximálně na Jih", + "max West": "maximálně na Západ", + "TMS format": "formát TMS", + "Credits": "Autorství", + "Only visible features will be downloaded.": "Budou staženy jen viditelné objekty", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Otevři tuto oblast v editoru OpenStreetMap. Toto vám umožní editovat přímo základní mapová data a přispět tak v tvorbě svobodné mapy pro všechny.", + "Default properties": "Výchozí vlastnosti", + "User interface options": "Nastavení ovládacích prvků mapy", + "Image with custom width (in px): {{http://image.url.com|width}}": "Obrázek s vlastní šířkou (v px): {{http://obrazek.url.com|šířka}}", + "Current view instead of default map view?": "Současný pohled namísto výchozího?", + "Iframe export options": "Možnosti exportu pro iframe", + "Include full screen link?": "Zahrnout odkaz na celou obrazovku?", + "See full screen": "Na celou obrazovku", + "height": "výška", + "width": "šířka", + "Clustered": "Shluková", + "Clustering radius": "Poloměr shlukování", + "GeoRSS (only link)": "GeoRSS (jen odkaz)", + "GeoRSS (title + image)": "GeoRSS (titulek + obrázek)", + "Heatmap": "Teplotní mapa", + "Heatmap radius": "Poloměr teplotní mapy", + "Name and description": "Jméno a popis", + "Override clustering radius (default 80)": "Přepsat shlukovací poloměr (výchozí hodnota 80)", + "Override heatmap radius (default 25)": "Přepsat poloměr teplotní mapy (výchozí hodnota 25)", + "Proxy request": "Požadavky přes proxy", + "Table": "Tabulka", + "To use if remote server doesn't allow cross domain (slower)": "Pro případ že vzdálený server neumožňuje cross domain (pomalejší)", + "Type of layer": "Druh vrstvy", + "Filter…": "Filter ...", + "Heatmap intensity property": "Vlastnost pro intenzitu teplotní mapy", + "Optional intensity property for heatmap": "Volitelná vlastnost pro výpočet intenzity v teplotní mapě", + "Caption": "Popisek", + "Data browser": "Prohlížeč dat", + "Do you want to display a caption bar?": "Chcete zobrazit panel s popiskem?", + "Do you want to display a panel on load?": "Chcete při načtení zobrazit panel?", + "None": "Žádný", + "by": "od", + "Name and description (large)": "Jméno a popis (velké)", + "Empty": "Vyprázdnit", + "Split line": "Rozdělit čáru", + "Clone": "Klonovat", + "Clone of {name}": "Klon objektu {name}", + "Side panel": "Boční panel", + "Powered by Leaflet and Django, glued by uMap project.": "Sestaveno z Leaflet a Django, propojených pomocí projektu uMap.", + "Zoom level for automatic zooms": "Úroveň přiblížení pro automatické přiblížení", + "Do you want to display the «more» control?": "Přejete si zobrazovat ovládací prvek «více»?", + "Auto": "Automatická", + "Default: name": "Výchozí: name (název objektu)", + "Property to use for sorting features": "Vlastnost použitá pro řazení objektů", + "Slideshow": "Prezentace", + "Start slideshow": "Spustit prezentaci", + "Stop slideshow": "Zastavit prezentaci", + "Text color for the cluster label": "Barva textu popisku shluku", + "Zoom to the next": "Skočit na následující", + "Zoom to the previous": "Skočit na předchozí", + "Add a new property": "Přidat novou vlastnost", + "Are you sure you want to delete this property on all the features?": "Určitě chcete smazat tuto vlastnost na všech objektech?", + "Close": "Zavřít", + "Delete this property on all the features": "Smazat tuto vlastnost na všech objektech", + "Edit properties in a table": "Upravit vlastnosti v tabulce", + "Please enter the name of the property": "Zadejte prosím název vlastnosti", + "Please enter the new name of this property": "Zadejte prosím nový název této vlastnosti", + "Rename this property on all the features": "Přejmenovat tuto vlastnost na všech objektech", + "If false, the polygon will act as a part of the underlying map.": "Pokud je vypnuto, polygon se bude chovat jako součást mapového podkladu.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe s vlastní výškou (v px): {{{http://iframe.url.com|výška}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Zobraz vše", + "Dynamic properties": "Dynamické vlastnosti", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Použijte zástupný text s vlastnostmi objektů mezi složenými závorkami, např. {name} — budou dynamicky nahrazeny odpovídajícími hodnotami.", + "Long credits": "Dlouhý text autorství", + "No licence has been set": "Nebyla nastavena licence", + "Popup content template": "Šablona obsahu bubliny", + "Short credits": "Krátký text autorství", + "Will be displayed in the bottom right corner of the map": "Bude zobrazeno s mapou napravo dole", + "Will be visible in the caption of the map": "Bude zobrazeno v popisu mapy", + "Map has been saved!": "Mapa byla uložena", + "Save anyway": "I tak uložit", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ojoj! Někdo jiný mezitím také upravil data. Můžete je uložit bez ohledu na to, ale smažete tak jeho změny.", + "Comma separated list of properties to use when filtering features": "Čárkami oddělený seznam vlastností pro filtrování objektů", + "Keep current visible layers": "Použít aktuální zobrazení vrstev", + "Coordinates": "Souřadnice", + "Latitude": "Sev. šířka", + "Longitude": "Délka", + "Continue line (Ctrl-click)": "Pokračovat v čáře (Ctrl-klik)", + "Start a hole here": "Začít tady díru", + "Click last point to finish shape": "Klikněte na poslední bod pro dokončení tvaru", + "Click to add a marker": "Kliknutím přidáš značku", + "Click to continue drawing": "Kliknutím můžeš pokračovat v kreslení", + "Click to start drawing a line": "Klikněte pro začátek kreslení čáry", + "Click to start drawing a polygon": "Klikněte pro začátek kreslení polygonu", + "Import in a new layer": "Importovat do nové vrstvy", + "Layer": "Vrstva", + "Please choose a format": "Zvolte formát", + "Imports all umap data, including layers and settings.": "Importuje všechy data umapy, včetně vrstev a nastavení", + "Invalid umap data": "Neplatná data umapy", + "Invalid umap data in {filename}": "Neplatná data umapy v souboru {filename}", + "Add a line to the current multi": "Přidat čáru k současnému multi", + "Add a polygon to the current multi": "Přidat polygon k současnému multi", + "Click to edit": "Klikněte pro úpravy", + "Continue line": "Pokračovat v čáře", + "Delete this shape": "Smazat tento tvar", + "Make main shape": "Učinit hlavním tvarem", + "Merge lines": "Spojit čáry", + "Remove shape from the multi": "Odebrat tvar z multi", + "Transfer shape to edited feature": "Přenést tvar do editovaného objektu", + "next": "další", + "previous": "předchozí", + "Measure distances": "Měřit vzdálenost", + "NM": "NM", + "kilometers": "kilometrů", + "km": "km", + "mi": "mi", + "miles": "mil", + "nautical miles": "námořních mil", + "{area} acres": "{area} akrů", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} mil", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Opravdu si přejete obnovit tuto verzi?", + "Extract shape to separate feature": "Vyjmout tvar do samostatného objektu", + "Layer properties": "Vlastnosti vrstvy", + "Restore this version": "Obnovit tuto verzi", + "Versions": "Verze", + "You have unsaved changes.": "Máte neuložené změny.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Čárkami oddělený seznam čísel, který popisuje vzorek přerušované čáry. Např. «5, 10, 15».", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Výchozí přiblížení", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Smazat tento bod (Alt-klik)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Tvar ikony", + "Icon symbol": "Symbol ikony", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Platný název v CSS (např.: Red, Blue nebo #123456)", + "No results": "Žádné výsledky", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/da.js b/umap/static/umap/locale/da.js new file mode 100644 index 00000000..21a5e9bd --- /dev/null +++ b/umap/static/umap/locale/da.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Om", + "Action not allowed :(": "Denne funktion er ikke tilladt :(", + "Add a layer": "Tilføj et lag", + "Add symbol": "Tilføj symbol", + "Advanced actions": "Avanceret funktioner", + "Advanced properties": "Avanceret indstillinger", + "Allow scroll wheel zoom?": "Tillad scrool mus zoom?", + "An error occured": "Der opstod en fejl", + "Are you sure you want to cancel your changes?": "Er du sikker på du vil fortryde dine ændringer?", + "Are you sure you want to clone this map and all its datalayers?": "Er du sikker på du vil klone dette kort og alle geodatalagene?", + "Are you sure you want to delete the feature?": "Er du sikker på at du vil slette dette objekt?", + "Are you sure you want to delete this map?": "Er du sikker på at du vil slette dette kort?", + "Ball": "Kugle", + "Bring feature to center": "Centrerer objekterne", + "Browse data": "Browse geodata", + "Cancel": "Fortryd", + "Cancel edits": "Fortryd redigeringer", + "Center map on your location": "Centrer kort på din placering", + "Change map background": "Skift kortbaggrund", + "Change symbol": "Skift symbol", + "Change tilelayers": "Skift kortlag", + "Choose the format of the data to import": "Vælg format af geodata der skal importeres", + "Choose the layer of the feature": "Vælg lag for objektet", + "Choose the layer to import in": "Vælg lag der skal importeres", + "Circle": "Cirkel", + "Clone this map": "Klon dette kort", + "Default": "Standard", + "Delete": "Slet", + "Delete this feature": "Slet dette objekt", + "Disable editing": "Deaktiver redigering", + "Display on load": "Vis ved indlæsning", + "Do you want to display a minimap?": "Vil du vise et miniaturekort?", + "Do you want to display popup footer?": "Vil du vise popup noten?", + "Do you want to display the scale control?": "Vil du vise skala kontrolpanelet?", + "Download data": "Download geodata", + "Draw a line": "Tegn en linje", + "Draw a marker": "Tegn en markør", + "Draw a polygon": "Tegn en polygon", + "Draw a polyline": "Tegn en polygonlinje", + "Drop": "Drop", + "Dynamic": "Dynamisk", + "Edit": "Redigere", + "Edit feature's layer": "Ret objekt lag", + "Edit map properties": "Ret kortindstillinger", + "Edit map settings": "Kortredigerings indstillinger", + "Edit this feature": "Ret dette objekt", + "Embed and share this map": "Indlejre og del dette kort", + "Enable editing": "Aktiver redigering", + "Format": "Format", + "From zoom": "Fra zoom", + "Go to «{feature}»": "Gå til «{feature}»", + "Hide controls": "Skjul kontrolpanel", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Hvor meget linjen skal forenkles på hvert zoom niveau. (Mere = hurtigere og lettere udseende, mindre = mere præcist)", + "Import": "Import", + "Import data": "Importer geodata", + "Inherit": "Nedarve", + "Licence": "Licens", + "Map background credits": "Baggrundskort kreditering", + "Map user content has been published under licence": "Kortindholdet er udgivet under licensen", + "More controls": "Vis flere kontrolpaneler", + "Optional. Same as color if not set.": "Valgfrit. Uden ændring samme farve. ", + "Optionnal.": "Valgfrit.", + "Paste here your data": "Indsæt dine geodata her", + "Please be sure the licence is compliant with your use.": "Vær sikker på at licensen er kompatibel med din brug.", + "Problem in the response": "Problem med responsen", + "Problem in the response format": "Der er et problem med det kaldte format", + "Provide an URL here": "Indsæt en URL her", + "Remote data": "Fjernudbudt geodata", + "Save": "Gem", + "Save current edits": "Gem nuværende rettelser", + "Save this center and zoom": "Gem med dette center og zoom", + "Show/hide layer": "Vis/skjul lag", + "Start editing": "Start redigering", + "Stop editing": "Stop redigering", + "The zoom and center have been setted.": "Zoom og center er blevet justeret.", + "To zoom": "For at zoome", + "Untitled layer": "Unavngivet lag", + "Untitled map": "Unavngivet kort", + "Update permissions and editors": "Opdaterer indstillinger og redaktører", + "Url": "URL", + "User content credits": "Brugerindholds kredit", + "Where do we go from here?": "Hvor skal vi gå til fra her?", + "Zoom in": "Zoom ind", + "Zoom out": "Zoom ud", + "Zoom to layer extent": "Zoom hen til lag indhold", + "Zoom to this feature": "Zoom ind til dette objekt", + "color": "farver", + "dash array": "stiplet kasse", + "description": "beskrivelse", + "fill": "fyld", + "fill color": "udfyldningsfarve", + "fill opacity": "Fyldnings opacitet", + "inherit": "nedarve", + "licence": "licens", + "name": "Navn", + "no": "nej", + "opacity": "opacitet", + "stroke": "stroke i typografi", + "weight": "vægtning", + "yes": "ja", + "Editing": "Redigere", + "Embed the map": "Indlejring af kortet", + "Short URL": "Kort URL", + "# one hash for main heading": "# et hashtag for hovedoverskrift", + "## two hashes for second heading": "## to hashtag for anden overskrift", + "### three hashes for third heading": "### tre hashtag for tredje overskriftsniveau", + "**double star for bold**": "**dobbelt stjerne for fed skrift**", + "*simple star for italic*": "*enkelt stjerne for kursiv*", + "--- for an horizontal rule": "--- for vandret regel", + "All properties are imported.": "Alle objekter er blevet importeret.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Komma, tabulering eller semikolon adskiller værdier. SRS WGS84 er standard. Kun punkt geometri er importeret. Importen vil kigge efter kolonner der indeholder varianter af «lat» eller «lon» i begyndelsen af overskriften. Disse er store/små ufølsomme. Alle andre kolonner vil blive importeret som objekter.", + "Custom background": "Tilpas baggrund", + "Help": "Hjælp", + "Image: {{http://image.url.com}}": "Billede: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link med tekst: [[http://example.com|tekst for linket her]]", + "Properties imported:": "Objekter importeret:", + "Simple link: [[http://example.com]]": "Simpelt link: [[http://example.com]]", + "Supported scheme": "Understøttet skema", + "Supported variables that will be dynamically replaced": "Understøttede variabler som vil blive dynamisk erstattet", + "Text formatting": "Tekstformatering", + "attribution": "navngivelse", + "display name": "visningsnavn", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Spring ukendt geometry.type: {type} over", + "Please save the map before": "Gem kortet først før du går videre", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Du kan bruge objekt egenskaberne som variabler: fx med \"http://myserver.org/images/{name}.png\", og {name} variblen vil blive erstattet med navnet for hver markør.", + "Transform to polygon": "Transformere til polygon", + "Transform to lines": "Transformere til linjer", + "Choose the data format": "Vælg geodata format", + "Error in the tilelayer URL": "Fejl i tile-lags URLen", + "Directions from here": "Kørselsvejledning fra her", + "Choose a preset": "Vælg en forudindstillet indstilling", + "Limit bounds": "Geografisk afgræsning", + "Use current bounds": "Brug nuværende grænser", + "max East": "max Øst", + "max North": "max Nord", + "max South": "max Syd", + "max West": "max Vest", + "TMS format": "TMS format", + "Credits": "Kreditering", + "Only visible features will be downloaded.": "Kun synlige objekter vil blive downloadet.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Åbn dette kort i en korteditor for at gøre geodata endnu bedre i OpenStreetMap", + "Default properties": "Standard indstillinger", + "User interface options": "Brugergrænseflade indstillinger", + "Image with custom width (in px): {{http://image.url.com|width}}": "Billede med bredde (i px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Nuværende kortudsnit i stedet for standard kortudsnit?", + "Iframe export options": "Iframe eksportmuligheder", + "Include full screen link?": "Inkluderer fuldskærm link?", + "See full screen": "Se i fuld skærmstørrelse", + "height": "højde", + "width": "bredde", + "Clustered": "Klynge", + "Clustering radius": "Klynge radius", + "GeoRSS (only link)": "GeoRSS (kun link)", + "GeoRSS (title + image)": "GeoRSS (titel + billede)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Navn og beskrivelse", + "Override clustering radius (default 80)": "Overskriv klynge radius (standard 80)", + "Override heatmap radius (default 25)": "Overskriv heatmap radius (standard 25)", + "Proxy request": "Proxy forespørgsel", + "Table": "Tabel", + "To use if remote server doesn't allow cross domain (slower)": "Brug denne hvis remote server ikke tillader krydsdomæne (sløvere)", + "Type of layer": "Type af lag", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensitet egenskaber", + "Optional intensity property for heatmap": "Valgfrie intensitets egenskaber for heatmap", + "Caption": "Billedtekst", + "Data browser": "Geodata browser", + "Do you want to display a caption bar?": "Vil du vise en billedtekst?", + "Do you want to display a panel on load?": "Vil du vise et panel ved indlæsning?", + "None": "Ingen", + "by": "af", + "Name and description (large)": "Navn og beskrivelse (meget tekst)", + "Empty": "Tomt", + "Split line": "Spilt linjen op", + "Clone": "Klone", + "Clone of {name}": "Klone af {name}", + "Side panel": "Sidepanel", + "Powered by Leaflet and Django, glued by uMap project.": "Håndteret af Leaflet og Django, flettet ind i uMap projektet.", + "Zoom level for automatic zooms": "Zoomniveau for automatisk zoomniveauer", + "Do you want to display the «more» control?": "Vil du vise mere af kontrolpanel?", + "Auto": "Auto", + "Default: name": "Standardnavn:", + "Property to use for sorting features": "Egenskab til brug for at sortere objekter\n", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Tekstfarve for klynge label", + "Zoom to the next": "Zoom hen til næste", + "Zoom to the previous": "Zoom hen til forrige", + "Add a new property": "Tilføj en ny egenskab", + "Are you sure you want to delete this property on all the features?": "Er du sikker på du vil slette denne egenskab for alle objekter?", + "Close": "Luk", + "Delete this property on all the features": "Slet denne egenskab for alle objekter", + "Edit properties in a table": "Ret egenskaberne i en tabel", + "Please enter the name of the property": "Vær venlig at indtaste navnet for egenskaben", + "Please enter the new name of this property": "Vær venlig at indtaste et nyt navn for denne egenskab", + "Rename this property on all the features": "Omdøb denne egenskab for alle objekter", + "If false, the polygon will act as a part of the underlying map.": "Hvis falsk så vil polygonen opfører sig som en del af det underliggende kort.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe med brugerdefineret højde (i px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Se alle", + "Dynamic properties": "Dynamiske egenskaber", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Brug pladsholdere med objekt egenskaberne mellem tuborgklammer fx {navn} så vil de dynamatisk blive erstattet med de tilhørende værdier. ", + "Long credits": "Lang kreditering", + "No licence has been set": "Ingen licens angivet", + "Popup content template": "Popul indholdsskabelon", + "Short credits": "Kort kreditering", + "Will be displayed in the bottom right corner of the map": "Vil blive vist nede i højre hjørne af kortet", + "Will be visible in the caption of the map": "Vil blive synlig i tekstfeltet på kortet", + "Map has been saved!": "Kortet er blevet gemt!", + "Save anyway": "Gem alligevel", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Oops! Det ser ud til at nogen har rettet i data. Du kan godt gemme alligevel, men dette vil så overskrive de ændringer de andre har lavet.", + "Comma separated list of properties to use when filtering features": "Kommasepareret list af alle egenskaberne til brug ved filteret objekter.", + "Keep current visible layers": "Behold nuværende synlige lag", + "Coordinates": "Koordinater", + "Latitude": "Længdegrader", + "Longitude": "Breddegrader", + "Continue line (Ctrl-click)": "Fortsæt linje (Kontrol-klik)", + "Start a hole here": "Start et hul her", + "Click last point to finish shape": "Klik på det det sidste punkt for at færdigegøre", + "Click to add a marker": "Klik for at tilføje en markør", + "Click to continue drawing": "Klik for at fortsætte indtegning", + "Click to start drawing a line": "Klik for at starte med at indtegne en linje", + "Click to start drawing a polygon": "Klik for at starte indtegning af polygon", + "Import in a new layer": "Importerer i et nyt lag", + "Layer": "Lag", + "Please choose a format": "Vælg venligst et format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Mål afstand", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("da", locale); +L.setLocale("da"); \ No newline at end of file diff --git a/umap/static/umap/locale/da.json b/umap/static/umap/locale/da.json new file mode 100644 index 00000000..1c66c653 --- /dev/null +++ b/umap/static/umap/locale/da.json @@ -0,0 +1,350 @@ +{ + "About": "Om", + "Action not allowed :(": "Denne funktion er ikke tilladt :(", + "Add a layer": "Tilføj et lag", + "Add symbol": "Tilføj symbol", + "Advanced actions": "Avanceret funktioner", + "Advanced properties": "Avanceret indstillinger", + "Allow scroll wheel zoom?": "Tillad scrool mus zoom?", + "An error occured": "Der opstod en fejl", + "Are you sure you want to cancel your changes?": "Er du sikker på du vil fortryde dine ændringer?", + "Are you sure you want to clone this map and all its datalayers?": "Er du sikker på du vil klone dette kort og alle geodatalagene?", + "Are you sure you want to delete the feature?": "Er du sikker på at du vil slette dette objekt?", + "Are you sure you want to delete this map?": "Er du sikker på at du vil slette dette kort?", + "Ball": "Kugle", + "Bring feature to center": "Centrerer objekterne", + "Browse data": "Browse geodata", + "Cancel": "Fortryd", + "Cancel edits": "Fortryd redigeringer", + "Center map on your location": "Centrer kort på din placering", + "Change map background": "Skift kortbaggrund", + "Change symbol": "Skift symbol", + "Change tilelayers": "Skift kortlag", + "Choose the format of the data to import": "Vælg format af geodata der skal importeres", + "Choose the layer of the feature": "Vælg lag for objektet", + "Choose the layer to import in": "Vælg lag der skal importeres", + "Circle": "Cirkel", + "Clone this map": "Klon dette kort", + "Default": "Standard", + "Delete": "Slet", + "Delete this feature": "Slet dette objekt", + "Disable editing": "Deaktiver redigering", + "Display on load": "Vis ved indlæsning", + "Do you want to display a minimap?": "Vil du vise et miniaturekort?", + "Do you want to display popup footer?": "Vil du vise popup noten?", + "Do you want to display the scale control?": "Vil du vise skala kontrolpanelet?", + "Download data": "Download geodata", + "Draw a line": "Tegn en linje", + "Draw a marker": "Tegn en markør", + "Draw a polygon": "Tegn en polygon", + "Draw a polyline": "Tegn en polygonlinje", + "Drop": "Drop", + "Dynamic": "Dynamisk", + "Edit": "Redigere", + "Edit feature's layer": "Ret objekt lag", + "Edit map properties": "Ret kortindstillinger", + "Edit map settings": "Kortredigerings indstillinger", + "Edit this feature": "Ret dette objekt", + "Embed and share this map": "Indlejre og del dette kort", + "Enable editing": "Aktiver redigering", + "Format": "Format", + "From zoom": "Fra zoom", + "Go to «{feature}»": "Gå til «{feature}»", + "Hide controls": "Skjul kontrolpanel", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Hvor meget linjen skal forenkles på hvert zoom niveau. (Mere = hurtigere og lettere udseende, mindre = mere præcist)", + "Import": "Import", + "Import data": "Importer geodata", + "Inherit": "Nedarve", + "Licence": "Licens", + "Map background credits": "Baggrundskort kreditering", + "Map user content has been published under licence": "Kortindholdet er udgivet under licensen", + "More controls": "Vis flere kontrolpaneler", + "Optional. Same as color if not set.": "Valgfrit. Uden ændring samme farve. ", + "Optionnal.": "Valgfrit.", + "Paste here your data": "Indsæt dine geodata her", + "Please be sure the licence is compliant with your use.": "Vær sikker på at licensen er kompatibel med din brug.", + "Problem in the response": "Problem med responsen", + "Problem in the response format": "Der er et problem med det kaldte format", + "Provide an URL here": "Indsæt en URL her", + "Remote data": "Fjernudbudt geodata", + "Save": "Gem", + "Save current edits": "Gem nuværende rettelser", + "Save this center and zoom": "Gem med dette center og zoom", + "Show/hide layer": "Vis/skjul lag", + "Start editing": "Start redigering", + "Stop editing": "Stop redigering", + "The zoom and center have been setted.": "Zoom og center er blevet justeret.", + "To zoom": "For at zoome", + "Untitled layer": "Unavngivet lag", + "Untitled map": "Unavngivet kort", + "Update permissions and editors": "Opdaterer indstillinger og redaktører", + "Url": "URL", + "User content credits": "Brugerindholds kredit", + "Where do we go from here?": "Hvor skal vi gå til fra her?", + "Zoom in": "Zoom ind", + "Zoom out": "Zoom ud", + "Zoom to layer extent": "Zoom hen til lag indhold", + "Zoom to this feature": "Zoom ind til dette objekt", + "color": "farver", + "dash array": "stiplet kasse", + "description": "beskrivelse", + "fill": "fyld", + "fill color": "udfyldningsfarve", + "fill opacity": "Fyldnings opacitet", + "inherit": "nedarve", + "licence": "licens", + "name": "Navn", + "no": "nej", + "opacity": "opacitet", + "stroke": "stroke i typografi", + "weight": "vægtning", + "yes": "ja", + "Editing": "Redigere", + "Embed the map": "Indlejring af kortet", + "Short URL": "Kort URL", + "# one hash for main heading": "# et hashtag for hovedoverskrift", + "## two hashes for second heading": "## to hashtag for anden overskrift", + "### three hashes for third heading": "### tre hashtag for tredje overskriftsniveau", + "**double star for bold**": "**dobbelt stjerne for fed skrift**", + "*simple star for italic*": "*enkelt stjerne for kursiv*", + "--- for an horizontal rule": "--- for vandret regel", + "All properties are imported.": "Alle objekter er blevet importeret.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Komma, tabulering eller semikolon adskiller værdier. SRS WGS84 er standard. Kun punkt geometri er importeret. Importen vil kigge efter kolonner der indeholder varianter af «lat» eller «lon» i begyndelsen af overskriften. Disse er store/små ufølsomme. Alle andre kolonner vil blive importeret som objekter.", + "Custom background": "Tilpas baggrund", + "Help": "Hjælp", + "Image: {{http://image.url.com}}": "Billede: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link med tekst: [[http://example.com|tekst for linket her]]", + "Properties imported:": "Objekter importeret:", + "Simple link: [[http://example.com]]": "Simpelt link: [[http://example.com]]", + "Supported scheme": "Understøttet skema", + "Supported variables that will be dynamically replaced": "Understøttede variabler som vil blive dynamisk erstattet", + "Text formatting": "Tekstformatering", + "attribution": "navngivelse", + "display name": "visningsnavn", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Spring ukendt geometry.type: {type} over", + "Please save the map before": "Gem kortet først før du går videre", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Du kan bruge objekt egenskaberne som variabler: fx med \"http://myserver.org/images/{name}.png\", og {name} variblen vil blive erstattet med navnet for hver markør.", + "Transform to polygon": "Transformere til polygon", + "Transform to lines": "Transformere til linjer", + "Choose the data format": "Vælg geodata format", + "Error in the tilelayer URL": "Fejl i tile-lags URLen", + "Directions from here": "Kørselsvejledning fra her", + "Choose a preset": "Vælg en forudindstillet indstilling", + "Limit bounds": "Geografisk afgræsning", + "Use current bounds": "Brug nuværende grænser", + "max East": "max Øst", + "max North": "max Nord", + "max South": "max Syd", + "max West": "max Vest", + "TMS format": "TMS format", + "Credits": "Kreditering", + "Only visible features will be downloaded.": "Kun synlige objekter vil blive downloadet.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Åbn dette kort i en korteditor for at gøre geodata endnu bedre i OpenStreetMap", + "Default properties": "Standard indstillinger", + "User interface options": "Brugergrænseflade indstillinger", + "Image with custom width (in px): {{http://image.url.com|width}}": "Billede med bredde (i px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Nuværende kortudsnit i stedet for standard kortudsnit?", + "Iframe export options": "Iframe eksportmuligheder", + "Include full screen link?": "Inkluderer fuldskærm link?", + "See full screen": "Se i fuld skærmstørrelse", + "height": "højde", + "width": "bredde", + "Clustered": "Klynge", + "Clustering radius": "Klynge radius", + "GeoRSS (only link)": "GeoRSS (kun link)", + "GeoRSS (title + image)": "GeoRSS (titel + billede)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Navn og beskrivelse", + "Override clustering radius (default 80)": "Overskriv klynge radius (standard 80)", + "Override heatmap radius (default 25)": "Overskriv heatmap radius (standard 25)", + "Proxy request": "Proxy forespørgsel", + "Table": "Tabel", + "To use if remote server doesn't allow cross domain (slower)": "Brug denne hvis remote server ikke tillader krydsdomæne (sløvere)", + "Type of layer": "Type af lag", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensitet egenskaber", + "Optional intensity property for heatmap": "Valgfrie intensitets egenskaber for heatmap", + "Caption": "Billedtekst", + "Data browser": "Geodata browser", + "Do you want to display a caption bar?": "Vil du vise en billedtekst?", + "Do you want to display a panel on load?": "Vil du vise et panel ved indlæsning?", + "None": "Ingen", + "by": "af", + "Name and description (large)": "Navn og beskrivelse (meget tekst)", + "Empty": "Tomt", + "Split line": "Spilt linjen op", + "Clone": "Klone", + "Clone of {name}": "Klone af {name}", + "Side panel": "Sidepanel", + "Powered by Leaflet and Django, glued by uMap project.": "Håndteret af Leaflet og Django, flettet ind i uMap projektet.", + "Zoom level for automatic zooms": "Zoomniveau for automatisk zoomniveauer", + "Do you want to display the «more» control?": "Vil du vise mere af kontrolpanel?", + "Auto": "Auto", + "Default: name": "Standardnavn:", + "Property to use for sorting features": "Egenskab til brug for at sortere objekter\n", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Tekstfarve for klynge label", + "Zoom to the next": "Zoom hen til næste", + "Zoom to the previous": "Zoom hen til forrige", + "Add a new property": "Tilføj en ny egenskab", + "Are you sure you want to delete this property on all the features?": "Er du sikker på du vil slette denne egenskab for alle objekter?", + "Close": "Luk", + "Delete this property on all the features": "Slet denne egenskab for alle objekter", + "Edit properties in a table": "Ret egenskaberne i en tabel", + "Please enter the name of the property": "Vær venlig at indtaste navnet for egenskaben", + "Please enter the new name of this property": "Vær venlig at indtaste et nyt navn for denne egenskab", + "Rename this property on all the features": "Omdøb denne egenskab for alle objekter", + "If false, the polygon will act as a part of the underlying map.": "Hvis falsk så vil polygonen opfører sig som en del af det underliggende kort.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe med brugerdefineret højde (i px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Se alle", + "Dynamic properties": "Dynamiske egenskaber", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Brug pladsholdere med objekt egenskaberne mellem tuborgklammer fx {navn} så vil de dynamatisk blive erstattet med de tilhørende værdier. ", + "Long credits": "Lang kreditering", + "No licence has been set": "Ingen licens angivet", + "Popup content template": "Popul indholdsskabelon", + "Short credits": "Kort kreditering", + "Will be displayed in the bottom right corner of the map": "Vil blive vist nede i højre hjørne af kortet", + "Will be visible in the caption of the map": "Vil blive synlig i tekstfeltet på kortet", + "Map has been saved!": "Kortet er blevet gemt!", + "Save anyway": "Gem alligevel", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Oops! Det ser ud til at nogen har rettet i data. Du kan godt gemme alligevel, men dette vil så overskrive de ændringer de andre har lavet.", + "Comma separated list of properties to use when filtering features": "Kommasepareret list af alle egenskaberne til brug ved filteret objekter.", + "Keep current visible layers": "Behold nuværende synlige lag", + "Coordinates": "Koordinater", + "Latitude": "Længdegrader", + "Longitude": "Breddegrader", + "Continue line (Ctrl-click)": "Fortsæt linje (Kontrol-klik)", + "Start a hole here": "Start et hul her", + "Click last point to finish shape": "Klik på det det sidste punkt for at færdigegøre", + "Click to add a marker": "Klik for at tilføje en markør", + "Click to continue drawing": "Klik for at fortsætte indtegning", + "Click to start drawing a line": "Klik for at starte med at indtegne en linje", + "Click to start drawing a polygon": "Klik for at starte indtegning af polygon", + "Import in a new layer": "Importerer i et nyt lag", + "Layer": "Lag", + "Please choose a format": "Vælg venligst et format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Mål afstand", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/de.js b/umap/static/umap/locale/de.js new file mode 100644 index 00000000..61d5c627 --- /dev/null +++ b/umap/static/umap/locale/de.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Über", + "Action not allowed :(": "Aktion nicht erlaubt :(", + "Add a layer": "Ebene hinzufügen", + "Add symbol": "Symbol hinzufügen", + "Advanced actions": "Erweiterte Aktionen", + "Advanced properties": "Erweiterte Eigenschaften", + "Allow scroll wheel zoom?": "Möchtest du Zoomen mit dem Mausrad erlauben?", + "An error occured": "Es ist ein Fehler aufgetreten.", + "Are you sure you want to cancel your changes?": "Willst du deine Änderungen wirklich abbrechen?", + "Are you sure you want to clone this map and all its datalayers?": "Möchtest du die Karte und ihre Datenebenen wirklich duplizieren?", + "Are you sure you want to delete the feature?": "Möchtest du dieses Element wirklich löschen?", + "Are you sure you want to delete this map?": "Willst du diese Karte wirklich löschen?", + "Ball": "Stecknadel", + "Bring feature to center": "Auf Element zentrieren", + "Browse data": "Daten anzeigen", + "Cancel": "Abbrechen", + "Cancel edits": "Bearbeitungen abbrechen", + "Center map on your location": "Die Karte auf deinem Standort ausrichten", + "Change map background": "Hintergrundkarte ändern", + "Change symbol": "Symbol ändern", + "Change tilelayers": "Hintergrundkarte ändern", + "Choose the format of the data to import": "Wähle das Datenformat für den Import", + "Choose the layer of the feature": "Wähle die Ebene für das Element", + "Choose the layer to import in": "Wähle die Ebene, in die importiert werden soll", + "Circle": "Kreis", + "Clone this map": "Dupliziere diese Karte", + "Default": "Standard", + "Delete": "Löschen", + "Delete this feature": "Dieses Element löschen", + "Disable editing": "Bearbeiten deaktivieren", + "Display on load": "Beim Seitenaufruf anzeigen.", + "Do you want to display a minimap?": "Möchtest du eine Übersichtskarte anzeigen?", + "Do you want to display popup footer?": "Möchtest du eine Fußzeile im Popup anzeigen?", + "Do you want to display the scale control?": "Möchtest du die Maßstabsleiste anzeigen?", + "Download data": "Daten herunterladen", + "Draw a line": "Eine Linie zeichnen", + "Draw a marker": "Einen Marker zeichnen", + "Draw a polygon": "Eine Fläche zeichnen", + "Draw a polyline": "Eine Linie zeichnen", + "Drop": "Tropfen", + "Dynamic": "Dynamisch", + "Edit": "Bearbeiten", + "Edit feature's layer": "Elementebene bearbeiten", + "Edit map properties": "Karteneigenschaften bearbeiten", + "Edit map settings": "Karteneinstellungen bearbeiten", + "Edit this feature": "Dieses Element bearbeiten", + "Embed and share this map": "Teile und binde diese Karte ein.", + "Enable editing": "Bearbeiten aktivieren", + "Format": "Format", + "From zoom": "Von Zoomstufe", + "Go to «{feature}»": "Gehe zu „{feature}“", + "Hide controls": "Schaltflächen ausblenden", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Wie stark Linien mit jeder Zoomstufe vereinfacht werden (mehr = bessere Performance und glatteres Aussehen, weniger = präziser)", + "Import": "Importieren", + "Import data": "Daten importieren", + "Inherit": "erben", + "Licence": "Lizenz", + "Map background credits": "Credits der Hintergrundkarte", + "Map user content has been published under licence": "Der Benutzerinhalt wurde veröffentlicht unter der Lizenz", + "More controls": "Mehr Schaltflächen", + "Optional. Same as color if not set.": "Optional. Gleich wie Farbe, falls nicht ausgefüllt.", + "Optionnal.": "Optional", + "Paste here your data": "Füge deine Daten hier ein", + "Please be sure the licence is compliant with your use.": "Stelle bitte sicher, dass die Lizenz mit deiner Verwendung kompatibel ist.", + "Problem in the response": "Fehlerhafte Serverantwort", + "Problem in the response format": "Ungültiges Format der Serverantwort", + "Provide an URL here": "Hier eine URL angeben", + "Remote data": "Ausgelagerte Daten", + "Save": "Speichern", + "Save current edits": "Aktuelle Änderungen speichern", + "Save this center and zoom": "Aktuelle Position und Zoomstufe speichern", + "Show/hide layer": "Ebene Einblenden/Ausblenden", + "Start editing": "Beginne mit der Bearbeitung", + "Stop editing": "Bearbeiten beenden", + "The zoom and center have been setted.": "Zoomstufe und Mittelpunkt wurden gespeichert.", + "To zoom": "Bis Zoomstufe", + "Untitled layer": "unbenannte Ebene", + "Untitled map": "Unbenannte Karte", + "Update permissions and editors": "Berechtigungen und Bearbeiter ändern", + "Url": "URL", + "User content credits": "Credits der Benutzerinhalte", + "Where do we go from here?": "Wie geht es weiter?", + "Zoom in": "Hineinzoomen", + "Zoom out": "Herauszoomen", + "Zoom to layer extent": "Auf Ebenenausdehnung zommen", + "Zoom to this feature": "Auf dieses Element zoomen", + "color": "Farbe", + "dash array": "Linienart", + "description": "Beschreibung", + "fill": "Füllung", + "fill color": "Farbe der Füllung", + "fill opacity": "Deckkraft der Füllung", + "inherit": "erben", + "licence": "Lizenz", + "name": "Name", + "no": "Nein", + "opacity": "Deckkraft", + "stroke": "Umrisslinie", + "weight": "Stärke", + "yes": "Ja", + "Editing": "Bearbeiten", + "Embed the map": "Karte einbinden", + "Short URL": "Kurze URL", + "# one hash for main heading": "# Eine Raute für große Überschrift", + "## two hashes for second heading": "## Zwei Rauten für mittlere Überschrift", + "### three hashes for third heading": "### Drei Rauten für kleine Überschrift", + "**double star for bold**": "**Zwei Sterne für Fett**", + "*simple star for italic*": "*Ein Stern für Kursiv*", + "--- for an horizontal rule": "--- Für eine horizontale Linie", + "All properties are imported.": "Alle Merkmale wurden importiert.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Komma-, tabulator-, oder semikolongetrennte Werte. SRS WGS84 ist impliziert. Nur Punktgeometrien werden importiert. Beim Import wird nach Spaltenüberschriften mit jeder Nennung von „lat“ und „lon“ am Anfang der Überschrift gesucht (ohne Beachtung von Groß-/Kleinschreibung). Alle anderen Spalten werden als Merkmale importiert.", + "Custom background": "Benutzerdefinierter Hintergrund", + "Help": "Hilfe", + "Image: {{http://image.url.com}}": "Bild: {{http://bild.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link mit Text: [[http://beispiel.com|Text für den Link]]", + "Properties imported:": "Importierte Merkmale:", + "Simple link: [[http://example.com]]": "Einfacher Link: [[http://beispiel.com]]", + "Supported scheme": "Unterstütztes Schema", + "Supported variables that will be dynamically replaced": "Unterstützte Variablen, welche dynamisch ersetzt werden", + "Text formatting": "Textformatierung", + "attribution": "Copyright-Hinweis", + "display name": "Name anzeigen", + "max zoom": "höchste Zoomstufe", + "min zoom": "kleinste Zoomstufe", + "Skipping unkown geometry.type: {type}": "Überspringe unbekannten Geometrietyp: {type}", + "Please save the map before": "Bitte zuerst die Karte speichern", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Du kannst variable Elementeigenschaften verwenden: z.B.: bei „http://myserver.org/images/{name}.png“, wird die {name}-Variable ersetzt durch den „name“-Wert des jeweiligen Markers.", + "Transform to polygon": "In Fläche umwandeln", + "Transform to lines": "In Linien umwandeln", + "Choose the data format": "Wähle das Datenformat", + "Error in the tilelayer URL": "Fehler in der Kachelebenen-URL", + "Directions from here": "Route von hier", + "Choose a preset": "Wähle eine Vorlage", + "Limit bounds": "Kartenverschiebung begrenzen", + "Use current bounds": "Nutze aktuelle Kartenansicht", + "max East": "Östliche Begrenzung", + "max North": "Nördliche Begrenzung", + "max South": "Südliche Begrenzung", + "max West": "Westliche Begrenzung", + "TMS format": "TMS-Format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Nur eingeblendete Elemente werden heruntergeladen.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Diesen Kartenauschnitt in einem Karten-Editor öffnen, um genauere Daten für OpenStreetMap bereitzustellen.", + "Default properties": "Standardeigenschaften", + "User interface options": "Einstellungen Benutzeroberfläche", + "Image with custom width (in px): {{http://image.url.com|width}}": "Bild mit benutzerdefinierter Breite (in Pixel): {{http://bild.url.com|Breite}}", + "Current view instead of default map view?": "Aktuelle Kartenansicht anstatt der Standard-Kartenansicht verwenden?", + "Iframe export options": "Iframe Exportoptionen", + "Include full screen link?": "Link für Vollbildanzeige einbeziehen?", + "See full screen": "Vollbildanzeige", + "height": "Höhe", + "width": "Breite", + "Clustered": "Gruppiert", + "Clustering radius": "Gruppierungsradius", + "GeoRSS (only link)": "GeoRSS (nur Link)", + "GeoRSS (title + image)": "GeoRSS (Titel + Bild)", + "Heatmap": "Heatmap", + "Heatmap radius": "Radius der Heatmap", + "Name and description": "Name und Beschreibung", + "Override clustering radius (default 80)": "Gruppierungsradius überschreiben (Standard: 80)", + "Override heatmap radius (default 25)": "Heatmapradius überschreiben (Standard: 25)", + "Proxy request": "Proxyanforderung", + "Table": "Tabelle", + "To use if remote server doesn't allow cross domain (slower)": "Zu nutzen wenn der Zielserver kein Cross-Origin Resource Sharing (CORS) erlaubt (langsamer).", + "Type of layer": "Ebenentyp", + "Filter…": "Elemente filtern...", + "Heatmap intensity property": "Heatmap-Intensität", + "Optional intensity property for heatmap": "Optionale Intensitätseigenschaft für die Heatmap", + "Caption": "Überschrift", + "Data browser": "Datenbrowser", + "Do you want to display a caption bar?": "Mächtest du eine Überschrift (Fußzeile) anzeigen?", + "Do you want to display a panel on load?": "Möchtest du beim Seitenaufruf eine Seitenleiste anzeigen?", + "None": "Keine", + "by": "von", + "Name and description (large)": "Name und Beschreibung (groß)", + "Empty": "Leeren", + "Split line": "Linie teilen", + "Clone": "Duplizieren", + "Clone of {name}": "Duplikat von {name}", + "Side panel": "Seitenleiste", + "Powered by Leaflet and Django, glued by uMap project.": "Bereitgestellt von Leaflet und Django, zusammengebastelt vom uMap Projekt.", + "Zoom level for automatic zooms": "Zommstufe für automatischen Zoom", + "Do you want to display the «more» control?": "Möchtest du die „Mehr“-Schaltfläche anzeigen?", + "Auto": "Automatisch", + "Default: name": "Standard: Name", + "Property to use for sorting features": "Merkmal, welches für Sortierfunktionen verwendet werden soll", + "Slideshow": "Diashow", + "Start slideshow": "Diashow starten", + "Stop slideshow": "Diashow beenden", + "Text color for the cluster label": "Textfarbe für die Gruppierungsbezeichnung", + "Zoom to the next": "Zum nächsten zoomen", + "Zoom to the previous": "Zum vorherigen zoomen", + "Add a new property": "Ein Merkmal hinzufügen", + "Are you sure you want to delete this property on all the features?": "Bist du sicher, dass du dieses Merkmal bei allen Elementen löschen willst?", + "Close": "Schließen", + "Delete this property on all the features": "Dieses Merkmal bei allen Elementen löschen", + "Edit properties in a table": "Merkmale in einer Tabelle bearbeiten", + "Please enter the name of the property": "Bitte gib den Namen des Merkmals ein", + "Please enter the new name of this property": "Bitte gib den neuen Namen des Merkmals ein", + "Rename this property on all the features": "Dieses Merkmal bei allen Elementen umbenennen", + "If false, the polygon will act as a part of the underlying map.": "Wenn auf Nein gesetzt, dann verhält sich die Fläche als Teil der hinterlegten Karte.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe mit benutzerdefinierter Höhe (in Pixel): {{{http://iframe.url.com|Höhe}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Alle anzeigen", + "Dynamic properties": "Dynamische Merkmale", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Nutze Platzhalter mit Elementmerkmalen innerhalb der Klammern, z.B. {name}, sie werden dynamisch durch die entsprechenden Werte ersetzt.", + "Long credits": "Lange Credits", + "No licence has been set": "Keine Lizenz ausgewählt", + "Popup content template": "Popup Vorlage", + "Short credits": "Kurze Credits", + "Will be displayed in the bottom right corner of the map": "Wird in rechten unteren Ecke der Karte angezeigt", + "Will be visible in the caption of the map": "Wird in der Überschrift der Karte angezeigt", + "Map has been saved!": "Karte gespeichert!", + "Save anyway": "Trotzdem speichern", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Hoppla! Jemand anders hat die Daten bearbeitet. Du kannst trotzdem speichern, aber dies wird Änderungen, welche andere Personen vorgenommen haben, löschen.", + "Comma separated list of properties to use when filtering features": "Kommagetrennte Liste der Merkmale, welche beim Filtern von Elementen verwendet werden sollen", + "Keep current visible layers": "Aktuell eingeblendete Ebenen übernehmen?", + "Coordinates": "Koordinaten", + "Latitude": "Geogr. Breite", + "Longitude": "Geogr. Länge", + "Continue line (Ctrl-click)": "Linie weiterzeichnen (Strg+klick)", + "Start a hole here": "Hier ein Loch beginnen", + "Click last point to finish shape": "Kllicke den letzten Punkt an, um die Form abzuschließen", + "Click to add a marker": "Klicke, um einen Marker hinzuzufügen", + "Click to continue drawing": "Klicke, um weiter zu zeichnen", + "Click to start drawing a line": "Klicke, um eine Linie zu zeichnen", + "Click to start drawing a polygon": "Klicke, um eine Fläche zu zeichnen", + "Import in a new layer": "In eine neue Ebene importieren", + "Layer": "Ebene", + "Please choose a format": "Bitte wähle ein Format", + "Imports all umap data, including layers and settings.": "Importiert alle uMap-Daten inklusive Ebenen und Einstellungen", + "Invalid umap data": "Ungütige uMap-Daten", + "Invalid umap data in {filename}": "Ungültige uMap-Daten in {filename}", + "Add a line to the current multi": "Linie zur vorhandene Gruppe hinzufügen", + "Add a polygon to the current multi": "Fläche zur vorhandene Gruppe hinzufügen", + "Click to edit": "Zum Bearbeiten klicken", + "Continue line": "Linie fortführen", + "Delete this shape": "Diese Form löchen", + "Make main shape": "Hauptform erstellen", + "Merge lines": "Linien zusammenführen", + "Remove shape from the multi": "Form aus der Gruppe löschen", + "Transfer shape to edited feature": "Überführe Form zu Element bearbeiten", + "next": "weiter", + "previous": "zurück", + "Measure distances": "Entfernungen messen", + "NM": "sm", + "kilometers": "Kilometer", + "km": "km", + "mi": "mi", + "miles": "Meilen", + "nautical miles": "Seemeilen", + "{area} acres": "{area} Acre", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} sm", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} Meilen", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Bist du sicher, dass du diese Version wiederherstellen willst?", + "Extract shape to separate feature": "Extrahiere Form zu getrennten Element", + "Layer properties": "Ebeneneigenschaften", + "Restore this version": "Diese Version wiederherstellen", + "Versions": "Versionen", + "You have unsaved changes.": "Es gibt ungespeicherte Änderungen.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Eine kommagetrente Zahlenfolge, die die Linienart (Strichmuster) der Kontur definiert, z.B.: \"5, 10, 15\".", + "Advanced transition": "Erweiterter Übergang", + "Allow interactions": "Interaktionen erlauben", + "Autostart when map is loaded": "Automatischer Start, wenn Karte geladen ist", + "Default interaction options": "Standard-Interaktionsoptionen", + "Default shape properties": "Standard-Formeigenschaften", + "Default zoom level": "Standard-Zoomstufe", + "Define link to open in a new window on polygon click.": "Definiere einen externen Link, der sich beim Klick auf die Fläche in einem neuen Fenster öffnet.", + "Delete this vertex (Alt-click)": "Diesen Eckpunkt löschen (Alt-Klick)", + "Display the control to open OpenStreetMap editor": "Den Button zum OpenStreetMap editor anzeigen", + "Display the data layers control": "Datenebenensteuerung anzeigen", + "Display the embed control": "Eingebettete Steuerung anzeigen", + "Display the fullscreen control": "Vollbildsteuerung anzeigen", + "Display the locate control": "Den Ortungsbutton anzeigen.", + "Display the measure control": "Messsteuerung anzeigen", + "Display the search control": "Suchsteuerung anzeigen", + "Display the tile layers control": "Kachelebenensteuerung anzeigen", + "Display the zoom control": "Zoomsteuerung anzeigen", + "Exit Fullscreen": "Vollbild beenden", + "Fetch data each time map view changes.": "Daten jedes Mal abrufen, wenn sich die Kartenansicht ändert.", + "Filter keys": "Schlüssel filtern", + "Icon shape": "Bildzeichenform", + "Icon symbol": "Bildzeichensymbol", + "Interaction options": "Interaktionsoptionen", + "Label key": "Anzeigeschlüssel", + "Link to…": "Verlinke zu...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Muss ein gültiger CSS-Wert sein (z.B.: DarkBlue oder #123456)", + "No results": "Keine Ergebnisse", + "Popup style": "Popupstil", + "Replace layer content": "Ebeneninhalt ersetzen", + "Save this location as new feature": "Diesen Ort als neue Funktion speichern", + "Search location": "Ort suchen", + "Set URL": "URL festlegen", + "Shape properties": "Formeigenschaften", + "Simplify": "Vereinfachen", + "Sort key": "Sortierschlüssel", + "The name of the property to use as feature label (ex.: \"nom\")": "Den Name des Merkmals als Elementbezeichnung verwenden (z.B.: \"Name\")", + "Toggle edit mode (shift-click)": "Bearbeitungsmodus umschalten (Umschalt-Klick)", + "View Fullscreen": "Vollbild ansehen", + "Whether to display or not polygons paths.": "Umrisslinie von Flächen anzeigen oder nicht anzeigen.", + "Whether to fill polygons with color.": "Ob Flächen mit Farbe gefüllt werden.", + "Zoom to this place": "Auf diesen Ort zoomen", + "always": "immer", + "clear": "leeren", + "define": "festlegen", + "hidden": "ausgeblendet", + "never": "nie", + "Automatic": "Automatisch", + "Clone this feature": "Diese Funktion klonen", + "Display label": "Beschriftung anzeigen", + "Drag to reorder": "Ziehen zum Neuanordnen", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe mit benutzerdefinierter Höhe und Breite (in Pixel): {{{http://iframe.url.com|Höhe*Breite}}}", + "Labels are clickable": "Beschriftungen sind klickbar", + "Label direction": "Beschriftungsrichtung", + "Manage layers": "Ebenen verwalten", + "On the bottom": "An der Unterseite", + "On the left": "An der linken Seite", + "On the right": "An der rechten Seite", + "On the top": "An der Oberseite", + "Only display label on mouse hover": "Beschriftung nur beim Überfahren mit der Maus anzeigen", + "Open link in…": "Link öffnen in…", + "Unable to detect format of file {filename}": "Format der Datei {filename} kann nicht erkannt werden", + "collapsed": "eingeklappt", + "expanded": "ausgeklappt", + "iframe": "iframe", + "new window": "neues Fenster", + "parent window": "übergeordnetes Fenster", + "{count} errors during import: {message}": "{count} Fehler während dem Import: {message}", + "Are you sure you want to delete this layer?": "Bist du sicher, dass du diese Ebene löschen willst?", + "Delete layer": "Ebene löschen", + "Error while fetching {url}": "Fehler beim Abrufen von {url}", + "Home": "Startseite", + "Delete all layers": "Alle Ebenen löschen", + "Full map data": "Vollständige Kartendaten", + "Smart transitions": "Weiche Übergänge", + "Activate slideshow mode": "Diashowmodus aktivieren", + "Data is browsable": "Daten sind durchsuchbar", + "Delay between two transitions when in play mode": "Verzögerung zwischen zwei Übergängen im Abspielmodus", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Setze es auf Nein, um diese Ebene in der Slideshow, im Datenbrowser, in der Popup-Navigation,... auszublenden.", + "{delay} seconds": "{delay} Sekunden", + "Display measure": "Display measure" +}; +L.registerLocale("de", locale); +L.setLocale("de"); \ No newline at end of file diff --git a/umap/static/umap/locale/de.json b/umap/static/umap/locale/de.json new file mode 100644 index 00000000..e15b33c0 --- /dev/null +++ b/umap/static/umap/locale/de.json @@ -0,0 +1,350 @@ +{ + "About": "Über", + "Action not allowed :(": "Aktion nicht erlaubt :(", + "Add a layer": "Ebene hinzufügen", + "Add symbol": "Symbol hinzufügen", + "Advanced actions": "Erweiterte Aktionen", + "Advanced properties": "Erweiterte Eigenschaften", + "Allow scroll wheel zoom?": "Möchtest du Zoomen mit dem Mausrad erlauben?", + "An error occured": "Es ist ein Fehler aufgetreten.", + "Are you sure you want to cancel your changes?": "Willst du deine Änderungen wirklich abbrechen?", + "Are you sure you want to clone this map and all its datalayers?": "Möchtest du die Karte und ihre Datenebenen wirklich duplizieren?", + "Are you sure you want to delete the feature?": "Möchtest du dieses Element wirklich löschen?", + "Are you sure you want to delete this map?": "Willst du diese Karte wirklich löschen?", + "Ball": "Stecknadel", + "Bring feature to center": "Auf Element zentrieren", + "Browse data": "Daten anzeigen", + "Cancel": "Abbrechen", + "Cancel edits": "Bearbeitungen abbrechen", + "Center map on your location": "Die Karte auf deinem Standort ausrichten", + "Change map background": "Hintergrundkarte ändern", + "Change symbol": "Symbol ändern", + "Change tilelayers": "Hintergrundkarte ändern", + "Choose the format of the data to import": "Wähle das Datenformat für den Import", + "Choose the layer of the feature": "Wähle die Ebene für das Element", + "Choose the layer to import in": "Wähle die Ebene, in die importiert werden soll", + "Circle": "Kreis", + "Clone this map": "Dupliziere diese Karte", + "Default": "Standard", + "Delete": "Löschen", + "Delete this feature": "Dieses Element löschen", + "Disable editing": "Bearbeiten deaktivieren", + "Display on load": "Beim Seitenaufruf anzeigen.", + "Do you want to display a minimap?": "Möchtest du eine Übersichtskarte anzeigen?", + "Do you want to display popup footer?": "Möchtest du eine Fußzeile im Popup anzeigen?", + "Do you want to display the scale control?": "Möchtest du die Maßstabsleiste anzeigen?", + "Download data": "Daten herunterladen", + "Draw a line": "Eine Linie zeichnen", + "Draw a marker": "Einen Marker zeichnen", + "Draw a polygon": "Eine Fläche zeichnen", + "Draw a polyline": "Eine Linie zeichnen", + "Drop": "Tropfen", + "Dynamic": "Dynamisch", + "Edit": "Bearbeiten", + "Edit feature's layer": "Elementebene bearbeiten", + "Edit map properties": "Karteneigenschaften bearbeiten", + "Edit map settings": "Karteneinstellungen bearbeiten", + "Edit this feature": "Dieses Element bearbeiten", + "Embed and share this map": "Teile und binde diese Karte ein.", + "Enable editing": "Bearbeiten aktivieren", + "Format": "Format", + "From zoom": "Von Zoomstufe", + "Go to «{feature}»": "Gehe zu „{feature}“", + "Hide controls": "Schaltflächen ausblenden", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Wie stark Linien mit jeder Zoomstufe vereinfacht werden (mehr = bessere Performance und glatteres Aussehen, weniger = präziser)", + "Import": "Importieren", + "Import data": "Daten importieren", + "Inherit": "erben", + "Licence": "Lizenz", + "Map background credits": "Credits der Hintergrundkarte", + "Map user content has been published under licence": "Der Benutzerinhalt wurde veröffentlicht unter der Lizenz", + "More controls": "Mehr Schaltflächen", + "Optional. Same as color if not set.": "Optional. Gleich wie Farbe, falls nicht ausgefüllt.", + "Optionnal.": "Optional", + "Paste here your data": "Füge deine Daten hier ein", + "Please be sure the licence is compliant with your use.": "Stelle bitte sicher, dass die Lizenz mit deiner Verwendung kompatibel ist.", + "Problem in the response": "Fehlerhafte Serverantwort", + "Problem in the response format": "Ungültiges Format der Serverantwort", + "Provide an URL here": "Hier eine URL angeben", + "Remote data": "Ausgelagerte Daten", + "Save": "Speichern", + "Save current edits": "Aktuelle Änderungen speichern", + "Save this center and zoom": "Aktuelle Position und Zoomstufe speichern", + "Show/hide layer": "Ebene Einblenden/Ausblenden", + "Start editing": "Beginne mit der Bearbeitung", + "Stop editing": "Bearbeiten beenden", + "The zoom and center have been setted.": "Zoomstufe und Mittelpunkt wurden gespeichert.", + "To zoom": "Bis Zoomstufe", + "Untitled layer": "unbenannte Ebene", + "Untitled map": "Unbenannte Karte", + "Update permissions and editors": "Berechtigungen und Bearbeiter ändern", + "Url": "URL", + "User content credits": "Credits der Benutzerinhalte", + "Where do we go from here?": "Wie geht es weiter?", + "Zoom in": "Hineinzoomen", + "Zoom out": "Herauszoomen", + "Zoom to layer extent": "Auf Ebenenausdehnung zommen", + "Zoom to this feature": "Auf dieses Element zoomen", + "color": "Farbe", + "dash array": "Linienart", + "description": "Beschreibung", + "fill": "Füllung", + "fill color": "Farbe der Füllung", + "fill opacity": "Deckkraft der Füllung", + "inherit": "erben", + "licence": "Lizenz", + "name": "Name", + "no": "Nein", + "opacity": "Deckkraft", + "stroke": "Umrisslinie", + "weight": "Stärke", + "yes": "Ja", + "Editing": "Bearbeiten", + "Embed the map": "Karte einbinden", + "Short URL": "Kurze URL", + "# one hash for main heading": "# Eine Raute für große Überschrift", + "## two hashes for second heading": "## Zwei Rauten für mittlere Überschrift", + "### three hashes for third heading": "### Drei Rauten für kleine Überschrift", + "**double star for bold**": "**Zwei Sterne für Fett**", + "*simple star for italic*": "*Ein Stern für Kursiv*", + "--- for an horizontal rule": "--- Für eine horizontale Linie", + "All properties are imported.": "Alle Merkmale wurden importiert.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Komma-, tabulator-, oder semikolongetrennte Werte. SRS WGS84 ist impliziert. Nur Punktgeometrien werden importiert. Beim Import wird nach Spaltenüberschriften mit jeder Nennung von „lat“ und „lon“ am Anfang der Überschrift gesucht (ohne Beachtung von Groß-/Kleinschreibung). Alle anderen Spalten werden als Merkmale importiert.", + "Custom background": "Benutzerdefinierter Hintergrund", + "Help": "Hilfe", + "Image: {{http://image.url.com}}": "Bild: {{http://bild.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link mit Text: [[http://beispiel.com|Text für den Link]]", + "Properties imported:": "Importierte Merkmale:", + "Simple link: [[http://example.com]]": "Einfacher Link: [[http://beispiel.com]]", + "Supported scheme": "Unterstütztes Schema", + "Supported variables that will be dynamically replaced": "Unterstützte Variablen, welche dynamisch ersetzt werden", + "Text formatting": "Textformatierung", + "attribution": "Copyright-Hinweis", + "display name": "Name anzeigen", + "max zoom": "höchste Zoomstufe", + "min zoom": "kleinste Zoomstufe", + "Skipping unkown geometry.type: {type}": "Überspringe unbekannten Geometrietyp: {type}", + "Please save the map before": "Bitte zuerst die Karte speichern", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Du kannst variable Elementeigenschaften verwenden: z.B.: bei „http://myserver.org/images/{name}.png“, wird die {name}-Variable ersetzt durch den „name“-Wert des jeweiligen Markers.", + "Transform to polygon": "In Fläche umwandeln", + "Transform to lines": "In Linien umwandeln", + "Choose the data format": "Wähle das Datenformat", + "Error in the tilelayer URL": "Fehler in der Kachelebenen-URL", + "Directions from here": "Route von hier", + "Choose a preset": "Wähle eine Vorlage", + "Limit bounds": "Kartenverschiebung begrenzen", + "Use current bounds": "Nutze aktuelle Kartenansicht", + "max East": "Östliche Begrenzung", + "max North": "Nördliche Begrenzung", + "max South": "Südliche Begrenzung", + "max West": "Westliche Begrenzung", + "TMS format": "TMS-Format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Nur eingeblendete Elemente werden heruntergeladen.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Diesen Kartenauschnitt in einem Karten-Editor öffnen, um genauere Daten für OpenStreetMap bereitzustellen.", + "Default properties": "Standardeigenschaften", + "User interface options": "Einstellungen Benutzeroberfläche", + "Image with custom width (in px): {{http://image.url.com|width}}": "Bild mit benutzerdefinierter Breite (in Pixel): {{http://bild.url.com|Breite}}", + "Current view instead of default map view?": "Aktuelle Kartenansicht anstatt der Standard-Kartenansicht verwenden?", + "Iframe export options": "Iframe Exportoptionen", + "Include full screen link?": "Link für Vollbildanzeige einbeziehen?", + "See full screen": "Vollbildanzeige", + "height": "Höhe", + "width": "Breite", + "Clustered": "Gruppiert", + "Clustering radius": "Gruppierungsradius", + "GeoRSS (only link)": "GeoRSS (nur Link)", + "GeoRSS (title + image)": "GeoRSS (Titel + Bild)", + "Heatmap": "Heatmap", + "Heatmap radius": "Radius der Heatmap", + "Name and description": "Name und Beschreibung", + "Override clustering radius (default 80)": "Gruppierungsradius überschreiben (Standard: 80)", + "Override heatmap radius (default 25)": "Heatmapradius überschreiben (Standard: 25)", + "Proxy request": "Proxyanforderung", + "Table": "Tabelle", + "To use if remote server doesn't allow cross domain (slower)": "Zu nutzen wenn der Zielserver kein Cross-Origin Resource Sharing (CORS) erlaubt (langsamer).", + "Type of layer": "Ebenentyp", + "Filter…": "Elemente filtern...", + "Heatmap intensity property": "Heatmap-Intensität", + "Optional intensity property for heatmap": "Optionale Intensitätseigenschaft für die Heatmap", + "Caption": "Überschrift", + "Data browser": "Datenbrowser", + "Do you want to display a caption bar?": "Mächtest du eine Überschrift (Fußzeile) anzeigen?", + "Do you want to display a panel on load?": "Möchtest du beim Seitenaufruf eine Seitenleiste anzeigen?", + "None": "Keine", + "by": "von", + "Name and description (large)": "Name und Beschreibung (groß)", + "Empty": "Leeren", + "Split line": "Linie teilen", + "Clone": "Duplizieren", + "Clone of {name}": "Duplikat von {name}", + "Side panel": "Seitenleiste", + "Powered by Leaflet and Django, glued by uMap project.": "Bereitgestellt von Leaflet und Django, zusammengebastelt vom uMap Projekt.", + "Zoom level for automatic zooms": "Zommstufe für automatischen Zoom", + "Do you want to display the «more» control?": "Möchtest du die „Mehr“-Schaltfläche anzeigen?", + "Auto": "Automatisch", + "Default: name": "Standard: Name", + "Property to use for sorting features": "Merkmal, welches für Sortierfunktionen verwendet werden soll", + "Slideshow": "Diashow", + "Start slideshow": "Diashow starten", + "Stop slideshow": "Diashow beenden", + "Text color for the cluster label": "Textfarbe für die Gruppierungsbezeichnung", + "Zoom to the next": "Zum nächsten zoomen", + "Zoom to the previous": "Zum vorherigen zoomen", + "Add a new property": "Ein Merkmal hinzufügen", + "Are you sure you want to delete this property on all the features?": "Bist du sicher, dass du dieses Merkmal bei allen Elementen löschen willst?", + "Close": "Schließen", + "Delete this property on all the features": "Dieses Merkmal bei allen Elementen löschen", + "Edit properties in a table": "Merkmale in einer Tabelle bearbeiten", + "Please enter the name of the property": "Bitte gib den Namen des Merkmals ein", + "Please enter the new name of this property": "Bitte gib den neuen Namen des Merkmals ein", + "Rename this property on all the features": "Dieses Merkmal bei allen Elementen umbenennen", + "If false, the polygon will act as a part of the underlying map.": "Wenn auf Nein gesetzt, dann verhält sich die Fläche als Teil der hinterlegten Karte.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe mit benutzerdefinierter Höhe (in Pixel): {{{http://iframe.url.com|Höhe}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Alle anzeigen", + "Dynamic properties": "Dynamische Merkmale", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Nutze Platzhalter mit Elementmerkmalen innerhalb der Klammern, z.B. {name}, sie werden dynamisch durch die entsprechenden Werte ersetzt.", + "Long credits": "Lange Credits", + "No licence has been set": "Keine Lizenz ausgewählt", + "Popup content template": "Popup Vorlage", + "Short credits": "Kurze Credits", + "Will be displayed in the bottom right corner of the map": "Wird in rechten unteren Ecke der Karte angezeigt", + "Will be visible in the caption of the map": "Wird in der Überschrift der Karte angezeigt", + "Map has been saved!": "Karte gespeichert!", + "Save anyway": "Trotzdem speichern", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Hoppla! Jemand anders hat die Daten bearbeitet. Du kannst trotzdem speichern, aber dies wird Änderungen, welche andere Personen vorgenommen haben, löschen.", + "Comma separated list of properties to use when filtering features": "Kommagetrennte Liste der Merkmale, welche beim Filtern von Elementen verwendet werden sollen", + "Keep current visible layers": "Aktuell eingeblendete Ebenen übernehmen?", + "Coordinates": "Koordinaten", + "Latitude": "Geogr. Breite", + "Longitude": "Geogr. Länge", + "Continue line (Ctrl-click)": "Linie weiterzeichnen (Strg+klick)", + "Start a hole here": "Hier ein Loch beginnen", + "Click last point to finish shape": "Kllicke den letzten Punkt an, um die Form abzuschließen", + "Click to add a marker": "Klicke, um einen Marker hinzuzufügen", + "Click to continue drawing": "Klicke, um weiter zu zeichnen", + "Click to start drawing a line": "Klicke, um eine Linie zu zeichnen", + "Click to start drawing a polygon": "Klicke, um eine Fläche zu zeichnen", + "Import in a new layer": "In eine neue Ebene importieren", + "Layer": "Ebene", + "Please choose a format": "Bitte wähle ein Format", + "Imports all umap data, including layers and settings.": "Importiert alle uMap-Daten inklusive Ebenen und Einstellungen", + "Invalid umap data": "Ungütige uMap-Daten", + "Invalid umap data in {filename}": "Ungültige uMap-Daten in {filename}", + "Add a line to the current multi": "Linie zur vorhandene Gruppe hinzufügen", + "Add a polygon to the current multi": "Fläche zur vorhandene Gruppe hinzufügen", + "Click to edit": "Zum Bearbeiten klicken", + "Continue line": "Linie fortführen", + "Delete this shape": "Diese Form löchen", + "Make main shape": "Hauptform erstellen", + "Merge lines": "Linien zusammenführen", + "Remove shape from the multi": "Form aus der Gruppe löschen", + "Transfer shape to edited feature": "Überführe Form zu Element bearbeiten", + "next": "weiter", + "previous": "zurück", + "Measure distances": "Entfernungen messen", + "NM": "sm", + "kilometers": "Kilometer", + "km": "km", + "mi": "mi", + "miles": "Meilen", + "nautical miles": "Seemeilen", + "{area} acres": "{area} Acre", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} sm", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} Meilen", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Bist du sicher, dass du diese Version wiederherstellen willst?", + "Extract shape to separate feature": "Extrahiere Form zu getrennten Element", + "Layer properties": "Ebeneneigenschaften", + "Restore this version": "Diese Version wiederherstellen", + "Versions": "Versionen", + "You have unsaved changes.": "Es gibt ungespeicherte Änderungen.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Eine kommagetrente Zahlenfolge, die die Linienart (Strichmuster) der Kontur definiert, z.B.: \"5, 10, 15\".", + "Advanced transition": "Erweiterter Übergang", + "Allow interactions": "Interaktionen erlauben", + "Autostart when map is loaded": "Automatischer Start, wenn Karte geladen ist", + "Default interaction options": "Standard-Interaktionsoptionen", + "Default shape properties": "Standard-Formeigenschaften", + "Default zoom level": "Standard-Zoomstufe", + "Define link to open in a new window on polygon click.": "Definiere einen externen Link, der sich beim Klick auf die Fläche in einem neuen Fenster öffnet.", + "Delete this vertex (Alt-click)": "Diesen Eckpunkt löschen (Alt-Klick)", + "Display the control to open OpenStreetMap editor": "Den Button zum OpenStreetMap editor anzeigen", + "Display the data layers control": "Datenebenensteuerung anzeigen", + "Display the embed control": "Eingebettete Steuerung anzeigen", + "Display the fullscreen control": "Vollbildsteuerung anzeigen", + "Display the locate control": "Den Ortungsbutton anzeigen.", + "Display the measure control": "Messsteuerung anzeigen", + "Display the search control": "Suchsteuerung anzeigen", + "Display the tile layers control": "Kachelebenensteuerung anzeigen", + "Display the zoom control": "Zoomsteuerung anzeigen", + "Exit Fullscreen": "Vollbild beenden", + "Fetch data each time map view changes.": "Daten jedes Mal abrufen, wenn sich die Kartenansicht ändert.", + "Filter keys": "Schlüssel filtern", + "Icon shape": "Bildzeichenform", + "Icon symbol": "Bildzeichensymbol", + "Interaction options": "Interaktionsoptionen", + "Label key": "Anzeigeschlüssel", + "Link to…": "Verlinke zu...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Muss ein gültiger CSS-Wert sein (z.B.: DarkBlue oder #123456)", + "No results": "Keine Ergebnisse", + "Popup style": "Popupstil", + "Replace layer content": "Ebeneninhalt ersetzen", + "Save this location as new feature": "Diesen Ort als neue Funktion speichern", + "Search location": "Ort suchen", + "Set URL": "URL festlegen", + "Shape properties": "Formeigenschaften", + "Simplify": "Vereinfachen", + "Sort key": "Sortierschlüssel", + "The name of the property to use as feature label (ex.: \"nom\")": "Den Name des Merkmals als Elementbezeichnung verwenden (z.B.: \"Name\")", + "Toggle edit mode (shift-click)": "Bearbeitungsmodus umschalten (Umschalt-Klick)", + "View Fullscreen": "Vollbild ansehen", + "Whether to display or not polygons paths.": "Umrisslinie von Flächen anzeigen oder nicht anzeigen.", + "Whether to fill polygons with color.": "Ob Flächen mit Farbe gefüllt werden.", + "Zoom to this place": "Auf diesen Ort zoomen", + "always": "immer", + "clear": "leeren", + "define": "festlegen", + "hidden": "ausgeblendet", + "never": "nie", + "Automatic": "Automatisch", + "Clone this feature": "Diese Funktion klonen", + "Display label": "Beschriftung anzeigen", + "Drag to reorder": "Ziehen zum Neuanordnen", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe mit benutzerdefinierter Höhe und Breite (in Pixel): {{{http://iframe.url.com|Höhe*Breite}}}", + "Labels are clickable": "Beschriftungen sind klickbar", + "Label direction": "Beschriftungsrichtung", + "Manage layers": "Ebenen verwalten", + "On the bottom": "An der Unterseite", + "On the left": "An der linken Seite", + "On the right": "An der rechten Seite", + "On the top": "An der Oberseite", + "Only display label on mouse hover": "Beschriftung nur beim Überfahren mit der Maus anzeigen", + "Open link in…": "Link öffnen in…", + "Unable to detect format of file {filename}": "Format der Datei {filename} kann nicht erkannt werden", + "collapsed": "eingeklappt", + "expanded": "ausgeklappt", + "iframe": "iframe", + "new window": "neues Fenster", + "parent window": "übergeordnetes Fenster", + "{count} errors during import: {message}": "{count} Fehler während dem Import: {message}", + "Are you sure you want to delete this layer?": "Bist du sicher, dass du diese Ebene löschen willst?", + "Delete layer": "Ebene löschen", + "Error while fetching {url}": "Fehler beim Abrufen von {url}", + "Home": "Startseite", + "Delete all layers": "Alle Ebenen löschen", + "Full map data": "Vollständige Kartendaten", + "Smart transitions": "Weiche Übergänge", + "Activate slideshow mode": "Diashowmodus aktivieren", + "Data is browsable": "Daten sind durchsuchbar", + "Delay between two transitions when in play mode": "Verzögerung zwischen zwei Übergängen im Abspielmodus", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Setze es auf Nein, um diese Ebene in der Slideshow, im Datenbrowser, in der Popup-Navigation,... auszublenden.", + "{delay} seconds": "{delay} Sekunden", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/el.json b/umap/static/umap/locale/el.json new file mode 100644 index 00000000..96f22d27 --- /dev/null +++ b/umap/static/umap/locale/el.json @@ -0,0 +1,350 @@ +{ + "About": "Σχετικά", + "Action not allowed :(": "Μη επιτρεπόμενη ενέργεια :(", + "Add a layer": "Προσθήκη επιπέδου", + "Add symbol": "Προσθήκη συμβόλου ", + "Advanced actions": "Εξειδικευμένες ενέργειες ", + "Advanced properties": "Εξειδικευμένα ιδιότητες ", + "Allow scroll wheel zoom?": "Επέτρεψε ζουμ κύλισης", + "An error occured": "Παρουσιάστηκε σφάλμα ", + "Are you sure you want to cancel your changes?": "Είστε βέβαιος για το ότι θέλετε να ακυρώσετε τις αλλαγές σας;", + "Are you sure you want to clone this map and all its datalayers?": "Είστε βέβαιος ότι θέλετε να κλωνοποιηθεί αυτός ο χάρτης και όλα τα επίπεδα δεδομένων του;", + "Are you sure you want to delete the feature?": "Είστε βέβαιος ότι θέλετε να διαγράφει αυτό το στοιχείο;", + "Are you sure you want to delete this map?": "Είστε βέβαιος ότι θέλετε να διαγραφεί αυτός ο χάρτης ;", + "Ball": "Ball", + "Bring feature to center": "Κέντραρε το στοιχείο", + "Browse data": "Περιήγηση δεδομένων ", + "Cancel": "Άκυρο ", + "Cancel edits": "Ακύρωση επεξεργασίας ", + "Center map on your location": "Κέντραρε τον χάρτη στη θέση σου ", + "Change map background": "Αλλαγή χαρτογραφικού υποβάθρου ", + "Change symbol": "Αλλαγή συμβόλου ", + "Change tilelayers": "Αλλαγή επιπέδου ", + "Choose the format of the data to import": "Επιλέξτε τη μορφή των δεδομένων για εισαγωγή", + "Choose the layer of the feature": "Επιλέξτε το επίπεδο του στοιχείου", + "Choose the layer to import in": "Επιλέξτε το επίπεδο που θα γίνει η εισαγωγή ", + "Circle": "Κύκλος ", + "Clone this map": "Κλωνοποίηση αυτού του χάρτη", + "Default": "Προεπιλογή ", + "Delete": "Διαγραφή ", + "Delete this feature": "Διαγραφή αυτού του στοιχείου ", + "Disable editing": "Απενεργοποίηση επεξεργασίας ", + "Display on load": "Εμφάνιση κατά την φόρτωση ", + "Do you want to display a minimap?": "Επιθυμείτε την εμφάνιση χάρτη υπομνήματος ;", + "Do you want to display popup footer?": "Επιθυμείτε την εμφάνιση αναδυόμενης βάσης ;", + "Do you want to display the scale control?": "Επιθυμείτε την εμφάνιση κλίμακας ;", + "Download data": "Λήψη δεδομένων", + "Draw a line": "Σχεδιασμός γραμμής ", + "Draw a marker": "Σχεδιασμός σημείου ", + "Draw a polygon": "Σχεδιασμός πολυγώνου ", + "Draw a polyline": "Σχεδιασμός σύνθετης γραμμής ", + "Drop": "Ρίψη ", + "Dynamic": "Δυναμική ", + "Edit": "Επεξεργασία ", + "Edit feature's layer": "Επεξεργασία στοιχείων επιπέδου", + "Edit map properties": "Επεξεργασία ιδιοτήτων χάρτη ", + "Edit map settings": "Επεξεργασία ρυθμίσεων χάρτη", + "Edit this feature": "Επεξεργασία του στοιχείου ", + "Embed and share this map": "Ένθεση και διαμοιρασμός του χάρτη ", + "Enable editing": "Ενεργοποίηση επεξεργασίας ", + "Format": "Μορφή", + "From zoom": "Από μεγέθυνση ", + "Go to «{feature}»": "πήγαινε στο «{στοιχείο}»", + "Hide controls": "Απόκρυψη εργαλείων ελέγχου ", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Πόσο απλοποιείται η συνθέτη γραμμή σε κάθε επίπεδο μεγέθυνσης (περισσότερο = ταχύτερη εκτέλεση και γενικότερη αποτύπωση, λιγότερο = περισσότερη ακρίβεια)", + "Import": "Εισαγωγή ", + "Import data": "Εισαγωγή δεδομένων ", + "Inherit": "Inherit", + "Licence": "Άδεια", + "Map background credits": "Πιστοποιητικά δημιουργού υποβάθρου ", + "Map user content has been published under licence": "Ο χάρτης του χρήστη δημοσιεύθηκε με άδεια ", + "More controls": "Περισσότερα εργαλεία ", + "Optional. Same as color if not set.": "Προαιρετικό. Ίδιο χρώμα αν δεν διαμορφωθεί ", + "Optionnal.": "Προαιρετικό ", + "Paste here your data": "Επικόλλησε εδώ τα δεδομένα σου ", + "Please be sure the licence is compliant with your use.": "Παρακαλώ χρησιμοποιείστε άδεια που συμμορφώνετε με την χρήση σας ", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Απομακρυσμένα δεδομένα ", + "Save": "Αποθήκευση", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "άδεια", + "name": "name", + "no": "όχι", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "ναι", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Βοήθεια", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "ύψος", + "width": "πλάτος", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "επόμενο", + "previous": "προηγούμενο", + "Measure distances": "Μέτρηση αποστάσεων", + "NM": "NM", + "kilometers": "χιλιόμετρα", + "km": "χλμ", + "mi": "mi", + "miles": "μίλια", + "nautical miles": "ναυτικά μίλια", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/en.js b/umap/static/umap/locale/en.js new file mode 100644 index 00000000..9ccc9fb6 --- /dev/null +++ b/umap/static/umap/locale/en.js @@ -0,0 +1,352 @@ +var locale = { + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("en", locale); +L.setLocale("en"); \ No newline at end of file diff --git a/umap/static/umap/locale/en.json b/umap/static/umap/locale/en.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/en.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/en_US.json b/umap/static/umap/locale/en_US.json new file mode 100644 index 00000000..53616ff2 --- /dev/null +++ b/umap/static/umap/locale/en_US.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "New layer", + "Add symbol": "Add symbol", + "Advanced actions": "Actions", + "Advanced properties": "Appearance", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occurred", + "Are you sure you want to cancel your changes?": "Are you sure you want to abandon your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its layers and features?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete this feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change basemap", + "Change symbol": "Change symbol", + "Change tilelayers": "Set map background", + "Choose the format of the data to import": "Data format:", + "Choose the layer of the feature": "Layer", + "Choose the layer to import in": "Import into layer:", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Finish editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Display minimap", + "Do you want to display popup footer?": "Display navigation controls on popups", + "Do you want to display the scale control?": "Display scale", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a line", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Layer properties", + "Edit map properties": "Map properties", + "Edit map settings": "Map properties", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Edit map", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to {feature}", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Basemap credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optional.", + "Paste here your data": "Or paste data here", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "There was an error receiving your data.", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "http://...", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "Zoom and center saved.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Map permissions", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "width", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom basemap", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Convert to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose...", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Layer defaults", + "User interface options": "User interface", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Use proxy", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "Use if the remote server doesn't support CORS (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Display caption bar", + "Do you want to display a panel on load?": "Display side panel", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Show \"more\" map controls", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Warning! Someone else seems to have edited the data. If you save now, you will erase any changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/es.js b/umap/static/umap/locale/es.js new file mode 100644 index 00000000..59bb85f8 --- /dev/null +++ b/umap/static/umap/locale/es.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Acerca de", + "Action not allowed :(": "Acción no permitida :(", + "Add a layer": "Añadir una capa", + "Add symbol": "Añadir un símbolo", + "Advanced actions": "Acciones avanzadas", + "Advanced properties": "Propiedades avanzadas", + "Allow scroll wheel zoom?": "¿Permitir acercar con la rueda central del ratón?", + "An error occured": "Ocurrió un error", + "Are you sure you want to cancel your changes?": "¿Está seguro que quiere cancelar sus cambios?", + "Are you sure you want to clone this map and all its datalayers?": "¿Está seguro que quiere clonar este mapa y todas sus capas de datos?", + "Are you sure you want to delete the feature?": "¿Está seguro que quiere eliminar este elemento?", + "Are you sure you want to delete this map?": "¿Está seguro que quiere eliminar este mapa?", + "Ball": "Bola", + "Bring feature to center": "Llevar al centro el elemento", + "Browse data": "Navegar los datos", + "Cancel": "Cancelar", + "Cancel edits": "Cancelar las ediciones", + "Center map on your location": "Centrar el mapa en su ubicación", + "Change map background": "Cambiar mapa de fondo", + "Change symbol": "Cambiar símbolo", + "Change tilelayers": "Cambiar capas de teselas", + "Choose the format of the data to import": "Elegir el formato de los datos a importar", + "Choose the layer of the feature": "Elegir la capa del elemento", + "Choose the layer to import in": "Elegir la capa a la que se importa", + "Circle": "Círculo", + "Clone this map": "Clonar este mapa", + "Default": "Predeterminado", + "Delete": "Eliminar", + "Delete this feature": "Eliminar este elemento", + "Disable editing": "Deshabilitar la edición", + "Display on load": "Mostrar al cargar", + "Do you want to display a minimap?": "¿Quiere mostrar un mini-mapa?", + "Do you want to display popup footer?": "¿Quiere mostrar la ventana emergente en el pie de página?", + "Do you want to display the scale control?": "¿Quiere mostrar el control de escala?", + "Download data": "Descargar datos", + "Draw a line": "Dibuja una línea", + "Draw a marker": "Dibuja un marcador", + "Draw a polygon": "Dibuja un polígono", + "Draw a polyline": "Dibuja una polilínea", + "Drop": "Gota", + "Dynamic": "Dinámico", + "Edit": "Editar", + "Edit feature's layer": "Editar la capa del elemento", + "Edit map properties": "Editar propiedades del mapa", + "Edit map settings": "Editar ajustes del mapa", + "Edit this feature": "Editar este elemento", + "Embed and share this map": "Embeber y compartir este mapa", + "Enable editing": "Habilitar la edición", + "Format": "Formato", + "From zoom": "Desde el acercamiento", + "Go to «{feature}»": "Ir a «{feature}»", + "Hide controls": "Ocultar controles", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Cuánto se simplificará la polilínea en cada nivel de acercamiento (más = mejor comportamiento y apariencia más suave, menos = más preciso)", + "Import": "Importar", + "Import data": "Importar datos", + "Inherit": "Heredar", + "Licence": "Licencia", + "Map background credits": "Créditos del mapa de fondo", + "Map user content has been published under licence": "El contenido del mapa del usuario ha sido publicados bajo la licencia", + "More controls": "Más controles", + "Optional. Same as color if not set.": "Opcional. El mismo color si no se establece.", + "Optionnal.": "Opcional.", + "Paste here your data": "Pegue aquí sus datos", + "Please be sure the licence is compliant with your use.": "Asegúrase que la licencia sea compatible con el uso que le va a dar.", + "Problem in the response": "Problema en la respuesta", + "Problem in the response format": "Problema con el formato de respuesta", + "Provide an URL here": " Proporcione una URL aquí", + "Remote data": "Datos remotos", + "Save": "Guardar", + "Save current edits": "Guardar las ediciones actuales", + "Save this center and zoom": "Guardar este centrado y acercamiento", + "Show/hide layer": "Mostrar/ocultar capa", + "Start editing": "Comenzar a editar", + "Stop editing": "Parar de editar", + "The zoom and center have been setted.": "El acercamiento y el centrado han sido establecidos.", + "To zoom": "Para el acercamiento", + "Untitled layer": "Capa sin título", + "Untitled map": "Mapa sin título", + "Update permissions and editors": "Actualizar permisos y editores", + "Url": "Url", + "User content credits": "Créditos del contenido del usuario", + "Where do we go from here?": "¿A dónde vamos a partir de aquí?", + "Zoom in": "Acercar", + "Zoom out": "Alejar", + "Zoom to layer extent": "Acercamiento al nivel de la capa", + "Zoom to this feature": "Acercamiento a este elemento", + "color": "color", + "dash array": "matriz de guiones", + "description": "Descripción", + "fill": "rellenar", + "fill color": "color de relleno", + "fill opacity": "rellenar la opacidad", + "inherit": "heredar", + "licence": "licencia", + "name": "Nombre", + "no": "no", + "opacity": "opacidad", + "stroke": "trazo", + "weight": "peso", + "yes": "si", + "Editing": "Editando", + "Embed the map": "Embeber el mapa", + "Short URL": "URL corta", + "# one hash for main heading": "# una almohadilla para el encabezado principal", + "## two hashes for second heading": "## dos almohadillas para el encabezado secundario", + "### three hashes for third heading": "### tres almohadillas para el encabezado ternario", + "**double star for bold**": "**dos asteriscos para negrita**", + "*simple star for italic*": "*un asterisco para cursiva*", + "--- for an horizontal rule": "--- para una línea horizontal", + "All properties are imported.": "Todas las propiedades son importadas.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Valores separados por coma, tabulación o punto y coma. Se presupone formato SRS WGS84. Sólo se importan geometrías de punto. El importador buscará, en las cabeceras de cada columna, cualquier mención de «lat» y «lon» al comienzo de la cabecera, en mayúsculas o minúsculas. Todas las columnas restantes son importadas como propiedades.", + "Custom background": "Fondo personalizado", + "Help": "Ayuda", + "Image: {{http://image.url.com}}": "Imagen: {{http://imagen.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Enlace con texto: [[http://ejemplo.com|texto del enlace]]", + "Properties imported:": "Propiedades importadas: ", + "Simple link: [[http://example.com]]": "Enlace simple: [[http://ejemplo.com]]", + "Supported scheme": "Esquema soportado", + "Supported variables that will be dynamically replaced": "Variables soportadas que serán reemplazadas dinámicamente", + "Text formatting": "Formato de texto", + "attribution": "atribución", + "display name": "mostrar nombre", + "max zoom": "acercamiento máximo", + "min zoom": "acercamiento mínimo", + "Skipping unkown geometry.type: {type}": "Ignorando tipo de geometría desconocida: {type}", + "Please save the map before": "Guarde antes el mapa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Puede utilizar las propiedades del elemento como variables. Ej.: con \"http://miservidor.org/images/{name}.png\", la variable {name} será reemplazada con el valor \"name\" de cada uno de los marcadores.", + "Transform to polygon": "Transformar a polígono", + "Transform to lines": "Transformar a líneas", + "Choose the data format": "Elegir el formato de datos", + "Error in the tilelayer URL": "Error en la URL del la capa de teselas", + "Directions from here": "Direcciones desde aquí", + "Choose a preset": "Elegir un preestablecido", + "Limit bounds": "Limitar los límites", + "Use current bounds": "Utilizar límites actuales", + "max East": "máximo Este", + "max North": "máximo Norte", + "max South": "máximo Sur", + "max West": "máximo Oeste", + "TMS format": "formato TMS", + "Credits": "Créditos", + "Only visible features will be downloaded.": "Sólo los elementos visibles se descargarán.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Abre la extensión de este mapa en un editor de mapas para proveer datos más precisos a OpenStreetMap", + "Default properties": "Propiedades predeterminadas", + "User interface options": "Opciones de la interface de usuario", + "Image with custom width (in px): {{http://image.url.com|width}}": "Imagen con anchura personalizada (en píxeles): {{http://imagen.url.com|anchura}}", + "Current view instead of default map view?": "¿Vista actual en lugar de la vista predeterminada?", + "Iframe export options": "Opciones de exportación del iframe", + "Include full screen link?": "¿Incluir el enlace de pantalla completa?", + "See full screen": "Ver pantalla completa", + "height": "altura", + "width": "anchura", + "Clustered": "Agrupados", + "Clustering radius": "Radio de agrupación", + "GeoRSS (only link)": "georss (sólo enlace)", + "GeoRSS (title + image)": "georss (título + imagen)", + "Heatmap": "Mapa de calor", + "Heatmap radius": "Radio del mapa de calor", + "Name and description": "nombre y descripción", + "Override clustering radius (default 80)": "Sobrescribir el radio de agrupación (predeterminado 80)", + "Override heatmap radius (default 25)": "Sobreescribir el radio del mapa de calor (predeterminado 25)", + "Proxy request": "Petición a proxy", + "Table": "tabla", + "To use if remote server doesn't allow cross domain (slower)": "Para utilizar si el servidor remoto no permite dominios cruzados (más lento)", + "Type of layer": "Tipo de capa", + "Filter…": "Filtro...", + "Heatmap intensity property": "Propiedad intensidad del mapa de calor", + "Optional intensity property for heatmap": "Propiedad intensidad opcional para el mapa de calor", + "Caption": "subtítulo", + "Data browser": "navegador de datos", + "Do you want to display a caption bar?": "¿Quiere mostrar la barra de subtítulos?", + "Do you want to display a panel on load?": "¿Quiere mostrar un panel al cargar?", + "None": "ninguno", + "by": "por", + "Name and description (large)": "nombre y descripción (larga) ", + "Empty": "Vaciar", + "Split line": "Linea de división", + "Clone": "Clonar", + "Clone of {name}": "Clón de {name}", + "Side panel": "panel lateral", + "Powered by Leaflet and Django, glued by uMap project.": "Impulsado por Leaflet y Django, pegado por proyecto uMap.", + "Zoom level for automatic zooms": "Nivel de acercamiento para acercamientos automáticos", + "Do you want to display the «more» control?": "¿Quiere mostrar el control «más»?", + "Auto": "Automático", + "Default: name": "Predeterminado: nombre", + "Property to use for sorting features": "Propiedad para ordenar los elementos", + "Slideshow": "Presentación de diapositivas", + "Start slideshow": "Iniciar presentación de diapositivas", + "Stop slideshow": "Parar presentación de diapositivas", + "Text color for the cluster label": "Color del texto para la etiqueta clúster", + "Zoom to the next": "Acercamiento al siguiente", + "Zoom to the previous": "Acercamiento al anterior", + "Add a new property": "Añadir una nueva propiedad", + "Are you sure you want to delete this property on all the features?": "¿Esta seguro que quiere eliminar esta propiedad en todos los elementos?", + "Close": "Cerrar", + "Delete this property on all the features": "Eliminar esta propiedad en todos los elementos", + "Edit properties in a table": "Editar propiedades en una tabla", + "Please enter the name of the property": "Introduzca el nombre de la propiedad", + "Please enter the new name of this property": "Introduzca el nuevo nombre de esta propiedad", + "Rename this property on all the features": "Renombrar esta propiedad en todos los elementos", + "If false, the polygon will act as a part of the underlying map.": "Si falso, el polígono actuará como una parte del mapa subyacente.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe con altura personalizada (en píxeles): {{{http://iframe.url.com|altura}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Ver todo", + "Dynamic properties": "Propiedades dinámicas", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Utilizar marcadores de posición con propiedades del elemento entre paréntesis, ejemplo {name}, serán reemplazados dinámicamente por los valores correspondientes.", + "Long credits": "créditos largo", + "No licence has been set": "Ninguna licencia se ha establecido", + "Popup content template": "plantilla del contenido de la ventana emergente", + "Short credits": "créditos corto", + "Will be displayed in the bottom right corner of the map": "Se mostrará en la esquina inferior izquierda del mapa", + "Will be visible in the caption of the map": "Será visible en el subtítulo del mapa", + "Map has been saved!": "¡Se ha guardado el mapa!", + "Save anyway": "Guardar de todos modos", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "¡Oops! Alguien parece haber editado los datos. Puedes guardar de todos modos, pero esto va a borrar los cambios realizados por otros.", + "Comma separated list of properties to use when filtering features": "Lista de propiedades separado por comas para utilizar el filtrado de elementos", + "Keep current visible layers": "Guardar capas visibles actuales", + "Coordinates": "Coordenadas", + "Latitude": "Latitud", + "Longitude": "Longitud", + "Continue line (Ctrl-click)": "Línea continuada (Ctrl-clic)", + "Start a hole here": "Iniciar un agujero aquí", + "Click last point to finish shape": "Haga clic en el último punto para terminar la forma", + "Click to add a marker": "Haga clic para añadir un marcador", + "Click to continue drawing": "Haga clic para seguir dibujando", + "Click to start drawing a line": "Haga clic para empezar a dibujar una línea", + "Click to start drawing a polygon": "Haga clic para empezar a dibujar un polígono", + "Import in a new layer": "Importar en una nueva capa", + "Layer": "Capa", + "Please choose a format": "Elije un formato", + "Imports all umap data, including layers and settings.": "Importar todos los datos umap, incluyendo capas y ajustes.", + "Invalid umap data": "Dato umap inválido", + "Invalid umap data in {filename}": "Dato umap inválido en {filename}", + "Add a line to the current multi": "Añadir una línea para el multi actual", + "Add a polygon to the current multi": "Añadir un polígono para el multi actual", + "Click to edit": "Clic para editar", + "Continue line": "Línea continua", + "Delete this shape": "Eliminar esta forma", + "Make main shape": "Hacer la forma principal", + "Merge lines": "Combinar líneas", + "Remove shape from the multi": "Quitar la forma del multi", + "Transfer shape to edited feature": "Transferir la forma al elemento editada", + "next": "siguiente", + "previous": "anterior", + "Measure distances": "Medir distancias", + "NM": "NM", + "kilometers": "kilómetros", + "km": "km", + "mi": "mi", + "miles": "millas", + "nautical miles": "millas naúticas", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} millas", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "¿Está seguro que quiere restaurar esta versión?", + "Extract shape to separate feature": "Extraer la forma al elemento separado", + "Layer properties": "Propiedades de la capa", + "Restore this version": "Restaurar esta versión", + "Versions": "Versiones", + "You have unsaved changes.": "Tiene cambios no guardados.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Una lista separada por comas que define el patrón de trazos de guión. Ej.: \"5, 10, 15\".", + "Advanced transition": "Transición avanzada", + "Allow interactions": "Permitir interacciones", + "Autostart when map is loaded": "Autocomenzar cuando el mapa esté cargado", + "Default interaction options": "Opciones de interacción predeterminados", + "Default shape properties": "Propiedades de formas predeterminados", + "Default zoom level": "Nivel de acercamiento predeterminado", + "Define link to open in a new window on polygon click.": "Defina un enlace para abrir en un nueva ventana al hacer clic en el polígono.", + "Delete this vertex (Alt-click)": "Eliminar este vértice (Alt-clic)", + "Display the control to open OpenStreetMap editor": "Mostrar el control para abrir el editor OpenStreetMap", + "Display the data layers control": "Mostrrar el control de la capa de datos", + "Display the embed control": "Mostrar el control de embebido", + "Display the fullscreen control": "Mostrar el control de pantalla completa", + "Display the locate control": "Mostrar el control de ubicación", + "Display the measure control": "Mostrar el control de medida", + "Display the search control": "Mostrar el control de búsqueda", + "Display the tile layers control": "Mostrar el control de capas de teselas", + "Display the zoom control": "Mostrar el control de acercamiento", + "Exit Fullscreen": "Salir de la pantalla completa", + "Fetch data each time map view changes.": "Traer datos cada vez que la vista del mapa cambia.", + "Filter keys": "Claves de filtrado", + "Icon shape": "Icono de la forma", + "Icon symbol": "Icono del símbolo", + "Interaction options": "Opciones de interacción", + "Label key": "Etiqueta de la clave", + "Link to…": "Enlace a...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Debe ser un valor CSS válido (por ej.: DarkBlue o #123456)", + "No results": "Sin resultado", + "Popup style": "Estilo de ventana emergente", + "Replace layer content": "Reemplaza el contenido de la capa", + "Save this location as new feature": "Guardar esta ubicación como nuevo elemento", + "Search location": "Buscar ubicación", + "Set URL": "Establecer URL", + "Shape properties": "Propiedades de la forma", + "Simplify": "Simplifica", + "Sort key": "Orden de la clave", + "The name of the property to use as feature label (ex.: \"nom\")": "El nombre de la propiedad a usar como etiqueta del elemento (ej.: «nom»)", + "Toggle edit mode (shift-click)": "Conmuta el modo edición (shift-clic)", + "View Fullscreen": "Ver en pantalla completa", + "Whether to display or not polygons paths.": "Si desea mostrar o no el trayecto de los polígonos.", + "Whether to fill polygons with color.": "Si desea rellenar los polígonos con color.", + "Zoom to this place": "Acercamiento a este lugar", + "always": "siempre", + "clear": "limpiar", + "define": "define", + "hidden": "oculta", + "never": "nunca", + "Automatic": "Automático", + "Clone this feature": "Clonar este elemento", + "Display label": "Mostrar etiqueta", + "Drag to reorder": "Arrastrar para reordenar", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe con alto y ancho (en px) personalizado: {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Las etiquetas se podrán hacer clic", + "Label direction": "Dirección de la etiqueta", + "Manage layers": "Gestionar capas", + "On the bottom": "En la parte inferior", + "On the left": "A la izquierda", + "On the right": "A la derecha", + "On the top": "En la parte superior", + "Only display label on mouse hover": "Sólo mostrar la etiqueta al pasar el ratón", + "Open link in…": "Abrir enlace en...", + "Unable to detect format of file {filename}": "No se puede detectar el formato de archivo {filename}", + "collapsed": "contraído", + "expanded": "expandido", + "iframe": "iframe", + "new window": "nueva ventana", + "parent window": "ventana padre", + "{count} errors during import: {message}": "{count} errores durante la importación: {message}", + "Are you sure you want to delete this layer?": "¿Está seguro que quiere borrar esta capa?", + "Delete layer": "Borrar capa", + "Error while fetching {url}": "Error al recuperar {url}", + "Home": "Inicio", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("es", locale); +L.setLocale("es"); \ No newline at end of file diff --git a/umap/static/umap/locale/es.json b/umap/static/umap/locale/es.json new file mode 100644 index 00000000..82d5b8b4 --- /dev/null +++ b/umap/static/umap/locale/es.json @@ -0,0 +1,350 @@ +{ + "About": "Acerca de", + "Action not allowed :(": "Acción no permitida :(", + "Add a layer": "Añadir una capa", + "Add symbol": "Añadir un símbolo", + "Advanced actions": "Acciones avanzadas", + "Advanced properties": "Propiedades avanzadas", + "Allow scroll wheel zoom?": "¿Permitir acercar con la rueda central del ratón?", + "An error occured": "Ocurrió un error", + "Are you sure you want to cancel your changes?": "¿Está seguro que quiere cancelar sus cambios?", + "Are you sure you want to clone this map and all its datalayers?": "¿Está seguro que quiere clonar este mapa y todas sus capas de datos?", + "Are you sure you want to delete the feature?": "¿Está seguro que quiere eliminar este elemento?", + "Are you sure you want to delete this map?": "¿Está seguro que quiere eliminar este mapa?", + "Ball": "Bola", + "Bring feature to center": "Llevar al centro el elemento", + "Browse data": "Navegar los datos", + "Cancel": "Cancelar", + "Cancel edits": "Cancelar las ediciones", + "Center map on your location": "Centrar el mapa en su ubicación", + "Change map background": "Cambiar mapa de fondo", + "Change symbol": "Cambiar símbolo", + "Change tilelayers": "Cambiar capas de teselas", + "Choose the format of the data to import": "Elegir el formato de los datos a importar", + "Choose the layer of the feature": "Elegir la capa del elemento", + "Choose the layer to import in": "Elegir la capa a la que se importa", + "Circle": "Círculo", + "Clone this map": "Clonar este mapa", + "Default": "Predeterminado", + "Delete": "Eliminar", + "Delete this feature": "Eliminar este elemento", + "Disable editing": "Deshabilitar la edición", + "Display on load": "Mostrar al cargar", + "Do you want to display a minimap?": "¿Quiere mostrar un mini-mapa?", + "Do you want to display popup footer?": "¿Quiere mostrar la ventana emergente en el pie de página?", + "Do you want to display the scale control?": "¿Quiere mostrar el control de escala?", + "Download data": "Descargar datos", + "Draw a line": "Dibuja una línea", + "Draw a marker": "Dibuja un marcador", + "Draw a polygon": "Dibuja un polígono", + "Draw a polyline": "Dibuja una polilínea", + "Drop": "Gota", + "Dynamic": "Dinámico", + "Edit": "Editar", + "Edit feature's layer": "Editar la capa del elemento", + "Edit map properties": "Editar propiedades del mapa", + "Edit map settings": "Editar ajustes del mapa", + "Edit this feature": "Editar este elemento", + "Embed and share this map": "Embeber y compartir este mapa", + "Enable editing": "Habilitar la edición", + "Format": "Formato", + "From zoom": "Desde el acercamiento", + "Go to «{feature}»": "Ir a «{feature}»", + "Hide controls": "Ocultar controles", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Cuánto se simplificará la polilínea en cada nivel de acercamiento (más = mejor comportamiento y apariencia más suave, menos = más preciso)", + "Import": "Importar", + "Import data": "Importar datos", + "Inherit": "Heredar", + "Licence": "Licencia", + "Map background credits": "Créditos del mapa de fondo", + "Map user content has been published under licence": "El contenido del mapa del usuario ha sido publicados bajo la licencia", + "More controls": "Más controles", + "Optional. Same as color if not set.": "Opcional. El mismo color si no se establece.", + "Optionnal.": "Opcional.", + "Paste here your data": "Pegue aquí sus datos", + "Please be sure the licence is compliant with your use.": "Asegúrase que la licencia sea compatible con el uso que le va a dar.", + "Problem in the response": "Problema en la respuesta", + "Problem in the response format": "Problema con el formato de respuesta", + "Provide an URL here": " Proporcione una URL aquí", + "Remote data": "Datos remotos", + "Save": "Guardar", + "Save current edits": "Guardar las ediciones actuales", + "Save this center and zoom": "Guardar este centrado y acercamiento", + "Show/hide layer": "Mostrar/ocultar capa", + "Start editing": "Comenzar a editar", + "Stop editing": "Parar de editar", + "The zoom and center have been setted.": "El acercamiento y el centrado han sido establecidos.", + "To zoom": "Para el acercamiento", + "Untitled layer": "Capa sin título", + "Untitled map": "Mapa sin título", + "Update permissions and editors": "Actualizar permisos y editores", + "Url": "Url", + "User content credits": "Créditos del contenido del usuario", + "Where do we go from here?": "¿A dónde vamos a partir de aquí?", + "Zoom in": "Acercar", + "Zoom out": "Alejar", + "Zoom to layer extent": "Acercamiento al nivel de la capa", + "Zoom to this feature": "Acercamiento a este elemento", + "color": "color", + "dash array": "matriz de guiones", + "description": "Descripción", + "fill": "rellenar", + "fill color": "color de relleno", + "fill opacity": "rellenar la opacidad", + "inherit": "heredar", + "licence": "licencia", + "name": "Nombre", + "no": "no", + "opacity": "opacidad", + "stroke": "trazo", + "weight": "peso", + "yes": "si", + "Editing": "Editando", + "Embed the map": "Embeber el mapa", + "Short URL": "URL corta", + "# one hash for main heading": "# una almohadilla para el encabezado principal", + "## two hashes for second heading": "## dos almohadillas para el encabezado secundario", + "### three hashes for third heading": "### tres almohadillas para el encabezado ternario", + "**double star for bold**": "**dos asteriscos para negrita**", + "*simple star for italic*": "*un asterisco para cursiva*", + "--- for an horizontal rule": "--- para una línea horizontal", + "All properties are imported.": "Todas las propiedades son importadas.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Valores separados por coma, tabulación o punto y coma. Se presupone formato SRS WGS84. Sólo se importan geometrías de punto. El importador buscará, en las cabeceras de cada columna, cualquier mención de «lat» y «lon» al comienzo de la cabecera, en mayúsculas o minúsculas. Todas las columnas restantes son importadas como propiedades.", + "Custom background": "Fondo personalizado", + "Help": "Ayuda", + "Image: {{http://image.url.com}}": "Imagen: {{http://imagen.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Enlace con texto: [[http://ejemplo.com|texto del enlace]]", + "Properties imported:": "Propiedades importadas: ", + "Simple link: [[http://example.com]]": "Enlace simple: [[http://ejemplo.com]]", + "Supported scheme": "Esquema soportado", + "Supported variables that will be dynamically replaced": "Variables soportadas que serán reemplazadas dinámicamente", + "Text formatting": "Formato de texto", + "attribution": "atribución", + "display name": "mostrar nombre", + "max zoom": "acercamiento máximo", + "min zoom": "acercamiento mínimo", + "Skipping unkown geometry.type: {type}": "Ignorando tipo de geometría desconocida: {type}", + "Please save the map before": "Guarde antes el mapa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Puede utilizar las propiedades del elemento como variables. Ej.: con \"http://miservidor.org/images/{name}.png\", la variable {name} será reemplazada con el valor \"name\" de cada uno de los marcadores.", + "Transform to polygon": "Transformar a polígono", + "Transform to lines": "Transformar a líneas", + "Choose the data format": "Elegir el formato de datos", + "Error in the tilelayer URL": "Error en la URL del la capa de teselas", + "Directions from here": "Direcciones desde aquí", + "Choose a preset": "Elegir un preestablecido", + "Limit bounds": "Limitar los límites", + "Use current bounds": "Utilizar límites actuales", + "max East": "máximo Este", + "max North": "máximo Norte", + "max South": "máximo Sur", + "max West": "máximo Oeste", + "TMS format": "formato TMS", + "Credits": "Créditos", + "Only visible features will be downloaded.": "Sólo los elementos visibles se descargarán.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Abre la extensión de este mapa en un editor de mapas para proveer datos más precisos a OpenStreetMap", + "Default properties": "Propiedades predeterminadas", + "User interface options": "Opciones de la interface de usuario", + "Image with custom width (in px): {{http://image.url.com|width}}": "Imagen con anchura personalizada (en píxeles): {{http://imagen.url.com|anchura}}", + "Current view instead of default map view?": "¿Vista actual en lugar de la vista predeterminada?", + "Iframe export options": "Opciones de exportación del iframe", + "Include full screen link?": "¿Incluir el enlace de pantalla completa?", + "See full screen": "Ver pantalla completa", + "height": "altura", + "width": "anchura", + "Clustered": "Agrupados", + "Clustering radius": "Radio de agrupación", + "GeoRSS (only link)": "georss (sólo enlace)", + "GeoRSS (title + image)": "georss (título + imagen)", + "Heatmap": "Mapa de calor", + "Heatmap radius": "Radio del mapa de calor", + "Name and description": "nombre y descripción", + "Override clustering radius (default 80)": "Sobrescribir el radio de agrupación (predeterminado 80)", + "Override heatmap radius (default 25)": "Sobreescribir el radio del mapa de calor (predeterminado 25)", + "Proxy request": "Petición a proxy", + "Table": "tabla", + "To use if remote server doesn't allow cross domain (slower)": "Para utilizar si el servidor remoto no permite dominios cruzados (más lento)", + "Type of layer": "Tipo de capa", + "Filter…": "Filtro...", + "Heatmap intensity property": "Propiedad intensidad del mapa de calor", + "Optional intensity property for heatmap": "Propiedad intensidad opcional para el mapa de calor", + "Caption": "subtítulo", + "Data browser": "navegador de datos", + "Do you want to display a caption bar?": "¿Quiere mostrar la barra de subtítulos?", + "Do you want to display a panel on load?": "¿Quiere mostrar un panel al cargar?", + "None": "ninguno", + "by": "por", + "Name and description (large)": "nombre y descripción (larga) ", + "Empty": "Vaciar", + "Split line": "Linea de división", + "Clone": "Clonar", + "Clone of {name}": "Clón de {name}", + "Side panel": "panel lateral", + "Powered by Leaflet and Django, glued by uMap project.": "Impulsado por Leaflet y Django, pegado por proyecto uMap.", + "Zoom level for automatic zooms": "Nivel de acercamiento para acercamientos automáticos", + "Do you want to display the «more» control?": "¿Quiere mostrar el control «más»?", + "Auto": "Automático", + "Default: name": "Predeterminado: nombre", + "Property to use for sorting features": "Propiedad para ordenar los elementos", + "Slideshow": "Presentación de diapositivas", + "Start slideshow": "Iniciar presentación de diapositivas", + "Stop slideshow": "Parar presentación de diapositivas", + "Text color for the cluster label": "Color del texto para la etiqueta clúster", + "Zoom to the next": "Acercamiento al siguiente", + "Zoom to the previous": "Acercamiento al anterior", + "Add a new property": "Añadir una nueva propiedad", + "Are you sure you want to delete this property on all the features?": "¿Esta seguro que quiere eliminar esta propiedad en todos los elementos?", + "Close": "Cerrar", + "Delete this property on all the features": "Eliminar esta propiedad en todos los elementos", + "Edit properties in a table": "Editar propiedades en una tabla", + "Please enter the name of the property": "Introduzca el nombre de la propiedad", + "Please enter the new name of this property": "Introduzca el nuevo nombre de esta propiedad", + "Rename this property on all the features": "Renombrar esta propiedad en todos los elementos", + "If false, the polygon will act as a part of the underlying map.": "Si falso, el polígono actuará como una parte del mapa subyacente.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe con altura personalizada (en píxeles): {{{http://iframe.url.com|altura}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Ver todo", + "Dynamic properties": "Propiedades dinámicas", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Utilizar marcadores de posición con propiedades del elemento entre paréntesis, ejemplo {name}, serán reemplazados dinámicamente por los valores correspondientes.", + "Long credits": "créditos largo", + "No licence has been set": "Ninguna licencia se ha establecido", + "Popup content template": "plantilla del contenido de la ventana emergente", + "Short credits": "créditos corto", + "Will be displayed in the bottom right corner of the map": "Se mostrará en la esquina inferior izquierda del mapa", + "Will be visible in the caption of the map": "Será visible en el subtítulo del mapa", + "Map has been saved!": "¡Se ha guardado el mapa!", + "Save anyway": "Guardar de todos modos", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "¡Oops! Alguien parece haber editado los datos. Puedes guardar de todos modos, pero esto va a borrar los cambios realizados por otros.", + "Comma separated list of properties to use when filtering features": "Lista de propiedades separado por comas para utilizar el filtrado de elementos", + "Keep current visible layers": "Guardar capas visibles actuales", + "Coordinates": "Coordenadas", + "Latitude": "Latitud", + "Longitude": "Longitud", + "Continue line (Ctrl-click)": "Línea continuada (Ctrl-clic)", + "Start a hole here": "Iniciar un agujero aquí", + "Click last point to finish shape": "Haga clic en el último punto para terminar la forma", + "Click to add a marker": "Haga clic para añadir un marcador", + "Click to continue drawing": "Haga clic para seguir dibujando", + "Click to start drawing a line": "Haga clic para empezar a dibujar una línea", + "Click to start drawing a polygon": "Haga clic para empezar a dibujar un polígono", + "Import in a new layer": "Importar en una nueva capa", + "Layer": "Capa", + "Please choose a format": "Elije un formato", + "Imports all umap data, including layers and settings.": "Importar todos los datos umap, incluyendo capas y ajustes.", + "Invalid umap data": "Dato umap inválido", + "Invalid umap data in {filename}": "Dato umap inválido en {filename}", + "Add a line to the current multi": "Añadir una línea para el multi actual", + "Add a polygon to the current multi": "Añadir un polígono para el multi actual", + "Click to edit": "Clic para editar", + "Continue line": "Línea continua", + "Delete this shape": "Eliminar esta forma", + "Make main shape": "Hacer la forma principal", + "Merge lines": "Combinar líneas", + "Remove shape from the multi": "Quitar la forma del multi", + "Transfer shape to edited feature": "Transferir la forma al elemento editada", + "next": "siguiente", + "previous": "anterior", + "Measure distances": "Medir distancias", + "NM": "NM", + "kilometers": "kilómetros", + "km": "km", + "mi": "mi", + "miles": "millas", + "nautical miles": "millas naúticas", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} millas", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "¿Está seguro que quiere restaurar esta versión?", + "Extract shape to separate feature": "Extraer la forma al elemento separado", + "Layer properties": "Propiedades de la capa", + "Restore this version": "Restaurar esta versión", + "Versions": "Versiones", + "You have unsaved changes.": "Tiene cambios no guardados.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Una lista separada por comas que define el patrón de trazos de guión. Ej.: \"5, 10, 15\".", + "Advanced transition": "Transición avanzada", + "Allow interactions": "Permitir interacciones", + "Autostart when map is loaded": "Autocomenzar cuando el mapa esté cargado", + "Default interaction options": "Opciones de interacción predeterminados", + "Default shape properties": "Propiedades de formas predeterminados", + "Default zoom level": "Nivel de acercamiento predeterminado", + "Define link to open in a new window on polygon click.": "Defina un enlace para abrir en un nueva ventana al hacer clic en el polígono.", + "Delete this vertex (Alt-click)": "Eliminar este vértice (Alt-clic)", + "Display the control to open OpenStreetMap editor": "Mostrar el control para abrir el editor OpenStreetMap", + "Display the data layers control": "Mostrrar el control de la capa de datos", + "Display the embed control": "Mostrar el control de embebido", + "Display the fullscreen control": "Mostrar el control de pantalla completa", + "Display the locate control": "Mostrar el control de ubicación", + "Display the measure control": "Mostrar el control de medida", + "Display the search control": "Mostrar el control de búsqueda", + "Display the tile layers control": "Mostrar el control de capas de teselas", + "Display the zoom control": "Mostrar el control de acercamiento", + "Exit Fullscreen": "Salir de la pantalla completa", + "Fetch data each time map view changes.": "Traer datos cada vez que la vista del mapa cambia.", + "Filter keys": "Claves de filtrado", + "Icon shape": "Icono de la forma", + "Icon symbol": "Icono del símbolo", + "Interaction options": "Opciones de interacción", + "Label key": "Etiqueta de la clave", + "Link to…": "Enlace a...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Debe ser un valor CSS válido (por ej.: DarkBlue o #123456)", + "No results": "Sin resultado", + "Popup style": "Estilo de ventana emergente", + "Replace layer content": "Reemplaza el contenido de la capa", + "Save this location as new feature": "Guardar esta ubicación como nuevo elemento", + "Search location": "Buscar ubicación", + "Set URL": "Establecer URL", + "Shape properties": "Propiedades de la forma", + "Simplify": "Simplifica", + "Sort key": "Orden de la clave", + "The name of the property to use as feature label (ex.: \"nom\")": "El nombre de la propiedad a usar como etiqueta del elemento (ej.: «nom»)", + "Toggle edit mode (shift-click)": "Conmuta el modo edición (shift-clic)", + "View Fullscreen": "Ver en pantalla completa", + "Whether to display or not polygons paths.": "Si desea mostrar o no el trayecto de los polígonos.", + "Whether to fill polygons with color.": "Si desea rellenar los polígonos con color.", + "Zoom to this place": "Acercamiento a este lugar", + "always": "siempre", + "clear": "limpiar", + "define": "define", + "hidden": "oculta", + "never": "nunca", + "Automatic": "Automático", + "Clone this feature": "Clonar este elemento", + "Display label": "Mostrar etiqueta", + "Drag to reorder": "Arrastrar para reordenar", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe con alto y ancho (en px) personalizado: {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Las etiquetas se podrán hacer clic", + "Label direction": "Dirección de la etiqueta", + "Manage layers": "Gestionar capas", + "On the bottom": "En la parte inferior", + "On the left": "A la izquierda", + "On the right": "A la derecha", + "On the top": "En la parte superior", + "Only display label on mouse hover": "Sólo mostrar la etiqueta al pasar el ratón", + "Open link in…": "Abrir enlace en...", + "Unable to detect format of file {filename}": "No se puede detectar el formato de archivo {filename}", + "collapsed": "contraído", + "expanded": "expandido", + "iframe": "iframe", + "new window": "nueva ventana", + "parent window": "ventana padre", + "{count} errors during import: {message}": "{count} errores durante la importación: {message}", + "Are you sure you want to delete this layer?": "¿Está seguro que quiere borrar esta capa?", + "Delete layer": "Borrar capa", + "Error while fetching {url}": "Error al recuperar {url}", + "Home": "Inicio", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/fi.js b/umap/static/umap/locale/fi.js new file mode 100644 index 00000000..b663f4ce --- /dev/null +++ b/umap/static/umap/locale/fi.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Tietoja", + "Action not allowed :(": "Toimenpide ei ole sallittu :(", + "Add a layer": "Lisää kerros", + "Add symbol": "Lisää symboli", + "Advanced actions": "Lisätoiminnot", + "Advanced properties": "Lisäominaisuudet", + "Allow scroll wheel zoom?": "Salli zoomaus hiiren rullalla? ", + "An error occured": "Hups! Virhe on tapahtunut...", + "Are you sure you want to cancel your changes?": "Oletko _ihan_ varma, että haluat peruuttaa muutoksesi?", + "Are you sure you want to clone this map and all its datalayers?": "Oletko varma että haluat kloonata tämän kartan ja kaikki sen data-kerrokset?", + "Are you sure you want to delete the feature?": "Oletko varma että haluat poistaa piirteen?", + "Are you sure you want to delete this map?": "Oletko ihan täysin varma, että haluat poistaa tämän kartan? Poistettua karttaa ei voi palauttaa.", + "Ball": "Pallo", + "Bring feature to center": "Tuo piirre keskelle", + "Browse data": "Selaa tietoja", + "Cancel": "Peruuta", + "Cancel edits": "Peruuta muokkaukset", + "Center map on your location": "Keskitä kartta sijaintiisi", + "Change map background": "Vaihda taustakarttaa", + "Change symbol": "Vaihda symboli", + "Change tilelayers": "Muuta karttavaihtoehtoja", + "Choose the format of the data to import": "Valitse tuotavien tietojen formaatti", + "Choose the layer of the feature": "Valitse piirteen kerros", + "Choose the layer to import in": "Valitse kerros johon tieto tuodaan", + "Circle": "Ympyrä", + "Clone this map": "Kloonaa tämä kartta", + "Default": "Oletusarvo", + "Delete": "Poista", + "Delete this feature": "Poista tämä piirre", + "Disable editing": "Lopeta kartan muokaaminen", + "Display on load": "Näytä ladattaessa", + "Do you want to display a minimap?": "Haluatko aktivoida minikartan?", + "Do you want to display popup footer?": "Haluatko näyttää ponnahdusikkunan alatunnisteen?", + "Do you want to display the scale control?": "Näytetäänkö mittakaavaohjain? ", + "Download data": "Lataa tietoja", + "Draw a line": "Piirrä viiva", + "Draw a marker": "Piirrä karttamerkki", + "Draw a polygon": "Piirrä monikulmio", + "Draw a polyline": "Piirrä monisegmenttinen viiva", + "Drop": "Pisara", + "Dynamic": "Dynaaminen", + "Edit": "Muokkaa", + "Edit feature's layer": "Muokkaa piirteen kerrosta", + "Edit map properties": "Muokkaa kartan ominaisuuksia", + "Edit map settings": "Muokkaa kartta-asetuksia", + "Edit this feature": "Muokkaa tätä piirrettä", + "Embed and share this map": "Jaa tämä kartta tai käytä sitä muualla", + "Enable editing": "Aktivoi kartan muokkaus", + "Format": "Formaatti", + "From zoom": "Zoomaustasolta", + "Go to «{feature}»": "Mene piirteeseen «{feature}»", + "Hide controls": "Piilota ohjaimet", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Kuinka paljon viivaa yleistetäänkullakin zoomaustasolla (enemmän = parempi suorituskyky, vähemmän = suurempi tarkkuus)", + "Import": "Tuo", + "Import data": "Tuo tietoja", + "Inherit": "Peri", + "Licence": "Lisenssi", + "Map background credits": "Taustakartan tekijämerkinnät", + "Map user content has been published under licence": "Kartan käyttäjien luomat tiedot on julkaistu lisenssillä", + "More controls": "Lisää ohjaimia", + "Optional. Same as color if not set.": "Valinnainen. Sama kuin väri jos ei asetettu. ", + "Optionnal.": "Valinnainen.", + "Paste here your data": "Liitä tiedot tähän", + "Please be sure the licence is compliant with your use.": "Huomioithan että valitsemasi lisenssi on yhteensopiva käyttösi kanssa.", + "Problem in the response": "Ongelma vastauksessa", + "Problem in the response format": "Ongelma vastauksen muodossa", + "Provide an URL here": "Syötä verkko-osoite tänne", + "Remote data": "Etä-tiedot", + "Save": "Tallenna", + "Save current edits": "Tallenna tämänhetkiset muokkaukset", + "Save this center and zoom": "Tallenna tämä kartan keskitys ja zoomaustaso", + "Show/hide layer": "Näytä/piilota kerros", + "Start editing": "Aloita muokkaus", + "Stop editing": "Lopeta muokkaus", + "The zoom and center have been setted.": "Kartan keskitys ja zoomaustaso on asetettu.", + "To zoom": "Zoomaukseen", + "Untitled layer": "Nimeämätön kerros", + "Untitled map": "Nimeämätön kartta", + "Update permissions and editors": "Päivitä oikeudet ja editori", + "Url": "URL", + "User content credits": "Käyttäjien luoman tiedon tuottajat:", + "Where do we go from here?": "Minnekäs sitten?", + "Zoom in": "Lähennä", + "Zoom out": "Loitonna", + "Zoom to layer extent": "Zoomaa tason laajuuteen", + "Zoom to this feature": "Kohdenna tähän piirteeseen", + "color": "väri", + "dash array": "katkoviivatyyppilista", + "description": "kuvaus", + "fill": "täyttö", + "fill color": "täyteväri", + "fill opacity": "täytön läpinäkyvyys", + "inherit": "peri", + "licence": "lisenssi", + "name": "nimi", + "no": "ei", + "opacity": "läpikuultavuus", + "stroke": "sivallus", + "weight": "paksuus", + "yes": "kyllä", + "Editing": "Muokkauksessa ", + "Embed the map": "Liitä kartta", + "Short URL": "Lyhyt URL", + "# one hash for main heading": "# yksi risuaita tekee päätason otsikon ", + "## two hashes for second heading": "## kaksi risuaitaa tekee kakkostason otsikon ", + "### three hashes for third heading": "### kolme risuaitaa tekee kolmostason otsikon ", + "**double star for bold**": "**tuplatähti lihavoi**", + "*simple star for italic*": "*yksi tähti kursivoi*", + "--- for an horizontal rule": "--- luo vaakasuoran erottimen kuplan halki", + "All properties are imported.": "Kaikki omainaisuudet tuodaan.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Pilkku-, tabulaattori- tai puolipiste-erotettuja arvoja. Koordinaattijärjestemänä WGS84. Vain pistegeometriat tuodaan uMapiin. Tietue-tuonti etsii «lat»- ja «lon»-alkavia sarakeotsikoita. Kaikki muut sarakkeet tuodaan ominaisuustietoina. ", + "Custom background": "Räätälöity tausta", + "Help": "Apua", + "Image: {{http://image.url.com}}": "Kuva: {{http://kuva.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Hyperlinkki tekstillä: [[http://esimerkkisaitti.fi|linkin teksti]]", + "Properties imported:": "Tuodut ominaisuudet:", + "Simple link: [[http://example.com]]": "Yksinkertainen linkki: [[http://esimerkki.fi]]", + "Supported scheme": "Tuettu muoto", + "Supported variables that will be dynamically replaced": "Tuetut muuttujat, jotka korvataan dynaamisesti", + "Text formatting": "Tekstin muotoilu", + "attribution": "Viittaukset tausta-aineiston lisenssiin", + "display name": "näytettävä nimi", + "max zoom": "suurin zoomaustaso", + "min zoom": "pienin zoomaustaso", + "Skipping unkown geometry.type: {type}": "Ohitetaan tuntematon geometry.type: {type}", + "Please save the map before": "Ole hyvä ja tallenna kartta ensin", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Piirteiden ominaisuuksia voi käyttää muuttujina: Esimeriksi \"http://myserver.org/images/{name}.png\" :n {name}-muuttuja korvataan kunkin karttamerkin name-kentän arvolla.", + "Transform to polygon": "Muunna monikulmioksi", + "Transform to lines": "Muunna viivoiksi", + "Choose the data format": "Valitse päivämäärän muoto", + "Error in the tilelayer URL": "Virhe karttalaattojen URL:ssä", + "Directions from here": "Ohjeet täältä", + "Choose a preset": "Valitse", + "Limit bounds": "Alueen rajaus", + "Use current bounds": "Käytä nykyistä rajausta", + "max East": "itäraja", + "max North": "pohjoisraja", + "max South": "eteläraja", + "max West": "länsiraja", + "TMS format": "TMS-formaatti", + "Credits": "Tunnustukset", + "Only visible features will be downloaded.": "Vain näkyvät piirteet ladataan.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Avaa rajauksen mukainen alue editorissa parantaaksesi OpenStreetMapin tietosisältöä.", + "Default properties": "Oletusasetukset", + "User interface options": "Käyttäjän käyttöliittymäoptiot", + "Image with custom width (in px): {{http://image.url.com|width}}": "Kuva määrätyn leveyisenä (pikseleinä): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Nykyinen näkymä oletuskarttanäkymän asemesta?", + "Iframe export options": "Iframe-vientiasetukset", + "Include full screen link?": "Sisällytä koko näyttö -linkki?", + "See full screen": "Katso koko näytöllä", + "height": "korkeus", + "width": "leveys", + "Clustered": "Klusteroituna", + "Clustering radius": "Klusterointisäde", + "GeoRSS (only link)": "GeoRSS (vain linkki)", + "GeoRSS (title + image)": "GeoRSS (otsikko + kuva)", + "Heatmap": "Lämpökartta", + "Heatmap radius": "Lämpökartan säde", + "Name and description": "Nimi ja kuvaus", + "Override clustering radius (default 80)": "Ohita klusterointisäde (oletus on 80)", + "Override heatmap radius (default 25)": "Ohita lämpökartan säde (oletus on 25)", + "Proxy request": "Välityspalvelinpyyntö", + "Table": "Taulukko", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Datakerroksen tyyppi", + "Filter…": "Suodata...", + "Heatmap intensity property": "Lämpökartan vahvuusominaisuus", + "Optional intensity property for heatmap": "Valinnainen lämpökartan vahvuusominaisuus", + "Caption": "Kuvateksti", + "Data browser": "Dataselain", + "Do you want to display a caption bar?": "Haluatko näyttää otsikkopalkin?", + "Do you want to display a panel on load?": "Haluatko näyttää paneelin ladattaessa?", + "None": "Ei mitään", + "by": "taholta", + "Name and description (large)": "Nimi ja kuvaus (suuri)", + "Empty": "Tyhjä", + "Split line": "Pilko/katkaise viiva", + "Clone": "Kloonaa", + "Clone of {name}": "{name}n klooni", + "Side panel": "Sivupaneeli", + "Powered by Leaflet and Django, glued by uMap project.": "Konepellin alla hyrrää Leaflet ja Django; uMap-projektin kasaan liimaamana.", + "Zoom level for automatic zooms": "Zoomaustaso automaattisessa zoomauksessa", + "Do you want to display the «more» control?": "Haluatko näyttää «lisää»-ohjaimen?", + "Auto": "Automaattinen", + "Default: name": "Oletus: nimi", + "Property to use for sorting features": "Ominaisuus jonka mukaan piirteet järjestetään", + "Slideshow": "Kuvaesitys", + "Start slideshow": "Aloita kuvaesitys", + "Stop slideshow": "Lopeta kuvaesitys", + "Text color for the cluster label": "Tekstin väri klusterietiketissä", + "Zoom to the next": "Kohdenna seuraavaan", + "Zoom to the previous": "Kohdenna edelliseen", + "Add a new property": "Lisää uusi ominaisuus", + "Are you sure you want to delete this property on all the features?": "Oletko varma että haluat poistaa tämän ominaisuuden kaikista piirteistä?", + "Close": "Sulje", + "Delete this property on all the features": "Poista tämä ominaisuus kaikista piirteistä", + "Edit properties in a table": "Muokkaa ominaisuuksia taulukossa", + "Please enter the name of the property": "Kirjoita ominaisuuden nimi", + "Please enter the new name of this property": "Kirjoita ominaisuuden uusi nimi", + "Rename this property on all the features": "Uudelleen nimeä tämä ominaisuus kaikissa piirteissä", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe määrätyn korkuisena (pikseleinä): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Näytä kaikki", + "Dynamic properties": "Dynaamiset ominaisuudet", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Pitkät tekijätiedot", + "No licence has been set": "Lisenssiä ei ole määritetty", + "Popup content template": "Ponnahdusikkunan sisällön sapluuna", + "Short credits": "Lyhyet tekijätiedot", + "Will be displayed in the bottom right corner of the map": "Näytetään kartan oikeassa alakulmassa", + "Will be visible in the caption of the map": "Näytetään kartan kuvatekstinä", + "Map has been saved!": "Kartta on tallennettu!", + "Save anyway": "Tallenna joka tapauksessa", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Hupsankeikkaa! Joku muu on näemmä muokannut tietoja. Voit tallentaa joka tapauksessa, mutta tallentamisesi poistaa muiden muokkaukset.", + "Comma separated list of properties to use when filtering features": "Pilkkueroteltu lista käytettävistä ominaisuuksista piirteitä suodatettaessa.", + "Keep current visible layers": "Pidä nyt näkyvät datakerrokset", + "Coordinates": "Koordinaatit", + "Latitude": "Leveysaste", + "Longitude": "Pituusaste", + "Continue line (Ctrl-click)": "Jatka viivaa (Ctrl+Klikkaus)", + "Start a hole here": "Aloita reikä tässä", + "Click last point to finish shape": "Klikkaa viimeistä pistettä täydentääksesi muodon", + "Click to add a marker": "Klikkaa lisätäksesi karttamerkki", + "Click to continue drawing": "Klikkaa jatkaaksesi piirtämistä", + "Click to start drawing a line": "Klikkaa aloittaaksesi viivan piirtäminen", + "Click to start drawing a polygon": "Klikkaa aloittaaksesi monikulmion piirtäminen", + "Import in a new layer": "Tuo uuteen kerrokseen", + "Layer": "Kerros", + "Please choose a format": "Valitse formaatti", + "Imports all umap data, including layers and settings.": "Tuo kaikki karttatiedot, mukaan lukien datatasot ja asetukset.", + "Invalid umap data": "Virheellistä uMap-dataa", + "Invalid umap data in {filename}": "Virheellistä uMap-dataa {filename}:ssa", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Klikkaa muokataksesi", + "Continue line": "Jatka viivaa", + "Delete this shape": "Poista tämä muoto", + "Make main shape": "Luo päämuoto", + "Merge lines": "Yhdistä rivit", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Siirrä muoto muokatuksi piirteeksi.", + "next": "seuraava", + "previous": "edellinen", + "Measure distances": "Mittaa etäisyyksiä", + "NM": "mpk", + "kilometers": "kilometriä", + "km": "km", + "mi": "mi", + "miles": "mailia", + "nautical miles": "meripeninkulmaa", + "{area} acres": "{area} eekkeriä", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} mpk", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} mailia", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Oletko varma että haluat palauttaa tämän version?", + "Extract shape to separate feature": "Irroita muoto erilliseksi piirteeksi.", + "Layer properties": "Datakerroksen ominaisuudet", + "Restore this version": "Palauta tämä versio", + "Versions": "Versiot", + "You have unsaved changes.": "Sinulla on tallentamattomia muutoksia.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Ikonin muoto", + "Icon symbol": "Ikonin symboli", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Linkitä kohteeseen...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "Ei tuloksia", + "Popup style": "Ponnahdusikkunan tyyli", + "Replace layer content": "Korvaa kerroksen sisältö", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Aseta URL", + "Shape properties": "Piirteen ominaisuudet", + "Simplify": "Yksinkertaista", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Kohdenna tähän paikkaan", + "always": "aina", + "clear": "clear", + "define": "määritä", + "hidden": "piilotettu", + "never": "ei koskaan", + "Automatic": "Automaattinen", + "Clone this feature": "Kloonaa tämä piirre", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Hallitse kerroksia", + "On the bottom": "Alhaalla", + "On the left": "Vasemmalla", + "On the right": "Oikealla", + "On the top": "Ylhäällä", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "laajennettu", + "iframe": "iframe", + "new window": "uusi ikkuna", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Poista kerros", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Alku", + "Delete all layers": "Poista kaikki kerrokset", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("fi", locale); +L.setLocale("fi"); \ No newline at end of file diff --git a/umap/static/umap/locale/fi.json b/umap/static/umap/locale/fi.json new file mode 100644 index 00000000..9726b95d --- /dev/null +++ b/umap/static/umap/locale/fi.json @@ -0,0 +1,350 @@ +{ + "About": "Tietoja", + "Action not allowed :(": "Toimenpide ei ole sallittu :(", + "Add a layer": "Lisää kerros", + "Add symbol": "Lisää symboli", + "Advanced actions": "Lisätoiminnot", + "Advanced properties": "Lisäominaisuudet", + "Allow scroll wheel zoom?": "Salli zoomaus hiiren rullalla? ", + "An error occured": "Hups! Virhe on tapahtunut...", + "Are you sure you want to cancel your changes?": "Oletko _ihan_ varma, että haluat peruuttaa muutoksesi?", + "Are you sure you want to clone this map and all its datalayers?": "Oletko varma että haluat kloonata tämän kartan ja kaikki sen data-kerrokset?", + "Are you sure you want to delete the feature?": "Oletko varma että haluat poistaa piirteen?", + "Are you sure you want to delete this map?": "Oletko ihan täysin varma, että haluat poistaa tämän kartan? Poistettua karttaa ei voi palauttaa.", + "Ball": "Pallo", + "Bring feature to center": "Tuo piirre keskelle", + "Browse data": "Selaa tietoja", + "Cancel": "Peruuta", + "Cancel edits": "Peruuta muokkaukset", + "Center map on your location": "Keskitä kartta sijaintiisi", + "Change map background": "Vaihda taustakarttaa", + "Change symbol": "Vaihda symboli", + "Change tilelayers": "Muuta karttavaihtoehtoja", + "Choose the format of the data to import": "Valitse tuotavien tietojen formaatti", + "Choose the layer of the feature": "Valitse piirteen kerros", + "Choose the layer to import in": "Valitse kerros johon tieto tuodaan", + "Circle": "Ympyrä", + "Clone this map": "Kloonaa tämä kartta", + "Default": "Oletusarvo", + "Delete": "Poista", + "Delete this feature": "Poista tämä piirre", + "Disable editing": "Lopeta kartan muokaaminen", + "Display on load": "Näytä ladattaessa", + "Do you want to display a minimap?": "Haluatko aktivoida minikartan?", + "Do you want to display popup footer?": "Haluatko näyttää ponnahdusikkunan alatunnisteen?", + "Do you want to display the scale control?": "Näytetäänkö mittakaavaohjain? ", + "Download data": "Lataa tietoja", + "Draw a line": "Piirrä viiva", + "Draw a marker": "Piirrä karttamerkki", + "Draw a polygon": "Piirrä monikulmio", + "Draw a polyline": "Piirrä monisegmenttinen viiva", + "Drop": "Pisara", + "Dynamic": "Dynaaminen", + "Edit": "Muokkaa", + "Edit feature's layer": "Muokkaa piirteen kerrosta", + "Edit map properties": "Muokkaa kartan ominaisuuksia", + "Edit map settings": "Muokkaa kartta-asetuksia", + "Edit this feature": "Muokkaa tätä piirrettä", + "Embed and share this map": "Jaa tämä kartta tai käytä sitä muualla", + "Enable editing": "Aktivoi kartan muokkaus", + "Format": "Formaatti", + "From zoom": "Zoomaustasolta", + "Go to «{feature}»": "Mene piirteeseen «{feature}»", + "Hide controls": "Piilota ohjaimet", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Kuinka paljon viivaa yleistetäänkullakin zoomaustasolla (enemmän = parempi suorituskyky, vähemmän = suurempi tarkkuus)", + "Import": "Tuo", + "Import data": "Tuo tietoja", + "Inherit": "Peri", + "Licence": "Lisenssi", + "Map background credits": "Taustakartan tekijämerkinnät", + "Map user content has been published under licence": "Kartan käyttäjien luomat tiedot on julkaistu lisenssillä", + "More controls": "Lisää ohjaimia", + "Optional. Same as color if not set.": "Valinnainen. Sama kuin väri jos ei asetettu. ", + "Optionnal.": "Valinnainen.", + "Paste here your data": "Liitä tiedot tähän", + "Please be sure the licence is compliant with your use.": "Huomioithan että valitsemasi lisenssi on yhteensopiva käyttösi kanssa.", + "Problem in the response": "Ongelma vastauksessa", + "Problem in the response format": "Ongelma vastauksen muodossa", + "Provide an URL here": "Syötä verkko-osoite tänne", + "Remote data": "Etä-tiedot", + "Save": "Tallenna", + "Save current edits": "Tallenna tämänhetkiset muokkaukset", + "Save this center and zoom": "Tallenna tämä kartan keskitys ja zoomaustaso", + "Show/hide layer": "Näytä/piilota kerros", + "Start editing": "Aloita muokkaus", + "Stop editing": "Lopeta muokkaus", + "The zoom and center have been setted.": "Kartan keskitys ja zoomaustaso on asetettu.", + "To zoom": "Zoomaukseen", + "Untitled layer": "Nimeämätön kerros", + "Untitled map": "Nimeämätön kartta", + "Update permissions and editors": "Päivitä oikeudet ja editori", + "Url": "URL", + "User content credits": "Käyttäjien luoman tiedon tuottajat:", + "Where do we go from here?": "Minnekäs sitten?", + "Zoom in": "Lähennä", + "Zoom out": "Loitonna", + "Zoom to layer extent": "Zoomaa tason laajuuteen", + "Zoom to this feature": "Kohdenna tähän piirteeseen", + "color": "väri", + "dash array": "katkoviivatyyppilista", + "description": "kuvaus", + "fill": "täyttö", + "fill color": "täyteväri", + "fill opacity": "täytön läpinäkyvyys", + "inherit": "peri", + "licence": "lisenssi", + "name": "nimi", + "no": "ei", + "opacity": "läpikuultavuus", + "stroke": "sivallus", + "weight": "paksuus", + "yes": "kyllä", + "Editing": "Muokkauksessa ", + "Embed the map": "Liitä kartta", + "Short URL": "Lyhyt URL", + "# one hash for main heading": "# yksi risuaita tekee päätason otsikon ", + "## two hashes for second heading": "## kaksi risuaitaa tekee kakkostason otsikon ", + "### three hashes for third heading": "### kolme risuaitaa tekee kolmostason otsikon ", + "**double star for bold**": "**tuplatähti lihavoi**", + "*simple star for italic*": "*yksi tähti kursivoi*", + "--- for an horizontal rule": "--- luo vaakasuoran erottimen kuplan halki", + "All properties are imported.": "Kaikki omainaisuudet tuodaan.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Pilkku-, tabulaattori- tai puolipiste-erotettuja arvoja. Koordinaattijärjestemänä WGS84. Vain pistegeometriat tuodaan uMapiin. Tietue-tuonti etsii «lat»- ja «lon»-alkavia sarakeotsikoita. Kaikki muut sarakkeet tuodaan ominaisuustietoina. ", + "Custom background": "Räätälöity tausta", + "Help": "Apua", + "Image: {{http://image.url.com}}": "Kuva: {{http://kuva.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Hyperlinkki tekstillä: [[http://esimerkkisaitti.fi|linkin teksti]]", + "Properties imported:": "Tuodut ominaisuudet:", + "Simple link: [[http://example.com]]": "Yksinkertainen linkki: [[http://esimerkki.fi]]", + "Supported scheme": "Tuettu muoto", + "Supported variables that will be dynamically replaced": "Tuetut muuttujat, jotka korvataan dynaamisesti", + "Text formatting": "Tekstin muotoilu", + "attribution": "Viittaukset tausta-aineiston lisenssiin", + "display name": "näytettävä nimi", + "max zoom": "suurin zoomaustaso", + "min zoom": "pienin zoomaustaso", + "Skipping unkown geometry.type: {type}": "Ohitetaan tuntematon geometry.type: {type}", + "Please save the map before": "Ole hyvä ja tallenna kartta ensin", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Piirteiden ominaisuuksia voi käyttää muuttujina: Esimeriksi \"http://myserver.org/images/{name}.png\" :n {name}-muuttuja korvataan kunkin karttamerkin name-kentän arvolla.", + "Transform to polygon": "Muunna monikulmioksi", + "Transform to lines": "Muunna viivoiksi", + "Choose the data format": "Valitse päivämäärän muoto", + "Error in the tilelayer URL": "Virhe karttalaattojen URL:ssä", + "Directions from here": "Ohjeet täältä", + "Choose a preset": "Valitse", + "Limit bounds": "Alueen rajaus", + "Use current bounds": "Käytä nykyistä rajausta", + "max East": "itäraja", + "max North": "pohjoisraja", + "max South": "eteläraja", + "max West": "länsiraja", + "TMS format": "TMS-formaatti", + "Credits": "Tunnustukset", + "Only visible features will be downloaded.": "Vain näkyvät piirteet ladataan.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Avaa rajauksen mukainen alue editorissa parantaaksesi OpenStreetMapin tietosisältöä.", + "Default properties": "Oletusasetukset", + "User interface options": "Käyttäjän käyttöliittymäoptiot", + "Image with custom width (in px): {{http://image.url.com|width}}": "Kuva määrätyn leveyisenä (pikseleinä): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Nykyinen näkymä oletuskarttanäkymän asemesta?", + "Iframe export options": "Iframe-vientiasetukset", + "Include full screen link?": "Sisällytä koko näyttö -linkki?", + "See full screen": "Katso koko näytöllä", + "height": "korkeus", + "width": "leveys", + "Clustered": "Klusteroituna", + "Clustering radius": "Klusterointisäde", + "GeoRSS (only link)": "GeoRSS (vain linkki)", + "GeoRSS (title + image)": "GeoRSS (otsikko + kuva)", + "Heatmap": "Lämpökartta", + "Heatmap radius": "Lämpökartan säde", + "Name and description": "Nimi ja kuvaus", + "Override clustering radius (default 80)": "Ohita klusterointisäde (oletus on 80)", + "Override heatmap radius (default 25)": "Ohita lämpökartan säde (oletus on 25)", + "Proxy request": "Välityspalvelinpyyntö", + "Table": "Taulukko", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Datakerroksen tyyppi", + "Filter…": "Suodata...", + "Heatmap intensity property": "Lämpökartan vahvuusominaisuus", + "Optional intensity property for heatmap": "Valinnainen lämpökartan vahvuusominaisuus", + "Caption": "Kuvateksti", + "Data browser": "Dataselain", + "Do you want to display a caption bar?": "Haluatko näyttää otsikkopalkin?", + "Do you want to display a panel on load?": "Haluatko näyttää paneelin ladattaessa?", + "None": "Ei mitään", + "by": "taholta", + "Name and description (large)": "Nimi ja kuvaus (suuri)", + "Empty": "Tyhjä", + "Split line": "Pilko/katkaise viiva", + "Clone": "Kloonaa", + "Clone of {name}": "{name}n klooni", + "Side panel": "Sivupaneeli", + "Powered by Leaflet and Django, glued by uMap project.": "Konepellin alla hyrrää Leaflet ja Django; uMap-projektin kasaan liimaamana.", + "Zoom level for automatic zooms": "Zoomaustaso automaattisessa zoomauksessa", + "Do you want to display the «more» control?": "Haluatko näyttää «lisää»-ohjaimen?", + "Auto": "Automaattinen", + "Default: name": "Oletus: nimi", + "Property to use for sorting features": "Ominaisuus jonka mukaan piirteet järjestetään", + "Slideshow": "Kuvaesitys", + "Start slideshow": "Aloita kuvaesitys", + "Stop slideshow": "Lopeta kuvaesitys", + "Text color for the cluster label": "Tekstin väri klusterietiketissä", + "Zoom to the next": "Kohdenna seuraavaan", + "Zoom to the previous": "Kohdenna edelliseen", + "Add a new property": "Lisää uusi ominaisuus", + "Are you sure you want to delete this property on all the features?": "Oletko varma että haluat poistaa tämän ominaisuuden kaikista piirteistä?", + "Close": "Sulje", + "Delete this property on all the features": "Poista tämä ominaisuus kaikista piirteistä", + "Edit properties in a table": "Muokkaa ominaisuuksia taulukossa", + "Please enter the name of the property": "Kirjoita ominaisuuden nimi", + "Please enter the new name of this property": "Kirjoita ominaisuuden uusi nimi", + "Rename this property on all the features": "Uudelleen nimeä tämä ominaisuus kaikissa piirteissä", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe määrätyn korkuisena (pikseleinä): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Näytä kaikki", + "Dynamic properties": "Dynaamiset ominaisuudet", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Pitkät tekijätiedot", + "No licence has been set": "Lisenssiä ei ole määritetty", + "Popup content template": "Ponnahdusikkunan sisällön sapluuna", + "Short credits": "Lyhyet tekijätiedot", + "Will be displayed in the bottom right corner of the map": "Näytetään kartan oikeassa alakulmassa", + "Will be visible in the caption of the map": "Näytetään kartan kuvatekstinä", + "Map has been saved!": "Kartta on tallennettu!", + "Save anyway": "Tallenna joka tapauksessa", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Hupsankeikkaa! Joku muu on näemmä muokannut tietoja. Voit tallentaa joka tapauksessa, mutta tallentamisesi poistaa muiden muokkaukset.", + "Comma separated list of properties to use when filtering features": "Pilkkueroteltu lista käytettävistä ominaisuuksista piirteitä suodatettaessa.", + "Keep current visible layers": "Pidä nyt näkyvät datakerrokset", + "Coordinates": "Koordinaatit", + "Latitude": "Leveysaste", + "Longitude": "Pituusaste", + "Continue line (Ctrl-click)": "Jatka viivaa (Ctrl+Klikkaus)", + "Start a hole here": "Aloita reikä tässä", + "Click last point to finish shape": "Klikkaa viimeistä pistettä täydentääksesi muodon", + "Click to add a marker": "Klikkaa lisätäksesi karttamerkki", + "Click to continue drawing": "Klikkaa jatkaaksesi piirtämistä", + "Click to start drawing a line": "Klikkaa aloittaaksesi viivan piirtäminen", + "Click to start drawing a polygon": "Klikkaa aloittaaksesi monikulmion piirtäminen", + "Import in a new layer": "Tuo uuteen kerrokseen", + "Layer": "Kerros", + "Please choose a format": "Valitse formaatti", + "Imports all umap data, including layers and settings.": "Tuo kaikki karttatiedot, mukaan lukien datatasot ja asetukset.", + "Invalid umap data": "Virheellistä uMap-dataa", + "Invalid umap data in {filename}": "Virheellistä uMap-dataa {filename}:ssa", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Klikkaa muokataksesi", + "Continue line": "Jatka viivaa", + "Delete this shape": "Poista tämä muoto", + "Make main shape": "Luo päämuoto", + "Merge lines": "Yhdistä rivit", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Siirrä muoto muokatuksi piirteeksi.", + "next": "seuraava", + "previous": "edellinen", + "Measure distances": "Mittaa etäisyyksiä", + "NM": "mpk", + "kilometers": "kilometriä", + "km": "km", + "mi": "mi", + "miles": "mailia", + "nautical miles": "meripeninkulmaa", + "{area} acres": "{area} eekkeriä", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} mpk", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} mailia", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Oletko varma että haluat palauttaa tämän version?", + "Extract shape to separate feature": "Irroita muoto erilliseksi piirteeksi.", + "Layer properties": "Datakerroksen ominaisuudet", + "Restore this version": "Palauta tämä versio", + "Versions": "Versiot", + "You have unsaved changes.": "Sinulla on tallentamattomia muutoksia.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Ikonin muoto", + "Icon symbol": "Ikonin symboli", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Linkitä kohteeseen...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "Ei tuloksia", + "Popup style": "Ponnahdusikkunan tyyli", + "Replace layer content": "Korvaa kerroksen sisältö", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Aseta URL", + "Shape properties": "Piirteen ominaisuudet", + "Simplify": "Yksinkertaista", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Kohdenna tähän paikkaan", + "always": "aina", + "clear": "clear", + "define": "määritä", + "hidden": "piilotettu", + "never": "ei koskaan", + "Automatic": "Automaattinen", + "Clone this feature": "Kloonaa tämä piirre", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Hallitse kerroksia", + "On the bottom": "Alhaalla", + "On the left": "Vasemmalla", + "On the right": "Oikealla", + "On the top": "Ylhäällä", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "laajennettu", + "iframe": "iframe", + "new window": "uusi ikkuna", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Poista kerros", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Alku", + "Delete all layers": "Poista kaikki kerrokset", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/fr.js b/umap/static/umap/locale/fr.js new file mode 100644 index 00000000..4c5bd47c --- /dev/null +++ b/umap/static/umap/locale/fr.js @@ -0,0 +1,352 @@ +var locale = { + "About": "À propos", + "Action not allowed :(": "Action non autorisée :(", + "Add a layer": "Ajouter un calque", + "Add symbol": "Ajouter un symbole", + "Advanced actions": "Actions avancées", + "Advanced properties": "Propriétés avancées", + "Allow scroll wheel zoom?": "Autoriser le zoom avec la molette ?", + "An error occured": "Une erreur est survenue", + "Are you sure you want to cancel your changes?": "Êtes-vous sûr de vouloir annuler vos modifications ?", + "Are you sure you want to clone this map and all its datalayers?": "Êtes-vous sûr de vouloir cloner cette carte et ses calques de données?", + "Are you sure you want to delete the feature?": "Êtes-vous sûr de vouloir supprimer cet élément?", + "Are you sure you want to delete this map?": "Êtes-vous sûr de vouloir supprimer cette carte?", + "Ball": "Épingle", + "Bring feature to center": "Centrer la carte sur cet élément", + "Browse data": "Visualiser les données", + "Cancel": "Annuler", + "Cancel edits": "Annuler les modifications", + "Center map on your location": "Centrer la carte sur votre position", + "Change map background": "Changer le fond de carte", + "Change symbol": "Changer le pictogramme", + "Change tilelayers": "Changer le fond de carte", + "Choose the format of the data to import": "Choisir le format des données pour l'import", + "Choose the layer of the feature": "Choisir le calque de l'élément", + "Choose the layer to import in": "Choisir le calque de données pour l'import", + "Circle": "Cercle", + "Clone this map": "Cloner cette carte", + "Default": "Par défaut", + "Delete": "Supprimer", + "Delete this feature": "Supprimer cet élément", + "Disable editing": "Désactiver l'édition", + "Display on load": "Afficher au chargement", + "Do you want to display a minimap?": "Voulez-vous afficher une mini carte de situation?", + "Do you want to display popup footer?": "Voulez-vous afficher les boutons de navigation en bas des popups?", + "Do you want to display the scale control?": "Voulez-vous afficher l'échelle de la carte?", + "Download data": "Télécharger les données", + "Draw a line": "Dessiner une ligne", + "Draw a marker": "Ajouter un marqueur", + "Draw a polygon": "Dessiner un polygone", + "Draw a polyline": "Dessiner une ligne", + "Drop": "Goutte", + "Dynamic": "Dynamique", + "Edit": "Éditer", + "Edit feature's layer": "Éditer le calque de l'élément", + "Edit map properties": "Éditer les propriétés de la carte", + "Edit map settings": "Éditer les paramètres", + "Edit this feature": "Éditer cet élément", + "Embed and share this map": "Exporter et partager la carte", + "Enable editing": "Activer l'édition", + "Format": "Format", + "From zoom": "À partir du zoom", + "Go to «{feature}»": "Naviguer jusqu'à «{feature}»", + "Hide controls": "Masquer les outils", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Valeur de simplification des lignes pour chaque niveau de zoom (grand nombre = meilleure performance, petit nombre = plus précis)", + "Import": "Importer", + "Import data": "Importer des données", + "Inherit": "Hériter", + "Licence": "Licence", + "Map background credits": "Crédits pour le fond de carte", + "Map user content has been published under licence": "Les contenus sur la carte ont été publiés avec la licence", + "More controls": "Plus d'outils", + "Optional. Same as color if not set.": "Optionnel. La couleur principale sera utilisée si laissé vide.", + "Optionnal.": "Optionnel.", + "Paste here your data": "Collez vos données ici", + "Please be sure the licence is compliant with your use.": "Pensez à vérifier que la licence de ces données vous autorise à les utiliser.", + "Problem in the response": "Problème dans la réponse du serveur", + "Problem in the response format": "Problème dans le format de la réponse", + "Provide an URL here": "Renseigner une URL", + "Remote data": "Données distantes", + "Save": "Enregistrer", + "Save current edits": "Enregistrer les changements courants", + "Save this center and zoom": "Enregistrer le zoom et le centre actuels", + "Show/hide layer": "Montrer/masquer un calque", + "Start editing": "Passer en mode édition", + "Stop editing": "Quitter le mode édition", + "The zoom and center have been setted.": "Le zoom et le centre ont été enregistrés.", + "To zoom": "Jusqu'au zoom", + "Untitled layer": "Calque sans nom", + "Untitled map": "Carte sans nom", + "Update permissions and editors": "Changer les permissions et les éditeurs", + "Url": "URL", + "User content credits": "Crédit pour le contenu utilisateur", + "Where do we go from here?": "C'est par où pour aller plus loin?", + "Zoom in": "Zoomer", + "Zoom out": "Dézoomer", + "Zoom to layer extent": "Zoomer jusqu'à voir les données du calque", + "Zoom to this feature": "Zoomer sur cet élément", + "color": "Couleur", + "dash array": "traitillé", + "description": "description", + "fill": "remplissage", + "fill color": "couleur de remplissage", + "fill opacity": "opacité du remplissage", + "inherit": "hériter", + "licence": "licence", + "name": "nom", + "no": "non", + "opacity": "opacité", + "stroke": "trait", + "weight": "épaisseur", + "yes": "oui", + "Editing": "Edition en cours", + "Embed the map": "Intégrer la carte dans une iframe", + "Short URL": "URL courte", + "# one hash for main heading": "# un dièse pour titre 1", + "## two hashes for second heading": "## deux dièses pour titre 2", + "### three hashes for third heading": "### trois dièses pour titre 3", + "**double star for bold**": "**double astérisque pour gras**", + "*simple star for italic*": "*simple astérisque pour italique*", + "--- for an horizontal rule": "--- pour un séparateur horizontal", + "All properties are imported.": "Toutes les propriétés sont importées.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Virgule, tabulation ou point-virgule pour séparer des valeurs. SRS WGS84 est implicite. Seuls les points géométriques sont importés. L'importation se référera au titre dans les entêtes de colonnes de «lat» et «lon» au début de l'en-tête, et est insensible à la casse. Toutes les autres colonne sont importées en tant que propriétés.", + "Custom background": "Fond de carte personnalisé", + "Help": "Aide", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Lien avec texte: [[http://exemple.fr|texte du lien]]", + "Properties imported:": "Propriétés importées:", + "Simple link: [[http://example.com]]": "Lien simple: [[https://exemple.fr]]", + "Supported scheme": "Schéma supporté", + "Supported variables that will be dynamically replaced": "Variables qui seront automatiquement remplacées", + "Text formatting": "Mise en forme du texte", + "attribution": "attribution", + "display name": "nom", + "max zoom": "zoom max", + "min zoom": "zoom min", + "Skipping unkown geometry.type: {type}": "Le type de géométrie suivant a été ignoré : {type}", + "Please save the map before": "Vous devez d'abord enregistrer la carte", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Vous pouvez utiliser des propriétés des marqueurs comme variables : par exemple avec \"http://myserver.org/images/{name}.png\", la variable {name} sera remplacée par la valeur du \"name\" de chacun des marqueurs.", + "Transform to polygon": "Transformer en polygone", + "Transform to lines": "Transformer en lignes", + "Choose the data format": "Choisir le format des données", + "Error in the tilelayer URL": "Erreur dans l'URL du fond de carte", + "Directions from here": "Itinéraire à partir de ce lieu", + "Choose a preset": "Choisir dans les présélections", + "Limit bounds": "Limites géographiques", + "Use current bounds": "Utiliser la vue courante", + "max East": "limite est", + "max North": "limite nord", + "max South": "limite sud", + "max West": "limite ouest", + "TMS format": "format de type TMS", + "Credits": "Crédits", + "Only visible features will be downloaded.": "Seuls les éléments visibles seront téléchargés.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Ouvrir cette carte dans un éditeur OpenStreetMap pour améliorer les données", + "Default properties": "Propriétés par défaut", + "User interface options": "Options d'interface", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image avec largeur (en pixels) : {{http://image.url.com|largeur}}", + "Current view instead of default map view?": "Vue courante plutôt que la vue par défaut ?", + "Iframe export options": "Options d'export de l'iframe", + "Include full screen link?": "Inclure le lien \"plein écran\" ?", + "See full screen": "Voir en plein écran", + "height": "hauteur", + "width": "largeur", + "Clustered": "Avec cluster", + "Clustering radius": "Rayon du cluster", + "GeoRSS (only link)": "GeoRSS (lien seul)", + "GeoRSS (title + image)": "GeoRSS (titre + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Rayon de heatmap", + "Name and description": "Nom et description", + "Override clustering radius (default 80)": "Valeur de rayon personnalisée pour le cluster (par défaut: 80)", + "Override heatmap radius (default 25)": "Valeur de rayon personnalisée pour la heatmap (par défaut: 80)", + "Proxy request": "Avec proxy", + "Table": "Tableau", + "To use if remote server doesn't allow cross domain (slower)": "Cocher si le serveur distant n'autorise pas le cross domain (plus lent)", + "Type of layer": "Type de calque", + "Filter…": "Filtrer…", + "Heatmap intensity property": "Propriété pour l'intensité de la heatmap", + "Optional intensity property for heatmap": "Propriété optionnelle à utiliser pour calculer l'intensité de la heatmap", + "Caption": "Légende", + "Data browser": "Visualiseur de données", + "Do you want to display a caption bar?": "Voulez-vous afficher une barre de légende", + "Do you want to display a panel on load?": "Voulez-vous afficher un panneau latéral au chargement?", + "None": "Aucun", + "by": "par", + "Name and description (large)": "Nom et description (large)", + "Empty": "Vider", + "Split line": "Scinder la ligne", + "Clone": "Cloner", + "Clone of {name}": "Clone de {name}", + "Side panel": "Panneau latéral", + "Powered by Leaflet and Django, glued by uMap project.": "Propulsé par Leaflet et Django, mis en musique par uMap project.", + "Zoom level for automatic zooms": "Niveau de zoom automatique", + "Do you want to display the «more» control?": "Voulez-vous afficher le bouton «Plus»?", + "Auto": "Auto", + "Default: name": "Par défaut: name", + "Property to use for sorting features": "Propriété utilisée pour trier les éléments", + "Slideshow": "Diaporama", + "Start slideshow": "Commencer", + "Stop slideshow": "Arrêter", + "Text color for the cluster label": "Couleur du texte du cluster", + "Zoom to the next": "Suivant", + "Zoom to the previous": "Précédent", + "Add a new property": "Ajouter une propriété", + "Are you sure you want to delete this property on all the features?": "Supprimer la propriété sur tous les éléments ?", + "Close": "Fermer", + "Delete this property on all the features": "Supprimer cette propriété", + "Edit properties in a table": "Éditer dans un tableau", + "Please enter the name of the property": "Merci d'entrer le nom de la propriété", + "Please enter the new name of this property": "Veuillez entrer le nouveau nom de la propriété", + "Rename this property on all the features": "Renommer la propriété", + "If false, the polygon will act as a part of the underlying map.": "Choisir «non» pour que le polygone se comporte comme faisant partie du fond de carte.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe avec hauteur (en pixels): {{{http://iframe.url.com|hauteur}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Tout voir", + "Dynamic properties": "Propriétés dynamiques", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Utilisez des variables avec les noms de propriétés de vos éléments entre accolades, ex. {name}, elles seront remplacées dynamiquement par les valeurs correspondantes.", + "Long credits": "Crédit", + "No licence has been set": "Aucune licence définie", + "Popup content template": "Gabarit du contenu de la popup", + "Short credits": "Crédit court", + "Will be displayed in the bottom right corner of the map": "S'affiche dans le coin en bas à droite de la carte", + "Will be visible in the caption of the map": "Sera visible dans la légende de la carte", + "Map has been saved!": "La carte a été sauvegardée!", + "Save anyway": "Continuer", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Aïe! Quelqu'un d'autre semble avoir modifié la carte. Vous pouvez continuer l'enregistrement, mais ses données seront perdues.", + "Comma separated list of properties to use when filtering features": "Propriétés à utiliser pour filtrer les éléments (séparées par des virgules)", + "Keep current visible layers": "Garder les calques visibles actuellement", + "Coordinates": "Coordonnées", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue la ligne (Ctrl-clic)", + "Start a hole here": "Ajouter un tracé intérieur", + "Click last point to finish shape": "Cliquer sur le dernier point pour finir le tracé", + "Click to add a marker": "Cliquer pour ajouter le marqueur", + "Click to continue drawing": "Cliquer pour continuer le tracé", + "Click to start drawing a line": "Cliquer pour commencer une ligne", + "Click to start drawing a polygon": "Cliquer pour commencer un polygone", + "Import in a new layer": "Importer dans un nouveau calque", + "Layer": "Calque", + "Please choose a format": "Merci de choisir un format", + "Imports all umap data, including layers and settings.": "Importer toutes les données de la carte, y compris les couches et les propriétés", + "Invalid umap data": "Données uMap invalides", + "Invalid umap data in {filename}": "Les données du fichier {filename} ne sont pas valides comme format uMap", + "Add a line to the current multi": "Ajouter une ligne au groupe courant", + "Add a polygon to the current multi": "Ajouter un polygon au groupe courant", + "Click to edit": "Cliquer pour modifier", + "Continue line": "Continuer la ligne", + "Delete this shape": "Supprimer ce tracé", + "Make main shape": "Tracé principal", + "Merge lines": "Fusionner les lignes", + "Remove shape from the multi": "Extraire le tracé du groupe", + "Transfer shape to edited feature": "Adjoindre le tracé au groupe courant", + "next": "suivant", + "previous": "précédent", + "Measure distances": "Mesurer les distances", + "NM": "NM", + "kilometers": "kilomètres", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "miles nautiques", + "{area} acres": "{area} hectares", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Êtes-vous sûr de vouloir restaurer cette version?", + "Extract shape to separate feature": "Extraire la forme", + "Layer properties": "Propriétés de la couche", + "Restore this version": "Restaurer cette version", + "Versions": "Versions", + "You have unsaved changes.": "Vous avez des changements non sauvegardés.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Liste de nombre séparés par une virgule, définissant les tirets et espace. Ex.: \"5, 10, 15\".", + "Advanced transition": "Transition avancée", + "Allow interactions": "Autoriser les interactions", + "Autostart when map is loaded": "Lancer au chargement de la carte", + "Default interaction options": "Options d'interaction par défaut", + "Default shape properties": "Propriétés de forme par défaut", + "Default zoom level": "Niveau de zoom par défaut", + "Define link to open in a new window on polygon click.": "Définit un lien à ouvrir dans une nouvelle fenêtre au clic sur le polygone.", + "Delete this vertex (Alt-click)": "Supprimer ce point (Alt-clic)", + "Display the control to open OpenStreetMap editor": "Afficher le bouton pour ouvrir l'éditeur d'OpenStreetMap", + "Display the data layers control": "Afficher le bouton d''accès rapide aux couches de données", + "Display the embed control": "Afficher le bouton de partage", + "Display the fullscreen control": "Afficher le bouton de plein écran", + "Display the locate control": "Afficher le bouton de localisation", + "Display the measure control": "Afficher le bouton de mesures", + "Display the search control": "Afficher le bouton de recherche", + "Display the tile layers control": "Afficher le bouton permettant de changer le fond de carte", + "Display the zoom control": "Afficher les boutons de zoom", + "Exit Fullscreen": "Quitter le plein écran", + "Fetch data each time map view changes.": "Récupère les données à chaque fois que la vue de la carte change.", + "Filter keys": "Clés de filtre", + "Icon shape": "Forme de l'icône", + "Icon symbol": "Image de l'icône", + "Interaction options": "Options d'interaction", + "Label key": "Clé pour le libellé", + "Link to…": "Lien vers…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Doit être une valeur CSS valide (ex.: DarkBlue ou #123456)", + "No results": "Aucun résultat", + "Popup style": "Style de popup", + "Replace layer content": "Remplacer le contenu du calque", + "Save this location as new feature": "Enregistrer ce lieu comme élément de la carte", + "Search location": "Chercher un lieu", + "Set URL": "Définir l'URL", + "Shape properties": "Propriétés de la forme", + "Simplify": "Simplifier", + "Sort key": "Clé de tri", + "The name of the property to use as feature label (ex.: \"nom\")": "Le nom de la propriété à utiliser comme libellé des éléments (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Alterner le mode édition (shift-clic)", + "View Fullscreen": "Voir en plein écran", + "Whether to display or not polygons paths.": "Afficher les contours des polygones.", + "Whether to fill polygons with color.": "Remplir les polygones avec de la couleur.", + "Zoom to this place": "Zoomer vers ce lieu", + "always": "toujours", + "clear": "effacer", + "define": "définir", + "hidden": "caché", + "never": "jamais", + "Automatic": "Automatique", + "Clone this feature": "Dupliquer", + "Display label": "Afficher une étiquette", + "Drag to reorder": "Glisser pour réordonner", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe avec hauteur et largeur (en px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Étiquette cliquable", + "Label direction": "Direction de l'étiquette", + "Manage layers": "Gérer les calques", + "On the bottom": "Bas", + "On the left": "Gauche", + "On the right": "Droite", + "On the top": "Haut", + "Only display label on mouse hover": "Afficher seulement au survol", + "Open link in…": "Ouvrir le lien dans…", + "Unable to detect format of file {filename}": "Impossible de détecter le format du fichier {filename}", + "collapsed": "fermé", + "expanded": "ouvert", + "iframe": "iframe", + "new window": "nouvelle fenêtre", + "parent window": "fenêtre parente", + "{count} errors during import: {message}": "{count} erreurs pendant l'import: {message}", + "Are you sure you want to delete this layer?": "Voulez-vous vraiment supprimer ce calque?", + "Delete layer": "Supprimer le calque", + "Error while fetching {url}": "Erreur en appelant l'URL {url}", + "Home": "Accueil", + "Delete all layers": "Supprimer tous les calques", + "Full map data": "Données complètes de la carte", + "Smart transitions": "Transitions animées", + "Activate slideshow mode": "Activer le mode diaporama", + "Data is browsable": "Données naviguables", + "Delay between two transitions when in play mode": "Délai entre les transitions en mode lecture", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Désactiver pour masquer ce calque du diaporama, du navigateur de données…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Afficher les dimensions" +}; +L.registerLocale("fr", locale); +L.setLocale("fr"); \ No newline at end of file diff --git a/umap/static/umap/locale/fr.json b/umap/static/umap/locale/fr.json new file mode 100644 index 00000000..c8f2b946 --- /dev/null +++ b/umap/static/umap/locale/fr.json @@ -0,0 +1,350 @@ +{ + "About": "À propos", + "Action not allowed :(": "Action non autorisée :(", + "Add a layer": "Ajouter un calque", + "Add symbol": "Ajouter un symbole", + "Advanced actions": "Actions avancées", + "Advanced properties": "Propriétés avancées", + "Allow scroll wheel zoom?": "Autoriser le zoom avec la molette ?", + "An error occured": "Une erreur est survenue", + "Are you sure you want to cancel your changes?": "Êtes-vous sûr de vouloir annuler vos modifications ?", + "Are you sure you want to clone this map and all its datalayers?": "Êtes-vous sûr de vouloir cloner cette carte et ses calques de données?", + "Are you sure you want to delete the feature?": "Êtes-vous sûr de vouloir supprimer cet élément?", + "Are you sure you want to delete this map?": "Êtes-vous sûr de vouloir supprimer cette carte?", + "Ball": "Épingle", + "Bring feature to center": "Centrer la carte sur cet élément", + "Browse data": "Visualiser les données", + "Cancel": "Annuler", + "Cancel edits": "Annuler les modifications", + "Center map on your location": "Centrer la carte sur votre position", + "Change map background": "Changer le fond de carte", + "Change symbol": "Changer le pictogramme", + "Change tilelayers": "Changer le fond de carte", + "Choose the format of the data to import": "Choisir le format des données pour l'import", + "Choose the layer of the feature": "Choisir le calque de l'élément", + "Choose the layer to import in": "Choisir le calque de données pour l'import", + "Circle": "Cercle", + "Clone this map": "Cloner cette carte", + "Default": "Par défaut", + "Delete": "Supprimer", + "Delete this feature": "Supprimer cet élément", + "Disable editing": "Désactiver l'édition", + "Display on load": "Afficher au chargement", + "Do you want to display a minimap?": "Voulez-vous afficher une mini carte de situation?", + "Do you want to display popup footer?": "Voulez-vous afficher les boutons de navigation en bas des popups?", + "Do you want to display the scale control?": "Voulez-vous afficher l'échelle de la carte?", + "Download data": "Télécharger les données", + "Draw a line": "Dessiner une ligne", + "Draw a marker": "Ajouter un marqueur", + "Draw a polygon": "Dessiner un polygone", + "Draw a polyline": "Dessiner une ligne", + "Drop": "Goutte", + "Dynamic": "Dynamique", + "Edit": "Éditer", + "Edit feature's layer": "Éditer le calque de l'élément", + "Edit map properties": "Éditer les propriétés de la carte", + "Edit map settings": "Éditer les paramètres", + "Edit this feature": "Éditer cet élément", + "Embed and share this map": "Exporter et partager la carte", + "Enable editing": "Activer l'édition", + "Format": "Format", + "From zoom": "À partir du zoom", + "Go to «{feature}»": "Naviguer jusqu'à «{feature}»", + "Hide controls": "Masquer les outils", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Valeur de simplification des lignes pour chaque niveau de zoom (grand nombre = meilleure performance, petit nombre = plus précis)", + "Import": "Importer", + "Import data": "Importer des données", + "Inherit": "Hériter", + "Licence": "Licence", + "Map background credits": "Crédits pour le fond de carte", + "Map user content has been published under licence": "Les contenus sur la carte ont été publiés avec la licence", + "More controls": "Plus d'outils", + "Optional. Same as color if not set.": "Optionnel. La couleur principale sera utilisée si laissé vide.", + "Optionnal.": "Optionnel.", + "Paste here your data": "Collez vos données ici", + "Please be sure the licence is compliant with your use.": "Pensez à vérifier que la licence de ces données vous autorise à les utiliser.", + "Problem in the response": "Problème dans la réponse du serveur", + "Problem in the response format": "Problème dans le format de la réponse", + "Provide an URL here": "Renseigner une URL", + "Remote data": "Données distantes", + "Save": "Enregistrer", + "Save current edits": "Enregistrer les changements courants", + "Save this center and zoom": "Enregistrer le zoom et le centre actuels", + "Show/hide layer": "Montrer/masquer un calque", + "Start editing": "Passer en mode édition", + "Stop editing": "Quitter le mode édition", + "The zoom and center have been setted.": "Le zoom et le centre ont été enregistrés.", + "To zoom": "Jusqu'au zoom", + "Untitled layer": "Calque sans nom", + "Untitled map": "Carte sans nom", + "Update permissions and editors": "Changer les permissions et les éditeurs", + "Url": "URL", + "User content credits": "Crédit pour le contenu utilisateur", + "Where do we go from here?": "C'est par où pour aller plus loin?", + "Zoom in": "Zoomer", + "Zoom out": "Dézoomer", + "Zoom to layer extent": "Zoomer jusqu'à voir les données du calque", + "Zoom to this feature": "Zoomer sur cet élément", + "color": "Couleur", + "dash array": "traitillé", + "description": "description", + "fill": "remplissage", + "fill color": "couleur de remplissage", + "fill opacity": "opacité du remplissage", + "inherit": "hériter", + "licence": "licence", + "name": "nom", + "no": "non", + "opacity": "opacité", + "stroke": "trait", + "weight": "épaisseur", + "yes": "oui", + "Editing": "Edition en cours", + "Embed the map": "Intégrer la carte dans une iframe", + "Short URL": "URL courte", + "# one hash for main heading": "# un dièse pour titre 1", + "## two hashes for second heading": "## deux dièses pour titre 2", + "### three hashes for third heading": "### trois dièses pour titre 3", + "**double star for bold**": "**double astérisque pour gras**", + "*simple star for italic*": "*simple astérisque pour italique*", + "--- for an horizontal rule": "--- pour un séparateur horizontal", + "All properties are imported.": "Toutes les propriétés sont importées.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Virgule, tabulation ou point-virgule pour séparer des valeurs. SRS WGS84 est implicite. Seuls les points géométriques sont importés. L'importation se référera au titre dans les entêtes de colonnes de «lat» et «lon» au début de l'en-tête, et est insensible à la casse. Toutes les autres colonne sont importées en tant que propriétés.", + "Custom background": "Fond de carte personnalisé", + "Help": "Aide", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Lien avec texte: [[http://exemple.fr|texte du lien]]", + "Properties imported:": "Propriétés importées:", + "Simple link: [[http://example.com]]": "Lien simple: [[https://exemple.fr]]", + "Supported scheme": "Schéma supporté", + "Supported variables that will be dynamically replaced": "Variables qui seront automatiquement remplacées", + "Text formatting": "Mise en forme du texte", + "attribution": "attribution", + "display name": "nom", + "max zoom": "zoom max", + "min zoom": "zoom min", + "Skipping unkown geometry.type: {type}": "Le type de géométrie suivant a été ignoré : {type}", + "Please save the map before": "Vous devez d'abord enregistrer la carte", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Vous pouvez utiliser des propriétés des marqueurs comme variables : par exemple avec \"http://myserver.org/images/{name}.png\", la variable {name} sera remplacée par la valeur du \"name\" de chacun des marqueurs.", + "Transform to polygon": "Transformer en polygone", + "Transform to lines": "Transformer en lignes", + "Choose the data format": "Choisir le format des données", + "Error in the tilelayer URL": "Erreur dans l'URL du fond de carte", + "Directions from here": "Itinéraire à partir de ce lieu", + "Choose a preset": "Choisir dans les présélections", + "Limit bounds": "Limites géographiques", + "Use current bounds": "Utiliser la vue courante", + "max East": "limite est", + "max North": "limite nord", + "max South": "limite sud", + "max West": "limite ouest", + "TMS format": "format de type TMS", + "Credits": "Crédits", + "Only visible features will be downloaded.": "Seuls les éléments visibles seront téléchargés.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Ouvrir cette carte dans un éditeur OpenStreetMap pour améliorer les données", + "Default properties": "Propriétés par défaut", + "User interface options": "Options d'interface", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image avec largeur (en pixels) : {{http://image.url.com|largeur}}", + "Current view instead of default map view?": "Vue courante plutôt que la vue par défaut ?", + "Iframe export options": "Options d'export de l'iframe", + "Include full screen link?": "Inclure le lien \"plein écran\" ?", + "See full screen": "Voir en plein écran", + "height": "hauteur", + "width": "largeur", + "Clustered": "Avec cluster", + "Clustering radius": "Rayon du cluster", + "GeoRSS (only link)": "GeoRSS (lien seul)", + "GeoRSS (title + image)": "GeoRSS (titre + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Rayon de heatmap", + "Name and description": "Nom et description", + "Override clustering radius (default 80)": "Valeur de rayon personnalisée pour le cluster (par défaut: 80)", + "Override heatmap radius (default 25)": "Valeur de rayon personnalisée pour la heatmap (par défaut: 80)", + "Proxy request": "Avec proxy", + "Table": "Tableau", + "To use if remote server doesn't allow cross domain (slower)": "Cocher si le serveur distant n'autorise pas le cross domain (plus lent)", + "Type of layer": "Type de calque", + "Filter…": "Filtrer…", + "Heatmap intensity property": "Propriété pour l'intensité de la heatmap", + "Optional intensity property for heatmap": "Propriété optionnelle à utiliser pour calculer l'intensité de la heatmap", + "Caption": "Légende", + "Data browser": "Visualiseur de données", + "Do you want to display a caption bar?": "Voulez-vous afficher une barre de légende", + "Do you want to display a panel on load?": "Voulez-vous afficher un panneau latéral au chargement?", + "None": "Aucun", + "by": "par", + "Name and description (large)": "Nom et description (large)", + "Empty": "Vider", + "Split line": "Scinder la ligne", + "Clone": "Cloner", + "Clone of {name}": "Clone de {name}", + "Side panel": "Panneau latéral", + "Powered by Leaflet and Django, glued by uMap project.": "Propulsé par Leaflet et Django, mis en musique par uMap project.", + "Zoom level for automatic zooms": "Niveau de zoom automatique", + "Do you want to display the «more» control?": "Voulez-vous afficher le bouton «Plus»?", + "Auto": "Auto", + "Default: name": "Par défaut: name", + "Property to use for sorting features": "Propriété utilisée pour trier les éléments", + "Slideshow": "Diaporama", + "Start slideshow": "Commencer", + "Stop slideshow": "Arrêter", + "Text color for the cluster label": "Couleur du texte du cluster", + "Zoom to the next": "Suivant", + "Zoom to the previous": "Précédent", + "Add a new property": "Ajouter une propriété", + "Are you sure you want to delete this property on all the features?": "Supprimer la propriété sur tous les éléments ?", + "Close": "Fermer", + "Delete this property on all the features": "Supprimer cette propriété", + "Edit properties in a table": "Éditer dans un tableau", + "Please enter the name of the property": "Merci d'entrer le nom de la propriété", + "Please enter the new name of this property": "Veuillez entrer le nouveau nom de la propriété", + "Rename this property on all the features": "Renommer la propriété", + "If false, the polygon will act as a part of the underlying map.": "Choisir «non» pour que le polygone se comporte comme faisant partie du fond de carte.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe avec hauteur (en pixels): {{{http://iframe.url.com|hauteur}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Tout voir", + "Dynamic properties": "Propriétés dynamiques", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Utilisez des variables avec les noms de propriétés de vos éléments entre accolades, ex. {name}, elles seront remplacées dynamiquement par les valeurs correspondantes.", + "Long credits": "Crédit", + "No licence has been set": "Aucune licence définie", + "Popup content template": "Gabarit du contenu de la popup", + "Short credits": "Crédit court", + "Will be displayed in the bottom right corner of the map": "S'affiche dans le coin en bas à droite de la carte", + "Will be visible in the caption of the map": "Sera visible dans la légende de la carte", + "Map has been saved!": "La carte a été sauvegardée!", + "Save anyway": "Continuer", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Aïe! Quelqu'un d'autre semble avoir modifié la carte. Vous pouvez continuer l'enregistrement, mais ses données seront perdues.", + "Comma separated list of properties to use when filtering features": "Propriétés à utiliser pour filtrer les éléments (séparées par des virgules)", + "Keep current visible layers": "Garder les calques visibles actuellement", + "Coordinates": "Coordonnées", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue la ligne (Ctrl-clic)", + "Start a hole here": "Ajouter un tracé intérieur", + "Click last point to finish shape": "Cliquer sur le dernier point pour finir le tracé", + "Click to add a marker": "Cliquer pour ajouter le marqueur", + "Click to continue drawing": "Cliquer pour continuer le tracé", + "Click to start drawing a line": "Cliquer pour commencer une ligne", + "Click to start drawing a polygon": "Cliquer pour commencer un polygone", + "Import in a new layer": "Importer dans un nouveau calque", + "Layer": "Calque", + "Please choose a format": "Merci de choisir un format", + "Imports all umap data, including layers and settings.": "Importer toutes les données de la carte, y compris les couches et les propriétés", + "Invalid umap data": "Données uMap invalides", + "Invalid umap data in {filename}": "Les données du fichier {filename} ne sont pas valides comme format uMap", + "Add a line to the current multi": "Ajouter une ligne au groupe courant", + "Add a polygon to the current multi": "Ajouter un polygon au groupe courant", + "Click to edit": "Cliquer pour modifier", + "Continue line": "Continuer la ligne", + "Delete this shape": "Supprimer ce tracé", + "Make main shape": "Tracé principal", + "Merge lines": "Fusionner les lignes", + "Remove shape from the multi": "Extraire le tracé du groupe", + "Transfer shape to edited feature": "Adjoindre le tracé au groupe courant", + "next": "suivant", + "previous": "précédent", + "Measure distances": "Mesurer les distances", + "NM": "NM", + "kilometers": "kilomètres", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "miles nautiques", + "{area} acres": "{area} hectares", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Êtes-vous sûr de vouloir restaurer cette version?", + "Extract shape to separate feature": "Extraire la forme", + "Layer properties": "Propriétés de la couche", + "Restore this version": "Restaurer cette version", + "Versions": "Versions", + "You have unsaved changes.": "Vous avez des changements non sauvegardés.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Liste de nombre séparés par une virgule, définissant les tirets et espace. Ex.: \"5, 10, 15\".", + "Advanced transition": "Transition avancée", + "Allow interactions": "Autoriser les interactions", + "Autostart when map is loaded": "Lancer au chargement de la carte", + "Default interaction options": "Options d'interaction par défaut", + "Default shape properties": "Propriétés de forme par défaut", + "Default zoom level": "Niveau de zoom par défaut", + "Define link to open in a new window on polygon click.": "Définit un lien à ouvrir dans une nouvelle fenêtre au clic sur le polygone.", + "Delete this vertex (Alt-click)": "Supprimer ce point (Alt-clic)", + "Display the control to open OpenStreetMap editor": "Afficher le bouton pour ouvrir l'éditeur d'OpenStreetMap", + "Display the data layers control": "Afficher le bouton d''accès rapide aux couches de données", + "Display the embed control": "Afficher le bouton de partage", + "Display the fullscreen control": "Afficher le bouton de plein écran", + "Display the locate control": "Afficher le bouton de localisation", + "Display the measure control": "Afficher le bouton de mesures", + "Display the search control": "Afficher le bouton de recherche", + "Display the tile layers control": "Afficher le bouton permettant de changer le fond de carte", + "Display the zoom control": "Afficher les boutons de zoom", + "Exit Fullscreen": "Quitter le plein écran", + "Fetch data each time map view changes.": "Récupère les données à chaque fois que la vue de la carte change.", + "Filter keys": "Clés de filtre", + "Icon shape": "Forme de l'icône", + "Icon symbol": "Image de l'icône", + "Interaction options": "Options d'interaction", + "Label key": "Clé pour le libellé", + "Link to…": "Lien vers…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Doit être une valeur CSS valide (ex.: DarkBlue ou #123456)", + "No results": "Aucun résultat", + "Popup style": "Style de popup", + "Replace layer content": "Remplacer le contenu du calque", + "Save this location as new feature": "Enregistrer ce lieu comme élément de la carte", + "Search location": "Chercher un lieu", + "Set URL": "Définir l'URL", + "Shape properties": "Propriétés de la forme", + "Simplify": "Simplifier", + "Sort key": "Clé de tri", + "The name of the property to use as feature label (ex.: \"nom\")": "Le nom de la propriété à utiliser comme libellé des éléments (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Alterner le mode édition (shift-clic)", + "View Fullscreen": "Voir en plein écran", + "Whether to display or not polygons paths.": "Afficher les contours des polygones.", + "Whether to fill polygons with color.": "Remplir les polygones avec de la couleur.", + "Zoom to this place": "Zoomer vers ce lieu", + "always": "toujours", + "clear": "effacer", + "define": "définir", + "hidden": "caché", + "never": "jamais", + "Automatic": "Automatique", + "Clone this feature": "Dupliquer", + "Display label": "Afficher une étiquette", + "Drag to reorder": "Glisser pour réordonner", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe avec hauteur et largeur (en px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Étiquette cliquable", + "Label direction": "Direction de l'étiquette", + "Manage layers": "Gérer les calques", + "On the bottom": "Bas", + "On the left": "Gauche", + "On the right": "Droite", + "On the top": "Haut", + "Only display label on mouse hover": "Afficher seulement au survol", + "Open link in…": "Ouvrir le lien dans…", + "Unable to detect format of file {filename}": "Impossible de détecter le format du fichier {filename}", + "collapsed": "fermé", + "expanded": "ouvert", + "iframe": "iframe", + "new window": "nouvelle fenêtre", + "parent window": "fenêtre parente", + "{count} errors during import: {message}": "{count} erreurs pendant l'import: {message}", + "Are you sure you want to delete this layer?": "Voulez-vous vraiment supprimer ce calque?", + "Delete layer": "Supprimer le calque", + "Error while fetching {url}": "Erreur en appelant l'URL {url}", + "Home": "Accueil", + "Delete all layers": "Supprimer tous les calques", + "Full map data": "Données complètes de la carte", + "Smart transitions": "Transitions animées", + "Activate slideshow mode": "Activer le mode diaporama", + "Data is browsable": "Données naviguables", + "Delay between two transitions when in play mode": "Délai entre les transitions en mode lecture", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Désactiver pour masquer ce calque du diaporama, du navigateur de données…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Afficher les dimensions" +} \ No newline at end of file diff --git a/umap/static/umap/locale/gl.json b/umap/static/umap/locale/gl.json new file mode 100644 index 00000000..0c1d947a --- /dev/null +++ b/umap/static/umap/locale/gl.json @@ -0,0 +1,350 @@ +{ + "About": "Acerca de", + "Action not allowed :(": "Acción non permitida :(", + "Add a layer": "Engade unha capa", + "Add symbol": "Engade unha icona", + "Advanced actions": "Accións avanzadas", + "Advanced properties": "Propiedades avanzadas", + "Allow scroll wheel zoom?": "Permitir o zoom coa roda do rato?", + "An error occured": "Houbo un erro", + "Are you sure you want to cancel your changes?": "Estás seguro/a de que queres cancelar os teus cambios?", + "Are you sure you want to clone this map and all its datalayers?": "Estás seguro/a de que queres clonar este mapa e as súas capas de datos?", + "Are you sure you want to delete the feature?": "Estás seguro/a de que queres borrar este obxecto?", + "Are you sure you want to delete this map?": "Estás seguro/a de que queres eliminar o mapa?", + "Ball": "Pelota", + "Bring feature to center": "Move o obxecto ao centro", + "Browse data": "Navegar polos datos", + "Cancel": "Cancelar", + "Cancel edits": "Cancelar edicións", + "Center map on your location": "Centrar o mapa na túa localización", + "Change map background": "Cambiar o mapa de fondo", + "Change symbol": "Cambiar a icona", + "Change tilelayers": "Cambiar as capas de teselas", + "Choose the format of the data to import": "Elixe o formato dos datos a importar", + "Choose the layer of the feature": "Elixe a capa do obxecto", + "Choose the layer to import in": "Elixe a capa na que queres importar", + "Circle": "Círculo", + "Clone this map": "Clonar este mapa", + "Default": "Por defecto", + "Delete": "Eliminar", + "Delete this feature": "Borrar este obxecto", + "Disable editing": "Desabilitar a edición", + "Display on load": "Amosar na carga", + "Do you want to display a minimap?": "Queres amosar un minimapa?", + "Do you want to display popup footer?": "Queres amosar un pé de páxina emerxente?", + "Do you want to display the scale control?": "Queres amosar o control de escala?", + "Download data": "Descargar datos", + "Draw a line": "Debuxa unha liña", + "Draw a marker": "Debuxa un marcador", + "Draw a polygon": "Debuxa un polígono", + "Draw a polyline": "Debuxa unha liña múltiple", + "Drop": "Gota", + "Dynamic": "Dinámica", + "Edit": "Editar", + "Edit feature's layer": "Edita a capa do obxecto", + "Edit map properties": "Edita as propiedades do mapa", + "Edit map settings": "Edita a configuración do mapa", + "Edit this feature": "Edita este obxecto", + "Embed and share this map": "Incorporar e compartir este mapa", + "Enable editing": "Activar a edición", + "Format": "Formato", + "From zoom": "Dende o zoom", + "Go to «{feature}»": "Ir a «{feature}»", + "Hide controls": "Ocultar os controis", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Importar", + "Import data": "Importar datos", + "Inherit": "Inherit", + "Licence": "Licenza", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "Máis controis", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Opcional.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Datos remotos", + "Save": "Gardar", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Comezar a editar", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Capa sen título", + "Untitled map": "Mapa sen título", + "Update permissions and editors": "Update permissions and editors", + "Url": "URL", + "User content credits": "Créditos dos contidos do usuario", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "cor", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "nome", + "no": "non", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "Si", + "Editing": "Editando", + "Embed the map": "Incorporar o mapa", + "Short URL": "URL curta", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Axuda", + "Image: {{http://image.url.com}}": "Imaxe: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Propiedades importadas:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "amosar o nome", + "max zoom": "zoom máximo", + "min zoom": "zoom mínimo", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Por favor: garde antes o mapa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transformar en polígono", + "Transform to lines": "Transformar en liñas", + "Choose the data format": "Escolla o formato de datos", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Escolla un predefinido", + "Limit bounds": "Limit bounds", + "Use current bounds": "Utilice os límites actuais", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "Ver pantalla completa", + "height": "altura", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Táboa", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filtro...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "por", + "Name and description (large)": "Name and description (large)", + "Empty": "Baleiro", + "Split line": "Split line", + "Clone": "Clonar", + "Clone of {name}": "Clonado de {name}", + "Side panel": "Panel lateral", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/hr.json b/umap/static/umap/locale/hr.json new file mode 100644 index 00000000..a3b9b927 --- /dev/null +++ b/umap/static/umap/locale/hr.json @@ -0,0 +1,350 @@ +{ + "About": "Više o", + "Action not allowed :(": "Akcija nije dozvoljena :(", + "Add a layer": "Dodaj sloj", + "Add symbol": "Dodavanje simbola", + "Advanced actions": "Napredne akcije", + "Advanced properties": "Napredne postavke", + "Allow scroll wheel zoom?": "Dopustiti uvećanje kotačićem?", + "An error occured": "Desila se greška", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Jeste li sigurni da želite obrisati ovaj element?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Lopta", + "Bring feature to center": "Dovedi element na centar", + "Browse data": "Browse data", + "Cancel": "Odustani", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Promjeni pozadinu karte", + "Change symbol": "Promjeni simbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Odaberi sloj za uvoz", + "Circle": "Kružnica", + "Clone this map": "Poduplaj ovu kartu", + "Default": "Default", + "Delete": "Obriši", + "Delete this feature": "Brisanje ovog elementa", + "Disable editing": "Disable editing", + "Display on load": "Prikaži kod učitavanja", + "Do you want to display a minimap?": "Želite li prikazati malu kartu?", + "Do you want to display popup footer?": "Želite li prikazati skočni prozor u podnožju?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Preuzimanje podataka", + "Draw a line": "Crtanje linije", + "Draw a marker": "Crtanje oznake", + "Draw a polygon": "Crtanje površine", + "Draw a polyline": "Crtanje izlomljene linije", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Urediti", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "Od uvećanja", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Sakrij kontrole", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Uvoz", + "Import data": "Uvoz podataka", + "Inherit": "Naslijedi", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Ovdje upišite URL", + "Remote data": "Udaljeni podaci", + "Save": "Spremi", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Prikaži/sakrij sloj", + "Start editing": "Start editing", + "Stop editing": "Zaustavi uređivanje", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "Do uvećanja", + "Untitled layer": "Bezimeni sloj", + "Untitled map": "Bezimena karta", + "Update permissions and editors": "Ažuriraj dozvole i urednike", + "Url": "Url", + "User content credits": "Zasluge za sadržaj", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "boja", + "dash array": "dash array", + "description": "opis", + "fill": "ispuna", + "fill color": "boja ispune", + "fill opacity": "prozirnost ispune", + "inherit": "naslijedi", + "licence": "licenca", + "name": "ime", + "no": "ne", + "opacity": "prozirnost", + "stroke": "potez", + "weight": "debljina", + "yes": "Da", + "Editing": "Uređivanje", + "Embed the map": "Ugradi kartu", + "Short URL": "Kratki URL", + "# one hash for main heading": "# jedne ljestve za glavni naslov", + "## two hashes for second heading": "### dva puta ljestve za treću razinu naslova", + "### three hashes for third heading": "### tri puta ljestve za treću razinu naslova", + "**double star for bold**": "**dvije zvijezdice za podebljano**", + "*simple star for italic*": "*zvijezdica za kurziv*", + "--- for an horizontal rule": "--- za horizontalnu crtu", + "All properties are imported.": "Sve postavke su uvezene.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Posebna pozadina", + "Help": "Pomoć", + "Image: {{http://image.url.com}}": "slika {{http://slika.url.hr}}", + "Link with text: [[http://example.com|text of the link]]": "Link sa tekstom: [[http://primjer.hr|tekst linka]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Formatiranje teksta", + "attribution": "attribution", + "display name": "display name", + "max zoom": "maksimalno uvećanje", + "min zoom": "minimalno uvećanje", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Izmjeri udaljenosti", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/hu.json b/umap/static/umap/locale/hu.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/hu.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/id.json b/umap/static/umap/locale/id.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/id.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/it.js b/umap/static/umap/locale/it.js new file mode 100644 index 00000000..9714c7f4 --- /dev/null +++ b/umap/static/umap/locale/it.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Informazioni", + "Action not allowed :(": "Azione non permessa :(", + "Add a layer": "Aggiungi un layer", + "Add symbol": "Aggiungi un simbolo", + "Advanced actions": "Azioni avanzate", + "Advanced properties": "Proprietà avanzate", + "Allow scroll wheel zoom?": "Abilitare la rotellina del mouse per lo zoom?", + "An error occured": "Si è verificato un errore", + "Are you sure you want to cancel your changes?": "Si vuole realmente annullare le modifiche fatte?", + "Are you sure you want to clone this map and all its datalayers?": "Confermi di duplicare questa mappa e tutti i suoi livelli?", + "Are you sure you want to delete the feature?": "Si è sicuri di voler cancellare questa geometria?", + "Are you sure you want to delete this map?": "Si è certi di voler eliminare questa mappa?", + "Ball": "Palla", + "Bring feature to center": "Porta la geometria al centro", + "Browse data": "Visualizza i dati", + "Cancel": "Annulla", + "Cancel edits": "Annulla le modifiche", + "Center map on your location": "Centra la mappa sulla tua posizione", + "Change map background": "Cambia la mappa di sfondo", + "Change symbol": "Cambia il simbolo", + "Change tilelayers": "Cambia i livelli di sfondo", + "Choose the format of the data to import": "Seleziona il formato dei dati da importare", + "Choose the layer of the feature": "Scegli il layer della geometria", + "Choose the layer to import in": "Seleziona su quale livello fare l'importazione", + "Circle": "Cerchio", + "Clone this map": "Duplica questa mappa", + "Default": "Predefinito", + "Delete": "Cancella", + "Delete this feature": "Cancella questa geometria", + "Disable editing": "Disabilita la modifica", + "Display on load": "Mostra durante il caricamento", + "Do you want to display a minimap?": "Visualizzare una mappa panoramica?", + "Do you want to display popup footer?": "Visualizzare la finestra di popup a piè pagina?", + "Do you want to display the scale control?": "Visualizzare la scala?", + "Download data": "Download dei dati", + "Draw a line": "Disegna una linea", + "Draw a marker": "Aggiungi un marcatore", + "Draw a polygon": "Disegna un poligono", + "Draw a polyline": "Disegna una polilinea", + "Drop": "Goccia", + "Dynamic": "Dinamico", + "Edit": "Modifica", + "Edit feature's layer": "Modifica le geometrie del layer", + "Edit map properties": "Modifica le proprietà della mappa", + "Edit map settings": "Modifica le impostazioni della mappa", + "Edit this feature": "Modifica questa geometria", + "Embed and share this map": "Includi e condividi questa mappa", + "Enable editing": "Abilita la modifica", + "Format": "Formato", + "From zoom": "Dallo zoom", + "Go to «{feature}»": "Vai a «{feature}»", + "Hide controls": "Nascondi controlli", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Quanto vuoi semplificare la polilinea per ogni zoom (più = maggiori perfromance a aspetto più semplificato, meno = maggior dettaglio)", + "Import": "Importa", + "Import data": "Importa dati", + "Inherit": "Eredita", + "Licence": "Licenza", + "Map background credits": "Riconoscimenti per la mappa di sfondo", + "Map user content has been published under licence": "I contenuti della mappa sono rilasciati secondo la licenza", + "More controls": "Maggiori controlli", + "Optional. Same as color if not set.": "Opzionale. Stesso colore se non assegnato.", + "Optionnal.": "Opzionale", + "Paste here your data": "Incolla i tuoi dati qui", + "Please be sure the licence is compliant with your use.": "Si prega di verificare che la licenza è compatibile con quella in uso.", + "Problem in the response": "Problema nella risposta", + "Problem in the response format": "Problema nel formato della risposta", + "Provide an URL here": "Aggiungi una URL qui", + "Remote data": "Dati remoti", + "Save": "Salva", + "Save current edits": "Salva le modifiche effettuate", + "Save this center and zoom": "Salva il centro e lo zoom", + "Show/hide layer": "Mostra/nascondi layer", + "Start editing": "Avvia modifica", + "Stop editing": "Ferma la modifica", + "The zoom and center have been setted.": "Il livello di zoom e il centro sono stati impostati.", + "To zoom": "Allo zoom", + "Untitled layer": "Layer senza nome", + "Untitled map": "Mappa senza nome", + "Update permissions and editors": "Cambia i permessi e gli editori", + "Url": "Url", + "User content credits": "Riconoscimenti ai contenuti utente", + "Where do we go from here?": "Da dove ci spostiamo da qui?", + "Zoom in": "Ingrandisci", + "Zoom out": "Rimpicciolisci", + "Zoom to layer extent": "Zoom alla larghezza massima del layer", + "Zoom to this feature": "Zoom su questa geometria", + "color": "colore", + "dash array": "tratteggio", + "description": "descrizione", + "fill": "riempimento", + "fill color": "colore di riempimento", + "fill opacity": "opacità riempimento", + "inherit": "eredita", + "licence": "licenza", + "name": "nome", + "no": "non", + "opacity": "opacità", + "stroke": "tratto", + "weight": "peso", + "yes": "sì", + "Editing": "Modifica", + "Embed the map": "Includi la mappa", + "Short URL": "URL breve", + "# one hash for main heading": "# un cancelleto per l'intestazione principale", + "## two hashes for second heading": "## due cancelletti per le intestazioni di secondo livello", + "### three hashes for third heading": "### tre cancelletti per intestazione di terzo livello", + "**double star for bold**": "**due asterischi per il testo marcato**", + "*simple star for italic*": "*asterisco per l'italico*", + "--- for an horizontal rule": "--- per una linea orizzontale", + "All properties are imported.": "Tutte le proprietà sono state importate.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Valori separati da virgola, tabulatore o punto e virgola. Il sistema di riferimento spaziale implementato è WGS84. Vengono importati solo punti. La funzione di importazione va a cercare nell'intestazione le colonne «lat» e «lon» indifferentemente se scritte in maiuscolo o minuscolo. Tutte le altre colonne sono importate come proprietà.", + "Custom background": "Sfondo personalizzato", + "Help": "Aiuto", + "Image: {{http://image.url.com}}": "Immagini: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link con testo: [[http://example.com|testo del link]]", + "Properties imported:": "Proprietà importate:", + "Simple link: [[http://example.com]]": "Link semplice: [[http://example.com]]", + "Supported scheme": "Schema supportato", + "Supported variables that will be dynamically replaced": "Variabili supportate che verranno cambiate dinamicamente", + "Text formatting": "Formattazione testo", + "attribution": "attribuzione", + "display name": "visualizza il nome", + "max zoom": "zoom massimo", + "min zoom": "zoom minimo", + "Skipping unkown geometry.type: {type}": "Ignorare le geometrie sconosciute di tipo: {type}", + "Please save the map before": "Per favore, prima, salva la mappa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Puoi utilizzare le proprietà come fossero variabili: ad esempio, in \"http://myserver.org/images/{name}.png\", la variabile {name} verrà sostituita con il valore di \"name\" presente in ognuno dei marker.", + "Transform to polygon": "Trasforma in poligono", + "Transform to lines": "Trasforma in linee", + "Choose the data format": "Scegli il formato dati", + "Error in the tilelayer URL": "Errore nell'URL nel servizio di tile", + "Directions from here": "Indicazioni stradali da qui", + "Choose a preset": "Seleziona una preimpostazione", + "Limit bounds": "Limiti di confine", + "Use current bounds": "Utilizza l'area in uso", + "max East": "max Est", + "max North": "max Nord", + "max South": "max Sud", + "max West": "max Ovest", + "TMS format": "formato TMS", + "Credits": "Ringraziamenti", + "Only visible features will be downloaded.": "Saranno scaricate solo le geoemtrie visibili.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Apri quest'area della mappa nell'editor in modo da fornire dati più accurati in OpenStreeetMap", + "Default properties": "Proprietà preimpostate", + "User interface options": "Opzioni interfaccia utente", + "Image with custom width (in px): {{http://image.url.com|width}}": "Immagine con larghezza personalizzata (width) (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Vista attuale invece che quella della mappa preimpostata?", + "Iframe export options": "opzioni di esportazione iframe", + "Include full screen link?": "inserire link per la vista a schemo intero?", + "See full screen": "Visualizza a schermo intero", + "height": "altezza", + "width": "larghezza", + "Clustered": "Raggruppata", + "Clustering radius": "Raggio del raggruppamento", + "GeoRSS (only link)": "GeoRSS (solo il link)", + "GeoRSS (title + image)": "GeoRSS (titolo + immagine)", + "Heatmap": "Mappa di densità (heatmap)", + "Heatmap radius": "Raggio mappa di densità", + "Name and description": "Nome e descrizione", + "Override clustering radius (default 80)": "Sovrascrivi raggio di raggruppamento (predefinito 80)", + "Override heatmap radius (default 25)": "Sovrascrivi raggio mappa di intensità (predefinito 25)", + "Proxy request": "Richiesta proxy", + "Table": "Tabella", + "To use if remote server doesn't allow cross domain (slower)": "Da utilizzare se il server remoto non permette l'accesso incrociato ai domini (lento)", + "Type of layer": "Tipo di layer", + "Filter…": "Filtro...", + "Heatmap intensity property": "Proprietà intensità mappa di densità", + "Optional intensity property for heatmap": "Proprietà opzionale per la mappa di densità", + "Caption": "Didascalia", + "Data browser": "Visualizza i dati", + "Do you want to display a caption bar?": "Visualizza una didascalia?", + "Do you want to display a panel on load?": "Visualizza un panello al caricamento?", + "None": "Nulla", + "by": "di", + "Name and description (large)": "Nome e descrizione (lunga)", + "Empty": "Vuoto", + "Split line": "Dividi linea", + "Clone": "Clona", + "Clone of {name}": "Clone di {name}", + "Side panel": "Pannello laterale", + "Powered by Leaflet and Django, glued by uMap project.": "Basato su Leaflet e Django, uniti nel progetto uMap.", + "Zoom level for automatic zooms": "Livelli di zoom per zoom automatici", + "Do you want to display the «more» control?": "Vuoi visualizzare il controllo \"altro\"?", + "Auto": "Auto", + "Default: name": "Predefinito: nome", + "Property to use for sorting features": "Proprietà da utilizzare per ordinare gli oggetti", + "Slideshow": "Slideshow", + "Start slideshow": "Avvia slideshow", + "Stop slideshow": "Ferma slideshow", + "Text color for the cluster label": "Colore di testo per l'etichetta del raggruppamento", + "Zoom to the next": "Zoom sul prossimo", + "Zoom to the previous": "Zoom sul precedente", + "Add a new property": "Aggiungi una nuova proprietà", + "Are you sure you want to delete this property on all the features?": "Si è sicuri di voler cancellare questa proprietà per ogni geometria?", + "Close": "Chiudi", + "Delete this property on all the features": "Cancella questa proprietà in tutte le geometrie", + "Edit properties in a table": "Modifica le proprietà in una tabella", + "Please enter the name of the property": "Inserire il nome della proprietà", + "Please enter the new name of this property": "Inserire il nuovo nome per questa proprietà", + "Rename this property on all the features": "Rinomina questa proprietà in tutti gli oggetti", + "If false, the polygon will act as a part of the underlying map.": "Se falso, il poligono agirà come parte della mappa sottostante.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe con altezza (in px) personalizzata: {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Vedi tutto", + "Dynamic properties": "Proprietà dinamiche", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Specificando le proprietà degli oggetti attraverso le parentesi graffe es. {name} queste saranno automaticamente sostituite con i valore corrispondenti", + "Long credits": "Ringraziamenti estesi", + "No licence has been set": "Non è ancora stata impostata una licenza", + "Popup content template": "Template del contenuto del popup", + "Short credits": "Mostra i ringraziamenti ", + "Will be displayed in the bottom right corner of the map": "Sarà visualizzato in un angolo in basso a destra sulla mappa ", + "Will be visible in the caption of the map": "Sarà visibile nella didascalia della mappa", + "Map has been saved!": "La mappa è stata salvata", + "Save anyway": "Salva comunque", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "OPS! Qualcun altro sembra aver modificato i dati. È possibile comunque salvare, ma questo cancellerà le modifiche apportate da altri.", + "Comma separated list of properties to use when filtering features": "Lista di proprietà separate da virgola da utilizzare per filtrare le geometrie", + "Keep current visible layers": "Mantieni i livelli attualmente visibili", + "Coordinates": "Coordinate", + "Latitude": "Latitudine", + "Longitude": "Longitudine", + "Continue line (Ctrl-click)": "Continua linea (Ctrl-click)", + "Start a hole here": "Comincia un buco qui", + "Click last point to finish shape": "Click su ultimo punto per completare la geometria", + "Click to add a marker": "Clicca per aggiungere un marcatore", + "Click to continue drawing": "Clic per continuare a disegnare", + "Click to start drawing a line": "Clic per iniziare a disegnare una linea", + "Click to start drawing a polygon": "Clicca per iniziare a disegnare un poligono", + "Import in a new layer": "Importa in un nuovo layer", + "Layer": "Layer", + "Please choose a format": "Scegliere un formato", + "Imports all umap data, including layers and settings.": "importa tutti i dati di umap compresi layer e le impostazioni", + "Invalid umap data": "dati di umap non validi", + "Invalid umap data in {filename}": "dati umap non validi nel file {filename}", + "Add a line to the current multi": "Aggiungi una linea a quelle correnti", + "Add a polygon to the current multi": "Aggiungi un poligono a quell correnti", + "Click to edit": "Clic per la modifica", + "Continue line": "Linea continua", + "Delete this shape": "Cancella questa geometria", + "Make main shape": "Genera geometria generale", + "Merge lines": "Unisci linee", + "Remove shape from the multi": "Rimuovi geometria dalle altre", + "Transfer shape to edited feature": "Trasforma la geometria in una modificabile", + "next": "prossimo", + "previous": "precedente", + "Measure distances": "Misuratore di distanze", + "NM": "NM", + "kilometers": "chilometri", + "km": "km", + "mi": "mi", + "miles": "miglia", + "nautical miles": "miglie nautiche", + "{area} acres": "{area} acri", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miglia", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Si vuole veramente ripristinare questa versione?", + "Extract shape to separate feature": "Dividi la geometria in geometrie separate", + "Layer properties": "Proprietà del layer", + "Restore this version": "Ripristina questa versione", + "Versions": "Versioni", + "You have unsaved changes.": "Ci sono delle modifiche che non sono state ancora salvate.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("it", locale); +L.setLocale("it"); \ No newline at end of file diff --git a/umap/static/umap/locale/it.json b/umap/static/umap/locale/it.json new file mode 100644 index 00000000..11a2be41 --- /dev/null +++ b/umap/static/umap/locale/it.json @@ -0,0 +1,350 @@ +{ + "About": "Informazioni", + "Action not allowed :(": "Azione non permessa :(", + "Add a layer": "Aggiungi un layer", + "Add symbol": "Aggiungi un simbolo", + "Advanced actions": "Azioni avanzate", + "Advanced properties": "Proprietà avanzate", + "Allow scroll wheel zoom?": "Abilitare la rotellina del mouse per lo zoom?", + "An error occured": "Si è verificato un errore", + "Are you sure you want to cancel your changes?": "Si vuole realmente annullare le modifiche fatte?", + "Are you sure you want to clone this map and all its datalayers?": "Confermi di duplicare questa mappa e tutti i suoi livelli?", + "Are you sure you want to delete the feature?": "Si è sicuri di voler cancellare questa geometria?", + "Are you sure you want to delete this map?": "Si è certi di voler eliminare questa mappa?", + "Ball": "Palla", + "Bring feature to center": "Porta la geometria al centro", + "Browse data": "Visualizza i dati", + "Cancel": "Annulla", + "Cancel edits": "Annulla le modifiche", + "Center map on your location": "Centra la mappa sulla tua posizione", + "Change map background": "Cambia la mappa di sfondo", + "Change symbol": "Cambia il simbolo", + "Change tilelayers": "Cambia i livelli di sfondo", + "Choose the format of the data to import": "Seleziona il formato dei dati da importare", + "Choose the layer of the feature": "Scegli il layer della geometria", + "Choose the layer to import in": "Seleziona su quale livello fare l'importazione", + "Circle": "Cerchio", + "Clone this map": "Duplica questa mappa", + "Default": "Predefinito", + "Delete": "Cancella", + "Delete this feature": "Cancella questa geometria", + "Disable editing": "Disabilita la modifica", + "Display on load": "Mostra durante il caricamento", + "Do you want to display a minimap?": "Visualizzare una mappa panoramica?", + "Do you want to display popup footer?": "Visualizzare la finestra di popup a piè pagina?", + "Do you want to display the scale control?": "Visualizzare la scala?", + "Download data": "Download dei dati", + "Draw a line": "Disegna una linea", + "Draw a marker": "Aggiungi un marcatore", + "Draw a polygon": "Disegna un poligono", + "Draw a polyline": "Disegna una polilinea", + "Drop": "Goccia", + "Dynamic": "Dinamico", + "Edit": "Modifica", + "Edit feature's layer": "Modifica le geometrie del layer", + "Edit map properties": "Modifica le proprietà della mappa", + "Edit map settings": "Modifica le impostazioni della mappa", + "Edit this feature": "Modifica questa geometria", + "Embed and share this map": "Includi e condividi questa mappa", + "Enable editing": "Abilita la modifica", + "Format": "Formato", + "From zoom": "Dallo zoom", + "Go to «{feature}»": "Vai a «{feature}»", + "Hide controls": "Nascondi controlli", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Quanto vuoi semplificare la polilinea per ogni zoom (più = maggiori perfromance a aspetto più semplificato, meno = maggior dettaglio)", + "Import": "Importa", + "Import data": "Importa dati", + "Inherit": "Eredita", + "Licence": "Licenza", + "Map background credits": "Riconoscimenti per la mappa di sfondo", + "Map user content has been published under licence": "I contenuti della mappa sono rilasciati secondo la licenza", + "More controls": "Maggiori controlli", + "Optional. Same as color if not set.": "Opzionale. Stesso colore se non assegnato.", + "Optionnal.": "Opzionale", + "Paste here your data": "Incolla i tuoi dati qui", + "Please be sure the licence is compliant with your use.": "Si prega di verificare che la licenza è compatibile con quella in uso.", + "Problem in the response": "Problema nella risposta", + "Problem in the response format": "Problema nel formato della risposta", + "Provide an URL here": "Aggiungi una URL qui", + "Remote data": "Dati remoti", + "Save": "Salva", + "Save current edits": "Salva le modifiche effettuate", + "Save this center and zoom": "Salva il centro e lo zoom", + "Show/hide layer": "Mostra/nascondi layer", + "Start editing": "Avvia modifica", + "Stop editing": "Ferma la modifica", + "The zoom and center have been setted.": "Il livello di zoom e il centro sono stati impostati.", + "To zoom": "Allo zoom", + "Untitled layer": "Layer senza nome", + "Untitled map": "Mappa senza nome", + "Update permissions and editors": "Cambia i permessi e gli editori", + "Url": "Url", + "User content credits": "Riconoscimenti ai contenuti utente", + "Where do we go from here?": "Da dove ci spostiamo da qui?", + "Zoom in": "Ingrandisci", + "Zoom out": "Rimpicciolisci", + "Zoom to layer extent": "Zoom alla larghezza massima del layer", + "Zoom to this feature": "Zoom su questa geometria", + "color": "colore", + "dash array": "tratteggio", + "description": "descrizione", + "fill": "riempimento", + "fill color": "colore di riempimento", + "fill opacity": "opacità riempimento", + "inherit": "eredita", + "licence": "licenza", + "name": "nome", + "no": "non", + "opacity": "opacità", + "stroke": "tratto", + "weight": "peso", + "yes": "sì", + "Editing": "Modifica", + "Embed the map": "Includi la mappa", + "Short URL": "URL breve", + "# one hash for main heading": "# un cancelleto per l'intestazione principale", + "## two hashes for second heading": "## due cancelletti per le intestazioni di secondo livello", + "### three hashes for third heading": "### tre cancelletti per intestazione di terzo livello", + "**double star for bold**": "**due asterischi per il testo marcato**", + "*simple star for italic*": "*asterisco per l'italico*", + "--- for an horizontal rule": "--- per una linea orizzontale", + "All properties are imported.": "Tutte le proprietà sono state importate.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Valori separati da virgola, tabulatore o punto e virgola. Il sistema di riferimento spaziale implementato è WGS84. Vengono importati solo punti. La funzione di importazione va a cercare nell'intestazione le colonne «lat» e «lon» indifferentemente se scritte in maiuscolo o minuscolo. Tutte le altre colonne sono importate come proprietà.", + "Custom background": "Sfondo personalizzato", + "Help": "Aiuto", + "Image: {{http://image.url.com}}": "Immagini: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link con testo: [[http://example.com|testo del link]]", + "Properties imported:": "Proprietà importate:", + "Simple link: [[http://example.com]]": "Link semplice: [[http://example.com]]", + "Supported scheme": "Schema supportato", + "Supported variables that will be dynamically replaced": "Variabili supportate che verranno cambiate dinamicamente", + "Text formatting": "Formattazione testo", + "attribution": "attribuzione", + "display name": "visualizza il nome", + "max zoom": "zoom massimo", + "min zoom": "zoom minimo", + "Skipping unkown geometry.type: {type}": "Ignorare le geometrie sconosciute di tipo: {type}", + "Please save the map before": "Per favore, prima, salva la mappa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Puoi utilizzare le proprietà come fossero variabili: ad esempio, in \"http://myserver.org/images/{name}.png\", la variabile {name} verrà sostituita con il valore di \"name\" presente in ognuno dei marker.", + "Transform to polygon": "Trasforma in poligono", + "Transform to lines": "Trasforma in linee", + "Choose the data format": "Scegli il formato dati", + "Error in the tilelayer URL": "Errore nell'URL nel servizio di tile", + "Directions from here": "Indicazioni stradali da qui", + "Choose a preset": "Seleziona una preimpostazione", + "Limit bounds": "Limiti di confine", + "Use current bounds": "Utilizza l'area in uso", + "max East": "max Est", + "max North": "max Nord", + "max South": "max Sud", + "max West": "max Ovest", + "TMS format": "formato TMS", + "Credits": "Ringraziamenti", + "Only visible features will be downloaded.": "Saranno scaricate solo le geoemtrie visibili.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Apri quest'area della mappa nell'editor in modo da fornire dati più accurati in OpenStreeetMap", + "Default properties": "Proprietà preimpostate", + "User interface options": "Opzioni interfaccia utente", + "Image with custom width (in px): {{http://image.url.com|width}}": "Immagine con larghezza personalizzata (width) (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Vista attuale invece che quella della mappa preimpostata?", + "Iframe export options": "opzioni di esportazione iframe", + "Include full screen link?": "inserire link per la vista a schemo intero?", + "See full screen": "Visualizza a schermo intero", + "height": "altezza", + "width": "larghezza", + "Clustered": "Raggruppata", + "Clustering radius": "Raggio del raggruppamento", + "GeoRSS (only link)": "GeoRSS (solo il link)", + "GeoRSS (title + image)": "GeoRSS (titolo + immagine)", + "Heatmap": "Mappa di densità (heatmap)", + "Heatmap radius": "Raggio mappa di densità", + "Name and description": "Nome e descrizione", + "Override clustering radius (default 80)": "Sovrascrivi raggio di raggruppamento (predefinito 80)", + "Override heatmap radius (default 25)": "Sovrascrivi raggio mappa di intensità (predefinito 25)", + "Proxy request": "Richiesta proxy", + "Table": "Tabella", + "To use if remote server doesn't allow cross domain (slower)": "Da utilizzare se il server remoto non permette l'accesso incrociato ai domini (lento)", + "Type of layer": "Tipo di layer", + "Filter…": "Filtro...", + "Heatmap intensity property": "Proprietà intensità mappa di densità", + "Optional intensity property for heatmap": "Proprietà opzionale per la mappa di densità", + "Caption": "Didascalia", + "Data browser": "Visualizza i dati", + "Do you want to display a caption bar?": "Visualizza una didascalia?", + "Do you want to display a panel on load?": "Visualizza un panello al caricamento?", + "None": "Nulla", + "by": "di", + "Name and description (large)": "Nome e descrizione (lunga)", + "Empty": "Vuoto", + "Split line": "Dividi linea", + "Clone": "Clona", + "Clone of {name}": "Clone di {name}", + "Side panel": "Pannello laterale", + "Powered by Leaflet and Django, glued by uMap project.": "Basato su Leaflet e Django, uniti nel progetto uMap.", + "Zoom level for automatic zooms": "Livelli di zoom per zoom automatici", + "Do you want to display the «more» control?": "Vuoi visualizzare il controllo \"altro\"?", + "Auto": "Auto", + "Default: name": "Predefinito: nome", + "Property to use for sorting features": "Proprietà da utilizzare per ordinare gli oggetti", + "Slideshow": "Slideshow", + "Start slideshow": "Avvia slideshow", + "Stop slideshow": "Ferma slideshow", + "Text color for the cluster label": "Colore di testo per l'etichetta del raggruppamento", + "Zoom to the next": "Zoom sul prossimo", + "Zoom to the previous": "Zoom sul precedente", + "Add a new property": "Aggiungi una nuova proprietà", + "Are you sure you want to delete this property on all the features?": "Si è sicuri di voler cancellare questa proprietà per ogni geometria?", + "Close": "Chiudi", + "Delete this property on all the features": "Cancella questa proprietà in tutte le geometrie", + "Edit properties in a table": "Modifica le proprietà in una tabella", + "Please enter the name of the property": "Inserire il nome della proprietà", + "Please enter the new name of this property": "Inserire il nuovo nome per questa proprietà", + "Rename this property on all the features": "Rinomina questa proprietà in tutti gli oggetti", + "If false, the polygon will act as a part of the underlying map.": "Se falso, il poligono agirà come parte della mappa sottostante.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe con altezza (in px) personalizzata: {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Vedi tutto", + "Dynamic properties": "Proprietà dinamiche", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Specificando le proprietà degli oggetti attraverso le parentesi graffe es. {name} queste saranno automaticamente sostituite con i valore corrispondenti", + "Long credits": "Ringraziamenti estesi", + "No licence has been set": "Non è ancora stata impostata una licenza", + "Popup content template": "Template del contenuto del popup", + "Short credits": "Mostra i ringraziamenti ", + "Will be displayed in the bottom right corner of the map": "Sarà visualizzato in un angolo in basso a destra sulla mappa ", + "Will be visible in the caption of the map": "Sarà visibile nella didascalia della mappa", + "Map has been saved!": "La mappa è stata salvata", + "Save anyway": "Salva comunque", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "OPS! Qualcun altro sembra aver modificato i dati. È possibile comunque salvare, ma questo cancellerà le modifiche apportate da altri.", + "Comma separated list of properties to use when filtering features": "Lista di proprietà separate da virgola da utilizzare per filtrare le geometrie", + "Keep current visible layers": "Mantieni i livelli attualmente visibili", + "Coordinates": "Coordinate", + "Latitude": "Latitudine", + "Longitude": "Longitudine", + "Continue line (Ctrl-click)": "Continua linea (Ctrl-click)", + "Start a hole here": "Comincia un buco qui", + "Click last point to finish shape": "Click su ultimo punto per completare la geometria", + "Click to add a marker": "Clicca per aggiungere un marcatore", + "Click to continue drawing": "Clic per continuare a disegnare", + "Click to start drawing a line": "Clic per iniziare a disegnare una linea", + "Click to start drawing a polygon": "Clicca per iniziare a disegnare un poligono", + "Import in a new layer": "Importa in un nuovo layer", + "Layer": "Layer", + "Please choose a format": "Scegliere un formato", + "Imports all umap data, including layers and settings.": "importa tutti i dati di umap compresi layer e le impostazioni", + "Invalid umap data": "dati di umap non validi", + "Invalid umap data in {filename}": "dati umap non validi nel file {filename}", + "Add a line to the current multi": "Aggiungi una linea a quelle correnti", + "Add a polygon to the current multi": "Aggiungi un poligono a quell correnti", + "Click to edit": "Clic per la modifica", + "Continue line": "Linea continua", + "Delete this shape": "Cancella questa geometria", + "Make main shape": "Genera geometria generale", + "Merge lines": "Unisci linee", + "Remove shape from the multi": "Rimuovi geometria dalle altre", + "Transfer shape to edited feature": "Trasforma la geometria in una modificabile", + "next": "prossimo", + "previous": "precedente", + "Measure distances": "Misuratore di distanze", + "NM": "NM", + "kilometers": "chilometri", + "km": "km", + "mi": "mi", + "miles": "miglia", + "nautical miles": "miglie nautiche", + "{area} acres": "{area} acri", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miglia", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Si vuole veramente ripristinare questa versione?", + "Extract shape to separate feature": "Dividi la geometria in geometrie separate", + "Layer properties": "Proprietà del layer", + "Restore this version": "Ripristina questa versione", + "Versions": "Versioni", + "You have unsaved changes.": "Ci sono delle modifiche che non sono state ancora salvate.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ja.js b/umap/static/umap/locale/ja.js new file mode 100644 index 00000000..5b03606e --- /dev/null +++ b/umap/static/umap/locale/ja.js @@ -0,0 +1,352 @@ +var locale = { + "About": "概要", + "Action not allowed :(": "そのアクションは禁止されています :(", + "Add a layer": "レイヤ追加", + "Add symbol": "シンボルを追加", + "Advanced actions": "拡張アクション", + "Advanced properties": "拡張プロパティ", + "Allow scroll wheel zoom?": "マウスホイールでのスクロールを許可?", + "An error occured": "エラーが発生しました", + "Are you sure you want to cancel your changes?": "本当に編集内容を破棄しますか?", + "Are you sure you want to clone this map and all its datalayers?": "すべてのデータレイヤを含むマップ全体を複製してよいですか?", + "Are you sure you want to delete the feature?": "地物を削除してよいですか?", + "Are you sure you want to delete this map?": "本当にこのマップを削除してよいですか?", + "Ball": "まち針", + "Bring feature to center": "この地物を中心に表示", + "Browse data": "データ内容表示", + "Cancel": "キャンセル", + "Cancel edits": "編集を破棄", + "Center map on your location": "閲覧者の位置をマップの中心に設定", + "Change map background": "背景地図を変更", + "Change symbol": "シンボル変更", + "Change tilelayers": "タイルレイヤの変更", + "Choose the format of the data to import": "インポートデータ形式を選択", + "Choose the layer of the feature": "地物のレイヤを選択", + "Choose the layer to import in": "インポート対象レイヤ選択", + "Circle": "円形", + "Clone this map": "マップを複製", + "Default": "デフォルト", + "Delete": "削除", + "Delete this feature": "地物を削除", + "Disable editing": "編集を終了", + "Display on load": "読み込み時に表示", + "Do you want to display a minimap?": "ミニマップを表示しますか?", + "Do you want to display popup footer?": "フッタをポップアップしますか?", + "Do you want to display the scale control?": "縮尺を表示しますか?", + "Download data": "データダウンロード", + "Draw a line": "ラインを描く", + "Draw a marker": "マーカーを配置", + "Draw a polygon": "ポリゴンを描く", + "Draw a polyline": "ポリゴンを描く", + "Drop": "しずく型", + "Dynamic": "ダイナミック", + "Edit": "編集", + "Edit feature's layer": "地物レイヤー編集", + "Edit map properties": "マッププロパティを編集", + "Edit map settings": "マップ設定を編集", + "Edit this feature": "地物を編集", + "Embed and share this map": "サイトへのマップ埋め込みと共有", + "Enable editing": "編集を有効化", + "Format": "フォーマット", + "From zoom": "表示開始するズームレベル", + "Go to «{feature}»": "«{feature}»を表示", + "Hide controls": "操作パネルを非表示", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "各ズームレベルでのポリゴン簡略化 (more = パフォーマンスと滑らかさ重視, less = 正確さ重視)", + "Import": "インポート", + "Import data": "データインポート", + "Inherit": "属性継承", + "Licence": "ライセンス", + "Map background credits": "背景地図クレジット", + "Map user content has been published under licence": "マップユーザコンテンツのライセンス", + "More controls": "詳細操作パネル", + "Optional. Same as color if not set.": "オプション。設定がない場合、色指定と同様", + "Optionnal.": "オプション", + "Paste here your data": "手持ちのデータからペースト", + "Please be sure the licence is compliant with your use.": "利用目的に沿ったライセンスを選択するようにしてください", + "Problem in the response": "レスポンスに問題があります", + "Problem in the response format": "レスポンス形式に問題があります", + "Provide an URL here": "URLを入力してください", + "Remote data": "サイト外のデータ", + "Save": "保存", + "Save current edits": "編集内容を保存", + "Save this center and zoom": "地図中心点とズームレベルを保存", + "Show/hide layer": "レイヤ表示/非表示", + "Start editing": "編集開始", + "Stop editing": "編集中断", + "The zoom and center have been setted.": "ズームと地図中心点の設定完了", + "To zoom": "非表示にするズームレベル", + "Untitled layer": "名称未定レイヤ", + "Untitled map": "名称未定マップ", + "Update permissions and editors": "権限設定とエディタを更新", + "Url": "URL", + "User content credits": "ユーザ作成データのクレジット", + "Where do we go from here?": "ここからどこへ向かいますか?", + "Zoom in": "ズームイン", + "Zoom out": "ズームアウト", + "Zoom to layer extent": "データがある位置を表示", + "Zoom to this feature": "この地物にズーム", + "color": "色", + "dash array": "破線表示", + "description": "概要", + "fill": "塗りつぶし", + "fill color": "塗りつぶし色", + "fill opacity": "塗りつぶし透過度", + "inherit": "属性継承", + "licence": "ライセンス", + "name": "名称", + "no": "いいえ", + "opacity": "透過度", + "stroke": "ストローク", + "weight": "線の太さ", + "yes": "はい", + "Editing": "編集", + "Embed the map": "マップ埋め込み", + "Short URL": "短縮URL", + "# one hash for main heading": "# ハッシュ1つで主な見出し", + "## two hashes for second heading": "## ハッシュ2つで第二見出し", + "### three hashes for third heading": "### ハッシュ3つで第三見出し", + "**double star for bold**": "**アスタリスク2つで太字**", + "*simple star for italic*": "*アスタリスク1つでイタリック体*", + "--- for an horizontal rule": "--- 横方向の罫線", + "All properties are imported.": "すべてのプロパティがインポートされました。", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "カンマ、タブ、セミコロンなどで区切られた値。SRSはWGS84が適用されます。ポイントのジオメトリのみがインポート対象です。インポートを行なう際は、カラムの先頭行を対象に «lat» と «lon» という文字列が検索されます。検索は行の最初から順に行われ、大文字と小文字は区別されません。その他のすべてのカラムは、プロパティとしてインポートされます。", + "Custom background": "独自背景", + "Help": "ヘルプ", + "Image: {{http://image.url.com}}": "画像: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "テキストとリンク: [[http://example.com|リンクのテキスト]]", + "Properties imported:": "インポートされたプロパティ:", + "Simple link: [[http://example.com]]": "シンプルリンク: [[http://example.com]]", + "Supported scheme": "対応スキーマ", + "Supported variables that will be dynamically replaced": "対応する動的な変数", + "Text formatting": "テキスト形式", + "attribution": "著作権表示", + "display name": "表示名", + "max zoom": "最大ズーム", + "min zoom": "最小ズーム", + "Skipping unkown geometry.type: {type}": "不明なジオメトリタイプ {type}をスキップしました", + "Please save the map before": "いちどマップの保存を行ってください", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "地物のプロパティを変数として扱うことが可能です。例: \"http://myserver.org/images/{name}.png\" であれば、{name}の部分はそれぞれのマーカーの \"name\" の値へ自動的に変換されます。", + "Transform to polygon": "ポリゴンへ変換", + "Transform to lines": "ラインへ変換", + "Choose the data format": "データ形式選択", + "Error in the tilelayer URL": "タイルレイヤのURLに誤りがあります", + "Directions from here": "ここからの距離", + "Choose a preset": "プリセット選択", + "Limit bounds": "表示範囲の制限", + "Use current bounds": "現在の表示範囲を利用", + "max East": "東端", + "max North": "北端", + "max South": "南端", + "max West": "西端", + "TMS format": "TMSフォーマット", + "Credits": "制作", + "Only visible features will be downloaded.": "表示中の地物のみがダウンロードされます。", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "現在表示中の領域をエディタで編集し、より正確なデータをOpenStreetMapへ書き込む", + "Default properties": "標準のプロパティ", + "User interface options": "ユーザインターフェースオプション", + "Image with custom width (in px): {{http://image.url.com|width}}": "画像の横幅カスタム値 (px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "デフォルトのマップ表示から現在の表示に切り替えますか?", + "Iframe export options": "Iframeエクスポートオプション", + "Include full screen link?": "フルスクリーンのリンクを含める?", + "See full screen": "フルスクリーン表示", + "height": "縦幅", + "width": "横幅", + "Clustered": "クラスタ化", + "Clustering radius": "クラスタ包括半径", + "GeoRSS (only link)": "GeoRSS (リンクのみ)", + "GeoRSS (title + image)": "GeoRSS (タイトル+画像)", + "Heatmap": "ヒートマップ", + "Heatmap radius": "ヒートマップ包括半径", + "Name and description": "名称・概要", + "Override clustering radius (default 80)": "クラスタ包括半径を上書き (基本値 80)", + "Override heatmap radius (default 25)": "ヒートマップ包括半径を上書き (基本値 25)", + "Proxy request": "プロキシリクエスト", + "Table": "テーブル", + "To use if remote server doesn't allow cross domain (slower)": "外部サーバがクロスドメインを許可していない場合に使用します (処理速度低下)", + "Type of layer": "レイヤタイプ", + "Filter…": "フィルタ...", + "Heatmap intensity property": "ヒートマップ強調設定", + "Optional intensity property for heatmap": "ヒートマップ強調表示オプション", + "Caption": "表題", + "Data browser": "データブラウザ", + "Do you want to display a caption bar?": "表題を表示しますか?", + "Do you want to display a panel on load?": "読み込み時にパネルを表示しますか?", + "None": "なし", + "by": "by", + "Name and description (large)": "名称・概要 (大)", + "Empty": "内容なし", + "Split line": "ラインを分割", + "Clone": "複製", + "Clone of {name}": "{name}の複製", + "Side panel": "サイドパネル", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "自動ズーム時のズームレベル", + "Do you want to display the «more» control?": "«more»操作パネルを表示しますか?", + "Auto": "自動", + "Default: name": "デフォルト: 名称", + "Property to use for sorting features": "地物並び替え時のプロパティ", + "Slideshow": "スライドショー", + "Start slideshow": "スライドショーを開始", + "Stop slideshow": "スライドショーを停止", + "Text color for the cluster label": "クラスタラベルのテキスト色", + "Zoom to the next": "次にズーム", + "Zoom to the previous": "前にズーム", + "Add a new property": "プロパティ追加", + "Are you sure you want to delete this property on all the features?": "すべての地物からこのプロパティを削除します。よろしいですか?", + "Close": "閉じる", + "Delete this property on all the features": "すべての地物からこのプロパティを削除", + "Edit properties in a table": "表形式でプロパティを編集", + "Please enter the name of the property": "プロパティの名称を入力してください", + "Please enter the new name of this property": "このプロパティに新しい名称を付与してください", + "Rename this property on all the features": "すべての地物に対してこのプロパティ名を変更", + "If false, the polygon will act as a part of the underlying map.": "無効にした場合、ポリゴンは背景地図の一部として動作します。", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframeの縦幅を指定(ピクセル): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "すべて表示", + "Dynamic properties": "動的なプロパティ", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "波括弧で地物プロパティをくくると(例: {name})、対応する値に動的に置き換えられます。", + "Long credits": "正式なクレジット", + "No licence has been set": "ライセンス指定がありません", + "Popup content template": "ポップアップコンテンツのテンプレート", + "Short credits": "短縮表示板クレジット", + "Will be displayed in the bottom right corner of the map": "地図の右下に表示されます", + "Will be visible in the caption of the map": "地図の脚注として表示されます", + "Map has been saved!": "地図の保存完了", + "Save anyway": "保存を再実行", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "おおおっと! 他の誰かがデータを編集したようです。あなたの編集内容をもう一度保存することもできますが、その場合、他の誰かが行った編集は削除されます。", + "Comma separated list of properties to use when filtering features": "地物をフィルタする際に利用する、カンマで区切ったプロパティのリスト", + "Keep current visible layers": "現在表示しているレイヤを保持", + "Coordinates": "位置情報", + "Latitude": "緯度", + "Longitude": "経度", + "Continue line (Ctrl-click)": "ラインを延長(Ctrl-クリック)", + "Start a hole here": "この部分に穴を作成", + "Click last point to finish shape": "クリックでシェイプの作成を終了", + "Click to add a marker": "クリックでマーカー追加", + "Click to continue drawing": "クリックで描画を継続", + "Click to start drawing a line": "クリックでラインの描画開始", + "Click to start drawing a polygon": "クリックでポリゴンの描画開始", + "Import in a new layer": "新規レイヤをインポート", + "Layer": "レイヤ", + "Please choose a format": "フォーマットを指定してください", + "Imports all umap data, including layers and settings.": "umapのデータをすべてインポート(レイヤ、設定を含む)", + "Invalid umap data": "不正なumapデータ", + "Invalid umap data in {filename}": "{filename} に不正なumapデータ", + "Add a line to the current multi": "現在のマルチにラインを追加", + "Add a polygon to the current multi": "現在のマルチにポリゴンを追加", + "Click to edit": "クリックで編集", + "Continue line": "ラインを延長", + "Delete this shape": "このシェイプを削除", + "Make main shape": "メインシェイプを作成", + "Merge lines": "ラインを結合", + "Remove shape from the multi": "マルチからシェイプを削除", + "Transfer shape to edited feature": "シェイプを編集済み地物へ変換", + "next": "次へ", + "previous": "前へ", + "Measure distances": "距離を計測", + "NM": "NM", + "kilometers": "キロメートル", + "km": "(km)", + "mi": "(マイル)", + "miles": "マイル", + "nautical miles": "海里", + "{area} acres": "{area} エイカー", + "{area} ha": "{area} ヘクタール", + "{area} m²": "{area} m²", + "{area} mi²": "{area} 平方マイル", + "{area} yd²": "{area} 平方ヤード", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} マイル", + "{distance} yd": "{distance} ヤード", + "Are you sure you want to restore this version?": "本当にこのバージョンを復元してよいですか?", + "Extract shape to separate feature": "シェイプを複数の地物に変換", + "Layer properties": "レイヤープロパティ", + "Restore this version": "このバージョンを復元する", + "Versions": "バージョン", + "You have unsaved changes.": "編集が保存されていません", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "カンマで数字を区切り、ストロークの破線パターンを指定。 例: \"5, 10, 15\"", + "Advanced transition": "拡張トランジション", + "Allow interactions": "インタラクションを許可", + "Autostart when map is loaded": "マップ読み込み時に自動で開始", + "Default interaction options": "標準のポップアップオプション", + "Default shape properties": "標準のシェイプ表示プロパティ", + "Default zoom level": "標準ズームレベル", + "Define link to open in a new window on polygon click.": "ポリゴンクリック時にリンクを新しいウィンドウで開く", + "Delete this vertex (Alt-click)": "このポイントを削除(Altを押しながらクリック)", + "Display the control to open OpenStreetMap editor": "OpenStreetMapエディタを起動するパネルを表示", + "Display the data layers control": "データレイヤ操作パネルを表示", + "Display the embed control": "サイトへのマップ埋め込みパネルを表示", + "Display the fullscreen control": "フルスクリーンパネルを表示", + "Display the locate control": "現在地パネルを表示", + "Display the measure control": "縮尺パネルを表示", + "Display the search control": "検索パネルを表示", + "Display the tile layers control": "タイルレイヤパネルを表示", + "Display the zoom control": "ズーム変更パネルを表示", + "Exit Fullscreen": "フルスクリーン表示を解除", + "Fetch data each time map view changes.": "地図表示が変更されたらデータを再取得する", + "Filter keys": "フィルタに使うキー", + "Icon shape": "アイコン形状", + "Icon symbol": "アイコンシンボル", + "Interaction options": "ポップアップオプション", + "Label key": "ラベル表示するキー", + "Link to…": "リンク", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "CSSで有効な値を指定してください (例: DarkBlue, #123456など)", + "No results": "検索結果なし", + "Popup style": "ポップアップスタイル", + "Replace layer content": "レイヤ内容を差し替える", + "Save this location as new feature": "この場所を新しい地物として保存", + "Search location": "地名で検索", + "Set URL": "URLを設定", + "Shape properties": "シェイプ表示プロパティ", + "Simplify": "簡略化", + "Sort key": "並び替えに使うキー", + "The name of the property to use as feature label (ex.: \"nom\")": "地物のラベルとして用いるプロパティ名を入力する", + "Toggle edit mode (shift-click)": "編集モードを切り替える(シフトキーを押しながらクリック)", + "View Fullscreen": "フルスクリーン表示", + "Whether to display or not polygons paths.": "ポリゴンの外周線を表示するかどうか", + "Whether to fill polygons with color.": "ポリゴンを塗りつぶすかどうか", + "Zoom to this place": "この場所にズーム", + "always": "常時", + "clear": "クリア", + "define": "指定", + "hidden": "隠す", + "never": "表示しない", + "Automatic": "自動", + "Clone this feature": "この地物を複製", + "Display label": "ラベルを表示", + "Drag to reorder": "ドラッグして並べ替える", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframeの縦幅および横幅を指定(ピクセル): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "ラベルをクリックしてポップアップを表示", + "Label direction": "ラベルの位置", + "Manage layers": "レイヤ管理", + "On the bottom": "下寄せ", + "On the left": "左寄せ", + "On the right": "右寄せ", + "On the top": "上寄せ", + "Only display label on mouse hover": "カーソルを乗せたときにラベルを表示", + "Open link in…": "リンクの開き方", + "Unable to detect format of file {filename}": "ファイル形式を認識できません {filename}", + "collapsed": "ボタン", + "expanded": "リスト", + "iframe": "iframe", + "new window": "新規ウィンドウ", + "parent window": "親ウィンドウ", + "{count} errors during import: {message}": "インポートで {count} 個のエラー: {message}", + "Are you sure you want to delete this layer?": "本当にこのレイヤを削除してよいですか?", + "Delete layer": "レイヤを削除", + "Error while fetching {url}": "{url} の取得エラー", + "Home": "ホーム", + "Delete all layers": "すべてのレイヤを削除", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("ja", locale); +L.setLocale("ja"); \ No newline at end of file diff --git a/umap/static/umap/locale/ja.json b/umap/static/umap/locale/ja.json new file mode 100644 index 00000000..8fecaee3 --- /dev/null +++ b/umap/static/umap/locale/ja.json @@ -0,0 +1,350 @@ +{ + "About": "概要", + "Action not allowed :(": "そのアクションは禁止されています :(", + "Add a layer": "レイヤ追加", + "Add symbol": "シンボルを追加", + "Advanced actions": "拡張アクション", + "Advanced properties": "拡張プロパティ", + "Allow scroll wheel zoom?": "マウスホイールでのスクロールを許可?", + "An error occured": "エラーが発生しました", + "Are you sure you want to cancel your changes?": "本当に編集内容を破棄しますか?", + "Are you sure you want to clone this map and all its datalayers?": "すべてのデータレイヤを含むマップ全体を複製してよいですか?", + "Are you sure you want to delete the feature?": "地物を削除してよいですか?", + "Are you sure you want to delete this map?": "本当にこのマップを削除してよいですか?", + "Ball": "まち針", + "Bring feature to center": "この地物を中心に表示", + "Browse data": "データ内容表示", + "Cancel": "キャンセル", + "Cancel edits": "編集を破棄", + "Center map on your location": "閲覧者の位置をマップの中心に設定", + "Change map background": "背景地図を変更", + "Change symbol": "シンボル変更", + "Change tilelayers": "タイルレイヤの変更", + "Choose the format of the data to import": "インポートデータ形式を選択", + "Choose the layer of the feature": "地物のレイヤを選択", + "Choose the layer to import in": "インポート対象レイヤ選択", + "Circle": "円形", + "Clone this map": "マップを複製", + "Default": "デフォルト", + "Delete": "削除", + "Delete this feature": "地物を削除", + "Disable editing": "編集を終了", + "Display on load": "読み込み時に表示", + "Do you want to display a minimap?": "ミニマップを表示しますか?", + "Do you want to display popup footer?": "フッタをポップアップしますか?", + "Do you want to display the scale control?": "縮尺を表示しますか?", + "Download data": "データダウンロード", + "Draw a line": "ラインを描く", + "Draw a marker": "マーカーを配置", + "Draw a polygon": "ポリゴンを描く", + "Draw a polyline": "ポリゴンを描く", + "Drop": "しずく型", + "Dynamic": "ダイナミック", + "Edit": "編集", + "Edit feature's layer": "地物レイヤー編集", + "Edit map properties": "マッププロパティを編集", + "Edit map settings": "マップ設定を編集", + "Edit this feature": "地物を編集", + "Embed and share this map": "サイトへのマップ埋め込みと共有", + "Enable editing": "編集を有効化", + "Format": "フォーマット", + "From zoom": "表示開始するズームレベル", + "Go to «{feature}»": "«{feature}»を表示", + "Hide controls": "操作パネルを非表示", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "各ズームレベルでのポリゴン簡略化 (more = パフォーマンスと滑らかさ重視, less = 正確さ重視)", + "Import": "インポート", + "Import data": "データインポート", + "Inherit": "属性継承", + "Licence": "ライセンス", + "Map background credits": "背景地図クレジット", + "Map user content has been published under licence": "マップユーザコンテンツのライセンス", + "More controls": "詳細操作パネル", + "Optional. Same as color if not set.": "オプション。設定がない場合、色指定と同様", + "Optionnal.": "オプション", + "Paste here your data": "手持ちのデータからペースト", + "Please be sure the licence is compliant with your use.": "利用目的に沿ったライセンスを選択するようにしてください", + "Problem in the response": "レスポンスに問題があります", + "Problem in the response format": "レスポンス形式に問題があります", + "Provide an URL here": "URLを入力してください", + "Remote data": "サイト外のデータ", + "Save": "保存", + "Save current edits": "編集内容を保存", + "Save this center and zoom": "地図中心点とズームレベルを保存", + "Show/hide layer": "レイヤ表示/非表示", + "Start editing": "編集開始", + "Stop editing": "編集中断", + "The zoom and center have been setted.": "ズームと地図中心点の設定完了", + "To zoom": "非表示にするズームレベル", + "Untitled layer": "名称未定レイヤ", + "Untitled map": "名称未定マップ", + "Update permissions and editors": "権限設定とエディタを更新", + "Url": "URL", + "User content credits": "ユーザ作成データのクレジット", + "Where do we go from here?": "ここからどこへ向かいますか?", + "Zoom in": "ズームイン", + "Zoom out": "ズームアウト", + "Zoom to layer extent": "データがある位置を表示", + "Zoom to this feature": "この地物にズーム", + "color": "色", + "dash array": "破線表示", + "description": "概要", + "fill": "塗りつぶし", + "fill color": "塗りつぶし色", + "fill opacity": "塗りつぶし透過度", + "inherit": "属性継承", + "licence": "ライセンス", + "name": "名称", + "no": "いいえ", + "opacity": "透過度", + "stroke": "ストローク", + "weight": "線の太さ", + "yes": "はい", + "Editing": "編集", + "Embed the map": "マップ埋め込み", + "Short URL": "短縮URL", + "# one hash for main heading": "# ハッシュ1つで主な見出し", + "## two hashes for second heading": "## ハッシュ2つで第二見出し", + "### three hashes for third heading": "### ハッシュ3つで第三見出し", + "**double star for bold**": "**アスタリスク2つで太字**", + "*simple star for italic*": "*アスタリスク1つでイタリック体*", + "--- for an horizontal rule": "--- 横方向の罫線", + "All properties are imported.": "すべてのプロパティがインポートされました。", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "カンマ、タブ、セミコロンなどで区切られた値。SRSはWGS84が適用されます。ポイントのジオメトリのみがインポート対象です。インポートを行なう際は、カラムの先頭行を対象に «lat» と «lon» という文字列が検索されます。検索は行の最初から順に行われ、大文字と小文字は区別されません。その他のすべてのカラムは、プロパティとしてインポートされます。", + "Custom background": "独自背景", + "Help": "ヘルプ", + "Image: {{http://image.url.com}}": "画像: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "テキストとリンク: [[http://example.com|リンクのテキスト]]", + "Properties imported:": "インポートされたプロパティ:", + "Simple link: [[http://example.com]]": "シンプルリンク: [[http://example.com]]", + "Supported scheme": "対応スキーマ", + "Supported variables that will be dynamically replaced": "対応する動的な変数", + "Text formatting": "テキスト形式", + "attribution": "著作権表示", + "display name": "表示名", + "max zoom": "最大ズーム", + "min zoom": "最小ズーム", + "Skipping unkown geometry.type: {type}": "不明なジオメトリタイプ {type}をスキップしました", + "Please save the map before": "いちどマップの保存を行ってください", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "地物のプロパティを変数として扱うことが可能です。例: \"http://myserver.org/images/{name}.png\" であれば、{name}の部分はそれぞれのマーカーの \"name\" の値へ自動的に変換されます。", + "Transform to polygon": "ポリゴンへ変換", + "Transform to lines": "ラインへ変換", + "Choose the data format": "データ形式選択", + "Error in the tilelayer URL": "タイルレイヤのURLに誤りがあります", + "Directions from here": "ここからの距離", + "Choose a preset": "プリセット選択", + "Limit bounds": "表示範囲の制限", + "Use current bounds": "現在の表示範囲を利用", + "max East": "東端", + "max North": "北端", + "max South": "南端", + "max West": "西端", + "TMS format": "TMSフォーマット", + "Credits": "制作", + "Only visible features will be downloaded.": "表示中の地物のみがダウンロードされます。", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "現在表示中の領域をエディタで編集し、より正確なデータをOpenStreetMapへ書き込む", + "Default properties": "標準のプロパティ", + "User interface options": "ユーザインターフェースオプション", + "Image with custom width (in px): {{http://image.url.com|width}}": "画像の横幅カスタム値 (px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "デフォルトのマップ表示から現在の表示に切り替えますか?", + "Iframe export options": "Iframeエクスポートオプション", + "Include full screen link?": "フルスクリーンのリンクを含める?", + "See full screen": "フルスクリーン表示", + "height": "縦幅", + "width": "横幅", + "Clustered": "クラスタ化", + "Clustering radius": "クラスタ包括半径", + "GeoRSS (only link)": "GeoRSS (リンクのみ)", + "GeoRSS (title + image)": "GeoRSS (タイトル+画像)", + "Heatmap": "ヒートマップ", + "Heatmap radius": "ヒートマップ包括半径", + "Name and description": "名称・概要", + "Override clustering radius (default 80)": "クラスタ包括半径を上書き (基本値 80)", + "Override heatmap radius (default 25)": "ヒートマップ包括半径を上書き (基本値 25)", + "Proxy request": "プロキシリクエスト", + "Table": "テーブル", + "To use if remote server doesn't allow cross domain (slower)": "外部サーバがクロスドメインを許可していない場合に使用します (処理速度低下)", + "Type of layer": "レイヤタイプ", + "Filter…": "フィルタ...", + "Heatmap intensity property": "ヒートマップ強調設定", + "Optional intensity property for heatmap": "ヒートマップ強調表示オプション", + "Caption": "表題", + "Data browser": "データブラウザ", + "Do you want to display a caption bar?": "表題を表示しますか?", + "Do you want to display a panel on load?": "読み込み時にパネルを表示しますか?", + "None": "なし", + "by": "by", + "Name and description (large)": "名称・概要 (大)", + "Empty": "内容なし", + "Split line": "ラインを分割", + "Clone": "複製", + "Clone of {name}": "{name}の複製", + "Side panel": "サイドパネル", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "自動ズーム時のズームレベル", + "Do you want to display the «more» control?": "«more»操作パネルを表示しますか?", + "Auto": "自動", + "Default: name": "デフォルト: 名称", + "Property to use for sorting features": "地物並び替え時のプロパティ", + "Slideshow": "スライドショー", + "Start slideshow": "スライドショーを開始", + "Stop slideshow": "スライドショーを停止", + "Text color for the cluster label": "クラスタラベルのテキスト色", + "Zoom to the next": "次にズーム", + "Zoom to the previous": "前にズーム", + "Add a new property": "プロパティ追加", + "Are you sure you want to delete this property on all the features?": "すべての地物からこのプロパティを削除します。よろしいですか?", + "Close": "閉じる", + "Delete this property on all the features": "すべての地物からこのプロパティを削除", + "Edit properties in a table": "表形式でプロパティを編集", + "Please enter the name of the property": "プロパティの名称を入力してください", + "Please enter the new name of this property": "このプロパティに新しい名称を付与してください", + "Rename this property on all the features": "すべての地物に対してこのプロパティ名を変更", + "If false, the polygon will act as a part of the underlying map.": "無効にした場合、ポリゴンは背景地図の一部として動作します。", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframeの縦幅を指定(ピクセル): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "すべて表示", + "Dynamic properties": "動的なプロパティ", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "波括弧で地物プロパティをくくると(例: {name})、対応する値に動的に置き換えられます。", + "Long credits": "正式なクレジット", + "No licence has been set": "ライセンス指定がありません", + "Popup content template": "ポップアップコンテンツのテンプレート", + "Short credits": "短縮表示板クレジット", + "Will be displayed in the bottom right corner of the map": "地図の右下に表示されます", + "Will be visible in the caption of the map": "地図の脚注として表示されます", + "Map has been saved!": "地図の保存完了", + "Save anyway": "保存を再実行", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "おおおっと! 他の誰かがデータを編集したようです。あなたの編集内容をもう一度保存することもできますが、その場合、他の誰かが行った編集は削除されます。", + "Comma separated list of properties to use when filtering features": "地物をフィルタする際に利用する、カンマで区切ったプロパティのリスト", + "Keep current visible layers": "現在表示しているレイヤを保持", + "Coordinates": "位置情報", + "Latitude": "緯度", + "Longitude": "経度", + "Continue line (Ctrl-click)": "ラインを延長(Ctrl-クリック)", + "Start a hole here": "この部分に穴を作成", + "Click last point to finish shape": "クリックでシェイプの作成を終了", + "Click to add a marker": "クリックでマーカー追加", + "Click to continue drawing": "クリックで描画を継続", + "Click to start drawing a line": "クリックでラインの描画開始", + "Click to start drawing a polygon": "クリックでポリゴンの描画開始", + "Import in a new layer": "新規レイヤをインポート", + "Layer": "レイヤ", + "Please choose a format": "フォーマットを指定してください", + "Imports all umap data, including layers and settings.": "umapのデータをすべてインポート(レイヤ、設定を含む)", + "Invalid umap data": "不正なumapデータ", + "Invalid umap data in {filename}": "{filename} に不正なumapデータ", + "Add a line to the current multi": "現在のマルチにラインを追加", + "Add a polygon to the current multi": "現在のマルチにポリゴンを追加", + "Click to edit": "クリックで編集", + "Continue line": "ラインを延長", + "Delete this shape": "このシェイプを削除", + "Make main shape": "メインシェイプを作成", + "Merge lines": "ラインを結合", + "Remove shape from the multi": "マルチからシェイプを削除", + "Transfer shape to edited feature": "シェイプを編集済み地物へ変換", + "next": "次へ", + "previous": "前へ", + "Measure distances": "距離を計測", + "NM": "NM", + "kilometers": "キロメートル", + "km": "(km)", + "mi": "(マイル)", + "miles": "マイル", + "nautical miles": "海里", + "{area} acres": "{area} エイカー", + "{area} ha": "{area} ヘクタール", + "{area} m²": "{area} m²", + "{area} mi²": "{area} 平方マイル", + "{area} yd²": "{area} 平方ヤード", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} マイル", + "{distance} yd": "{distance} ヤード", + "Are you sure you want to restore this version?": "本当にこのバージョンを復元してよいですか?", + "Extract shape to separate feature": "シェイプを複数の地物に変換", + "Layer properties": "レイヤープロパティ", + "Restore this version": "このバージョンを復元する", + "Versions": "バージョン", + "You have unsaved changes.": "編集が保存されていません", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "カンマで数字を区切り、ストロークの破線パターンを指定。 例: \"5, 10, 15\"", + "Advanced transition": "拡張トランジション", + "Allow interactions": "インタラクションを許可", + "Autostart when map is loaded": "マップ読み込み時に自動で開始", + "Default interaction options": "標準のポップアップオプション", + "Default shape properties": "標準のシェイプ表示プロパティ", + "Default zoom level": "標準ズームレベル", + "Define link to open in a new window on polygon click.": "ポリゴンクリック時にリンクを新しいウィンドウで開く", + "Delete this vertex (Alt-click)": "このポイントを削除(Altを押しながらクリック)", + "Display the control to open OpenStreetMap editor": "OpenStreetMapエディタを起動するパネルを表示", + "Display the data layers control": "データレイヤ操作パネルを表示", + "Display the embed control": "サイトへのマップ埋め込みパネルを表示", + "Display the fullscreen control": "フルスクリーンパネルを表示", + "Display the locate control": "現在地パネルを表示", + "Display the measure control": "縮尺パネルを表示", + "Display the search control": "検索パネルを表示", + "Display the tile layers control": "タイルレイヤパネルを表示", + "Display the zoom control": "ズーム変更パネルを表示", + "Exit Fullscreen": "フルスクリーン表示を解除", + "Fetch data each time map view changes.": "地図表示が変更されたらデータを再取得する", + "Filter keys": "フィルタに使うキー", + "Icon shape": "アイコン形状", + "Icon symbol": "アイコンシンボル", + "Interaction options": "ポップアップオプション", + "Label key": "ラベル表示するキー", + "Link to…": "リンク", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "CSSで有効な値を指定してください (例: DarkBlue, #123456など)", + "No results": "検索結果なし", + "Popup style": "ポップアップスタイル", + "Replace layer content": "レイヤ内容を差し替える", + "Save this location as new feature": "この場所を新しい地物として保存", + "Search location": "地名で検索", + "Set URL": "URLを設定", + "Shape properties": "シェイプ表示プロパティ", + "Simplify": "簡略化", + "Sort key": "並び替えに使うキー", + "The name of the property to use as feature label (ex.: \"nom\")": "地物のラベルとして用いるプロパティ名を入力する", + "Toggle edit mode (shift-click)": "編集モードを切り替える(シフトキーを押しながらクリック)", + "View Fullscreen": "フルスクリーン表示", + "Whether to display or not polygons paths.": "ポリゴンの外周線を表示するかどうか", + "Whether to fill polygons with color.": "ポリゴンを塗りつぶすかどうか", + "Zoom to this place": "この場所にズーム", + "always": "常時", + "clear": "クリア", + "define": "指定", + "hidden": "隠す", + "never": "表示しない", + "Automatic": "自動", + "Clone this feature": "この地物を複製", + "Display label": "ラベルを表示", + "Drag to reorder": "ドラッグして並べ替える", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframeの縦幅および横幅を指定(ピクセル): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "ラベルをクリックしてポップアップを表示", + "Label direction": "ラベルの位置", + "Manage layers": "レイヤ管理", + "On the bottom": "下寄せ", + "On the left": "左寄せ", + "On the right": "右寄せ", + "On the top": "上寄せ", + "Only display label on mouse hover": "カーソルを乗せたときにラベルを表示", + "Open link in…": "リンクの開き方", + "Unable to detect format of file {filename}": "ファイル形式を認識できません {filename}", + "collapsed": "ボタン", + "expanded": "リスト", + "iframe": "iframe", + "new window": "新規ウィンドウ", + "parent window": "親ウィンドウ", + "{count} errors during import: {message}": "インポートで {count} 個のエラー: {message}", + "Are you sure you want to delete this layer?": "本当にこのレイヤを削除してよいですか?", + "Delete layer": "レイヤを削除", + "Error while fetching {url}": "{url} の取得エラー", + "Home": "ホーム", + "Delete all layers": "すべてのレイヤを削除", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/lt.js b/umap/static/umap/locale/lt.js new file mode 100644 index 00000000..b84ee280 --- /dev/null +++ b/umap/static/umap/locale/lt.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Apie", + "Action not allowed :(": "Veiksmas nėra leidžiamas :(", + "Add a layer": "Pridėti sluoksnį", + "Add symbol": "Pridėti simbolį", + "Advanced actions": "Sudėtingesni veiksmai", + "Advanced properties": "Sudėtingesni nustatymai", + "Allow scroll wheel zoom?": "Leisti pelės ratuko veiksmus?", + "An error occured": "Įvyko klaida", + "Are you sure you want to cancel your changes?": "Ar tikrai nori atšaukti savo pakeitimus?", + "Are you sure you want to clone this map and all its datalayers?": "Ar tikrai norite nukopijuoti šį žemėlapį ir visus jo duomenų sluoksnius?", + "Are you sure you want to delete the feature?": "Ar tikrai norite ištrinti šį objektą?", + "Are you sure you want to delete this map?": "Ar Jūs tikrai norite ištrinti šį žemėlapį?", + "Ball": "Rutulys", + "Bring feature to center": "Pastumti objektą į centrą", + "Browse data": "Peržiūrėti duomenis", + "Cancel": "Atšaukti", + "Cancel edits": "Atšaukti pakeitimus", + "Center map on your location": "Centruoti pagal Jūsų vietovę", + "Change map background": "Keisti žemėlapio foną", + "Change symbol": "Pakeisti simbolį", + "Change tilelayers": "Pakeisti sluoksnius", + "Choose the format of the data to import": "Pasirinkite importuojamų uomenų formatą", + "Choose the layer of the feature": "Pasirinkite objekto sluoksnį", + "Choose the layer to import in": "Pasirinkite sluoksnį importavimui", + "Circle": "Apskritimas", + "Clone this map": "Klonuoti šį žemėlapį", + "Default": "Pagal nutylėjimą", + "Delete": "Trinti", + "Delete this feature": "Ištrinti šį objektą", + "Disable editing": "Uždrausti redagavimą", + "Display on load": "Rodyti pasikrovus", + "Do you want to display a minimap?": "Ar norite rodyti mini žemėlapį?", + "Do you want to display popup footer?": "Ar norite rodyti iškylančio lango paraštę?", + "Do you want to display the scale control?": "Ar norite rodyti žemėlapio skalės valdymą?", + "Download data": "Atsisiųsti duomenis", + "Draw a line": "Piešti liniją", + "Draw a marker": "Padėti žymeklį", + "Draw a polygon": "Piešti poligoną", + "Draw a polyline": "Piešti linijas", + "Drop": "Atmesti", + "Dynamic": "Dinaminis", + "Edit": "Redaguoti", + "Edit feature's layer": "Redaguoti objekto sluoksnį", + "Edit map properties": "Keisti žemėlapio nustatymus", + "Edit map settings": "Keisti žemėlapio nustatymus", + "Edit this feature": "Redaguoti šį objektą", + "Embed and share this map": "Įkelti ir dalintis šiuo žemėlapiu", + "Enable editing": "Leisti redaguoti", + "Format": "Formatas", + "From zoom": "Mažiausias mastelis", + "Go to «{feature}»": "Eiti į «{feature}»", + "Hide controls": "Slėpti mygtukus", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Kaip stipriai supaprastinti linijas kiekviename mastelyje (daugiau - diesnis greitis ir lygesnis vaizdas, mažiau - tikslesnis atvaizdavimas)", + "Import": "Importuoti", + "Import data": "Importuoti duomenis", + "Inherit": "Paveldėti", + "Licence": "Licenzija", + "Map background credits": "Žemėlapio fono naudojimo sąlygos", + "Map user content has been published under licence": "Vartotojo turinys buvo publikuotas pagal licenziją", + "More controls": "Daugiau valdymo mygtukų", + "Optional. Same as color if not set.": "Neprivalomas. Toks pats kaip ir spalva, jei nenustatyta.", + "Optionnal.": "Neprivalomas.", + "Paste here your data": "Įklijuokite Jūsų duomenis čia", + "Please be sure the licence is compliant with your use.": "Prašom pasitikrinti ar licezija tikrai tinka Jūsų poreikiams.", + "Problem in the response": "Klaida atsakyme", + "Problem in the response format": "Klaida atsakymo formate", + "Provide an URL here": "Įvęskite adresą", + "Remote data": "Išoriniai duomenys", + "Save": "Išsaugoti", + "Save current edits": "Išsaugoti pakeitimus", + "Save this center and zoom": "Išsaugoti šį centrą ar mastelį.", + "Show/hide layer": "Rodyti/slėpti sluoksnį", + "Start editing": "Pradėti redagavimą", + "Stop editing": "Baigti redagavimą", + "The zoom and center have been setted.": "Šis mastelis ir centras išsaugoti.", + "To zoom": "Padidinti", + "Untitled layer": "Bevardis sluoksnis", + "Untitled map": "Be pavadinimo", + "Update permissions and editors": "Atnaujinti leidimus ir redaguotojus", + "Url": "Url", + "User content credits": "Vartotojo duomenų sąlygos", + "Where do we go from here?": "Kur norite eiti iš čia?", + "Zoom in": "Padidinti mastelį", + "Zoom out": "Didinti", + "Zoom to layer extent": "Išdidinti iki sluoksnio ribų", + "Zoom to this feature": "Išdidinti šį objektą", + "color": "spalva", + "dash array": "brūkšnių masyvas", + "description": "aprašymas", + "fill": "užpildyti", + "fill color": "ploto spalva", + "fill opacity": "ploto skaidrumas", + "inherit": "paveldėti", + "licence": "licenzija", + "name": "vardas", + "no": "ne", + "opacity": "nepermatomumas", + "stroke": "brūkšnys", + "weight": "svoris", + "yes": "taip", + "Editing": "Redaguojama", + "Embed the map": "Įsikelti šį žemėlapį", + "Short URL": "Trumpas URL", + "# one hash for main heading": "# viena grotelė pagrindinei antraštei", + "## two hashes for second heading": "## dvi grotelės antraštei", + "### three hashes for third heading": "### trys grotelės trečio lygio pastraipai", + "**double star for bold**": "**dviguba žvaigždutė paryškintam tekstui**", + "*simple star for italic*": "*viena žvaigždutė pasvyriajam tekstui*", + "--- for an horizontal rule": "--- horizontaliai linijai", + "All properties are imported.": "Visi objektai importuoti.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Kableliu, tab'u arba kabliataškiu atskirtos reikšmės. SRS WGS84 yra palaikomas. Tik taškai yra importuoti. Importuojant bus patikrintos stulpelių antraštės ieškant pavadinimų \"lat\" ir \"lon\". Visi kiti stulpeliai bus įtraukti kaip papildomi atributai.", + "Custom background": "Pritaikytas fonas", + "Help": "Pagalba", + "Image: {{http://image.url.com}}": "Paveikslas: {{http://image.url.com/image.jpeg}}", + "Link with text: [[http://example.com|text of the link]]": "Nuoroda tekstui:: [[http://example.com|nuorodos tekstas]]", + "Properties imported:": "Importuoti objektai:", + "Simple link: [[http://example.com]]": "Paprasta nuoroda: [[http://example.com]]", + "Supported scheme": "Palaikoma struktūra", + "Supported variables that will be dynamically replaced": "Palaikomi kintamieji bus automatiškai perrašyti", + "Text formatting": "Teksto formatavimas", + "attribution": "atributai", + "display name": "rodyti pavadinimą", + "max zoom": "didžiausias mastelis", + "min zoom": "mažiausias mastelis", + "Skipping unkown geometry.type: {type}": "Praleidžiamas nežinomas geometrijos tipas: {type}", + "Please save the map before": "Prašom išsaugoti žemėlapį prieš", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Jūs galite naudoti objektų atributus kaip kintamuosius, pvz.: tekste \"http://myserver.org/images/{name}.png\" {name} bus automatiškai pakeistas į žymeklio reikšmę 'name'.", + "Transform to polygon": "Transformuoti į poligoną", + "Transform to lines": "Transformuoti į linijas", + "Choose the data format": "Pasirinkite duomenų formatą", + "Error in the tilelayer URL": "Klaida tile-sluoksnio URL", + "Directions from here": "Nuorodos iš šio taško", + "Choose a preset": "Pasirinkite šabloną", + "Limit bounds": "Nustatyti ribas", + "Use current bounds": "Naudoti dabartines ribas", + "max East": "max Rytų", + "max North": "max Šiaurės", + "max South": "max Pietų", + "max West": "max Vakarų", + "TMS format": "TMS formatas", + "Credits": "Apie kūrėjus", + "Only visible features will be downloaded.": "Tik matomi objektai bus atsiųsti.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Atidaryti šį plotą duomenų redagavimui per OpenStreetMap", + "Default properties": "Nustatymai pagal nutylėjimą", + "User interface options": "Vartotojo sąsajos nustatymai", + "Image with custom width (in px): {{http://image.url.com|width}}": "Paveikslo plotis (pikseliais): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Naudoti esamą vaizdą vietoje standartinio?", + "Iframe export options": "Iframe export nustatymai", + "Include full screen link?": "Įtraukti nuorodą į viso ekrano vaizdą?", + "See full screen": "Peržiūrėti per visą ekraną", + "height": "aukštis", + "width": "plotis", + "Clustered": "Sugrupuota", + "Clustering radius": "Grupavimo spindulys", + "GeoRSS (only link)": "GeoRSS (tik nuoroda)", + "GeoRSS (title + image)": "GeoRSS (pavadinimas + paveikslas)", + "Heatmap": "Tankio žemėlapis", + "Heatmap radius": "Tankio žemėlapio spindulys", + "Name and description": "Vardas ir aprašymas", + "Override clustering radius (default 80)": "Perrašyti grupavimo spindulį (pagal nutylėjimą 80)", + "Override heatmap radius (default 25)": "Perrašyti tankio žemėlapio spindulį (pagal nutylėjimą 25)", + "Proxy request": "Proxy užklausa", + "Table": "Lentelė", + "To use if remote server doesn't allow cross domain (slower)": "Naudoti jei serveris neleidžia cross domain užklausų (lėtesnis sprendimas)", + "Type of layer": "Sluoksnio tipas", + "Filter…": "Filtruoti...", + "Heatmap intensity property": "Tankio žemėlpaio faktorius", + "Optional intensity property for heatmap": "Papildomas intensyvumo faktorius", + "Caption": "Antraštė", + "Data browser": "Duomenų naršyklė", + "Do you want to display a caption bar?": "Ar norite rodyti antraštę?", + "Do you want to display a panel on load?": "Ar norite rodyti panelę kraunantis?", + "None": "Nieko", + "by": "pagal", + "Name and description (large)": "Pavadinimas ir aprašymas (ilgas)", + "Empty": "Tuščias", + "Split line": "Padalinti liniją", + "Clone": "Kopijuoti", + "Clone of {name}": "{name} kopija", + "Side panel": "Šoninis skydelis", + "Powered by Leaflet and Django, glued by uMap project.": "Pagaminta naudojant Leaflet ir Django, apjungta pagal uMap projektą.", + "Zoom level for automatic zooms": "Priartinimo lygis automatiniui režimui", + "Do you want to display the «more» control?": "Ar norite rodyti nuorodą \"daugiau\"?", + "Auto": "Automatiškai", + "Default: name": "Pagal nutylėjimą: name", + "Property to use for sorting features": "Savybės pavadinimas rūšiavimui", + "Slideshow": "Peržiūra", + "Start slideshow": "Pradėti peržiūrą", + "Stop slideshow": "Stabdyti peržiūrą", + "Text color for the cluster label": "Teksto spalva klasterio pavadinimui", + "Zoom to the next": "Priartinti sekantį", + "Zoom to the previous": "Priartinti ankstesnį", + "Add a new property": "Pridėti naują savybę", + "Are you sure you want to delete this property on all the features?": "Ar tikrai norite pašalinti šią savybę visiem objektams?", + "Close": "Uždaryti", + "Delete this property on all the features": "Pašalinti šį parametrą visuose objektuose", + "Edit properties in a table": "Redaguoti savybes lentelėje", + "Please enter the name of the property": "Įveskite, prašom, savybės pavadinimą", + "Please enter the new name of this property": "Įveskite, prašom, naują savybės pavadinimą", + "Rename this property on all the features": "Pervadinti šią savybę visuose objektuose", + "If false, the polygon will act as a part of the underlying map.": "Jei false, poligonas bus pagrindinio žemėlapio dalis.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe su nurodytu aukščiu (pikseliais): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Išsaugoti viską", + "Dynamic properties": "Dinaminės savybės", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Objekto savybės tarp laužtinių skliaustų, pvz. {name}, bus automatiškai pakeisto atitinkamomis reikšmėmis.", + "Long credits": "Apie kūrėjus", + "No licence has been set": "Nenustatyta licenzija", + "Popup content template": "Popup'o turinio šablonas", + "Short credits": "Trumpai apie kūrėjus", + "Will be displayed in the bottom right corner of the map": "Bus rodomas apatiniame dešiniame žemėlapio kampe", + "Will be visible in the caption of the map": "Bus matoma žemėlapio antraštėje", + "Map has been saved!": "Žemėlapis išsaugotas!", + "Save anyway": "Išsaugoti bet kuriuo atveju", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Dėmesio! Kažkas kitas jau paredagavo šiuos duomenis. Jūs galite išsaugoti, bet tuomet bus prarasti kiti pakeitimai.", + "Comma separated list of properties to use when filtering features": "Kableliu atskirtas savybių sąrašas naudojamas objektų filtrui", + "Keep current visible layers": "Esamus sluoksnius palikti matomais", + "Coordinates": "Koordinatės", + "Latitude": "Platuma", + "Longitude": "Ilguma", + "Continue line (Ctrl-click)": "Tęsti liniją (Ctrl klavišas)", + "Start a hole here": "Piešti skylę čia", + "Click last point to finish shape": "Paspauskite ant paskutinio taško kad baigti piešimą", + "Click to add a marker": "Paspauskite kad pridėti žymeklį", + "Click to continue drawing": "Paspauskite kad tęsti piešimą", + "Click to start drawing a line": "Paspauskite ir pradėsite piešti liniją", + "Click to start drawing a polygon": "Paspauskite ir pradėsite priešti poligoną", + "Import in a new layer": "Importuoti naują sluoksnį", + "Layer": "Sluoksnis", + "Please choose a format": "Pasirinkite formatą", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Matuoti atstumus", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("lt", locale); +L.setLocale("lt"); \ No newline at end of file diff --git a/umap/static/umap/locale/lt.json b/umap/static/umap/locale/lt.json new file mode 100644 index 00000000..e4613a26 --- /dev/null +++ b/umap/static/umap/locale/lt.json @@ -0,0 +1,350 @@ +{ + "About": "Apie", + "Action not allowed :(": "Veiksmas nėra leidžiamas :(", + "Add a layer": "Pridėti sluoksnį", + "Add symbol": "Pridėti simbolį", + "Advanced actions": "Sudėtingesni veiksmai", + "Advanced properties": "Sudėtingesni nustatymai", + "Allow scroll wheel zoom?": "Leisti pelės ratuko veiksmus?", + "An error occured": "Įvyko klaida", + "Are you sure you want to cancel your changes?": "Ar tikrai nori atšaukti savo pakeitimus?", + "Are you sure you want to clone this map and all its datalayers?": "Ar tikrai norite nukopijuoti šį žemėlapį ir visus jo duomenų sluoksnius?", + "Are you sure you want to delete the feature?": "Ar tikrai norite ištrinti šį objektą?", + "Are you sure you want to delete this map?": "Ar Jūs tikrai norite ištrinti šį žemėlapį?", + "Ball": "Rutulys", + "Bring feature to center": "Pastumti objektą į centrą", + "Browse data": "Peržiūrėti duomenis", + "Cancel": "Atšaukti", + "Cancel edits": "Atšaukti pakeitimus", + "Center map on your location": "Centruoti pagal Jūsų vietovę", + "Change map background": "Keisti žemėlapio foną", + "Change symbol": "Pakeisti simbolį", + "Change tilelayers": "Pakeisti sluoksnius", + "Choose the format of the data to import": "Pasirinkite importuojamų uomenų formatą", + "Choose the layer of the feature": "Pasirinkite objekto sluoksnį", + "Choose the layer to import in": "Pasirinkite sluoksnį importavimui", + "Circle": "Apskritimas", + "Clone this map": "Klonuoti šį žemėlapį", + "Default": "Pagal nutylėjimą", + "Delete": "Trinti", + "Delete this feature": "Ištrinti šį objektą", + "Disable editing": "Uždrausti redagavimą", + "Display on load": "Rodyti pasikrovus", + "Do you want to display a minimap?": "Ar norite rodyti mini žemėlapį?", + "Do you want to display popup footer?": "Ar norite rodyti iškylančio lango paraštę?", + "Do you want to display the scale control?": "Ar norite rodyti žemėlapio skalės valdymą?", + "Download data": "Atsisiųsti duomenis", + "Draw a line": "Piešti liniją", + "Draw a marker": "Padėti žymeklį", + "Draw a polygon": "Piešti poligoną", + "Draw a polyline": "Piešti linijas", + "Drop": "Atmesti", + "Dynamic": "Dinaminis", + "Edit": "Redaguoti", + "Edit feature's layer": "Redaguoti objekto sluoksnį", + "Edit map properties": "Keisti žemėlapio nustatymus", + "Edit map settings": "Keisti žemėlapio nustatymus", + "Edit this feature": "Redaguoti šį objektą", + "Embed and share this map": "Įkelti ir dalintis šiuo žemėlapiu", + "Enable editing": "Leisti redaguoti", + "Format": "Formatas", + "From zoom": "Mažiausias mastelis", + "Go to «{feature}»": "Eiti į «{feature}»", + "Hide controls": "Slėpti mygtukus", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Kaip stipriai supaprastinti linijas kiekviename mastelyje (daugiau - diesnis greitis ir lygesnis vaizdas, mažiau - tikslesnis atvaizdavimas)", + "Import": "Importuoti", + "Import data": "Importuoti duomenis", + "Inherit": "Paveldėti", + "Licence": "Licenzija", + "Map background credits": "Žemėlapio fono naudojimo sąlygos", + "Map user content has been published under licence": "Vartotojo turinys buvo publikuotas pagal licenziją", + "More controls": "Daugiau valdymo mygtukų", + "Optional. Same as color if not set.": "Neprivalomas. Toks pats kaip ir spalva, jei nenustatyta.", + "Optionnal.": "Neprivalomas.", + "Paste here your data": "Įklijuokite Jūsų duomenis čia", + "Please be sure the licence is compliant with your use.": "Prašom pasitikrinti ar licezija tikrai tinka Jūsų poreikiams.", + "Problem in the response": "Klaida atsakyme", + "Problem in the response format": "Klaida atsakymo formate", + "Provide an URL here": "Įvęskite adresą", + "Remote data": "Išoriniai duomenys", + "Save": "Išsaugoti", + "Save current edits": "Išsaugoti pakeitimus", + "Save this center and zoom": "Išsaugoti šį centrą ar mastelį.", + "Show/hide layer": "Rodyti/slėpti sluoksnį", + "Start editing": "Pradėti redagavimą", + "Stop editing": "Baigti redagavimą", + "The zoom and center have been setted.": "Šis mastelis ir centras išsaugoti.", + "To zoom": "Padidinti", + "Untitled layer": "Bevardis sluoksnis", + "Untitled map": "Be pavadinimo", + "Update permissions and editors": "Atnaujinti leidimus ir redaguotojus", + "Url": "Url", + "User content credits": "Vartotojo duomenų sąlygos", + "Where do we go from here?": "Kur norite eiti iš čia?", + "Zoom in": "Padidinti mastelį", + "Zoom out": "Didinti", + "Zoom to layer extent": "Išdidinti iki sluoksnio ribų", + "Zoom to this feature": "Išdidinti šį objektą", + "color": "spalva", + "dash array": "brūkšnių masyvas", + "description": "aprašymas", + "fill": "užpildyti", + "fill color": "ploto spalva", + "fill opacity": "ploto skaidrumas", + "inherit": "paveldėti", + "licence": "licenzija", + "name": "vardas", + "no": "ne", + "opacity": "nepermatomumas", + "stroke": "brūkšnys", + "weight": "svoris", + "yes": "taip", + "Editing": "Redaguojama", + "Embed the map": "Įsikelti šį žemėlapį", + "Short URL": "Trumpas URL", + "# one hash for main heading": "# viena grotelė pagrindinei antraštei", + "## two hashes for second heading": "## dvi grotelės antraštei", + "### three hashes for third heading": "### trys grotelės trečio lygio pastraipai", + "**double star for bold**": "**dviguba žvaigždutė paryškintam tekstui**", + "*simple star for italic*": "*viena žvaigždutė pasvyriajam tekstui*", + "--- for an horizontal rule": "--- horizontaliai linijai", + "All properties are imported.": "Visi objektai importuoti.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Kableliu, tab'u arba kabliataškiu atskirtos reikšmės. SRS WGS84 yra palaikomas. Tik taškai yra importuoti. Importuojant bus patikrintos stulpelių antraštės ieškant pavadinimų \"lat\" ir \"lon\". Visi kiti stulpeliai bus įtraukti kaip papildomi atributai.", + "Custom background": "Pritaikytas fonas", + "Help": "Pagalba", + "Image: {{http://image.url.com}}": "Paveikslas: {{http://image.url.com/image.jpeg}}", + "Link with text: [[http://example.com|text of the link]]": "Nuoroda tekstui:: [[http://example.com|nuorodos tekstas]]", + "Properties imported:": "Importuoti objektai:", + "Simple link: [[http://example.com]]": "Paprasta nuoroda: [[http://example.com]]", + "Supported scheme": "Palaikoma struktūra", + "Supported variables that will be dynamically replaced": "Palaikomi kintamieji bus automatiškai perrašyti", + "Text formatting": "Teksto formatavimas", + "attribution": "atributai", + "display name": "rodyti pavadinimą", + "max zoom": "didžiausias mastelis", + "min zoom": "mažiausias mastelis", + "Skipping unkown geometry.type: {type}": "Praleidžiamas nežinomas geometrijos tipas: {type}", + "Please save the map before": "Prašom išsaugoti žemėlapį prieš", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Jūs galite naudoti objektų atributus kaip kintamuosius, pvz.: tekste \"http://myserver.org/images/{name}.png\" {name} bus automatiškai pakeistas į žymeklio reikšmę 'name'.", + "Transform to polygon": "Transformuoti į poligoną", + "Transform to lines": "Transformuoti į linijas", + "Choose the data format": "Pasirinkite duomenų formatą", + "Error in the tilelayer URL": "Klaida tile-sluoksnio URL", + "Directions from here": "Nuorodos iš šio taško", + "Choose a preset": "Pasirinkite šabloną", + "Limit bounds": "Nustatyti ribas", + "Use current bounds": "Naudoti dabartines ribas", + "max East": "max Rytų", + "max North": "max Šiaurės", + "max South": "max Pietų", + "max West": "max Vakarų", + "TMS format": "TMS formatas", + "Credits": "Apie kūrėjus", + "Only visible features will be downloaded.": "Tik matomi objektai bus atsiųsti.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Atidaryti šį plotą duomenų redagavimui per OpenStreetMap", + "Default properties": "Nustatymai pagal nutylėjimą", + "User interface options": "Vartotojo sąsajos nustatymai", + "Image with custom width (in px): {{http://image.url.com|width}}": "Paveikslo plotis (pikseliais): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Naudoti esamą vaizdą vietoje standartinio?", + "Iframe export options": "Iframe export nustatymai", + "Include full screen link?": "Įtraukti nuorodą į viso ekrano vaizdą?", + "See full screen": "Peržiūrėti per visą ekraną", + "height": "aukštis", + "width": "plotis", + "Clustered": "Sugrupuota", + "Clustering radius": "Grupavimo spindulys", + "GeoRSS (only link)": "GeoRSS (tik nuoroda)", + "GeoRSS (title + image)": "GeoRSS (pavadinimas + paveikslas)", + "Heatmap": "Tankio žemėlapis", + "Heatmap radius": "Tankio žemėlapio spindulys", + "Name and description": "Vardas ir aprašymas", + "Override clustering radius (default 80)": "Perrašyti grupavimo spindulį (pagal nutylėjimą 80)", + "Override heatmap radius (default 25)": "Perrašyti tankio žemėlapio spindulį (pagal nutylėjimą 25)", + "Proxy request": "Proxy užklausa", + "Table": "Lentelė", + "To use if remote server doesn't allow cross domain (slower)": "Naudoti jei serveris neleidžia cross domain užklausų (lėtesnis sprendimas)", + "Type of layer": "Sluoksnio tipas", + "Filter…": "Filtruoti...", + "Heatmap intensity property": "Tankio žemėlpaio faktorius", + "Optional intensity property for heatmap": "Papildomas intensyvumo faktorius", + "Caption": "Antraštė", + "Data browser": "Duomenų naršyklė", + "Do you want to display a caption bar?": "Ar norite rodyti antraštę?", + "Do you want to display a panel on load?": "Ar norite rodyti panelę kraunantis?", + "None": "Nieko", + "by": "pagal", + "Name and description (large)": "Pavadinimas ir aprašymas (ilgas)", + "Empty": "Tuščias", + "Split line": "Padalinti liniją", + "Clone": "Kopijuoti", + "Clone of {name}": "{name} kopija", + "Side panel": "Šoninis skydelis", + "Powered by Leaflet and Django, glued by uMap project.": "Pagaminta naudojant Leaflet ir Django, apjungta pagal uMap projektą.", + "Zoom level for automatic zooms": "Priartinimo lygis automatiniui režimui", + "Do you want to display the «more» control?": "Ar norite rodyti nuorodą \"daugiau\"?", + "Auto": "Automatiškai", + "Default: name": "Pagal nutylėjimą: name", + "Property to use for sorting features": "Savybės pavadinimas rūšiavimui", + "Slideshow": "Peržiūra", + "Start slideshow": "Pradėti peržiūrą", + "Stop slideshow": "Stabdyti peržiūrą", + "Text color for the cluster label": "Teksto spalva klasterio pavadinimui", + "Zoom to the next": "Priartinti sekantį", + "Zoom to the previous": "Priartinti ankstesnį", + "Add a new property": "Pridėti naują savybę", + "Are you sure you want to delete this property on all the features?": "Ar tikrai norite pašalinti šią savybę visiem objektams?", + "Close": "Uždaryti", + "Delete this property on all the features": "Pašalinti šį parametrą visuose objektuose", + "Edit properties in a table": "Redaguoti savybes lentelėje", + "Please enter the name of the property": "Įveskite, prašom, savybės pavadinimą", + "Please enter the new name of this property": "Įveskite, prašom, naują savybės pavadinimą", + "Rename this property on all the features": "Pervadinti šią savybę visuose objektuose", + "If false, the polygon will act as a part of the underlying map.": "Jei false, poligonas bus pagrindinio žemėlapio dalis.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe su nurodytu aukščiu (pikseliais): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Išsaugoti viską", + "Dynamic properties": "Dinaminės savybės", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Objekto savybės tarp laužtinių skliaustų, pvz. {name}, bus automatiškai pakeisto atitinkamomis reikšmėmis.", + "Long credits": "Apie kūrėjus", + "No licence has been set": "Nenustatyta licenzija", + "Popup content template": "Popup'o turinio šablonas", + "Short credits": "Trumpai apie kūrėjus", + "Will be displayed in the bottom right corner of the map": "Bus rodomas apatiniame dešiniame žemėlapio kampe", + "Will be visible in the caption of the map": "Bus matoma žemėlapio antraštėje", + "Map has been saved!": "Žemėlapis išsaugotas!", + "Save anyway": "Išsaugoti bet kuriuo atveju", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Dėmesio! Kažkas kitas jau paredagavo šiuos duomenis. Jūs galite išsaugoti, bet tuomet bus prarasti kiti pakeitimai.", + "Comma separated list of properties to use when filtering features": "Kableliu atskirtas savybių sąrašas naudojamas objektų filtrui", + "Keep current visible layers": "Esamus sluoksnius palikti matomais", + "Coordinates": "Koordinatės", + "Latitude": "Platuma", + "Longitude": "Ilguma", + "Continue line (Ctrl-click)": "Tęsti liniją (Ctrl klavišas)", + "Start a hole here": "Piešti skylę čia", + "Click last point to finish shape": "Paspauskite ant paskutinio taško kad baigti piešimą", + "Click to add a marker": "Paspauskite kad pridėti žymeklį", + "Click to continue drawing": "Paspauskite kad tęsti piešimą", + "Click to start drawing a line": "Paspauskite ir pradėsite piešti liniją", + "Click to start drawing a polygon": "Paspauskite ir pradėsite priešti poligoną", + "Import in a new layer": "Importuoti naują sluoksnį", + "Layer": "Sluoksnis", + "Please choose a format": "Pasirinkite formatą", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Matuoti atstumus", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/nl.js b/umap/static/umap/locale/nl.js new file mode 100644 index 00000000..079d4ead --- /dev/null +++ b/umap/static/umap/locale/nl.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Over", + "Action not allowed :(": "Handeling niet toegestaan :(", + "Add a layer": "Laag toevoegen", + "Add symbol": "Symbool toevoegen", + "Advanced actions": "Geavanceerde acties", + "Advanced properties": "Geavanceerde eigenschappen", + "Allow scroll wheel zoom?": "Zoomen met scrollwieltje toestaan?", + "An error occured": "Er is een fout opgetreden", + "Are you sure you want to cancel your changes?": "Ben je zeker dat je je wijzigingen wil annuleren?", + "Are you sure you want to clone this map and all its datalayers?": "Ben je zeker dat je deze kaart en alle gegevenslagen wil klonen?", + "Are you sure you want to delete the feature?": "Ben je zeker dat je het object wil verwijderen?", + "Are you sure you want to delete this map?": "Ben je zeker dat je deze kaart wil verwijderen?", + "Ball": "Kopspeld", + "Bring feature to center": "Object in het midden zetten", + "Browse data": "Gegevens doorbladeren", + "Cancel": "Annuleren", + "Cancel edits": "Bewerkingen annuleren", + "Center map on your location": "Centreer kaart op je locatie", + "Change map background": "Verander kaartachtergrond", + "Change symbol": "Symbool veranderen", + "Change tilelayers": "Andere kaartachtergrond instellen", + "Choose the format of the data to import": "Kies het formaat van de te importeren gegevens", + "Choose the layer of the feature": "Kies de laag van het object", + "Choose the layer to import in": "Kies de laag om in te importeren", + "Circle": "Cirkel", + "Clone this map": "Deze kaart klonen", + "Default": "Standaard", + "Delete": "Verwijderen", + "Delete this feature": "Dit object verwijderen", + "Disable editing": "Bewerken uitschakelen", + "Display on load": "Tonen bij laden", + "Do you want to display a minimap?": "Wil je een minikaartje tonen?", + "Do you want to display popup footer?": "Wil je een popup-footer tonen?", + "Do you want to display the scale control?": "Wil je het schaal-besturingselement tonen?", + "Download data": "Gegevens downloaden", + "Draw a line": "Teken een lijn", + "Draw a marker": "Teken een punt", + "Draw a polygon": "Teken een veelhoek", + "Draw a polyline": "Teken een veelhoek", + "Drop": "Drop", + "Dynamic": "Dynamisch", + "Edit": "Bewerken", + "Edit feature's layer": "Objectlaag bewerken", + "Edit map properties": "Kaarteigenschappen wijzigen", + "Edit map settings": "Kaartinstellingen aanpassen", + "Edit this feature": "Dit object bewerken", + "Embed and share this map": "Deze kaart insluiten en delen", + "Enable editing": "Bewerken inschakelen", + "Format": "Formaat", + "From zoom": "Van zoom", + "Go to «{feature}»": "Ga naar «{feature}»", + "Hide controls": "Verberg besturingselementen", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Graad van vereenvoudiging van een veelhoek, per zoomniveau. (Hogere waarde = betere prestaties, lagere waarde = getrouwere precisie)", + "Import": "Importeer", + "Import data": "Gegevens importeren", + "Inherit": "Overerving", + "Licence": "Licentie", + "Map background credits": "Bronvermelding kaartachtergrond", + "Map user content has been published under licence": "Inhoud toegevoegd aan deze kaart wordt gepubliceerd onder deze licentievoorwaarden", + "More controls": "Meer instelknoppen", + "Optional. Same as color if not set.": "Optioneel. Gelijk aan kleur indien niet ingesteld", + "Optionnal.": "Optioneel", + "Paste here your data": "Plak hier uw gegevens", + "Please be sure the licence is compliant with your use.": "Zorg er aub voor dat je je aan de licentievoorwaarden houdt", + "Problem in the response": "Probleem met het antwoord gekregen van de server", + "Problem in the response format": "Probleem met het formaat van het antwoord van de server", + "Provide an URL here": "Geef hier een URL-adres op", + "Remote data": "Data van elders", + "Save": "Opslaan", + "Save current edits": "Huidige bewerkingen opslaan", + "Save this center and zoom": "Bewaar deze positie op de kaart en het zoomniveau", + "Show/hide layer": "Laat tonen/verbergen", + "Start editing": "Starten met editeren", + "Stop editing": "Stop met editeren", + "The zoom and center have been setted.": "Het zoomniveau en de positie op de kaarten zijn ingesteld", + "To zoom": "Tot zoomniveau", + "Untitled layer": "Laag zonder naam", + "Untitled map": "Kaart zonder naam", + "Update permissions and editors": "Bijwerken van permissies en bewerkers", + "Url": "URL", + "User content credits": "Gebruikersinhoud bronvermelding", + "Where do we go from here?": "Waar gaan we nu heen?", + "Zoom in": "Inzoomen", + "Zoom out": "Uitzoomen", + "Zoom to layer extent": "Zodanig zoomen dat alle data in venster past", + "Zoom to this feature": "Op dit object inzoomen", + "color": "kleur", + "dash array": "soort stippellijn", + "description": "beschrijving", + "fill": "opvullen", + "fill color": "opvulkleur", + "fill opacity": "(on)doorzichtigheid van inkleuring", + "inherit": "overerven", + "licence": "licentie", + "name": "naam", + "no": "neen", + "opacity": "ondoorzichtigheid", + "stroke": "lijndikte", + "weight": "weight", + "yes": "ja", + "Editing": "Bewerken", + "Embed the map": "Kaart inbedden", + "Short URL": "Korte URL", + "# one hash for main heading": "# een hekje voor hoofding 1", + "## two hashes for second heading": "## twee hekjes voor hoofding 2", + "### three hashes for third heading": "### twee hekjes voor hoofding 3", + "**double star for bold**": "**Twee sterretjes voor vet**", + "*simple star for italic*": "*Enkel sterretje voor cursief*", + "--- for an horizontal rule": "--- voor een horizontale scheidingslijn", + "All properties are imported.": "Alle eigenschappen zijn geïmporteerd", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Komma-, tabulator- of puntkomma-gescheiden waardes, SRS WGS84 wordt verondersteld. Enkel puntgeometrieën wordne geímporteerd. Bij het importeren wordt gekeken naar kolomkoppen die met «lat» of «lon» beginnen. Alle andere kolommen worden als eigenschappen geïmporteerd", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Objecteigenschappen kunnen gebruikt worden als variabelen. Bv in het geval van \"http://myserver.org/images/{name}.png\", zal de {name}-variabele worden vervangen door de waarde in \"name\" van elk van de markers.", + "Transform to polygon": "Omzetten naar veelhoed", + "Transform to lines": "Omzetten naar lijnen", + "Choose the data format": "Gegevensformaat selecteren", + "Error in the tilelayer URL": "Er is een fout opgetreden met de achtergrondtegels", + "Directions from here": "Wegbeschrijving vanaf hier", + "Choose a preset": "Kies een voorkeuzeinstelling", + "Limit bounds": "Gebied begrenzen", + "Use current bounds": "Begrensd gebied instellen op wat nu te zien is", + "max East": "maximale oostwaarde", + "max North": "maximale noordwaarde", + "max South": "maximale zuidwaarde", + "max West": "maximale westwaarde", + "TMS format": "TMS-formaat", + "Credits": "Bronvermelding", + "Only visible features will be downloaded.": "Enkel zichtbare objecten zullen worden geëxporteerd", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open dit gedeelte van de kaart in een editor, zodat u de kaartgegeven in Openstreetmap zelf kan bijwerken.", + "Default properties": "Standaardeigenschappen", + "User interface options": "Gebruikersinterfaceopties", + "Image with custom width (in px): {{http://image.url.com|width}}": "Beeld met standaardbreedte (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Huidig zicht in plaats van standaard kaartaanzicht", + "Iframe export options": "Iframe exporteeropties", + "Include full screen link?": "Include full screen link?", + "See full screen": "Op volledig scherm weergeven", + "height": "hoogte", + "width": "breedte", + "Clustered": "Bij elkaar gevoegd", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Afstanden meten", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("nl", locale); +L.setLocale("nl"); \ No newline at end of file diff --git a/umap/static/umap/locale/nl.json b/umap/static/umap/locale/nl.json new file mode 100644 index 00000000..28ea5da1 --- /dev/null +++ b/umap/static/umap/locale/nl.json @@ -0,0 +1,350 @@ +{ + "About": "Over", + "Action not allowed :(": "Handeling niet toegestaan :(", + "Add a layer": "Laag toevoegen", + "Add symbol": "Symbool toevoegen", + "Advanced actions": "Geavanceerde acties", + "Advanced properties": "Geavanceerde eigenschappen", + "Allow scroll wheel zoom?": "Zoomen met scrollwieltje toestaan?", + "An error occured": "Er is een fout opgetreden", + "Are you sure you want to cancel your changes?": "Ben je zeker dat je je wijzigingen wil annuleren?", + "Are you sure you want to clone this map and all its datalayers?": "Ben je zeker dat je deze kaart en alle gegevenslagen wil klonen?", + "Are you sure you want to delete the feature?": "Ben je zeker dat je het object wil verwijderen?", + "Are you sure you want to delete this map?": "Ben je zeker dat je deze kaart wil verwijderen?", + "Ball": "Kopspeld", + "Bring feature to center": "Object in het midden zetten", + "Browse data": "Gegevens doorbladeren", + "Cancel": "Annuleren", + "Cancel edits": "Bewerkingen annuleren", + "Center map on your location": "Centreer kaart op je locatie", + "Change map background": "Verander kaartachtergrond", + "Change symbol": "Symbool veranderen", + "Change tilelayers": "Andere kaartachtergrond instellen", + "Choose the format of the data to import": "Kies het formaat van de te importeren gegevens", + "Choose the layer of the feature": "Kies de laag van het object", + "Choose the layer to import in": "Kies de laag om in te importeren", + "Circle": "Cirkel", + "Clone this map": "Deze kaart klonen", + "Default": "Standaard", + "Delete": "Verwijderen", + "Delete this feature": "Dit object verwijderen", + "Disable editing": "Bewerken uitschakelen", + "Display on load": "Tonen bij laden", + "Do you want to display a minimap?": "Wil je een minikaartje tonen?", + "Do you want to display popup footer?": "Wil je een popup-footer tonen?", + "Do you want to display the scale control?": "Wil je het schaal-besturingselement tonen?", + "Download data": "Gegevens downloaden", + "Draw a line": "Teken een lijn", + "Draw a marker": "Teken een punt", + "Draw a polygon": "Teken een veelhoek", + "Draw a polyline": "Teken een veelhoek", + "Drop": "Drop", + "Dynamic": "Dynamisch", + "Edit": "Bewerken", + "Edit feature's layer": "Objectlaag bewerken", + "Edit map properties": "Kaarteigenschappen wijzigen", + "Edit map settings": "Kaartinstellingen aanpassen", + "Edit this feature": "Dit object bewerken", + "Embed and share this map": "Deze kaart insluiten en delen", + "Enable editing": "Bewerken inschakelen", + "Format": "Formaat", + "From zoom": "Van zoom", + "Go to «{feature}»": "Ga naar «{feature}»", + "Hide controls": "Verberg besturingselementen", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Graad van vereenvoudiging van een veelhoek, per zoomniveau. (Hogere waarde = betere prestaties, lagere waarde = getrouwere precisie)", + "Import": "Importeer", + "Import data": "Gegevens importeren", + "Inherit": "Overerving", + "Licence": "Licentie", + "Map background credits": "Bronvermelding kaartachtergrond", + "Map user content has been published under licence": "Inhoud toegevoegd aan deze kaart wordt gepubliceerd onder deze licentievoorwaarden", + "More controls": "Meer instelknoppen", + "Optional. Same as color if not set.": "Optioneel. Gelijk aan kleur indien niet ingesteld", + "Optionnal.": "Optioneel", + "Paste here your data": "Plak hier uw gegevens", + "Please be sure the licence is compliant with your use.": "Zorg er aub voor dat je je aan de licentievoorwaarden houdt", + "Problem in the response": "Probleem met het antwoord gekregen van de server", + "Problem in the response format": "Probleem met het formaat van het antwoord van de server", + "Provide an URL here": "Geef hier een URL-adres op", + "Remote data": "Data van elders", + "Save": "Opslaan", + "Save current edits": "Huidige bewerkingen opslaan", + "Save this center and zoom": "Bewaar deze positie op de kaart en het zoomniveau", + "Show/hide layer": "Laat tonen/verbergen", + "Start editing": "Starten met editeren", + "Stop editing": "Stop met editeren", + "The zoom and center have been setted.": "Het zoomniveau en de positie op de kaarten zijn ingesteld", + "To zoom": "Tot zoomniveau", + "Untitled layer": "Laag zonder naam", + "Untitled map": "Kaart zonder naam", + "Update permissions and editors": "Bijwerken van permissies en bewerkers", + "Url": "URL", + "User content credits": "Gebruikersinhoud bronvermelding", + "Where do we go from here?": "Waar gaan we nu heen?", + "Zoom in": "Inzoomen", + "Zoom out": "Uitzoomen", + "Zoom to layer extent": "Zodanig zoomen dat alle data in venster past", + "Zoom to this feature": "Op dit object inzoomen", + "color": "kleur", + "dash array": "soort stippellijn", + "description": "beschrijving", + "fill": "opvullen", + "fill color": "opvulkleur", + "fill opacity": "(on)doorzichtigheid van inkleuring", + "inherit": "overerven", + "licence": "licentie", + "name": "naam", + "no": "neen", + "opacity": "ondoorzichtigheid", + "stroke": "lijndikte", + "weight": "weight", + "yes": "ja", + "Editing": "Bewerken", + "Embed the map": "Kaart inbedden", + "Short URL": "Korte URL", + "# one hash for main heading": "# een hekje voor hoofding 1", + "## two hashes for second heading": "## twee hekjes voor hoofding 2", + "### three hashes for third heading": "### twee hekjes voor hoofding 3", + "**double star for bold**": "**Twee sterretjes voor vet**", + "*simple star for italic*": "*Enkel sterretje voor cursief*", + "--- for an horizontal rule": "--- voor een horizontale scheidingslijn", + "All properties are imported.": "Alle eigenschappen zijn geïmporteerd", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Komma-, tabulator- of puntkomma-gescheiden waardes, SRS WGS84 wordt verondersteld. Enkel puntgeometrieën wordne geímporteerd. Bij het importeren wordt gekeken naar kolomkoppen die met «lat» of «lon» beginnen. Alle andere kolommen worden als eigenschappen geïmporteerd", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Objecteigenschappen kunnen gebruikt worden als variabelen. Bv in het geval van \"http://myserver.org/images/{name}.png\", zal de {name}-variabele worden vervangen door de waarde in \"name\" van elk van de markers.", + "Transform to polygon": "Omzetten naar veelhoed", + "Transform to lines": "Omzetten naar lijnen", + "Choose the data format": "Gegevensformaat selecteren", + "Error in the tilelayer URL": "Er is een fout opgetreden met de achtergrondtegels", + "Directions from here": "Wegbeschrijving vanaf hier", + "Choose a preset": "Kies een voorkeuzeinstelling", + "Limit bounds": "Gebied begrenzen", + "Use current bounds": "Begrensd gebied instellen op wat nu te zien is", + "max East": "maximale oostwaarde", + "max North": "maximale noordwaarde", + "max South": "maximale zuidwaarde", + "max West": "maximale westwaarde", + "TMS format": "TMS-formaat", + "Credits": "Bronvermelding", + "Only visible features will be downloaded.": "Enkel zichtbare objecten zullen worden geëxporteerd", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open dit gedeelte van de kaart in een editor, zodat u de kaartgegeven in Openstreetmap zelf kan bijwerken.", + "Default properties": "Standaardeigenschappen", + "User interface options": "Gebruikersinterfaceopties", + "Image with custom width (in px): {{http://image.url.com|width}}": "Beeld met standaardbreedte (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Huidig zicht in plaats van standaard kaartaanzicht", + "Iframe export options": "Iframe exporteeropties", + "Include full screen link?": "Include full screen link?", + "See full screen": "Op volledig scherm weergeven", + "height": "hoogte", + "width": "breedte", + "Clustered": "Bij elkaar gevoegd", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Afstanden meten", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pl.json b/umap/static/umap/locale/pl.json new file mode 100644 index 00000000..87a20050 --- /dev/null +++ b/umap/static/umap/locale/pl.json @@ -0,0 +1,350 @@ +{ + "About": "Informacje", + "Action not allowed :(": "Operacja niedozwolona :(", + "Add a layer": "Dodaj warstwę", + "Add symbol": "Dodaj symbol", + "Advanced actions": "Zaawansowane operacje", + "Advanced properties": "Zaawansowane właściwości", + "Allow scroll wheel zoom?": "Pozwalać na przybliżanie kółkiem?", + "An error occured": "Wystąpił błąd", + "Are you sure you want to cancel your changes?": "Na pewno chcesz porzucić swoje zmiany?", + "Are you sure you want to clone this map and all its datalayers?": "Na pewno chcesz sklonować tą mapę razem z jej warstwami?", + "Are you sure you want to delete the feature?": "Na pewno chcesz usunąć obiekt?", + "Are you sure you want to delete this map?": "Na pewno chcesz usunąć tą mapę?", + "Ball": "Piłka", + "Bring feature to center": "Przenieś obiekt do środka", + "Browse data": "Przeglądaj dane", + "Cancel": "Anuluj", + "Cancel edits": "Anuluj edycje", + "Center map on your location": "Wyśrodkuje mapę na twojej lokalizacji", + "Change map background": "Zmień podkład mapy", + "Change symbol": "Zmień symbol", + "Change tilelayers": "Zmień podkład", + "Choose the format of the data to import": "Wybierz format importowanych danych", + "Choose the layer of the feature": "Wybierz warstwę obiektu", + "Choose the layer to import in": "Wybierz warstwę docelową", + "Circle": "Kółko", + "Clone this map": "Sklonuj mapę", + "Default": "Domyślne", + "Delete": "Usuń", + "Delete this feature": "Usuń ten obiekt", + "Disable editing": "Wyłącz edytor", + "Display on load": "Wyświetl przy ładowaniu", + "Do you want to display a minimap?": "Chcesz wyświetlać małą mapę?", + "Do you want to display popup footer?": "Chcesz wyświetlacz stopkę dymka?", + "Do you want to display the scale control?": "Chcesz wyświetlać kontrolkę ze skalą?", + "Download data": "Pobierz dane", + "Draw a line": "Rysuj linię", + "Draw a marker": "Dodaj znacznik", + "Draw a polygon": "Rysuj obszar", + "Draw a polyline": "Rysuj linię", + "Drop": "Wyrzuć", + "Dynamic": "Dynamiczne", + "Edit": "Edytuj", + "Edit feature's layer": "Edytuj warstwę z obiektami", + "Edit map properties": "Edytuj właściwości mapy", + "Edit map settings": "Edytuj ustawienia mapy", + "Edit this feature": "Edytuj ten obiekt", + "Embed and share this map": "Osadź i udostępnij tą mapę", + "Enable editing": "Włącz edytor", + "Format": "Format", + "From zoom": "Od przybliżenia", + "Go to «{feature}»": "Idź do «{feature}»", + "Hide controls": "Ukryj przyciski", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Jak bardzo uprościć obszar na każdym poziomie przybliżenia (więcej = większa wydajność i gładki wygląd, mniej = większa dokładność)", + "Import": "Importuj", + "Import data": "Importuj dane", + "Inherit": "Dziedziczne", + "Licence": "Licencja", + "Map background credits": "Źródło tła mapy", + "Map user content has been published under licence": "Zawartość mapy użytkownika została opublikowana pod licencją", + "More controls": "Więcej przycisków", + "Optional. Same as color if not set.": "Opcjonalne. Taki sam jak kolor jeśli nie podano.", + "Optionnal.": "Opcjonalne.", + "Paste here your data": "Wklej tutaj swoje dane", + "Please be sure the licence is compliant with your use.": "Upewnij się czy licencja jest zgodna z twoim użyciem.", + "Problem in the response": "Problem z odpowiedzią", + "Problem in the response format": "Problem z formatem odpowiedzi", + "Provide an URL here": "Wprowadź tutaj adres URL", + "Remote data": "Zdalne dane", + "Save": "Zapisz", + "Save current edits": "Zapisz obecne edycje", + "Save this center and zoom": "Zapisz obecną pozycję i przybliżenie", + "Show/hide layer": "Pokaż/ukryj warstwę", + "Start editing": "Rozpocznij edycję", + "Stop editing": "Zakończ edycję", + "The zoom and center have been setted.": "Przybliżenie i środek zostały ustawione.", + "To zoom": "Przybliżać", + "Untitled layer": "Warstwa bez nazwy", + "Untitled map": "Mapa bez nazwy", + "Update permissions and editors": "Aktualizuj uprawnienia i edytory", + "Url": "Adres URL", + "User content credits": "Źródło treści użytkownika", + "Where do we go from here?": "Gdzie można stąd pojechać?", + "Zoom in": "Przybliż", + "Zoom out": "Oddal", + "Zoom to layer extent": "Przybliż do warstwy", + "Zoom to this feature": "Przybliż to tego obiektu", + "color": "kolor", + "dash array": "przerywana linia", + "description": "opis", + "fill": "wypełnienie", + "fill color": "kolor wypełnienia", + "fill opacity": "stopień wypełnienia", + "inherit": "dziedziczny", + "licence": "licencja", + "name": "nazwa", + "no": "nie", + "opacity": "przeźroczystość", + "stroke": "obramowanie", + "weight": "waga", + "yes": "tak", + "Editing": "Edycja", + "Embed the map": "Osadź mapę na stronie", + "Short URL": "Krótki adres URL", + "# one hash for main heading": "# jeden krzyżyk - nagłówek pierwszego poziomu", + "## two hashes for second heading": "# dwa krzyżyki - nagłówek drugiego poziomu", + "### three hashes for third heading": "# trzy krzyżyki - nagłówek trzeciego poziomu", + "**double star for bold**": "**podwójna gwiazdka do pogrubienia**", + "*simple star for italic*": "*pojedyncza gwiazdka do pochylenia*", + "--- for an horizontal rule": "--- dla poziomej linii", + "All properties are imported.": "Zaimportowano wszystkie właściwości", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Wartości powinny być oddzielone przecinkiem, średnikiem lub znakiem tabulacji. Układ współrzędnych WGS84 jest wymagany. Tylko geometrie typu Punkt zostaną zaimportowane. Import sprawdzi nagłówki kolumn czy zawierają \"lat\" i \"lon\" na początku nagłówka, wielkość liter nie ma znaczenia. Wszystkie inne kolumny zostaną zaimportowane jako właściwości tych punktów.", + "Custom background": "Własne tło", + "Help": "Pomoc", + "Image: {{http://image.url.com}}": "Obrazek: {{http://obrazek.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link z tekstem: [[http://przyklad.pl|tekst zamiast linku]]", + "Properties imported:": "Zaimportowane właściwości:", + "Simple link: [[http://example.com]]": "Prosty link: [[http://przyklad.pl]]", + "Supported scheme": "Obsługiwany schemat", + "Supported variables that will be dynamically replaced": "Obsługiwane zmienne zostaną dynamicznie zamienione", + "Text formatting": "Formatowanie tekstu", + "attribution": "oznaczenie autorstwa", + "display name": "wyświetl nazwę", + "max zoom": "maksymalne powiększenie", + "min zoom": "minimalne powiększenie", + "Skipping unkown geometry.type: {type}": "Pomijanie nieznanego geometry.type: {type}", + "Please save the map before": "Proszę najpierw zapisać mapę", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Możesz używać właściwości obiektu jako zmiennych np. z \"http://myserver.org/images/{name}.png\", zmienna {name} zostanie zastąpiona przez wartość \"name\" dla każdego znacznika.", + "Transform to polygon": "Przekształć w wielokąt", + "Transform to lines": "Przekształć na linie", + "Choose the data format": "Wybierz format danych", + "Error in the tilelayer URL": "Błąd w adresie URL podkładu", + "Directions from here": "Kierunki stąd", + "Choose a preset": "Wybierz szablon", + "Limit bounds": "Limit granic", + "Use current bounds": "Użyj bieżących granic", + "max East": "granica wschodnia", + "max North": "granica północna", + "max South": "granica południowa", + "max West": "granica zachodnia", + "TMS format": "Format TMS", + "Credits": "Źródło", + "Only visible features will be downloaded.": "Tylko widoczne obiekty zostaną pobrane.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Otwórz ten zakres mapy w edytorze, by wprowadzić do OpenStreetMap dokładniejsze dane", + "Default properties": "Domyślne właściwości", + "User interface options": "Opcje interfejsu", + "Image with custom width (in px): {{http://image.url.com|width}}": "Obrazek z własną szerokością (w pikselach) {{http://obrazek.url.com|szerokość}}", + "Current view instead of default map view?": "Obecny widok mapy zamiast domyślnego?", + "Iframe export options": "Opcje eksportu Iframe", + "Include full screen link?": "Dołączyć link do pełnego ekranu?", + "See full screen": "Pełny ekran", + "height": "wysokość", + "width": "szerokość", + "Clustered": "Zgrupowane", + "Clustering radius": "Promień grupowania", + "GeoRSS (only link)": "GeoRSS (tylko link)", + "GeoRSS (title + image)": "GeoRSS (tytuł i obrazek)", + "Heatmap": "Mapa cieplna", + "Heatmap radius": "Promień mapy cieplnej", + "Name and description": "Nazwa i opis", + "Override clustering radius (default 80)": "Nadpisz promień grupowania (domyślnie 80)", + "Override heatmap radius (default 25)": "Nadpisz promień mapy cieplnej (domyślnie 25)", + "Proxy request": "Żądanie proxy", + "Table": "Tabela", + "To use if remote server doesn't allow cross domain (slower)": "Używaj jeśli zdalny serwer nie zezwala na cross domain (wolne)", + "Type of layer": "Typ warstwy", + "Filter…": "Filtr...", + "Heatmap intensity property": "Intensywność mapy cieplnej", + "Optional intensity property for heatmap": "Opcjonalna intensywności mapy cieplnej", + "Caption": "Podpis", + "Data browser": "Przeglądanie danych", + "Do you want to display a caption bar?": "Chcesz wyświetlić pasek z nagłówkiem?", + "Do you want to display a panel on load?": "Chcesz wyświetlić panel po załadowaniu?", + "None": "Brak", + "by": " ", + "Name and description (large)": "Nazwa i opis (duże)", + "Empty": "Wyczyść", + "Split line": "Podziel linię", + "Clone": "Klonowanie", + "Clone of {name}": "Sklonowane z {name}", + "Side panel": "Panel boczny", + "Powered by Leaflet and Django, glued by uMap project.": "Zasilany przez Leaflet i Django, sklejony przez projekt uMap.", + "Zoom level for automatic zooms": "Poziom automatycznych przybliżeń", + "Do you want to display the «more» control?": "Chcesz wyświetlić «więcej» kontrolek?", + "Auto": "Auto", + "Default: name": "Domyślnie: name", + "Property to use for sorting features": "Właściwość do sortowania elementów", + "Slideshow": "Pokaz slajdów", + "Start slideshow": "Rozpocznij pokaz", + "Stop slideshow": "Zakończ pokaz", + "Text color for the cluster label": "Kolor tekstu dla etykiety grupy", + "Zoom to the next": "Przybliż do następnego", + "Zoom to the previous": "Przybliż do poprzedniego", + "Add a new property": "Dodaj nową właściwość", + "Are you sure you want to delete this property on all the features?": "Na pewno chcesz usunąć tę właściwość we wszystkich obiektach?", + "Close": "Zamknij", + "Delete this property on all the features": "Usuń tę właściwość ze wszystkich obiektów", + "Edit properties in a table": "Edytuj właściwości w tabeli", + "Please enter the name of the property": "Podaj nazwę właściwości", + "Please enter the new name of this property": "Podaj nową nazwę tej właściwości", + "Rename this property on all the features": "Zmień nazwę tej właściwości we wszystkich obiektach", + "If false, the polygon will act as a part of the underlying map.": "Jeżeli fałsz, wielokąt będzie zachowywał się jak część mapy zasadniczej.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Ramka z podaną szerokością (w pikselach) {{{http://url.com|szerokość}}}", + "Iframe: {{{http://iframe.url.com}}}": "Ramka: {{{http://iframe.url.com}}}", + "See all": "Pokaż wszystko", + "Dynamic properties": "Właściwości dynamiczne", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Długie źródło", + "No licence has been set": "Nie wybrano licencji", + "Popup content template": "Szablon treści dymka", + "Short credits": "Krótkie źródło", + "Will be displayed in the bottom right corner of the map": "Będzie wyświetlone w prawym dolnym rogu mapy", + "Will be visible in the caption of the map": "Będzie widoczne w nagłówku mapy", + "Map has been saved!": "Mapa została zapisana!", + "Save anyway": "Zapisz mimo wszystko", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ups! Ktoś jeszcze edytował dane. Możesz mimo wszystko zapisać, ale to uszkodzi zmiany dokonane przez innych.", + "Comma separated list of properties to use when filtering features": "Lista właściwości oddzielona przecinkiem do używania przy sortowaniu obiektów", + "Keep current visible layers": "Zachowaj obecnie widoczne warstwy", + "Coordinates": "Koordynaty", + "Latitude": "Szerokość geograficzna", + "Longitude": "Długość geograficzna", + "Continue line (Ctrl-click)": "Dokończ linię (Ctrl+kliknij)", + "Start a hole here": "Zacznij dziurę tutaj", + "Click last point to finish shape": "Kliknij w ostatni punkt aby zakończyć rysowanie", + "Click to add a marker": "Kliknij aby dodać znacznik", + "Click to continue drawing": "Kliknij aby kontynuować rysowanie", + "Click to start drawing a line": "Kliknij aby zacząć rysować linię", + "Click to start drawing a polygon": "Kliknij aby zacząć rysować obszar", + "Import in a new layer": "Importuj do nowej warstwy", + "Layer": "Warstwa", + "Please choose a format": "Wybierz format", + "Imports all umap data, including layers and settings.": "Import wszystkich danych umap, razem z warstwami i ustawieniami.", + "Invalid umap data": "Niepoprawne dane umap", + "Invalid umap data in {filename}": "Niepoprawne dane umap w {filename}", + "Add a line to the current multi": "Dodaj linie do wybranego multipoligonu", + "Add a polygon to the current multi": "Dodaj poligon do wybranego multipoligonu", + "Click to edit": "Kliknij aby edytować", + "Continue line": "Dokończ linię", + "Delete this shape": "Usuń tę figurę", + "Make main shape": "Narysuj główny kształt", + "Merge lines": "Połącz linie", + "Remove shape from the multi": "Usuń obiekt z wybranego multipoligonu", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "następne", + "previous": "poprzednie", + "Measure distances": "Oblicz odległości", + "NM": "Mm", + "kilometers": "kilometry", + "km": "km", + "mi": "mi", + "miles": "mile", + "nautical miles": "mile morskie", + "{area} acres": "{area} akry", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} Mm", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} mile", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Na pewno chcesz przywrócić tą wersję?", + "Extract shape to separate feature": "Wydziel kształt jako odrębny obiekt", + "Layer properties": "Ustawienia warstwy", + "Restore this version": "Przywróć tą wersję", + "Versions": "Wersje", + "You have unsaved changes.": "Masz niezapisane zmiany.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Zezwalaj na interakcję", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Domyślne ustawienia interakcji", + "Default shape properties": "Domyślne właściwości kształtu", + "Default zoom level": "Domyślne przybliżenie", + "Define link to open in a new window on polygon click.": "Ustaw odnośnik, który otworzy się w nowym oknie po kliknięciu w wielokąt.", + "Delete this vertex (Alt-click)": "Usuń ten wierzchołek (Alt + klik)", + "Display the control to open OpenStreetMap editor": "Wyświetlaj panel otwierający edytor OSM", + "Display the data layers control": "Wyświetlaj panel warstw z danymi", + "Display the embed control": "Wyświetlaj panel sterujący osadzaniem", + "Display the fullscreen control": "Wyświetlaj panel widoku pełnoekranowego", + "Display the locate control": "Display the locate control", + "Display the measure control": "Wyświetlaj panel miarek", + "Display the search control": "Wyświetlaj panel wyszukiwania", + "Display the tile layers control": "Wyświetlaj panel warstw kafelków", + "Display the zoom control": "Wyświetlaj panel sterujący powiększeniem", + "Exit Fullscreen": "Zamknij pełny ekran", + "Fetch data each time map view changes.": "Załaduj dane za każdym razem gdy zmienia się widok mapy.", + "Filter keys": "Filter keys", + "Icon shape": "Kształt ikony", + "Icon symbol": "Symbol ikony", + "Interaction options": "Opcje interakcji", + "Label key": "Label key", + "Link to…": "Łącze do...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Musi być prawidłową wartością CSS (np. DarkBlue lub #123456)", + "No results": "Brak wyników", + "Popup style": "Styl wyskakującego okienka", + "Replace layer content": "Zamień zawartość warstwy", + "Save this location as new feature": "Zapisz to miejsce jako nowy obiekt", + "Search location": "Znajdź miejsce", + "Set URL": "Ustaw URL", + "Shape properties": "Właściwości kształtu", + "Simplify": "Uprość", + "Sort key": "Klucz sortowania", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Przełącz tryb edycji (Shift+klik)", + "View Fullscreen": "Włącz tryb pełnoekranowy", + "Whether to display or not polygons paths.": "Czy wyświetlić obrysy obszarów", + "Whether to fill polygons with color.": "Czy wypełnić obszary kolorem", + "Zoom to this place": "Przybliż do tego miejsca", + "always": "zawsze", + "clear": "wyczyść", + "define": "określ", + "hidden": "ukryte", + "never": "nigdy", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Wyświetl etykietę", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Kierunek etykiety", + "Manage layers": "Usuń warstwę", + "On the bottom": "Na dole", + "On the left": "Po lewej", + "On the right": "Po prawej", + "On the top": "Na górze", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "nowe okno", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Czy jesteś pewien, że chcesz usunąć tą warstwę?", + "Delete layer": "Usuń warstwę", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Usuń wszystkie warstwy", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Aktywuj pokaz slajdów", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{opóźnienie} w sekundach", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pl_PL.json b/umap/static/umap/locale/pl_PL.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/pl_PL.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pt.js b/umap/static/umap/locale/pt.js new file mode 100644 index 00000000..18871735 --- /dev/null +++ b/umap/static/umap/locale/pt.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Sobre", + "Action not allowed :(": "Ação não permitida :(", + "Add a layer": "Adicionar camada", + "Add symbol": "Adicionar símbolo", + "Advanced actions": "Ações avançadas", + "Advanced properties": "Propriedades avançadas", + "Allow scroll wheel zoom?": "Permitir zoom com roda do rato?", + "An error occured": "Ocorreu um erro", + "Are you sure you want to cancel your changes?": "Tem a certeza que quer cancelar as suas alterações?", + "Are you sure you want to clone this map and all its datalayers?": "Tem a certeza que quer clonar este mapa, incluindo todas as camadas de dados?", + "Are you sure you want to delete the feature?": "Tem a certeza que quer eliminar o elemento?", + "Are you sure you want to delete this map?": "Tem a certeza que quer eliminar este mapa?", + "Ball": "Bola", + "Bring feature to center": "Centrar elemento", + "Browse data": "Explorar dados", + "Cancel": "Cancelar", + "Cancel edits": "Cancelar edições", + "Center map on your location": "Centrar mapa na sua localização", + "Change map background": "Mudar fundo do mapa", + "Change symbol": "Alterar símbolo", + "Change tilelayers": "Alterar camadas de telas", + "Choose the format of the data to import": "Escolha o formato dos dados para importação", + "Choose the layer of the feature": "Escolha a camada do elemento", + "Choose the layer to import in": "Escolha a camada para destino da importação", + "Circle": "Círculo", + "Clone this map": "Clonar este mapa", + "Default": "Padrão", + "Delete": "Eliminar", + "Delete this feature": "Eliminar este elemento", + "Disable editing": "Desativar edição", + "Display on load": "Mostrar ao carregar", + "Do you want to display a minimap?": "Pretende mostrar um mini-mapa?", + "Do you want to display popup footer?": "Pretende mostrar um popup no rodapé?", + "Do you want to display the scale control?": "Pretende mostrar o controlo de escala?", + "Download data": "Descarregar dados", + "Draw a line": "Desenhar uma linha", + "Draw a marker": "Desenhar um marco", + "Draw a polygon": "Desenhar um polígono", + "Draw a polyline": "Desenhar uma polilinha", + "Drop": "Largar", + "Dynamic": "Dinâmico", + "Edit": "Editar", + "Edit feature's layer": "Editar camada do elemento", + "Edit map properties": "Editar propriedades do mapa", + "Edit map settings": "Editar definições do mapa", + "Edit this feature": "Editar este elemento", + "Embed and share this map": "Exportar e partilhar este mapa", + "Enable editing": "Ativar edição", + "Format": "Formato", + "From zoom": "Do zoom", + "Go to «{feature}»": "Ir a «{feature}»", + "Hide controls": "Ocultar controlos", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Por quanto simplificar a polilinha em cada nível de aproximação (mais = melhor desempenho e aspeto mais suave, menos = mais preciso)", + "Import": "Importar", + "Import data": "Importar dados", + "Inherit": "Inherit", + "Licence": "Licença", + "Map background credits": "Créditos do fundo do mapa", + "Map user content has been published under licence": "O conteúdo do mapa foi publicado sob a licença", + "More controls": "Mais controlos", + "Optional. Same as color if not set.": "Opcional. Igual à cor se não for definido.", + "Optionnal.": "Opcional.", + "Paste here your data": "Cole aqui os seus dados", + "Please be sure the licence is compliant with your use.": "Por favor tenha a certeza que a utilização está conforme a licença.", + "Problem in the response": "Problema na resposta do servidor", + "Problem in the response format": "Problema no formato da resposta", + "Provide an URL here": "Forneça um URL aqui", + "Remote data": "Dados remotos", + "Save": "Gravar", + "Save current edits": "Gravar edições atuais", + "Save this center and zoom": "Gravar este centro e aproximar", + "Show/hide layer": "Mostrar/ocultar camada", + "Start editing": "Começar a editar", + "Stop editing": "Parar edição", + "The zoom and center have been setted.": "O centro e a aproximação foram definidos.", + "To zoom": "Para aproximar", + "Untitled layer": "Camada sem nome", + "Untitled map": "Mapa sem nome", + "Update permissions and editors": "Alterar permisões e editores", + "Url": "URL", + "User content credits": "Créditos do conteúdo do utilizador", + "Where do we go from here?": "Para onde vamos a partir daqui?", + "Zoom in": "Aproximar", + "Zoom out": "Afastar", + "Zoom to layer extent": "Aproximar ao tamanho da camada", + "Zoom to this feature": "Aproximar a este elemento", + "color": "cor", + "dash array": "série de traços", + "description": "descrição", + "fill": "preenchimento", + "fill color": "cor do preenchimento", + "fill opacity": "opacidade do preenchimento", + "inherit": "herdado", + "licence": "licença", + "name": "nome", + "no": "não", + "opacity": "opacidade", + "stroke": "traço", + "weight": "espessura", + "yes": "sim", + "Editing": "A editar", + "Embed the map": "Embeber o mapa", + "Short URL": "URL curto", + "# one hash for main heading": "# um cardinal para o cabeçalho principal", + "## two hashes for second heading": "## dois cardinais para o segundo cabeçalho", + "### three hashes for third heading": "### três cardinais para o terceiro cabeçalho", + "**double star for bold**": "**dois asteriscos duplos para negrito**", + "*simple star for italic*": "**um asterisco duplos para itálico**", + "--- for an horizontal rule": "--- para uma régua horizontal", + "All properties are imported.": "Foram importadas todas as propriedades.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Fundo personalizado", + "Help": "Ajuda", + "Image: {{http://image.url.com}}": "Imagem: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link com texto: [[http://example.com|texto do link]]", + "Properties imported:": "Propriedades importadas:", + "Simple link: [[http://example.com]]": "Link simples: [[http://example.com]]", + "Supported scheme": "Esquema suportado", + "Supported variables that will be dynamically replaced": "Variáveis suportadas que serão substituídas de forma dinâmica", + "Text formatting": "Formatação do texto", + "attribution": "atribuição", + "display name": "mostrar nome", + "max zoom": "aproximação máxima", + "min zoom": "aproximação mínima", + "Skipping unkown geometry.type: {type}": "A ignorar tipo de geometria desconhecido: {type}", + "Please save the map before": "Pro favor grave antes o mapa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transformar em polígono", + "Transform to lines": "Transformar em linha", + "Choose the data format": "Escolha o formato dos dados", + "Error in the tilelayer URL": "Erro no URL de telas", + "Directions from here": "Direções a partir daqui", + "Choose a preset": "Escolha um modelo", + "Limit bounds": "Extremos dos limites", + "Use current bounds": "Usar extremos atuais", + "max East": "Este máx.", + "max North": "Norte máx.", + "max South": "Sul máx.", + "max West": "Oeste máx.", + "TMS format": "Formato TMS", + "Credits": "Créditos", + "Only visible features will be downloaded.": "Apenas os elementos visíveis serão descarregados.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Propriedades padrão", + "User interface options": "Opções da interface de utilizador", + "Image with custom width (in px): {{http://image.url.com|width}}": "Imagem com largura personalizada (em px): {{http://imagem.url.com|largura}}", + "Current view instead of default map view?": "Vista atual em ves da vista padrão do mapa?", + "Iframe export options": "Opções de exportação Iframe", + "Include full screen link?": "Incluir link de encrã total?", + "See full screen": "Ver em ecrã total", + "height": "altura", + "width": "largura", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (apenas o link)", + "GeoRSS (title + image)": "GeoRSS (título + imagem)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Nome e descrição", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Pedido proxy", + "Table": "Tabela", + "To use if remote server doesn't allow cross domain (slower)": "Para usar caso o servidor remoto não permitir domínios cruzados (mais lento)", + "Type of layer": "Tipo de camada", + "Filter…": "Filtrar...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Cabeçalho", + "Data browser": "Navegador de dados", + "Do you want to display a caption bar?": "Quer mostrar uma barra de cabeçalho?", + "Do you want to display a panel on load?": "Quer mostrar um painel ao carregar?", + "None": "Nenhum", + "by": "por", + "Name and description (large)": "Nome e descrição (extenso)", + "Empty": "Vazio", + "Split line": "Linha de separação", + "Clone": "Clone", + "Clone of {name}": "Clone de {name}", + "Side panel": "Painel lateral", + "Powered by Leaflet and Django, glued by uMap project.": "Criado com Leaflet e Django pelo projeto uMap.", + "Zoom level for automatic zooms": "Nível de aproximação para aproximações automáticas", + "Do you want to display the «more» control?": "Quer mostrar o controlo «mais»?", + "Auto": "Auto", + "Default: name": "Padrão: nome", + "Property to use for sorting features": "Propriedade a usar para ordenar elementos", + "Slideshow": "Apresentação", + "Start slideshow": "Iniciar apresentação", + "Stop slideshow": "Parar apresentação", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Aproximar para o seguinte", + "Zoom to the previous": "Aproximar para o anterior", + "Add a new property": "Adicionar uma nova propriedade", + "Are you sure you want to delete this property on all the features?": "Tem a certeza que quer eliminar esta propriedade em todos os elementos?", + "Close": "Fechar", + "Delete this property on all the features": "Eliminar esta propriedade em todos os elementos", + "Edit properties in a table": "Editar propriedades numa tabela", + "Please enter the name of the property": "Por favor introduza o nome da propriedade", + "Please enter the new name of this property": "Por favor introduza um novo nome desta propriedade", + "Rename this property on all the features": "Alterar nome desta propriedade em todos os elementos", + "If false, the polygon will act as a part of the underlying map.": "Se desativado, o polígono agirá como parte do mapa de baixo.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe com altura personalizada (em px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Ver tudo", + "Dynamic properties": "Propriedades dinâmicas", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Créditos por extenso", + "No licence has been set": "Não foi definida nenhuma licença", + "Popup content template": "Modelo de conteúdo do popup", + "Short credits": "Créditos resumidos", + "Will be displayed in the bottom right corner of the map": "Será mostrado no fundo à direita do mapa", + "Will be visible in the caption of the map": "Será visível no cabeçalho do mapa", + "Map has been saved!": "O mapa foi gravado!", + "Save anyway": "Gravar mesmo assim", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ops! Parece que alguém editou os dados. Pode gravar mesmo assim, mas isso irá eliminar as alterações feitas por outros.", + "Comma separated list of properties to use when filtering features": "Lista separada por vírgulas de propriedades a usar ao filtrar elementos", + "Keep current visible layers": "Manter camadas atualmente visíveis", + "Coordinates": "Coordenadas", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continuar linnha (Ctrl-clique)", + "Start a hole here": "Começar um buraco aqui", + "Click last point to finish shape": "Clique no último ponto para terminar a forma geométrica", + "Click to add a marker": "Clique para adicionar um marcador", + "Click to continue drawing": "Clique para continuar a desenhar", + "Click to start drawing a line": "Clique para começar a desenhar uma linha", + "Click to start drawing a polygon": "Clique para começar a desenhar um polígono", + "Import in a new layer": "Importar uma nova camada", + "Layer": "Camada", + "Please choose a format": "Por favor escolha um formato", + "Imports all umap data, including layers and settings.": "Importa todos os dados uMap, incluindo camadas e definições.", + "Invalid umap data": "Dados uMap inválidos", + "Invalid umap data in {filename}": "Dados uMap inválidos em {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Clique para editar", + "Continue line": "Continuar linha", + "Delete this shape": "Eliminar esta forma geométrica", + "Make main shape": "Fazer forma geométrica principal", + "Merge lines": "Fundir linhas", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transferir a forma geométrica para o elemento editado", + "next": "seguinte", + "previous": "anterior", + "Measure distances": "Medir distâncias", + "NM": "MN", + "kilometers": "quilómetros", + "km": "km", + "mi": "mi", + "miles": "milhas", + "nautical miles": "milhas náuticas", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} MN", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} milhas", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Tem a certeza que quer restaurar esta versão?", + "Extract shape to separate feature": "Extrair forma geométrica para separar o elemento", + "Layer properties": "Propriedades da camada", + "Restore this version": "Restaurar esta versão", + "Versions": "Versões", + "You have unsaved changes.": "Tem alterações por gravar", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Lista de números separada por vírgulas que define o padrão do traço. Por exemplo \"5, 10, 15\".", + "Advanced transition": "Transição avançada", + "Allow interactions": "Permitir interações", + "Autostart when map is loaded": "Reproduzir automaticamente ao carregar o mapa", + "Default interaction options": "Opções padrão de interação", + "Default shape properties": "Propriedades padrão de formas geométricas", + "Default zoom level": "Nível de aproximação padrão", + "Define link to open in a new window on polygon click.": "Definir link para abrir numa nova janela ao clicar no polígono.", + "Delete this vertex (Alt-click)": "Eliminar este vértice (Alt-clique)", + "Display the control to open OpenStreetMap editor": "Mostrar o controlo para abrir o editor OpenStreetMap", + "Display the data layers control": "Mostrar o controlo das camadas de dados", + "Display the embed control": "Mostrar o controlo de embeber", + "Display the fullscreen control": "Mostrar o controlo de ecrã total", + "Display the locate control": "Mostrar o controlo de localizar", + "Display the measure control": "Mostrar o controlo de medição", + "Display the search control": "Mostrar o controlo de pesquisa", + "Display the tile layers control": "Mostrar o controlo de camadas de telas", + "Display the zoom control": "Mostrar o controlo de aproximar e afastar", + "Exit Fullscreen": "Sair de Ecrã Total", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filtrar chaves", + "Icon shape": "Forma do ícone", + "Icon symbol": "Símbolo do ícone", + "Interaction options": "Opções de interação", + "Label key": "Chave da etiqueta", + "Link to…": "Link para...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Tem de ser um valor CSS válido (p.ex.: DarkBlue ou #123456)", + "No results": "Sem resultados", + "Popup style": "Estilo do popup", + "Replace layer content": "Substituir o conteúdo da camada", + "Save this location as new feature": "Gravar esta localização como novo elemento", + "Search location": "Procurar localização", + "Set URL": "Definir URL", + "Shape properties": "Propriedades de formas geométricas", + "Simplify": "Simplificar", + "Sort key": "Chave de ordenação", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Alternar modo de editar (shift-clique)", + "View Fullscreen": "Ver em Ecrã Total", + "Whether to display or not polygons paths.": "Se mostrar ou não os caminhos dos polígonos.", + "Whether to fill polygons with color.": "Se mostrar ou não os polígonos preenchidos a cor.", + "Zoom to this place": "Aproximar para este local", + "always": "sempre", + "clear": "limpar", + "define": "definir", + "hidden": "oculto", + "never": "nunca", + "Automatic": "Automático", + "Clone this feature": "Clonar este elemento", + "Display label": "Mostrar etiqueta", + "Drag to reorder": "Arrastar para reordenar", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe com altura e largura personalizados (em px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Etiquetas são clicáveis", + "Label direction": "Direção da etiqueta", + "Manage layers": "Gerir camadas", + "On the bottom": "No fundo", + "On the left": "Na esquerda", + "On the right": "Na direita", + "On the top": "No topo", + "Only display label on mouse hover": "Apenas mostrar a etiqueta ao passar com o rato", + "Open link in…": "Abrir link numa...", + "Unable to detect format of file {filename}": "Não foi possível detetar o formato do ficheiro {filename}", + "collapsed": "colapsado", + "expanded": "expandido", + "iframe": "iframe", + "new window": "nova janela", + "parent window": "janela pai", + "{count} errors during import: {message}": "{count} erros ao importar: {message}", + "Are you sure you want to delete this layer?": "Tem a certeza que quer eliminar esta camada?", + "Delete layer": "Eliminar camada", + "Error while fetching {url}": "Erro ao processar {url}", + "Home": "Início", + "Delete all layers": "Eliminar todas as camadas", + "Full map data": "Todos os dados do mapa", + "Smart transitions": "Transições inteligentes", + "Activate slideshow mode": "Ativar modo de apresentação", + "Data is browsable": "Os dados são navegáveis", + "Delay between two transitions when in play mode": "Atraso entre 2 transições ao reproduzir a apresentação", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} segundos", + "Display measure": "Display measure" +}; +L.registerLocale("pt", locale); +L.setLocale("pt"); \ No newline at end of file diff --git a/umap/static/umap/locale/pt.json b/umap/static/umap/locale/pt.json new file mode 100644 index 00000000..63c619b6 --- /dev/null +++ b/umap/static/umap/locale/pt.json @@ -0,0 +1,350 @@ +{ + "About": "Sobre", + "Action not allowed :(": "Ação não permitida :(", + "Add a layer": "Adicionar camada", + "Add symbol": "Adicionar símbolo", + "Advanced actions": "Ações avançadas", + "Advanced properties": "Propriedades avançadas", + "Allow scroll wheel zoom?": "Permitir zoom com roda do rato?", + "An error occured": "Ocorreu um erro", + "Are you sure you want to cancel your changes?": "Tem a certeza que quer cancelar as suas alterações?", + "Are you sure you want to clone this map and all its datalayers?": "Tem a certeza que quer clonar este mapa, incluindo todas as camadas de dados?", + "Are you sure you want to delete the feature?": "Tem a certeza que quer eliminar o elemento?", + "Are you sure you want to delete this map?": "Tem a certeza que quer eliminar este mapa?", + "Ball": "Bola", + "Bring feature to center": "Centrar elemento", + "Browse data": "Explorar dados", + "Cancel": "Cancelar", + "Cancel edits": "Cancelar edições", + "Center map on your location": "Centrar mapa na sua localização", + "Change map background": "Mudar fundo do mapa", + "Change symbol": "Alterar símbolo", + "Change tilelayers": "Alterar camadas de telas", + "Choose the format of the data to import": "Escolha o formato dos dados para importação", + "Choose the layer of the feature": "Escolha a camada do elemento", + "Choose the layer to import in": "Escolha a camada para destino da importação", + "Circle": "Círculo", + "Clone this map": "Clonar este mapa", + "Default": "Padrão", + "Delete": "Eliminar", + "Delete this feature": "Eliminar este elemento", + "Disable editing": "Desativar edição", + "Display on load": "Mostrar ao carregar", + "Do you want to display a minimap?": "Pretende mostrar um mini-mapa?", + "Do you want to display popup footer?": "Pretende mostrar um popup no rodapé?", + "Do you want to display the scale control?": "Pretende mostrar o controlo de escala?", + "Download data": "Descarregar dados", + "Draw a line": "Desenhar uma linha", + "Draw a marker": "Desenhar um marco", + "Draw a polygon": "Desenhar um polígono", + "Draw a polyline": "Desenhar uma polilinha", + "Drop": "Largar", + "Dynamic": "Dinâmico", + "Edit": "Editar", + "Edit feature's layer": "Editar camada do elemento", + "Edit map properties": "Editar propriedades do mapa", + "Edit map settings": "Editar definições do mapa", + "Edit this feature": "Editar este elemento", + "Embed and share this map": "Exportar e partilhar este mapa", + "Enable editing": "Ativar edição", + "Format": "Formato", + "From zoom": "Do zoom", + "Go to «{feature}»": "Ir a «{feature}»", + "Hide controls": "Ocultar controlos", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Por quanto simplificar a polilinha em cada nível de aproximação (mais = melhor desempenho e aspeto mais suave, menos = mais preciso)", + "Import": "Importar", + "Import data": "Importar dados", + "Inherit": "Inherit", + "Licence": "Licença", + "Map background credits": "Créditos do fundo do mapa", + "Map user content has been published under licence": "O conteúdo do mapa foi publicado sob a licença", + "More controls": "Mais controlos", + "Optional. Same as color if not set.": "Opcional. Igual à cor se não for definido.", + "Optionnal.": "Opcional.", + "Paste here your data": "Cole aqui os seus dados", + "Please be sure the licence is compliant with your use.": "Por favor tenha a certeza que a utilização está conforme a licença.", + "Problem in the response": "Problema na resposta do servidor", + "Problem in the response format": "Problema no formato da resposta", + "Provide an URL here": "Forneça um URL aqui", + "Remote data": "Dados remotos", + "Save": "Gravar", + "Save current edits": "Gravar edições atuais", + "Save this center and zoom": "Gravar este centro e aproximar", + "Show/hide layer": "Mostrar/ocultar camada", + "Start editing": "Começar a editar", + "Stop editing": "Parar edição", + "The zoom and center have been setted.": "O centro e a aproximação foram definidos.", + "To zoom": "Para aproximar", + "Untitled layer": "Camada sem nome", + "Untitled map": "Mapa sem nome", + "Update permissions and editors": "Alterar permisões e editores", + "Url": "URL", + "User content credits": "Créditos do conteúdo do utilizador", + "Where do we go from here?": "Para onde vamos a partir daqui?", + "Zoom in": "Aproximar", + "Zoom out": "Afastar", + "Zoom to layer extent": "Aproximar ao tamanho da camada", + "Zoom to this feature": "Aproximar a este elemento", + "color": "cor", + "dash array": "série de traços", + "description": "descrição", + "fill": "preenchimento", + "fill color": "cor do preenchimento", + "fill opacity": "opacidade do preenchimento", + "inherit": "herdado", + "licence": "licença", + "name": "nome", + "no": "não", + "opacity": "opacidade", + "stroke": "traço", + "weight": "espessura", + "yes": "sim", + "Editing": "A editar", + "Embed the map": "Embeber o mapa", + "Short URL": "URL curto", + "# one hash for main heading": "# um cardinal para o cabeçalho principal", + "## two hashes for second heading": "## dois cardinais para o segundo cabeçalho", + "### three hashes for third heading": "### três cardinais para o terceiro cabeçalho", + "**double star for bold**": "**dois asteriscos duplos para negrito**", + "*simple star for italic*": "**um asterisco duplos para itálico**", + "--- for an horizontal rule": "--- para uma régua horizontal", + "All properties are imported.": "Foram importadas todas as propriedades.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Fundo personalizado", + "Help": "Ajuda", + "Image: {{http://image.url.com}}": "Imagem: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link com texto: [[http://example.com|texto do link]]", + "Properties imported:": "Propriedades importadas:", + "Simple link: [[http://example.com]]": "Link simples: [[http://example.com]]", + "Supported scheme": "Esquema suportado", + "Supported variables that will be dynamically replaced": "Variáveis suportadas que serão substituídas de forma dinâmica", + "Text formatting": "Formatação do texto", + "attribution": "atribuição", + "display name": "mostrar nome", + "max zoom": "aproximação máxima", + "min zoom": "aproximação mínima", + "Skipping unkown geometry.type: {type}": "A ignorar tipo de geometria desconhecido: {type}", + "Please save the map before": "Pro favor grave antes o mapa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transformar em polígono", + "Transform to lines": "Transformar em linha", + "Choose the data format": "Escolha o formato dos dados", + "Error in the tilelayer URL": "Erro no URL de telas", + "Directions from here": "Direções a partir daqui", + "Choose a preset": "Escolha um modelo", + "Limit bounds": "Extremos dos limites", + "Use current bounds": "Usar extremos atuais", + "max East": "Este máx.", + "max North": "Norte máx.", + "max South": "Sul máx.", + "max West": "Oeste máx.", + "TMS format": "Formato TMS", + "Credits": "Créditos", + "Only visible features will be downloaded.": "Apenas os elementos visíveis serão descarregados.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Propriedades padrão", + "User interface options": "Opções da interface de utilizador", + "Image with custom width (in px): {{http://image.url.com|width}}": "Imagem com largura personalizada (em px): {{http://imagem.url.com|largura}}", + "Current view instead of default map view?": "Vista atual em ves da vista padrão do mapa?", + "Iframe export options": "Opções de exportação Iframe", + "Include full screen link?": "Incluir link de encrã total?", + "See full screen": "Ver em ecrã total", + "height": "altura", + "width": "largura", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (apenas o link)", + "GeoRSS (title + image)": "GeoRSS (título + imagem)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Nome e descrição", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Pedido proxy", + "Table": "Tabela", + "To use if remote server doesn't allow cross domain (slower)": "Para usar caso o servidor remoto não permitir domínios cruzados (mais lento)", + "Type of layer": "Tipo de camada", + "Filter…": "Filtrar...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Cabeçalho", + "Data browser": "Navegador de dados", + "Do you want to display a caption bar?": "Quer mostrar uma barra de cabeçalho?", + "Do you want to display a panel on load?": "Quer mostrar um painel ao carregar?", + "None": "Nenhum", + "by": "por", + "Name and description (large)": "Nome e descrição (extenso)", + "Empty": "Vazio", + "Split line": "Linha de separação", + "Clone": "Clone", + "Clone of {name}": "Clone de {name}", + "Side panel": "Painel lateral", + "Powered by Leaflet and Django, glued by uMap project.": "Criado com Leaflet e Django pelo projeto uMap.", + "Zoom level for automatic zooms": "Nível de aproximação para aproximações automáticas", + "Do you want to display the «more» control?": "Quer mostrar o controlo «mais»?", + "Auto": "Auto", + "Default: name": "Padrão: nome", + "Property to use for sorting features": "Propriedade a usar para ordenar elementos", + "Slideshow": "Apresentação", + "Start slideshow": "Iniciar apresentação", + "Stop slideshow": "Parar apresentação", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Aproximar para o seguinte", + "Zoom to the previous": "Aproximar para o anterior", + "Add a new property": "Adicionar uma nova propriedade", + "Are you sure you want to delete this property on all the features?": "Tem a certeza que quer eliminar esta propriedade em todos os elementos?", + "Close": "Fechar", + "Delete this property on all the features": "Eliminar esta propriedade em todos os elementos", + "Edit properties in a table": "Editar propriedades numa tabela", + "Please enter the name of the property": "Por favor introduza o nome da propriedade", + "Please enter the new name of this property": "Por favor introduza um novo nome desta propriedade", + "Rename this property on all the features": "Alterar nome desta propriedade em todos os elementos", + "If false, the polygon will act as a part of the underlying map.": "Se desativado, o polígono agirá como parte do mapa de baixo.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe com altura personalizada (em px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Ver tudo", + "Dynamic properties": "Propriedades dinâmicas", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Créditos por extenso", + "No licence has been set": "Não foi definida nenhuma licença", + "Popup content template": "Modelo de conteúdo do popup", + "Short credits": "Créditos resumidos", + "Will be displayed in the bottom right corner of the map": "Será mostrado no fundo à direita do mapa", + "Will be visible in the caption of the map": "Será visível no cabeçalho do mapa", + "Map has been saved!": "O mapa foi gravado!", + "Save anyway": "Gravar mesmo assim", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ops! Parece que alguém editou os dados. Pode gravar mesmo assim, mas isso irá eliminar as alterações feitas por outros.", + "Comma separated list of properties to use when filtering features": "Lista separada por vírgulas de propriedades a usar ao filtrar elementos", + "Keep current visible layers": "Manter camadas atualmente visíveis", + "Coordinates": "Coordenadas", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continuar linnha (Ctrl-clique)", + "Start a hole here": "Começar um buraco aqui", + "Click last point to finish shape": "Clique no último ponto para terminar a forma geométrica", + "Click to add a marker": "Clique para adicionar um marcador", + "Click to continue drawing": "Clique para continuar a desenhar", + "Click to start drawing a line": "Clique para começar a desenhar uma linha", + "Click to start drawing a polygon": "Clique para começar a desenhar um polígono", + "Import in a new layer": "Importar uma nova camada", + "Layer": "Camada", + "Please choose a format": "Por favor escolha um formato", + "Imports all umap data, including layers and settings.": "Importa todos os dados uMap, incluindo camadas e definições.", + "Invalid umap data": "Dados uMap inválidos", + "Invalid umap data in {filename}": "Dados uMap inválidos em {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Clique para editar", + "Continue line": "Continuar linha", + "Delete this shape": "Eliminar esta forma geométrica", + "Make main shape": "Fazer forma geométrica principal", + "Merge lines": "Fundir linhas", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transferir a forma geométrica para o elemento editado", + "next": "seguinte", + "previous": "anterior", + "Measure distances": "Medir distâncias", + "NM": "MN", + "kilometers": "quilómetros", + "km": "km", + "mi": "mi", + "miles": "milhas", + "nautical miles": "milhas náuticas", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} MN", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} milhas", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Tem a certeza que quer restaurar esta versão?", + "Extract shape to separate feature": "Extrair forma geométrica para separar o elemento", + "Layer properties": "Propriedades da camada", + "Restore this version": "Restaurar esta versão", + "Versions": "Versões", + "You have unsaved changes.": "Tem alterações por gravar", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Lista de números separada por vírgulas que define o padrão do traço. Por exemplo \"5, 10, 15\".", + "Advanced transition": "Transição avançada", + "Allow interactions": "Permitir interações", + "Autostart when map is loaded": "Reproduzir automaticamente ao carregar o mapa", + "Default interaction options": "Opções padrão de interação", + "Default shape properties": "Propriedades padrão de formas geométricas", + "Default zoom level": "Nível de aproximação padrão", + "Define link to open in a new window on polygon click.": "Definir link para abrir numa nova janela ao clicar no polígono.", + "Delete this vertex (Alt-click)": "Eliminar este vértice (Alt-clique)", + "Display the control to open OpenStreetMap editor": "Mostrar o controlo para abrir o editor OpenStreetMap", + "Display the data layers control": "Mostrar o controlo das camadas de dados", + "Display the embed control": "Mostrar o controlo de embeber", + "Display the fullscreen control": "Mostrar o controlo de ecrã total", + "Display the locate control": "Mostrar o controlo de localizar", + "Display the measure control": "Mostrar o controlo de medição", + "Display the search control": "Mostrar o controlo de pesquisa", + "Display the tile layers control": "Mostrar o controlo de camadas de telas", + "Display the zoom control": "Mostrar o controlo de aproximar e afastar", + "Exit Fullscreen": "Sair de Ecrã Total", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filtrar chaves", + "Icon shape": "Forma do ícone", + "Icon symbol": "Símbolo do ícone", + "Interaction options": "Opções de interação", + "Label key": "Chave da etiqueta", + "Link to…": "Link para...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Tem de ser um valor CSS válido (p.ex.: DarkBlue ou #123456)", + "No results": "Sem resultados", + "Popup style": "Estilo do popup", + "Replace layer content": "Substituir o conteúdo da camada", + "Save this location as new feature": "Gravar esta localização como novo elemento", + "Search location": "Procurar localização", + "Set URL": "Definir URL", + "Shape properties": "Propriedades de formas geométricas", + "Simplify": "Simplificar", + "Sort key": "Chave de ordenação", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Alternar modo de editar (shift-clique)", + "View Fullscreen": "Ver em Ecrã Total", + "Whether to display or not polygons paths.": "Se mostrar ou não os caminhos dos polígonos.", + "Whether to fill polygons with color.": "Se mostrar ou não os polígonos preenchidos a cor.", + "Zoom to this place": "Aproximar para este local", + "always": "sempre", + "clear": "limpar", + "define": "definir", + "hidden": "oculto", + "never": "nunca", + "Automatic": "Automático", + "Clone this feature": "Clonar este elemento", + "Display label": "Mostrar etiqueta", + "Drag to reorder": "Arrastar para reordenar", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe com altura e largura personalizados (em px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Etiquetas são clicáveis", + "Label direction": "Direção da etiqueta", + "Manage layers": "Gerir camadas", + "On the bottom": "No fundo", + "On the left": "Na esquerda", + "On the right": "Na direita", + "On the top": "No topo", + "Only display label on mouse hover": "Apenas mostrar a etiqueta ao passar com o rato", + "Open link in…": "Abrir link numa...", + "Unable to detect format of file {filename}": "Não foi possível detetar o formato do ficheiro {filename}", + "collapsed": "colapsado", + "expanded": "expandido", + "iframe": "iframe", + "new window": "nova janela", + "parent window": "janela pai", + "{count} errors during import: {message}": "{count} erros ao importar: {message}", + "Are you sure you want to delete this layer?": "Tem a certeza que quer eliminar esta camada?", + "Delete layer": "Eliminar camada", + "Error while fetching {url}": "Erro ao processar {url}", + "Home": "Início", + "Delete all layers": "Eliminar todas as camadas", + "Full map data": "Todos os dados do mapa", + "Smart transitions": "Transições inteligentes", + "Activate slideshow mode": "Ativar modo de apresentação", + "Data is browsable": "Os dados são navegáveis", + "Delay between two transitions when in play mode": "Atraso entre 2 transições ao reproduzir a apresentação", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} segundos", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pt_BR.json b/umap/static/umap/locale/pt_BR.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/pt_BR.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pt_PT.json b/umap/static/umap/locale/pt_PT.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/pt_PT.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ru.js b/umap/static/umap/locale/ru.js new file mode 100644 index 00000000..b0235c33 --- /dev/null +++ b/umap/static/umap/locale/ru.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Подробней", + "Action not allowed :(": "Действие недоступно :(", + "Add a layer": "Добавить слой", + "Add symbol": "Добавить изображение", + "Advanced actions": "Дополнительные действия", + "Advanced properties": "Дополнительные свойства", + "Allow scroll wheel zoom?": "Разрешить изменение масштаба колесом мыши?", + "An error occured": "Произошла ошибка", + "Are you sure you want to cancel your changes?": "Вы уверены, что хотите отменить сделанные изменения?", + "Are you sure you want to clone this map and all its datalayers?": "Вы уверены, что хотите скопировать эту карту и все её слои данных?", + "Are you sure you want to delete the feature?": "Вы уверены, что хотите удалить объект?", + "Are you sure you want to delete this map?": "Вы уверены, что хотите удалить карту?", + "Ball": "Булавка", + "Bring feature to center": "Поместить объект в центр", + "Browse data": "Просмотр данных", + "Cancel": "Отменить", + "Cancel edits": "Отменить правки", + "Center map on your location": "Переместить карту в ваше местоположение", + "Change map background": "Изменить подложку карты", + "Change symbol": "Изменить иконку", + "Change tilelayers": "Выбрать подложку", + "Choose the format of the data to import": "Выберите формат данных для импорта", + "Choose the layer of the feature": "Выберите слой для объекта", + "Choose the layer to import in": "Выбрать слой для импорта в него", + "Circle": "Кружок", + "Clone this map": "Создать копию карты", + "Default": "По умолчанию", + "Delete": "Удалить", + "Delete this feature": "Удалить объект", + "Disable editing": "Отключить редактирование", + "Display on load": "Показывать при загрузке", + "Do you want to display a minimap?": "Показывать миникарту?", + "Do you want to display popup footer?": "Хотите использовать всплывающую подсказку снизу?", + "Do you want to display the scale control?": "Показывать шкалу расстояний?", + "Download data": "Скачать данные", + "Draw a line": "Нарисовать линию", + "Draw a marker": "Добавить метку", + "Draw a polygon": "Нарисовать полигон", + "Draw a polyline": "Нарисовать линию", + "Drop": "Капля", + "Dynamic": "Динамический", + "Edit": "Редактировать", + "Edit feature's layer": "Изменить слой объекта", + "Edit map properties": "Редактировать свойства карты", + "Edit map settings": "Изменить свойства карты", + "Edit this feature": "Редактировать объект", + "Embed and share this map": "Встроить карту или поделиться ей", + "Enable editing": "Разрешить редактирование", + "Format": "Формат", + "From zoom": "С масштаба", + "Go to «{feature}»": "Перейти к «{feature}»", + "Hide controls": "Убрать элементы управления", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Насколько сильно упрощать линии на каждом масштабе (больше значение — больше скорость, но выглядит хуже; меньше значение — более гладкое отображение)", + "Import": "Импорт", + "Import data": "Импортировать данные", + "Inherit": "Наследовать", + "Licence": "Лицензия", + "Map background credits": "Права на фоновый слой карты", + "Map user content has been published under licence": "Пользовательские данные опубликованы под лицензией", + "More controls": "Другие элементы управления", + "Optional. Same as color if not set.": "Дополнительно. Если не выбрано, то как цвет.", + "Optionnal.": "Дополнительно.", + "Paste here your data": "Вставить данные сюда", + "Please be sure the licence is compliant with your use.": "Убедитесь, что лицензия соответствует правилам использования.", + "Problem in the response": "Проблема с ответом", + "Problem in the response format": "Формат ответа не распознан", + "Provide an URL here": "Укажите ссылку здесь", + "Remote data": "Данные с удаленного сервера", + "Save": "Сохранить", + "Save current edits": "Сохранить текущие правки", + "Save this center and zoom": "Сохранить это положение и масштаб", + "Show/hide layer": "Показать/скрыть слой", + "Start editing": "Начать редактирование", + "Stop editing": "Завершить редактирование", + "The zoom and center have been setted.": "Масштаб и положение установлены", + "To zoom": "Масштабировать", + "Untitled layer": "Слой без названия", + "Untitled map": "Безымянная карта", + "Update permissions and editors": "Настроить права редактирования", + "Url": "Ссылка", + "User content credits": "Права на пользовательские данные", + "Where do we go from here?": "Что можно сделать с картой?", + "Zoom in": "Увеличить масштаб", + "Zoom out": "Уменьшить масштаб", + "Zoom to layer extent": "Масштабировать до границ слоя", + "Zoom to this feature": "Приблизиться к этому объекту", + "color": "цвет", + "dash array": "штрихи", + "description": "описание", + "fill": "заливка", + "fill color": "цвет заливки", + "fill opacity": "Непрозрачность заливки", + "inherit": "наследовать", + "licence": "лицензия", + "name": "название", + "no": "нет", + "opacity": "непрозрачность", + "stroke": "штрихи", + "weight": "толщина", + "yes": "да", + "Editing": "Редактируем", + "Embed the map": "Встроить карту", + "Short URL": "Короткая ссылка", + "# one hash for main heading": "# один шарп — заголовок", + "## two hashes for second heading": "## два шарпа — подзаголовок", + "### three hashes for third heading": "### три шарпа — подзаголовок 3-го уровня", + "**double star for bold**": "**двойные звёздочки — полужирный**", + "*simple star for italic*": "*звёздочки — курсив*", + "--- for an horizontal rule": "--- — горизонтальная линия", + "All properties are imported.": "Все свойства импортированы.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "В качестве разделителя используются запятые, табуляции и точки с запятой. Применяется датум WGS84. Импорт просматривает заголовок на наличие полей «lat» и «lon», регистр не имеет значения. Все остальные поля импортируются как свойства.", + "Custom background": "Пользовательская подложка карты", + "Help": "Помощь", + "Image: {{http://image.url.com}}": "Изображение: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Ссылка с текстом: [[http://example.com|текст для ссылки]]", + "Properties imported:": "Импортированы свойства:", + "Simple link: [[http://example.com]]": "Простая ссылка: [[http://example.com]]", + "Supported scheme": "Поддерживаемая схема", + "Supported variables that will be dynamically replaced": "Поддерживаемые переменные для автоматической замены", + "Text formatting": "Форматирование текста", + "attribution": "назначенные свойства", + "display name": "отображаемое название", + "max zoom": "максимальный масштаб", + "min zoom": "минимальный масштаб", + "Skipping unkown geometry.type: {type}": "Пропущено неизвестное свойство geometry.type: {type}", + "Please save the map before": "Пожалуйста, сначала сохраните карту", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Вы можете использовать свойства объектов как переменные. Например, в \"http://myserver.org/images/{name}.png\", переменная {name} будет заменена значением поля \"названия\" каждой метки на карте.", + "Transform to polygon": "Преобразовать в полигон", + "Transform to lines": "Преобразовать в линию", + "Choose the data format": "Выберите формат данных", + "Error in the tilelayer URL": "Ошибка в ссылке на слой карты", + "Directions from here": "Навигация отсюда", + "Choose a preset": "Выберите шаблон", + "Limit bounds": "Установить границы", + "Use current bounds": "Использовать текущие границы", + "max East": "Восток", + "max North": "Север", + "max South": "Юг", + "max West": "Запад", + "TMS format": "Формат TMS", + "Credits": "Авторские права", + "Only visible features will be downloaded.": "Будут загружены только отображаемые объекты.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Откройте эту часть карты в редакторе OpenStreetMap, чтобы улучшить данные", + "Default properties": "Свойства по умолчанию", + "User interface options": "Настройка интерфейса", + "Image with custom width (in px): {{http://image.url.com|width}}": "Изображение с указанием ширины (в пикселях): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Использовать текущий вид вместо карты по умолчанию?", + "Iframe export options": "Свойства экспорта для Iframe", + "Include full screen link?": "Включить ссылку на полноэкранный вид?", + "See full screen": "Смотреть в полноэкранном режиме", + "height": "высота", + "width": "ширина", + "Clustered": "Кластеризованный", + "Clustering radius": "Радиус кластеризации", + "GeoRSS (only link)": "GeoRSS (только ссылка)", + "GeoRSS (title + image)": "GeoRSS (заголовок и изображение)", + "Heatmap": "Тепловая карта", + "Heatmap radius": "Радиус для тепловой карты", + "Name and description": "Название и описание", + "Override clustering radius (default 80)": "Переопределить радиус кластеризации (по умолчанию 80)", + "Override heatmap radius (default 25)": "Переопределить радиус для тепловой карты (по умолчанию 25)", + "Proxy request": "Проксировать запрос", + "Table": "Таблица", + "To use if remote server doesn't allow cross domain (slower)": "Если удалённый сервер не позволяет кросс-домен (медленно)", + "Type of layer": "Тип слоя", + "Filter…": "Фильтр...", + "Heatmap intensity property": "Свойство интенсивности тепловой карты", + "Optional intensity property for heatmap": "Дополнительные свойства интенсивности тепловой карты", + "Caption": "Заголовок", + "Data browser": "Просмотр данных", + "Do you want to display a caption bar?": "Показывать строку заголовка?", + "Do you want to display a panel on load?": "Показывать панель управления при загрузке?", + "None": "Нет", + "by": "от", + "Name and description (large)": "Название и описание (большие)", + "Empty": "Очистить", + "Split line": "Разделить линию", + "Clone": "Создать копию", + "Clone of {name}": "Копия {name}", + "Side panel": "Боковая панель", + "Powered by Leaflet and Django, glued by uMap project.": "Работает на Leaflet и Django, объединённые проектом uMap.", + "Zoom level for automatic zooms": "Масштабировать слой автоматически", + "Do you want to display the «more» control?": "Показывать кнопку «Ещё»?", + "Auto": "Автоматически", + "Default: name": "По умолчанию: название", + "Property to use for sorting features": "Свойство для сортировки объектов", + "Slideshow": "Слайдшоу", + "Start slideshow": "Начать слайдшоу", + "Stop slideshow": "Остановить слайдшоу", + "Text color for the cluster label": "Цвет текста для меток кластера", + "Zoom to the next": "Приблизиться к следующему", + "Zoom to the previous": "Приблизиться к предыдущему", + "Add a new property": "Добавить новое свойство", + "Are you sure you want to delete this property on all the features?": "Вы уверены, что хотите удалить это свойство у всех объектов?", + "Close": "Закрыть", + "Delete this property on all the features": "Удалить это свойство у всех объектов", + "Edit properties in a table": "Редактировать свойства в таблице", + "Please enter the name of the property": "Введите название свойства", + "Please enter the new name of this property": "Введите новое название свойства", + "Rename this property on all the features": "Переименовать это свойство у всех объектов", + "If false, the polygon will act as a part of the underlying map.": "Если нет, тогда полигон будет выглядеть как часть карты", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe с указанием высоты (в пикселях): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Посмотреть все", + "Dynamic properties": "Динамические свойства", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Используйте переменные в скобках со свойствами объектов, например, {name}, они будут автоматически заменены соответствующими значениями.", + "Long credits": "Полное описание прав", + "No licence has been set": "Лицензия не была указана", + "Popup content template": "Шаблон всплывающей подсказки", + "Short credits": "Краткое описание прав", + "Will be displayed in the bottom right corner of the map": "Будет показано в правом нижнем углу карты", + "Will be visible in the caption of the map": "Будет показано в заголовке карты", + "Map has been saved!": "Карта сохранена!", + "Save anyway": "Сохранить в любом случае", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Упс! Похоже, кто-то другой тоже редактирует эти данные. Вы можете сохранить свои правки, но это уничтожит правки другого участника.", + "Comma separated list of properties to use when filtering features": "Список свойств, разделённых запятыми, для использования при фильтрации", + "Keep current visible layers": "Оставить текущие видимые слои", + "Coordinates": "Координаты", + "Latitude": "Широта", + "Longitude": "Долгота", + "Continue line (Ctrl-click)": "Продолжить линию (Ctrl-click)", + "Start a hole here": "Начать отверстие отсюда", + "Click last point to finish shape": "Щёлкните на последней точке, чтобы завершить", + "Click to add a marker": "Щёлкните, чтобы добавить метку", + "Click to continue drawing": "Щёлкайте, чтобы продолжить рисование", + "Click to start drawing a line": "Щёлкните, чтобы начать рисование линии", + "Click to start drawing a polygon": "Щёлкните, чтобы начать рисование полигона", + "Import in a new layer": "Импортировать в новый слой", + "Layer": "Слой", + "Please choose a format": "Пожалуйста, выберите формат", + "Imports all umap data, including layers and settings.": "Импортировать все данные uMap, включая слои и настройки.", + "Invalid umap data": "Неверные данные uMap", + "Invalid umap data in {filename}": "Неверные данные uMap в файле {filename}", + "Add a line to the current multi": "Добавить линию к текущему мультиполигону", + "Add a polygon to the current multi": "Добавить полигон к текущему мультиполигону", + "Click to edit": "Щёлкните, чтобы изменить", + "Continue line": "Продолжить линию", + "Delete this shape": "Удалить эту фигуру", + "Make main shape": "Сделать главной фигурой", + "Merge lines": "Соединить линии", + "Remove shape from the multi": "Удалить фигуру из мультиполигона", + "Transfer shape to edited feature": "Перенести фигуру на редактируемый объект", + "next": "следующий", + "previous": "предыдущий", + "Measure distances": "Измерить расстояние", + "NM": "ММ", + "kilometers": "километров", + "km": "км", + "mi": "М", + "miles": "миль", + "nautical miles": "морских миль", + "{area} acres": "{area} акров", + "{area} ha": "{area} гектар", + "{area} m²": "{area} м²", + "{area} mi²": "{area} М²", + "{area} yd²": "{area} ярд²", + "{distance} NM": "{distance} ММ", + "{distance} km": "{distance} км", + "{distance} m": "{distance} м", + "{distance} miles": "{distance} миль", + "{distance} yd": "{distance} ярдов", + "Are you sure you want to restore this version?": "Вы уверены, что хотите восстановить эту версию?", + "Extract shape to separate feature": "Извлечь фигуру в отдельный объект", + "Layer properties": "Свойства слоя", + "Restore this version": "Восстановить эту версию", + "Versions": "Версии", + "You have unsaved changes.": "У вас есть несохранённые изменения", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Список значений, определяющих штрихи линии. Напр. «5, 10, 15».", + "Advanced transition": "Дополнительные преобразования", + "Allow interactions": "Разрешить взаимодействие", + "Autostart when map is loaded": "Автозапуск при открытии карты", + "Default interaction options": "Параметры интерактивности по умолчанию", + "Default shape properties": "Параметры фигуры по умолчанию", + "Default zoom level": "Масштаб по умолчанию", + "Define link to open in a new window on polygon click.": "Задайте адрес для открытия его в новом окне по клику на полигон.", + "Delete this vertex (Alt-click)": "Удалить эту точку (Alt-клик)", + "Display the control to open OpenStreetMap editor": "Отображать кнопку редактора OpenStreetMap", + "Display the data layers control": "Отображать кнопку управления слоями данных", + "Display the embed control": "Отображать кнопку встраивания", + "Display the fullscreen control": "Отображать кнопку полноэкранного режима", + "Display the locate control": "Отображать кнопку определения местоположения", + "Display the measure control": "Отображать линейку", + "Display the search control": "Отображать строку поиска", + "Display the tile layers control": "Отображать кнопку управления слоями подложки", + "Display the zoom control": "Отображать кнопку масштабирования", + "Exit Fullscreen": "Выйти из полноэкранного режима", + "Fetch data each time map view changes.": "Запрашивать данные при каждом изменении отображения карты", + "Filter keys": "Кнопки фильтра", + "Icon shape": "Форма иконки", + "Icon symbol": "Символ иконки", + "Interaction options": "Параметры взаимодействия", + "Label key": "Кнопка метки", + "Link to…": "Связать с...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Должен быть в формате CSS (напр., DarkBlue или #123456)", + "No results": "Нет данных", + "Popup style": "Стиль всплывающего окна", + "Replace layer content": "Заменить содержимое слоя", + "Save this location as new feature": "Сохранить это местоположение как новый объект", + "Search location": "Поиск местоположения", + "Set URL": "Задать ссылку", + "Shape properties": "Свойства фигуры", + "Simplify": "Упростить", + "Sort key": "Кнопка сортировки", + "The name of the property to use as feature label (ex.: \"nom\")": "Название свойства в качестве метки объекта (напр., «Номер»)", + "Toggle edit mode (shift-click)": "Переключиться в режим редактирования (shift-click)", + "View Fullscreen": "Полноэкранный режим", + "Whether to display or not polygons paths.": "Показывать или нет контур полигона.", + "Whether to fill polygons with color.": "Заполнять или нет полигон заливкой цветом", + "Zoom to this place": "Приблизить объект", + "always": "всегда", + "clear": "очистить", + "define": "обозначить", + "hidden": "скрыт", + "never": "никогда", + "Automatic": "Автоматически", + "Clone this feature": "Скопировать фигуру", + "Display label": "Отображать метку", + "Drag to reorder": "Перетащите для изменения порядка", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe с заданной высотой и шириной (в px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Метки можно нажимать", + "Label direction": "Направление метки", + "Manage layers": "Управление слоями", + "On the bottom": "Внизу", + "On the left": "Слева", + "On the right": "Справа", + "On the top": "Вверху", + "Only display label on mouse hover": "Показывать только при наведении мыши", + "Open link in…": "Открыть ссылку в ...", + "Unable to detect format of file {filename}": "Невозможно определить формат файла {filename}", + "collapsed": "Свёрнуто", + "expanded": "Развёрнуто", + "iframe": "Iframe", + "new window": "Новое окно", + "parent window": "Родительское окно", + "{count} errors during import: {message}": "{count} ошибок во время импорта: {message}", + "Are you sure you want to delete this layer?": "Вы уверены что хотите удалить этот слой?", + "Delete layer": "Удалить слой", + "Error while fetching {url}": "Ошибка при обработке {url}", + "Home": "Заглавная", + "Delete all layers": "Удалить все слои", + "Full map data": "Все данные карты", + "Smart transitions": "Интеллектуальные преобразования", + "Activate slideshow mode": "Включить режим слайдшоу", + "Data is browsable": "Данные можно просматривать", + "Delay between two transitions when in play mode": "Задержка между двумя переходами в режиме проигрывания", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Сбросьте, чтобы скрыть слой из слайдшоу, просмотра данных и всплывающей навигации...", + "{delay} seconds": "{delay} секунд", + "Display measure": "Display measure" +}; +L.registerLocale("ru", locale); +L.setLocale("ru"); \ No newline at end of file diff --git a/umap/static/umap/locale/ru.json b/umap/static/umap/locale/ru.json new file mode 100644 index 00000000..d90f22d1 --- /dev/null +++ b/umap/static/umap/locale/ru.json @@ -0,0 +1,350 @@ +{ + "About": "Подробней", + "Action not allowed :(": "Действие недоступно :(", + "Add a layer": "Добавить слой", + "Add symbol": "Добавить изображение", + "Advanced actions": "Дополнительные действия", + "Advanced properties": "Дополнительные свойства", + "Allow scroll wheel zoom?": "Разрешить изменение масштаба колесом мыши?", + "An error occured": "Произошла ошибка", + "Are you sure you want to cancel your changes?": "Вы уверены, что хотите отменить сделанные изменения?", + "Are you sure you want to clone this map and all its datalayers?": "Вы уверены, что хотите скопировать эту карту и все её слои данных?", + "Are you sure you want to delete the feature?": "Вы уверены, что хотите удалить объект?", + "Are you sure you want to delete this map?": "Вы уверены, что хотите удалить карту?", + "Ball": "Булавка", + "Bring feature to center": "Поместить объект в центр", + "Browse data": "Просмотр данных", + "Cancel": "Отменить", + "Cancel edits": "Отменить правки", + "Center map on your location": "Переместить карту в ваше местоположение", + "Change map background": "Изменить подложку карты", + "Change symbol": "Изменить иконку", + "Change tilelayers": "Выбрать подложку", + "Choose the format of the data to import": "Выберите формат данных для импорта", + "Choose the layer of the feature": "Выберите слой для объекта", + "Choose the layer to import in": "Выбрать слой для импорта в него", + "Circle": "Кружок", + "Clone this map": "Создать копию карты", + "Default": "По умолчанию", + "Delete": "Удалить", + "Delete this feature": "Удалить объект", + "Disable editing": "Отключить редактирование", + "Display on load": "Показывать при загрузке", + "Do you want to display a minimap?": "Показывать миникарту?", + "Do you want to display popup footer?": "Хотите использовать всплывающую подсказку снизу?", + "Do you want to display the scale control?": "Показывать шкалу расстояний?", + "Download data": "Скачать данные", + "Draw a line": "Нарисовать линию", + "Draw a marker": "Добавить метку", + "Draw a polygon": "Нарисовать полигон", + "Draw a polyline": "Нарисовать линию", + "Drop": "Капля", + "Dynamic": "Динамический", + "Edit": "Редактировать", + "Edit feature's layer": "Изменить слой объекта", + "Edit map properties": "Редактировать свойства карты", + "Edit map settings": "Изменить свойства карты", + "Edit this feature": "Редактировать объект", + "Embed and share this map": "Встроить карту или поделиться ей", + "Enable editing": "Разрешить редактирование", + "Format": "Формат", + "From zoom": "С масштаба", + "Go to «{feature}»": "Перейти к «{feature}»", + "Hide controls": "Убрать элементы управления", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Насколько сильно упрощать линии на каждом масштабе (больше значение — больше скорость, но выглядит хуже; меньше значение — более гладкое отображение)", + "Import": "Импорт", + "Import data": "Импортировать данные", + "Inherit": "Наследовать", + "Licence": "Лицензия", + "Map background credits": "Права на фоновый слой карты", + "Map user content has been published under licence": "Пользовательские данные опубликованы под лицензией", + "More controls": "Другие элементы управления", + "Optional. Same as color if not set.": "Дополнительно. Если не выбрано, то как цвет.", + "Optionnal.": "Дополнительно.", + "Paste here your data": "Вставить данные сюда", + "Please be sure the licence is compliant with your use.": "Убедитесь, что лицензия соответствует правилам использования.", + "Problem in the response": "Проблема с ответом", + "Problem in the response format": "Формат ответа не распознан", + "Provide an URL here": "Укажите ссылку здесь", + "Remote data": "Данные с удаленного сервера", + "Save": "Сохранить", + "Save current edits": "Сохранить текущие правки", + "Save this center and zoom": "Сохранить это положение и масштаб", + "Show/hide layer": "Показать/скрыть слой", + "Start editing": "Начать редактирование", + "Stop editing": "Завершить редактирование", + "The zoom and center have been setted.": "Масштаб и положение установлены", + "To zoom": "Масштабировать", + "Untitled layer": "Слой без названия", + "Untitled map": "Безымянная карта", + "Update permissions and editors": "Настроить права редактирования", + "Url": "Ссылка", + "User content credits": "Права на пользовательские данные", + "Where do we go from here?": "Что можно сделать с картой?", + "Zoom in": "Увеличить масштаб", + "Zoom out": "Уменьшить масштаб", + "Zoom to layer extent": "Масштабировать до границ слоя", + "Zoom to this feature": "Приблизиться к этому объекту", + "color": "цвет", + "dash array": "штрихи", + "description": "описание", + "fill": "заливка", + "fill color": "цвет заливки", + "fill opacity": "Непрозрачность заливки", + "inherit": "наследовать", + "licence": "лицензия", + "name": "название", + "no": "нет", + "opacity": "непрозрачность", + "stroke": "штрихи", + "weight": "толщина", + "yes": "да", + "Editing": "Редактируем", + "Embed the map": "Встроить карту", + "Short URL": "Короткая ссылка", + "# one hash for main heading": "# один шарп — заголовок", + "## two hashes for second heading": "## два шарпа — подзаголовок", + "### three hashes for third heading": "### три шарпа — подзаголовок 3-го уровня", + "**double star for bold**": "**двойные звёздочки — полужирный**", + "*simple star for italic*": "*звёздочки — курсив*", + "--- for an horizontal rule": "--- — горизонтальная линия", + "All properties are imported.": "Все свойства импортированы.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "В качестве разделителя используются запятые, табуляции и точки с запятой. Применяется датум WGS84. Импорт просматривает заголовок на наличие полей «lat» и «lon», регистр не имеет значения. Все остальные поля импортируются как свойства.", + "Custom background": "Пользовательская подложка карты", + "Help": "Помощь", + "Image: {{http://image.url.com}}": "Изображение: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Ссылка с текстом: [[http://example.com|текст для ссылки]]", + "Properties imported:": "Импортированы свойства:", + "Simple link: [[http://example.com]]": "Простая ссылка: [[http://example.com]]", + "Supported scheme": "Поддерживаемая схема", + "Supported variables that will be dynamically replaced": "Поддерживаемые переменные для автоматической замены", + "Text formatting": "Форматирование текста", + "attribution": "назначенные свойства", + "display name": "отображаемое название", + "max zoom": "максимальный масштаб", + "min zoom": "минимальный масштаб", + "Skipping unkown geometry.type: {type}": "Пропущено неизвестное свойство geometry.type: {type}", + "Please save the map before": "Пожалуйста, сначала сохраните карту", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Вы можете использовать свойства объектов как переменные. Например, в \"http://myserver.org/images/{name}.png\", переменная {name} будет заменена значением поля \"названия\" каждой метки на карте.", + "Transform to polygon": "Преобразовать в полигон", + "Transform to lines": "Преобразовать в линию", + "Choose the data format": "Выберите формат данных", + "Error in the tilelayer URL": "Ошибка в ссылке на слой карты", + "Directions from here": "Навигация отсюда", + "Choose a preset": "Выберите шаблон", + "Limit bounds": "Установить границы", + "Use current bounds": "Использовать текущие границы", + "max East": "Восток", + "max North": "Север", + "max South": "Юг", + "max West": "Запад", + "TMS format": "Формат TMS", + "Credits": "Авторские права", + "Only visible features will be downloaded.": "Будут загружены только отображаемые объекты.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Откройте эту часть карты в редакторе OpenStreetMap, чтобы улучшить данные", + "Default properties": "Свойства по умолчанию", + "User interface options": "Настройка интерфейса", + "Image with custom width (in px): {{http://image.url.com|width}}": "Изображение с указанием ширины (в пикселях): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Использовать текущий вид вместо карты по умолчанию?", + "Iframe export options": "Свойства экспорта для Iframe", + "Include full screen link?": "Включить ссылку на полноэкранный вид?", + "See full screen": "Смотреть в полноэкранном режиме", + "height": "высота", + "width": "ширина", + "Clustered": "Кластеризованный", + "Clustering radius": "Радиус кластеризации", + "GeoRSS (only link)": "GeoRSS (только ссылка)", + "GeoRSS (title + image)": "GeoRSS (заголовок и изображение)", + "Heatmap": "Тепловая карта", + "Heatmap radius": "Радиус для тепловой карты", + "Name and description": "Название и описание", + "Override clustering radius (default 80)": "Переопределить радиус кластеризации (по умолчанию 80)", + "Override heatmap radius (default 25)": "Переопределить радиус для тепловой карты (по умолчанию 25)", + "Proxy request": "Проксировать запрос", + "Table": "Таблица", + "To use if remote server doesn't allow cross domain (slower)": "Если удалённый сервер не позволяет кросс-домен (медленно)", + "Type of layer": "Тип слоя", + "Filter…": "Фильтр...", + "Heatmap intensity property": "Свойство интенсивности тепловой карты", + "Optional intensity property for heatmap": "Дополнительные свойства интенсивности тепловой карты", + "Caption": "Заголовок", + "Data browser": "Просмотр данных", + "Do you want to display a caption bar?": "Показывать строку заголовка?", + "Do you want to display a panel on load?": "Показывать панель управления при загрузке?", + "None": "Нет", + "by": "от", + "Name and description (large)": "Название и описание (большие)", + "Empty": "Очистить", + "Split line": "Разделить линию", + "Clone": "Создать копию", + "Clone of {name}": "Копия {name}", + "Side panel": "Боковая панель", + "Powered by Leaflet and Django, glued by uMap project.": "Работает на Leaflet и Django, объединённые проектом uMap.", + "Zoom level for automatic zooms": "Масштабировать слой автоматически", + "Do you want to display the «more» control?": "Показывать кнопку «Ещё»?", + "Auto": "Автоматически", + "Default: name": "По умолчанию: название", + "Property to use for sorting features": "Свойство для сортировки объектов", + "Slideshow": "Слайдшоу", + "Start slideshow": "Начать слайдшоу", + "Stop slideshow": "Остановить слайдшоу", + "Text color for the cluster label": "Цвет текста для меток кластера", + "Zoom to the next": "Приблизиться к следующему", + "Zoom to the previous": "Приблизиться к предыдущему", + "Add a new property": "Добавить новое свойство", + "Are you sure you want to delete this property on all the features?": "Вы уверены, что хотите удалить это свойство у всех объектов?", + "Close": "Закрыть", + "Delete this property on all the features": "Удалить это свойство у всех объектов", + "Edit properties in a table": "Редактировать свойства в таблице", + "Please enter the name of the property": "Введите название свойства", + "Please enter the new name of this property": "Введите новое название свойства", + "Rename this property on all the features": "Переименовать это свойство у всех объектов", + "If false, the polygon will act as a part of the underlying map.": "Если нет, тогда полигон будет выглядеть как часть карты", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe с указанием высоты (в пикселях): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Посмотреть все", + "Dynamic properties": "Динамические свойства", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Используйте переменные в скобках со свойствами объектов, например, {name}, они будут автоматически заменены соответствующими значениями.", + "Long credits": "Полное описание прав", + "No licence has been set": "Лицензия не была указана", + "Popup content template": "Шаблон всплывающей подсказки", + "Short credits": "Краткое описание прав", + "Will be displayed in the bottom right corner of the map": "Будет показано в правом нижнем углу карты", + "Will be visible in the caption of the map": "Будет показано в заголовке карты", + "Map has been saved!": "Карта сохранена!", + "Save anyway": "Сохранить в любом случае", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Упс! Похоже, кто-то другой тоже редактирует эти данные. Вы можете сохранить свои правки, но это уничтожит правки другого участника.", + "Comma separated list of properties to use when filtering features": "Список свойств, разделённых запятыми, для использования при фильтрации", + "Keep current visible layers": "Оставить текущие видимые слои", + "Coordinates": "Координаты", + "Latitude": "Широта", + "Longitude": "Долгота", + "Continue line (Ctrl-click)": "Продолжить линию (Ctrl-click)", + "Start a hole here": "Начать отверстие отсюда", + "Click last point to finish shape": "Щёлкните на последней точке, чтобы завершить", + "Click to add a marker": "Щёлкните, чтобы добавить метку", + "Click to continue drawing": "Щёлкайте, чтобы продолжить рисование", + "Click to start drawing a line": "Щёлкните, чтобы начать рисование линии", + "Click to start drawing a polygon": "Щёлкните, чтобы начать рисование полигона", + "Import in a new layer": "Импортировать в новый слой", + "Layer": "Слой", + "Please choose a format": "Пожалуйста, выберите формат", + "Imports all umap data, including layers and settings.": "Импортировать все данные uMap, включая слои и настройки.", + "Invalid umap data": "Неверные данные uMap", + "Invalid umap data in {filename}": "Неверные данные uMap в файле {filename}", + "Add a line to the current multi": "Добавить линию к текущему мультиполигону", + "Add a polygon to the current multi": "Добавить полигон к текущему мультиполигону", + "Click to edit": "Щёлкните, чтобы изменить", + "Continue line": "Продолжить линию", + "Delete this shape": "Удалить эту фигуру", + "Make main shape": "Сделать главной фигурой", + "Merge lines": "Соединить линии", + "Remove shape from the multi": "Удалить фигуру из мультиполигона", + "Transfer shape to edited feature": "Перенести фигуру на редактируемый объект", + "next": "следующий", + "previous": "предыдущий", + "Measure distances": "Измерить расстояние", + "NM": "ММ", + "kilometers": "километров", + "km": "км", + "mi": "М", + "miles": "миль", + "nautical miles": "морских миль", + "{area} acres": "{area} акров", + "{area} ha": "{area} гектар", + "{area} m²": "{area} м²", + "{area} mi²": "{area} М²", + "{area} yd²": "{area} ярд²", + "{distance} NM": "{distance} ММ", + "{distance} km": "{distance} км", + "{distance} m": "{distance} м", + "{distance} miles": "{distance} миль", + "{distance} yd": "{distance} ярдов", + "Are you sure you want to restore this version?": "Вы уверены, что хотите восстановить эту версию?", + "Extract shape to separate feature": "Извлечь фигуру в отдельный объект", + "Layer properties": "Свойства слоя", + "Restore this version": "Восстановить эту версию", + "Versions": "Версии", + "You have unsaved changes.": "У вас есть несохранённые изменения", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Список значений, определяющих штрихи линии. Напр. «5, 10, 15».", + "Advanced transition": "Дополнительные преобразования", + "Allow interactions": "Разрешить взаимодействие", + "Autostart when map is loaded": "Автозапуск при открытии карты", + "Default interaction options": "Параметры интерактивности по умолчанию", + "Default shape properties": "Параметры фигуры по умолчанию", + "Default zoom level": "Масштаб по умолчанию", + "Define link to open in a new window on polygon click.": "Задайте адрес для открытия его в новом окне по клику на полигон.", + "Delete this vertex (Alt-click)": "Удалить эту точку (Alt-клик)", + "Display the control to open OpenStreetMap editor": "Отображать кнопку редактора OpenStreetMap", + "Display the data layers control": "Отображать кнопку управления слоями данных", + "Display the embed control": "Отображать кнопку встраивания", + "Display the fullscreen control": "Отображать кнопку полноэкранного режима", + "Display the locate control": "Отображать кнопку определения местоположения", + "Display the measure control": "Отображать линейку", + "Display the search control": "Отображать строку поиска", + "Display the tile layers control": "Отображать кнопку управления слоями подложки", + "Display the zoom control": "Отображать кнопку масштабирования", + "Exit Fullscreen": "Выйти из полноэкранного режима", + "Fetch data each time map view changes.": "Запрашивать данные при каждом изменении отображения карты", + "Filter keys": "Кнопки фильтра", + "Icon shape": "Форма иконки", + "Icon symbol": "Символ иконки", + "Interaction options": "Параметры взаимодействия", + "Label key": "Кнопка метки", + "Link to…": "Связать с...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Должен быть в формате CSS (напр., DarkBlue или #123456)", + "No results": "Нет данных", + "Popup style": "Стиль всплывающего окна", + "Replace layer content": "Заменить содержимое слоя", + "Save this location as new feature": "Сохранить это местоположение как новый объект", + "Search location": "Поиск местоположения", + "Set URL": "Задать ссылку", + "Shape properties": "Свойства фигуры", + "Simplify": "Упростить", + "Sort key": "Кнопка сортировки", + "The name of the property to use as feature label (ex.: \"nom\")": "Название свойства в качестве метки объекта (напр., «Номер»)", + "Toggle edit mode (shift-click)": "Переключиться в режим редактирования (shift-click)", + "View Fullscreen": "Полноэкранный режим", + "Whether to display or not polygons paths.": "Показывать или нет контур полигона.", + "Whether to fill polygons with color.": "Заполнять или нет полигон заливкой цветом", + "Zoom to this place": "Приблизить объект", + "always": "всегда", + "clear": "очистить", + "define": "обозначить", + "hidden": "скрыт", + "never": "никогда", + "Automatic": "Автоматически", + "Clone this feature": "Скопировать фигуру", + "Display label": "Отображать метку", + "Drag to reorder": "Перетащите для изменения порядка", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe с заданной высотой и шириной (в px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Метки можно нажимать", + "Label direction": "Направление метки", + "Manage layers": "Управление слоями", + "On the bottom": "Внизу", + "On the left": "Слева", + "On the right": "Справа", + "On the top": "Вверху", + "Only display label on mouse hover": "Показывать только при наведении мыши", + "Open link in…": "Открыть ссылку в ...", + "Unable to detect format of file {filename}": "Невозможно определить формат файла {filename}", + "collapsed": "Свёрнуто", + "expanded": "Развёрнуто", + "iframe": "Iframe", + "new window": "Новое окно", + "parent window": "Родительское окно", + "{count} errors during import: {message}": "{count} ошибок во время импорта: {message}", + "Are you sure you want to delete this layer?": "Вы уверены что хотите удалить этот слой?", + "Delete layer": "Удалить слой", + "Error while fetching {url}": "Ошибка при обработке {url}", + "Home": "Заглавная", + "Delete all layers": "Удалить все слои", + "Full map data": "Все данные карты", + "Smart transitions": "Интеллектуальные преобразования", + "Activate slideshow mode": "Включить режим слайдшоу", + "Data is browsable": "Данные можно просматривать", + "Delay between two transitions when in play mode": "Задержка между двумя переходами в режиме проигрывания", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Сбросьте, чтобы скрыть слой из слайдшоу, просмотра данных и всплывающей навигации...", + "{delay} seconds": "{delay} секунд", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/si_LK.json b/umap/static/umap/locale/si_LK.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/si_LK.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/sk_SK.js b/umap/static/umap/locale/sk_SK.js new file mode 100644 index 00000000..f2860803 --- /dev/null +++ b/umap/static/umap/locale/sk_SK.js @@ -0,0 +1,352 @@ +var locale = { + "About": "O uMap", + "Action not allowed :(": "Akcia nie je povolená :(", + "Add a layer": "Pridať vrstvu", + "Add symbol": "Pridať symbol", + "Advanced actions": "Pokročilé akcie", + "Advanced properties": "Pokročilé vlastnosti", + "Allow scroll wheel zoom?": "Povoliť približovanie kolieskom myši?", + "An error occured": "Nastala chyba", + "Are you sure you want to cancel your changes?": "Ste si istí že chcete zrušiť vaše úpravy?", + "Are you sure you want to clone this map and all its datalayers?": "Určite chcete vytvoriť kópiu celej tejto mapy a všetkých jej vrstiev?", + "Are you sure you want to delete the feature?": "Určite chcete vymazať tento objekt?", + "Are you sure you want to delete this map?": "Ste si istí, že chcete vymazať túto mapu?", + "Ball": "Špendlík", + "Bring feature to center": "Vycentruj mapu na objekt", + "Browse data": "Prezerať údaje", + "Cancel": "Zrušiť", + "Cancel edits": "Zrušiť zmeny", + "Center map on your location": "Vycentrovať mapu na vašu polohu", + "Change map background": "Zmeniť pozadie mapy", + "Change symbol": "Zmeniť symbol", + "Change tilelayers": "Zmeniť pozadie mapy", + "Choose the format of the data to import": "Zvoľte v akom formáte sú importované údaje", + "Choose the layer of the feature": "Zvoľte vrstvu do ktorej objekt patrí", + "Choose the layer to import in": "Zvoľte vrstvu, do ktorej sa bude importovať", + "Circle": "Kruh", + "Clone this map": "Vytvoriť kópiu tejto mapy", + "Default": "Predvolené", + "Delete": "Vymazať", + "Delete this feature": "Vymazať tento objekt", + "Disable editing": "Zakázať úpravy", + "Display on load": "Zobraziť pri štarte", + "Do you want to display a minimap?": "Chcete zobraziť minimapu?", + "Do you want to display popup footer?": "Chcete zobraziť v bubline navigačný panel?", + "Do you want to display the scale control?": "Chcete zobraziť mierku mapy?", + "Download data": "Stiahnuť údaje", + "Draw a line": "Nakresliť jednoduchú čiaru", + "Draw a marker": "Nakresliť značku miesta", + "Draw a polygon": "Nakresliť polygon", + "Draw a polyline": "Nakresliť krivku", + "Drop": "Pustiť", + "Dynamic": "Dynamicky", + "Edit": "Upraviť", + "Edit feature's layer": "Upraviť vrstvu objektu", + "Edit map properties": "Upraviť vlastnosti mapy", + "Edit map settings": "Upraviť nastavenia mapy", + "Edit this feature": "Upraviť tento objekt", + "Embed and share this map": "Zdieľaj alebo vlož mapu do iného webu", + "Enable editing": "Povoliť úpravy", + "Format": "Formát", + "From zoom": "Max. oddialenie", + "Go to «{feature}»": "Prejsť na «{feature}»", + "Hide controls": "Skryť ovládacie prvky", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Ako veľmi vyhladzovať a zjednodušovať pri oddialeni (väčšie = rýchlejša odozva a plynulejší vzhľad, menšie = presnejšie)", + "Import": "Importovať", + "Import data": "Import údajov", + "Inherit": "Predvolené", + "Licence": "Licencia", + "Map background credits": "Autor mapy pozadia", + "Map user content has been published under licence": "Použivateľské údaje sú zverejnené pod licenciou", + "More controls": "Viac ovládacích prvkov", + "Optional. Same as color if not set.": "Nepovinné. Rovnaké ako farba, ak nie je nastavené.", + "Optionnal.": "Nepovinné", + "Paste here your data": "Sem vložte vaše údaje", + "Please be sure the licence is compliant with your use.": "Prosíme uistite sa, že licencia je v zhode s tým ako mapu používate.", + "Problem in the response": "Problém v odpovedi", + "Problem in the response format": "Problém vo formáte odpovede", + "Provide an URL here": "Sem vložte odkaz URL", + "Remote data": "Vzdialené údaje", + "Save": "Uložiť", + "Save current edits": "Uložiť nedávne zmeny", + "Save this center and zoom": "Uložiť túto pozíciu mapy a jej priblíženie", + "Show/hide layer": "Ukázať/skryť vrstvu", + "Start editing": "Začať úpravy", + "Stop editing": "Ukončiť úpravy", + "The zoom and center have been setted.": "Priblíženie a stred mapy boli nastavené", + "To zoom": "Max. priblíženie", + "Untitled layer": "Nepomenovaná vrstva", + "Untitled map": "Nepomenovaná mapa", + "Update permissions and editors": "Nastaviť prístupové práva a prispievateľov", + "Url": "URL", + "User content credits": "Autor používateľského obsahu", + "Where do we go from here?": "Kam sa dá odtiaľto dostať?", + "Zoom in": "Priblížiť", + "Zoom out": "Oddialiť", + "Zoom to layer extent": "Prispôsobiť priblíženie vrstve", + "Zoom to this feature": "Priblížiť na tento objekt", + "color": "farba", + "dash array": "štýl prerušovanej čiary", + "description": "popis", + "fill": "výplň", + "fill color": "farba výplne", + "fill opacity": "priehľadnosť výplne", + "inherit": "predvolené", + "licence": "licencia", + "name": "názov", + "no": "nie", + "opacity": "priehľadnosť", + "stroke": "linka", + "weight": "šírka linky", + "yes": "áno", + "Editing": "Upravujete", + "Embed the map": "Vložiť mapu na iný web", + "Short URL": "Krátky odkaz URL", + "# one hash for main heading": "# jedna mriežka pre hlavný nadpis", + "## two hashes for second heading": "## dve mriežky pre nadpis druhej úrovne", + "### three hashes for third heading": "## tri mriežky pre nadpis tretej úrovne", + "**double star for bold**": "**všetko medzi dvoma hviezdičkami je tučně**", + "*simple star for italic*": "*všetko medzi hviezdičkami bude kurzívou*", + "--- for an horizontal rule": "--- vytvorí vodorovnú linku", + "All properties are imported.": "Všetky vlastnosti sú naimportované.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Hodnoty oddelené čiarkou, tabulátorom, alebo bodkočiarkou. Predpokladá sa SRS WGS84 a sú importované iba polohy bodov. Import hľadá záhlavie stĺpcov začínajúcich na \"lat\" a \"lon\" a tie považuje za súradnice (na veľkosti písmien nezáleži). Ostatné stĺpce sú importované ako vlastnosti.", + "Custom background": "Vlastné pozadie", + "Help": "Nápoveda", + "Image: {{http://image.url.com}}": "Obrázok: {{http://url.obrazka.sk}}", + "Link with text: [[http://example.com|text of the link]]": "Odkaz s textom: [[http://priklad.sk|text odkazu]]", + "Properties imported:": "Importované vlastnosti:", + "Simple link: [[http://example.com]]": "Jednoduchý odkaz: [[http://priklad.sk]]", + "Supported scheme": "Podporovaná schéma", + "Supported variables that will be dynamically replaced": "Podporované premenné, ktoré budú automaticky nahradené", + "Text formatting": "Formátovanie textu", + "attribution": "autorstvo", + "display name": "zobraziť názov", + "max zoom": "max. priblíženie", + "min zoom": "max. oddialenie", + "Skipping unkown geometry.type: {type}": "Preskakujem neznáme geometry.type: {type}", + "Please save the map before": "Prosím, najprv uložte mapu", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Môžete používať vlastnosti objektu ako premenné, napr. v \"http://mojserver.sk/obrazky/{name}.png\" je {name} nahradené hodnotou \"name\" každého objektu.", + "Transform to polygon": "Transformuj na mnohouholník", + "Transform to lines": "Transformuj na čiary", + "Choose the data format": "Zvoľte formát údajov", + "Error in the tilelayer URL": "Chyba URL dlaždicovej vrstvy", + "Directions from here": "Navigovať odtiaľto", + "Choose a preset": "Vyberte predvoľbu", + "Limit bounds": "Obmedziť hranice", + "Use current bounds": "Použiť aktuálne hranice", + "max East": "max. Východ", + "max North": "max. Sever", + "max South": "max. Juh", + "max West": "max. Západ", + "TMS format": "Formát TMS", + "Credits": "Poďakovania", + "Only visible features will be downloaded.": "Stiahnuté budú len viditeľné objekty.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Otvoriť túto mapovú oblasť v mapovom editore pre presnenie dát v OpenStreetMap", + "Default properties": "Predvolené vlastnosti", + "User interface options": "Možnosti používateľského rozhrania", + "Image with custom width (in px): {{http://image.url.com|width}}": "Obraz s vlastnou šírkou (v pixeloch): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Aktuálne zobrazenie namiesto štandardného zobrazenia mapy?", + "Iframe export options": "Možnosti Iframe exportu", + "Include full screen link?": "Zahrnúť odkaz na celú obrazovku?", + "See full screen": "Na celú obrazovku", + "height": "Výška", + "width": "Šírka", + "Clustered": "Zhluková", + "Clustering radius": "Polomer zhlukovania", + "GeoRSS (only link)": "GeoRSS (iba odkaz)", + "GeoRSS (title + image)": "GeoRSS (názov + obrázok)", + "Heatmap": "Teplotná mapa", + "Heatmap radius": "Polomer teplotnej mapy", + "Name and description": "Názov a popis", + "Override clustering radius (default 80)": "Prepísať polomer zhlukovania (predvolené 80)", + "Override heatmap radius (default 25)": "Prepísať polomer teplotnej mapy (predvolené 25)", + "Proxy request": "Požiadavky cez proxy", + "Table": "Tabuľka", + "To use if remote server doesn't allow cross domain (slower)": "Použiť keď vzdialený server nepovoľuje cross-domain (pomalšie)", + "Type of layer": "Typ vrstvy", + "Filter…": "Filter…", + "Heatmap intensity property": "Vlastnosti intenzity heatmapy", + "Optional intensity property for heatmap": "Voliteľné vlastnosti intenzity pre heatmapu", + "Caption": "Nadpis", + "Data browser": "Prehliadač", + "Do you want to display a caption bar?": "Chcete zobraziť lištu s nadpismi?", + "Do you want to display a panel on load?": "Prajete si zobraziť panel pri štarte?", + "None": "Žiadny", + "by": "od", + "Name and description (large)": "Názov a popis (veľký)", + "Empty": "Vyprázdniť", + "Split line": "Rozdelit čiaru", + "Clone": "Vytvoriť kópiu", + "Clone of {name}": "Kópia {name}", + "Side panel": "Bočný panel", + "Powered by Leaflet and Django, glued by uMap project.": "Zostavené z Leaflet a Django, prepojené pomocou projektu uMap.", + "Zoom level for automatic zooms": "Úroveň priblíženia pre automatické približovanie", + "Do you want to display the «more» control?": "Prajete si zobrazit «viac» nastavení?", + "Auto": "Automatická", + "Default: name": "Štandardná hodnota: názov", + "Property to use for sorting features": "Vlastnosť použitá pre radenie objektov", + "Slideshow": "Prezentácia", + "Start slideshow": "Spustiť prezentáciu", + "Stop slideshow": "Zastaviť prezentáciu", + "Text color for the cluster label": "Farba textu pre popis zhluku", + "Zoom to the next": "Priblížiť k ďalšiemu", + "Zoom to the previous": "Priblížiť k predošlému", + "Add a new property": "Pridať novú vlastnosť", + "Are you sure you want to delete this property on all the features?": "Ste si istí že chcete vymazať túto vlastnosť na všetkých objektoch?", + "Close": "Zatvoriť", + "Delete this property on all the features": "Vymazať túto vlastnosť na všetkých objektoch", + "Edit properties in a table": "Upraviť vlastnosti v tabuľke", + "Please enter the name of the property": "Prosím, zadajte názov vlastnosti", + "Please enter the new name of this property": "Prosím, zadajte nový názov tejto vlastnosti", + "Rename this property on all the features": "Premenovať túto vlastnosť na všetkých objektoch", + "If false, the polygon will act as a part of the underlying map.": "Ak je vypnuté, polygón sa bude správať ako súčasť mapového podkladu.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe s vlastnou výškou (v px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Zobraziť všetko", + "Dynamic properties": "Dynamické vlastnosti", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Použite zástupné znaky s vlastnosťami objektov medzi zloženými zátvorkami, napr. {name}, a budú dynamicky nahradené zodpovedajúcimi hodnotami.", + "Long credits": "Dlhý text autorstva", + "No licence has been set": "Nebola nastavená žiadna licencia", + "Popup content template": "Šablóna obsahu bubliny", + "Short credits": "Krátky text autorstva", + "Will be displayed in the bottom right corner of the map": "Bude zobrazené s mapou vpravo dole", + "Will be visible in the caption of the map": "Bude zobrazené v nadpise mapy", + "Map has been saved!": "Mapa bola uložená!", + "Save anyway": "Uložiť napriek tomu", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ojoj! Niekto iný medzitým taktiež upravil údaje. Môžete ich napriek tomu uložiť, ale zmažete tak jeho zmeny.", + "Comma separated list of properties to use when filtering features": "Čiarkami oddelený zoznam vlastností pre filtrovanie objektov", + "Keep current visible layers": "Použiť pre aktuálne zobrazenie vrstiev", + "Coordinates": "Súradnice", + "Latitude": "Zem. šírka", + "Longitude": "Zem. dĺžka", + "Continue line (Ctrl-click)": "Pokračovať v čiare (Ctrl+klik)", + "Start a hole here": "Tu začať dieru", + "Click last point to finish shape": "Kliknite na posledný bod pre dokončenie tvaru", + "Click to add a marker": "Kliknutím pridáte značku", + "Click to continue drawing": "Kliknutím môžete pokračovať v kreslení", + "Click to start drawing a line": "Kliknutím začnete kresliť čiaru", + "Click to start drawing a polygon": "Kliknutím začnete kresliť polygón", + "Import in a new layer": "Importovať do novej vrstvy", + "Layer": "Vrstva", + "Please choose a format": "Prosím, zvoľte formát", + "Imports all umap data, including layers and settings.": "Importuje všetky údaje umapy, vrátane vrstiev a nastavení.", + "Invalid umap data": "Neplatné údaje umapy", + "Invalid umap data in {filename}": "Neplatné údaje umapy v súbore {filename}", + "Add a line to the current multi": "Pridať čiaru k aktuálnemu multi", + "Add a polygon to the current multi": "Pridať polygón k aktuálnemu multi", + "Click to edit": "Kliknutím upravte", + "Continue line": "Pokračovať v čiare", + "Delete this shape": "Vymazať tento tvar", + "Make main shape": "Urobiť hlavným tvarom", + "Merge lines": "Spojiť čiary", + "Remove shape from the multi": "Odobrať tvar z multi", + "Transfer shape to edited feature": "Preniesť tvar do upravovaného objektu", + "next": "ďalší", + "previous": "predchádzajúci", + "Measure distances": "Merať vzdialenosť", + "NM": "NM", + "kilometers": "kilometrov", + "km": "km", + "mi": "mi", + "miles": "míľ", + "nautical miles": "námorných míľ", + "{area} acres": "{area} akrov", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} míľ", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Určite chcete obnoviť túto verziu?", + "Extract shape to separate feature": "Vyňať tvar do samostatného objektu", + "Layer properties": "Vlastnosti vrstvy", + "Restore this version": "Obnoviť túto verziu", + "Versions": "Verzie", + "You have unsaved changes.": "Máte neuložené zmeny.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Čiarkami oddelený zoznam čísel, ktorý popisuje vzor prerušovanej čiary. Napr. \"5, 10, 15\".", + "Advanced transition": "Pokročilý prechod", + "Allow interactions": "Povoliť interakcie", + "Autostart when map is loaded": "Aut. spustenie pri načítaní mapy", + "Default interaction options": "Predvolené možnosti interakcie", + "Default shape properties": "Predvolené vlastnosti tvaru", + "Default zoom level": "Predvolené priblíženie", + "Define link to open in a new window on polygon click.": "Definujte odkaz na otvorenie, ktorý otvorí nové okno po kliknutí na polygón.", + "Delete this vertex (Alt-click)": "Vymazať tento bod (Alt+klik)", + "Display the control to open OpenStreetMap editor": "Zobraziť ovládanie na otvorenie editora OpenStreetMap", + "Display the data layers control": "Zobraziť ovládanie údajov vrstiev", + "Display the embed control": "Zobraziť ovládanie vkladania", + "Display the fullscreen control": "Zobraziť ovládanie celej obrazovky", + "Display the locate control": "Zobraziť ovládanie polohy", + "Display the measure control": "Zobraziť ovládanie merania", + "Display the search control": "Zobraziť ovládanie vyhľadávania", + "Display the tile layers control": "Zobraziť ovládanie dlaždíc vrstiev", + "Display the zoom control": "Zobraziť ovládanie priblíženia", + "Exit Fullscreen": "Ukončiť režim celej obrazovky", + "Fetch data each time map view changes.": "Načítanie údajov pri každej zmene zobrazenia mapy.", + "Filter keys": "Kľúče filtra", + "Icon shape": "Tvar ikony", + "Icon symbol": "Symbol ikony", + "Interaction options": "Možnosti interakcie", + "Label key": "Kľúč popisu", + "Link to…": "Odkaz na…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Musí byť platná hodnota CSS (napr.: DarkBlue or #123456)", + "No results": "Žiadne výsledky", + "Popup style": "Štýl bubliny", + "Replace layer content": "Nahradiť obsah vrstvy", + "Save this location as new feature": "Uložiť túto polohu ako nový objekt", + "Search location": "Vyhľadať polohu", + "Set URL": "Nastaviť URL", + "Shape properties": "Vlastnosti tvaru", + "Simplify": "Zjednodušiť", + "Sort key": "Kľúč radenia", + "The name of the property to use as feature label (ex.: \"nom\")": "Názov vlastnosti používať ako popis objektu (napr.: \"nom\")", + "Toggle edit mode (shift-click)": "Prepnúť režim úprav (Shift+klik)", + "View Fullscreen": "Zobraziť na celú obrazovky", + "Whether to display or not polygons paths.": "Či sa má alebo nemá zobraziť cesty polygónov.", + "Whether to fill polygons with color.": "Či sa má vyplniť polygón farbou.", + "Zoom to this place": "Priblížiť na toto miesto", + "always": "vždy", + "clear": "vyčistiť", + "define": "definovať", + "hidden": "skryté", + "never": "nikdy", + "Automatic": "Automaticky", + "Clone this feature": "Vytvoriť kópiu objektu", + "Display label": "Zobraziť popis", + "Drag to reorder": "Presunutím zmeníte poradie", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe s vlastnou výškou a šírkou (v px): {{{http://iframe.url.com|height*widht}}}", + "Labels are clickable": "Popis je klikateľný", + "Label direction": "Orientácia popisu", + "Manage layers": "Nastavenie vrstiev", + "On the bottom": "V spodnej časti", + "On the left": "Naľavo", + "On the right": "Napravo", + "On the top": "V hornej časti", + "Only display label on mouse hover": "Zobraziť popis iba pri prejdení myšou", + "Open link in…": "Otvoriť odkaz v…", + "Unable to detect format of file {filename}": "Nepodarilo sa rozpoznať formát súboru {filename}", + "collapsed": "zbalené", + "expanded": "rozbalené", + "iframe": "iframe", + "new window": "nové okno", + "parent window": "nadradené okno", + "{count} errors during import: {message}": "Počet chýb počas importu {count}: {message}", + "Are you sure you want to delete this layer?": "Určite chcete vymazať túto vrstvu?", + "Delete layer": "Vymazať vrstvu", + "Error while fetching {url}": "Vyskytla sa chyba počas načítania {url}", + "Home": "Domov", + "Delete all layers": "Vymazať všetky vrstvy", + "Full map data": "Údaje celej mapy", + "Smart transitions": "Chytré prechody", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("sk_SK", locale); +L.setLocale("sk_SK"); \ No newline at end of file diff --git a/umap/static/umap/locale/sk_SK.json b/umap/static/umap/locale/sk_SK.json new file mode 100644 index 00000000..7747a88e --- /dev/null +++ b/umap/static/umap/locale/sk_SK.json @@ -0,0 +1,350 @@ +{ + "About": "O uMap", + "Action not allowed :(": "Akcia nie je povolená :(", + "Add a layer": "Pridať vrstvu", + "Add symbol": "Pridať symbol", + "Advanced actions": "Pokročilé akcie", + "Advanced properties": "Pokročilé vlastnosti", + "Allow scroll wheel zoom?": "Povoliť približovanie kolieskom myši?", + "An error occured": "Nastala chyba", + "Are you sure you want to cancel your changes?": "Ste si istí že chcete zrušiť vaše úpravy?", + "Are you sure you want to clone this map and all its datalayers?": "Určite chcete vytvoriť kópiu celej tejto mapy a všetkých jej vrstiev?", + "Are you sure you want to delete the feature?": "Určite chcete vymazať tento objekt?", + "Are you sure you want to delete this map?": "Ste si istí, že chcete vymazať túto mapu?", + "Ball": "Špendlík", + "Bring feature to center": "Vycentruj mapu na objekt", + "Browse data": "Prezerať údaje", + "Cancel": "Zrušiť", + "Cancel edits": "Zrušiť zmeny", + "Center map on your location": "Vycentrovať mapu na vašu polohu", + "Change map background": "Zmeniť pozadie mapy", + "Change symbol": "Zmeniť symbol", + "Change tilelayers": "Zmeniť pozadie mapy", + "Choose the format of the data to import": "Zvoľte v akom formáte sú importované údaje", + "Choose the layer of the feature": "Zvoľte vrstvu do ktorej objekt patrí", + "Choose the layer to import in": "Zvoľte vrstvu, do ktorej sa bude importovať", + "Circle": "Kruh", + "Clone this map": "Vytvoriť kópiu tejto mapy", + "Default": "Predvolené", + "Delete": "Vymazať", + "Delete this feature": "Vymazať tento objekt", + "Disable editing": "Zakázať úpravy", + "Display on load": "Zobraziť pri štarte", + "Do you want to display a minimap?": "Chcete zobraziť minimapu?", + "Do you want to display popup footer?": "Chcete zobraziť v bubline navigačný panel?", + "Do you want to display the scale control?": "Chcete zobraziť mierku mapy?", + "Download data": "Stiahnuť údaje", + "Draw a line": "Nakresliť jednoduchú čiaru", + "Draw a marker": "Nakresliť značku miesta", + "Draw a polygon": "Nakresliť polygon", + "Draw a polyline": "Nakresliť krivku", + "Drop": "Pustiť", + "Dynamic": "Dynamicky", + "Edit": "Upraviť", + "Edit feature's layer": "Upraviť vrstvu objektu", + "Edit map properties": "Upraviť vlastnosti mapy", + "Edit map settings": "Upraviť nastavenia mapy", + "Edit this feature": "Upraviť tento objekt", + "Embed and share this map": "Zdieľaj alebo vlož mapu do iného webu", + "Enable editing": "Povoliť úpravy", + "Format": "Formát", + "From zoom": "Max. oddialenie", + "Go to «{feature}»": "Prejsť na «{feature}»", + "Hide controls": "Skryť ovládacie prvky", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Ako veľmi vyhladzovať a zjednodušovať pri oddialeni (väčšie = rýchlejša odozva a plynulejší vzhľad, menšie = presnejšie)", + "Import": "Importovať", + "Import data": "Import údajov", + "Inherit": "Predvolené", + "Licence": "Licencia", + "Map background credits": "Autor mapy pozadia", + "Map user content has been published under licence": "Použivateľské údaje sú zverejnené pod licenciou", + "More controls": "Viac ovládacích prvkov", + "Optional. Same as color if not set.": "Nepovinné. Rovnaké ako farba, ak nie je nastavené.", + "Optionnal.": "Nepovinné", + "Paste here your data": "Sem vložte vaše údaje", + "Please be sure the licence is compliant with your use.": "Prosíme uistite sa, že licencia je v zhode s tým ako mapu používate.", + "Problem in the response": "Problém v odpovedi", + "Problem in the response format": "Problém vo formáte odpovede", + "Provide an URL here": "Sem vložte odkaz URL", + "Remote data": "Vzdialené údaje", + "Save": "Uložiť", + "Save current edits": "Uložiť nedávne zmeny", + "Save this center and zoom": "Uložiť túto pozíciu mapy a jej priblíženie", + "Show/hide layer": "Ukázať/skryť vrstvu", + "Start editing": "Začať úpravy", + "Stop editing": "Ukončiť úpravy", + "The zoom and center have been setted.": "Priblíženie a stred mapy boli nastavené", + "To zoom": "Max. priblíženie", + "Untitled layer": "Nepomenovaná vrstva", + "Untitled map": "Nepomenovaná mapa", + "Update permissions and editors": "Nastaviť prístupové práva a prispievateľov", + "Url": "URL", + "User content credits": "Autor používateľského obsahu", + "Where do we go from here?": "Kam sa dá odtiaľto dostať?", + "Zoom in": "Priblížiť", + "Zoom out": "Oddialiť", + "Zoom to layer extent": "Prispôsobiť priblíženie vrstve", + "Zoom to this feature": "Priblížiť na tento objekt", + "color": "farba", + "dash array": "štýl prerušovanej čiary", + "description": "popis", + "fill": "výplň", + "fill color": "farba výplne", + "fill opacity": "priehľadnosť výplne", + "inherit": "predvolené", + "licence": "licencia", + "name": "názov", + "no": "nie", + "opacity": "priehľadnosť", + "stroke": "linka", + "weight": "šírka linky", + "yes": "áno", + "Editing": "Upravujete", + "Embed the map": "Vložiť mapu na iný web", + "Short URL": "Krátky odkaz URL", + "# one hash for main heading": "# jedna mriežka pre hlavný nadpis", + "## two hashes for second heading": "## dve mriežky pre nadpis druhej úrovne", + "### three hashes for third heading": "## tri mriežky pre nadpis tretej úrovne", + "**double star for bold**": "**všetko medzi dvoma hviezdičkami je tučně**", + "*simple star for italic*": "*všetko medzi hviezdičkami bude kurzívou*", + "--- for an horizontal rule": "--- vytvorí vodorovnú linku", + "All properties are imported.": "Všetky vlastnosti sú naimportované.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Hodnoty oddelené čiarkou, tabulátorom, alebo bodkočiarkou. Predpokladá sa SRS WGS84 a sú importované iba polohy bodov. Import hľadá záhlavie stĺpcov začínajúcich na \"lat\" a \"lon\" a tie považuje za súradnice (na veľkosti písmien nezáleži). Ostatné stĺpce sú importované ako vlastnosti.", + "Custom background": "Vlastné pozadie", + "Help": "Nápoveda", + "Image: {{http://image.url.com}}": "Obrázok: {{http://url.obrazka.sk}}", + "Link with text: [[http://example.com|text of the link]]": "Odkaz s textom: [[http://priklad.sk|text odkazu]]", + "Properties imported:": "Importované vlastnosti:", + "Simple link: [[http://example.com]]": "Jednoduchý odkaz: [[http://priklad.sk]]", + "Supported scheme": "Podporovaná schéma", + "Supported variables that will be dynamically replaced": "Podporované premenné, ktoré budú automaticky nahradené", + "Text formatting": "Formátovanie textu", + "attribution": "autorstvo", + "display name": "zobraziť názov", + "max zoom": "max. priblíženie", + "min zoom": "max. oddialenie", + "Skipping unkown geometry.type: {type}": "Preskakujem neznáme geometry.type: {type}", + "Please save the map before": "Prosím, najprv uložte mapu", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Môžete používať vlastnosti objektu ako premenné, napr. v \"http://mojserver.sk/obrazky/{name}.png\" je {name} nahradené hodnotou \"name\" každého objektu.", + "Transform to polygon": "Transformuj na mnohouholník", + "Transform to lines": "Transformuj na čiary", + "Choose the data format": "Zvoľte formát údajov", + "Error in the tilelayer URL": "Chyba URL dlaždicovej vrstvy", + "Directions from here": "Navigovať odtiaľto", + "Choose a preset": "Vyberte predvoľbu", + "Limit bounds": "Obmedziť hranice", + "Use current bounds": "Použiť aktuálne hranice", + "max East": "max. Východ", + "max North": "max. Sever", + "max South": "max. Juh", + "max West": "max. Západ", + "TMS format": "Formát TMS", + "Credits": "Poďakovania", + "Only visible features will be downloaded.": "Stiahnuté budú len viditeľné objekty.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Otvoriť túto mapovú oblasť v mapovom editore pre presnenie dát v OpenStreetMap", + "Default properties": "Predvolené vlastnosti", + "User interface options": "Možnosti používateľského rozhrania", + "Image with custom width (in px): {{http://image.url.com|width}}": "Obraz s vlastnou šírkou (v pixeloch): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Aktuálne zobrazenie namiesto štandardného zobrazenia mapy?", + "Iframe export options": "Možnosti Iframe exportu", + "Include full screen link?": "Zahrnúť odkaz na celú obrazovku?", + "See full screen": "Na celú obrazovku", + "height": "Výška", + "width": "Šírka", + "Clustered": "Zhluková", + "Clustering radius": "Polomer zhlukovania", + "GeoRSS (only link)": "GeoRSS (iba odkaz)", + "GeoRSS (title + image)": "GeoRSS (názov + obrázok)", + "Heatmap": "Teplotná mapa", + "Heatmap radius": "Polomer teplotnej mapy", + "Name and description": "Názov a popis", + "Override clustering radius (default 80)": "Prepísať polomer zhlukovania (predvolené 80)", + "Override heatmap radius (default 25)": "Prepísať polomer teplotnej mapy (predvolené 25)", + "Proxy request": "Požiadavky cez proxy", + "Table": "Tabuľka", + "To use if remote server doesn't allow cross domain (slower)": "Použiť keď vzdialený server nepovoľuje cross-domain (pomalšie)", + "Type of layer": "Typ vrstvy", + "Filter…": "Filter…", + "Heatmap intensity property": "Vlastnosti intenzity heatmapy", + "Optional intensity property for heatmap": "Voliteľné vlastnosti intenzity pre heatmapu", + "Caption": "Nadpis", + "Data browser": "Prehliadač", + "Do you want to display a caption bar?": "Chcete zobraziť lištu s nadpismi?", + "Do you want to display a panel on load?": "Prajete si zobraziť panel pri štarte?", + "None": "Žiadny", + "by": "od", + "Name and description (large)": "Názov a popis (veľký)", + "Empty": "Vyprázdniť", + "Split line": "Rozdelit čiaru", + "Clone": "Vytvoriť kópiu", + "Clone of {name}": "Kópia {name}", + "Side panel": "Bočný panel", + "Powered by Leaflet and Django, glued by uMap project.": "Zostavené z Leaflet a Django, prepojené pomocou projektu uMap.", + "Zoom level for automatic zooms": "Úroveň priblíženia pre automatické približovanie", + "Do you want to display the «more» control?": "Prajete si zobrazit «viac» nastavení?", + "Auto": "Automatická", + "Default: name": "Štandardná hodnota: názov", + "Property to use for sorting features": "Vlastnosť použitá pre radenie objektov", + "Slideshow": "Prezentácia", + "Start slideshow": "Spustiť prezentáciu", + "Stop slideshow": "Zastaviť prezentáciu", + "Text color for the cluster label": "Farba textu pre popis zhluku", + "Zoom to the next": "Priblížiť k ďalšiemu", + "Zoom to the previous": "Priblížiť k predošlému", + "Add a new property": "Pridať novú vlastnosť", + "Are you sure you want to delete this property on all the features?": "Ste si istí že chcete vymazať túto vlastnosť na všetkých objektoch?", + "Close": "Zatvoriť", + "Delete this property on all the features": "Vymazať túto vlastnosť na všetkých objektoch", + "Edit properties in a table": "Upraviť vlastnosti v tabuľke", + "Please enter the name of the property": "Prosím, zadajte názov vlastnosti", + "Please enter the new name of this property": "Prosím, zadajte nový názov tejto vlastnosti", + "Rename this property on all the features": "Premenovať túto vlastnosť na všetkých objektoch", + "If false, the polygon will act as a part of the underlying map.": "Ak je vypnuté, polygón sa bude správať ako súčasť mapového podkladu.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe s vlastnou výškou (v px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Zobraziť všetko", + "Dynamic properties": "Dynamické vlastnosti", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Použite zástupné znaky s vlastnosťami objektov medzi zloženými zátvorkami, napr. {name}, a budú dynamicky nahradené zodpovedajúcimi hodnotami.", + "Long credits": "Dlhý text autorstva", + "No licence has been set": "Nebola nastavená žiadna licencia", + "Popup content template": "Šablóna obsahu bubliny", + "Short credits": "Krátky text autorstva", + "Will be displayed in the bottom right corner of the map": "Bude zobrazené s mapou vpravo dole", + "Will be visible in the caption of the map": "Bude zobrazené v nadpise mapy", + "Map has been saved!": "Mapa bola uložená!", + "Save anyway": "Uložiť napriek tomu", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ojoj! Niekto iný medzitým taktiež upravil údaje. Môžete ich napriek tomu uložiť, ale zmažete tak jeho zmeny.", + "Comma separated list of properties to use when filtering features": "Čiarkami oddelený zoznam vlastností pre filtrovanie objektov", + "Keep current visible layers": "Použiť pre aktuálne zobrazenie vrstiev", + "Coordinates": "Súradnice", + "Latitude": "Zem. šírka", + "Longitude": "Zem. dĺžka", + "Continue line (Ctrl-click)": "Pokračovať v čiare (Ctrl+klik)", + "Start a hole here": "Tu začať dieru", + "Click last point to finish shape": "Kliknite na posledný bod pre dokončenie tvaru", + "Click to add a marker": "Kliknutím pridáte značku", + "Click to continue drawing": "Kliknutím môžete pokračovať v kreslení", + "Click to start drawing a line": "Kliknutím začnete kresliť čiaru", + "Click to start drawing a polygon": "Kliknutím začnete kresliť polygón", + "Import in a new layer": "Importovať do novej vrstvy", + "Layer": "Vrstva", + "Please choose a format": "Prosím, zvoľte formát", + "Imports all umap data, including layers and settings.": "Importuje všetky údaje umapy, vrátane vrstiev a nastavení.", + "Invalid umap data": "Neplatné údaje umapy", + "Invalid umap data in {filename}": "Neplatné údaje umapy v súbore {filename}", + "Add a line to the current multi": "Pridať čiaru k aktuálnemu multi", + "Add a polygon to the current multi": "Pridať polygón k aktuálnemu multi", + "Click to edit": "Kliknutím upravte", + "Continue line": "Pokračovať v čiare", + "Delete this shape": "Vymazať tento tvar", + "Make main shape": "Urobiť hlavným tvarom", + "Merge lines": "Spojiť čiary", + "Remove shape from the multi": "Odobrať tvar z multi", + "Transfer shape to edited feature": "Preniesť tvar do upravovaného objektu", + "next": "ďalší", + "previous": "predchádzajúci", + "Measure distances": "Merať vzdialenosť", + "NM": "NM", + "kilometers": "kilometrov", + "km": "km", + "mi": "mi", + "miles": "míľ", + "nautical miles": "námorných míľ", + "{area} acres": "{area} akrov", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} míľ", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Určite chcete obnoviť túto verziu?", + "Extract shape to separate feature": "Vyňať tvar do samostatného objektu", + "Layer properties": "Vlastnosti vrstvy", + "Restore this version": "Obnoviť túto verziu", + "Versions": "Verzie", + "You have unsaved changes.": "Máte neuložené zmeny.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Čiarkami oddelený zoznam čísel, ktorý popisuje vzor prerušovanej čiary. Napr. \"5, 10, 15\".", + "Advanced transition": "Pokročilý prechod", + "Allow interactions": "Povoliť interakcie", + "Autostart when map is loaded": "Aut. spustenie pri načítaní mapy", + "Default interaction options": "Predvolené možnosti interakcie", + "Default shape properties": "Predvolené vlastnosti tvaru", + "Default zoom level": "Predvolené priblíženie", + "Define link to open in a new window on polygon click.": "Definujte odkaz na otvorenie, ktorý otvorí nové okno po kliknutí na polygón.", + "Delete this vertex (Alt-click)": "Vymazať tento bod (Alt+klik)", + "Display the control to open OpenStreetMap editor": "Zobraziť ovládanie na otvorenie editora OpenStreetMap", + "Display the data layers control": "Zobraziť ovládanie údajov vrstiev", + "Display the embed control": "Zobraziť ovládanie vkladania", + "Display the fullscreen control": "Zobraziť ovládanie celej obrazovky", + "Display the locate control": "Zobraziť ovládanie polohy", + "Display the measure control": "Zobraziť ovládanie merania", + "Display the search control": "Zobraziť ovládanie vyhľadávania", + "Display the tile layers control": "Zobraziť ovládanie dlaždíc vrstiev", + "Display the zoom control": "Zobraziť ovládanie priblíženia", + "Exit Fullscreen": "Ukončiť režim celej obrazovky", + "Fetch data each time map view changes.": "Načítanie údajov pri každej zmene zobrazenia mapy.", + "Filter keys": "Kľúče filtra", + "Icon shape": "Tvar ikony", + "Icon symbol": "Symbol ikony", + "Interaction options": "Možnosti interakcie", + "Label key": "Kľúč popisu", + "Link to…": "Odkaz na…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Musí byť platná hodnota CSS (napr.: DarkBlue or #123456)", + "No results": "Žiadne výsledky", + "Popup style": "Štýl bubliny", + "Replace layer content": "Nahradiť obsah vrstvy", + "Save this location as new feature": "Uložiť túto polohu ako nový objekt", + "Search location": "Vyhľadať polohu", + "Set URL": "Nastaviť URL", + "Shape properties": "Vlastnosti tvaru", + "Simplify": "Zjednodušiť", + "Sort key": "Kľúč radenia", + "The name of the property to use as feature label (ex.: \"nom\")": "Názov vlastnosti používať ako popis objektu (napr.: \"nom\")", + "Toggle edit mode (shift-click)": "Prepnúť režim úprav (Shift+klik)", + "View Fullscreen": "Zobraziť na celú obrazovky", + "Whether to display or not polygons paths.": "Či sa má alebo nemá zobraziť cesty polygónov.", + "Whether to fill polygons with color.": "Či sa má vyplniť polygón farbou.", + "Zoom to this place": "Priblížiť na toto miesto", + "always": "vždy", + "clear": "vyčistiť", + "define": "definovať", + "hidden": "skryté", + "never": "nikdy", + "Automatic": "Automaticky", + "Clone this feature": "Vytvoriť kópiu objektu", + "Display label": "Zobraziť popis", + "Drag to reorder": "Presunutím zmeníte poradie", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe s vlastnou výškou a šírkou (v px): {{{http://iframe.url.com|height*widht}}}", + "Labels are clickable": "Popis je klikateľný", + "Label direction": "Orientácia popisu", + "Manage layers": "Nastavenie vrstiev", + "On the bottom": "V spodnej časti", + "On the left": "Naľavo", + "On the right": "Napravo", + "On the top": "V hornej časti", + "Only display label on mouse hover": "Zobraziť popis iba pri prejdení myšou", + "Open link in…": "Otvoriť odkaz v…", + "Unable to detect format of file {filename}": "Nepodarilo sa rozpoznať formát súboru {filename}", + "collapsed": "zbalené", + "expanded": "rozbalené", + "iframe": "iframe", + "new window": "nové okno", + "parent window": "nadradené okno", + "{count} errors during import: {message}": "Počet chýb počas importu {count}: {message}", + "Are you sure you want to delete this layer?": "Určite chcete vymazať túto vrstvu?", + "Delete layer": "Vymazať vrstvu", + "Error while fetching {url}": "Vyskytla sa chyba počas načítania {url}", + "Home": "Domov", + "Delete all layers": "Vymazať všetky vrstvy", + "Full map data": "Údaje celej mapy", + "Smart transitions": "Chytré prechody", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/sl.json b/umap/static/umap/locale/sl.json new file mode 100644 index 00000000..87002234 --- /dev/null +++ b/umap/static/umap/locale/sl.json @@ -0,0 +1,350 @@ +{ + "About": "O programu", + "Action not allowed :(": "Dejanje ni dovoljeno :(", + "Add a layer": "Dodaj plast", + "Add symbol": "Dodaj simbol", + "Advanced actions": "Napredna dejanja", + "Advanced properties": "Napredne nastavitve", + "Allow scroll wheel zoom?": "Ali naj se dovoli približanje pogleda s kolescem miške?", + "An error occured": "Prišlo je do napake", + "Are you sure you want to cancel your changes?": "Ali ste prepričani, da želite preklicati spremembe?", + "Are you sure you want to clone this map and all its datalayers?": "Ali ste prepričani, da želite klonirati ta zemljevid in vse njegove podatkovne plasti?", + "Are you sure you want to delete the feature?": "Ali ste prepričani, da želite izbrisati to možnost?", + "Are you sure you want to delete this map?": "Ali ste prepričani, da želite izbrisati ta zemljevid?", + "Ball": "Bucika", + "Bring feature to center": "Postavi predmet v središče", + "Browse data": "Prebrskaj podatke", + "Cancel": "Prekliči", + "Cancel edits": "Prekliči urajanje", + "Center map on your location": "Postavi trenutno točko v središče zemljevida", + "Change map background": "Zamenjaj ozadje zemljevida", + "Change symbol": "Spremeni simbol", + "Change tilelayers": "Spremeni plasti", + "Choose the format of the data to import": "Izbor oblike zapisa podatkov za uvoz", + "Choose the layer of the feature": "Izbor plasti za postavitev predmeta", + "Choose the layer to import in": "Izbor plasti za uvoz podatkov", + "Circle": "Točka", + "Clone this map": "Kloniraj zemljevid", + "Default": "Privzeto", + "Delete": "Izbriši", + "Delete this feature": "Izbriši ta predmet", + "Disable editing": "Onemogoči urejanje", + "Display on load": "Prikaži ob nalaganju", + "Do you want to display a minimap?": "Ali želite prikazati mini zemljevid?", + "Do you want to display popup footer?": "Ali želite prikazati pojavno okno noge?", + "Do you want to display the scale control?": "Ali želite prikazati gumbe merila?", + "Download data": "Prejmi podatke", + "Draw a line": "Nariši črto", + "Draw a marker": "Nariši označbo", + "Draw a polygon": "Nariši mnogokotnik", + "Draw a polyline": "Nariši črto v več koleni", + "Drop": "Kapljica", + "Dynamic": "Dinamično", + "Edit": "Uredi", + "Edit feature's layer": "Uredi plast predmeta", + "Edit map properties": "Uredi lastnosti zemljevida", + "Edit map settings": "Uredi nastavitve zemljevida", + "Edit this feature": "Uredi predmet", + "Embed and share this map": "Vstavi in objavi zemljevid", + "Enable editing": "Omogoči urejanje", + "Format": "zapis", + "From zoom": "Iz približanja", + "Go to «{feature}»": "Skoči na »{feature}«", + "Hide controls": "Skrij orodja", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Kako močno naj bodo poenostavljene prte na posamezni ravni približanja (močno = boljše delovanje in prijetnejši videz ali malo = bolj natančen prikaz)", + "Import": "Uvozi", + "Import data": "Uvozi podatke", + "Inherit": "Prevzemi", + "Licence": "Dovoljenje", + "Map background credits": "Zasluge ozadij zemljevida", + "Map user content has been published under licence": "Uporabniška vsebina zemljevida je objavljena z dovoljenjem", + "More controls": "Več orodij", + "Optional. Same as color if not set.": "Izbirno. Enako, kot nedoločena barva.", + "Optionnal.": "Izbirno.", + "Paste here your data": "Prilepite podatke", + "Please be sure the licence is compliant with your use.": "Prepričajte se, da je zemljevid uporabljen v skladu z dovoljenjem.", + "Problem in the response": "Napaka v odzivu", + "Problem in the response format": "Napaka v zapisu odziva", + "Provide an URL here": "Vpis naslova URL", + "Remote data": "Oddaljeni podatki", + "Save": "Shrani", + "Save current edits": "Shrani urejanje", + "Save this center and zoom": "Shrani središče in približaj", + "Show/hide layer": "Pokaži / Skrij plast", + "Start editing": "Začni z urejanjem", + "Stop editing": "Končaj z urejanjem", + "The zoom and center have been setted.": "Vrednost in središčna točka sta nastavljeni.", + "To zoom": "Za približanje", + "Untitled layer": "Neimenovana plast", + "Untitled map": "Neimenovan zemljevid", + "Update permissions and editors": "Posodobitev dovoljenj in urednikov", + "Url": "Naslov URL", + "User content credits": "Zasluge za uporabniško vsebino", + "Where do we go from here?": "Kam naj se usmerimo?", + "Zoom in": "Približaj", + "Zoom out": "Oddalji", + "Zoom to layer extent": "Približaj na obseg plasti", + "Zoom to this feature": "Približaj k predmetu", + "color": "barva", + "dash array": "črtkano", + "description": "opis", + "fill": "polnilo", + "fill color": "barva polnila", + "fill opacity": "prosojnost polnila", + "inherit": "prevzemi", + "licence": "dovoljenje", + "name": "ime", + "no": "ne", + "opacity": "prosojnost", + "stroke": "prečrtano", + "weight": "debelina", + "yes": "da", + "Editing": "Urejanje", + "Embed the map": "Vstavi zemljevid", + "Short URL": "Skrajšan naslov URL", + "# one hash for main heading": "# en znak za prvi glavni naslov", + "## two hashes for second heading": "## dva znaka za drugi naslov", + "### three hashes for third heading": "### trije znaki za tretji naslov", + "**double star for bold**": "**dvojna zvezdica za krepko pisavo**", + "*simple star for italic*": "*enojna zvezdica za ležečo pisavo*", + "--- for an horizontal rule": "--- za vodoravno črto", + "All properties are imported.": "Vse lastnosti so uvožene.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Z vejico, tabulatorjem ali podpičjem ločene vrednosti, nakazane prek SRS WGS84. Uvoženi so le točkovni podatki. Med uvozom bo preiskan stolpec glav za podatke geografske »širine« in«dolžine«, neupoštevajoč velikost pisave. Vsi ostali stolpci bodo uvoženi kot lastnosti predmetov.", + "Custom background": "Ozadje po meri", + "Help": "Pomoč", + "Image: {{http://image.url.com}}": "Slika: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Povezava z besedilom: [[http://primer.com|besedilo povezave]]", + "Properties imported:": "Lastnosti so uvožene:", + "Simple link: [[http://example.com]]": "Enostavna povezava: [[http://primer.com]]", + "Supported scheme": "Podprta shema", + "Supported variables that will be dynamically replaced": "Podprte spremenljivke, ki bodo dinamično zamenjane", + "Text formatting": "Oblikovanje besedila", + "attribution": "pripisovanje", + "display name": "prikazno ime", + "max zoom": "največje približanje", + "min zoom": "največje oddaljanje", + "Skipping unkown geometry.type: {type}": "Preskoči neznano geometrično vrsto: {type}", + "Please save the map before": "Shranite zemljevid pred", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Uporabiti je mogoče lastnosti predmetov kot spremenljivke. V naslovu URL je na primer dovoljeno uporabiti spremenljivko {name} kot »http://strežnik.org/slike/{name}.png«, ki bo pri zagonu zamenjana z vrednostjo označb.", + "Transform to polygon": "Pretvori v mnogokotnik", + "Transform to lines": "Pretvori v črte", + "Choose the data format": "Izbor zapisa podatkov", + "Error in the tilelayer URL": "Napaka v naslovu URL plasti", + "Directions from here": "Navigacija od tu", + "Choose a preset": "Izbor prednastavitev", + "Limit bounds": "Omejitev področja", + "Use current bounds": "Uporabi trenutne meje", + "max East": "najbolj vzhodno", + "max North": "najbolj severno", + "max South": "najbolj južno", + "max West": "najbolj zahodno", + "TMS format": "Zapis TMS", + "Credits": "Zasluge", + "Only visible features will be downloaded.": "Prejeti bodo le vidni predmeti.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Odpri obseg zemljevida v urejevalniku za prenos podrobnejših podatkov na OpenStreetMap.", + "Default properties": "Privzete lastnosti", + "User interface options": "Možnosti uporabniškega vmesnika", + "Image with custom width (in px): {{http://image.url.com|width}}": "Slika s širino po meri (v tpčkah): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Ali želite omogočiti trenutni pogled namesto privzetega pogleda zemljevida?", + "Iframe export options": "Možnosti izvoza v iFrame", + "Include full screen link?": "Ali želite vključiti povezavo do celozaslonskega prikaza?", + "See full screen": "Pokaži v celozaslonskem načinu", + "height": "višina", + "width": "širina", + "Clustered": "Zbrano območje", + "Clustering radius": "Radij zbranega omgočja", + "GeoRSS (only link)": "GeoRSS (le povezava)", + "GeoRSS (title + image)": "GeoRSS (naslov in slika)", + "Heatmap": "Vročinske točke", + "Heatmap radius": "Radij vročinskih točk", + "Name and description": "Ime in opis", + "Override clustering radius (default 80)": "Prekliči radij združevanja (privzeto 80)", + "Override heatmap radius (default 25)": "Prekliči radij vročinskih točk (privzeto 25)", + "Proxy request": "Zahteva posredniškega strežnika", + "Table": "Razpredelnica", + "To use if remote server doesn't allow cross domain (slower)": "Za uporabo, ko oddaljeni stražnik ne dovoli vzporednih domen (počasneje)", + "Type of layer": "Vrsta plasti", + "Filter…": "Filter ...", + "Heatmap intensity property": "Lastnosti jakosti vročinskih točk", + "Optional intensity property for heatmap": "Izbirna lastnost jakosti vročinskih točke", + "Caption": "Naslov", + "Data browser": "Brskalnik podatkov", + "Do you want to display a caption bar?": "Ali želite pokazati naslovno vrstico?", + "Do you want to display a panel on load?": "Ali želite pokazati bočno okno ob zagonu?", + "None": "Brez", + "by": "–", + "Name and description (large)": "Ime in opis (veliko)", + "Empty": "Prazno", + "Split line": "Ločitvena črta", + "Clone": "Kloniraj", + "Clone of {name}": "Klon zemljevida {name}", + "Side panel": "Bočno okno", + "Powered by Leaflet and Django, glued by uMap project.": "Zasnovano na orodjih Leaflet in Django, združeno pri projektu uMap.", + "Zoom level for automatic zooms": "Raven za samodejno približanje", + "Do you want to display the «more» control?": "Ali želite pokazati orodno vrstico »več možnosti«?", + "Auto": "Samodejno", + "Default: name": "Privzeto: ime", + "Property to use for sorting features": "Določilo za uporabo pri razvrščanju predmetov", + "Slideshow": "Predstavitev", + "Start slideshow": "Začni s predstavitvijo", + "Stop slideshow": "Zaustavi predstavitev", + "Text color for the cluster label": "Barva besedila za oznako polja", + "Zoom to the next": "Približaj na naslednjo točko", + "Zoom to the previous": "Približaj na predhodno točko", + "Add a new property": "Dodaj novo lastnost", + "Are you sure you want to delete this property on all the features?": "Ali res želite izbrisati to lastnost pri vseh vstavljenih predmetih?", + "Close": "Zapri", + "Delete this property on all the features": "Izbriši lastnost pri vseh vstavljenih predmetih", + "Edit properties in a table": "Uredi lastnosti v razpredelnici", + "Please enter the name of the property": "Ime lastnosti", + "Please enter the new name of this property": "Novo ime lastnosti", + "Rename this property on all the features": "Preimenuj lastnost na vseh predmetih", + "If false, the polygon will act as a part of the underlying map.": "Neizbrana možnost določa, da bo mnogokotnik obravnavan kot del zemljevida.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Predmet Iframe z višino po meri (v točkah): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Pokaži vse", + "Dynamic properties": "Dinamične lastnosti", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Uporabi ročnike lastnosti predmetov, pri zapisu podatkov. Vpis {ime} bo dinamično zamenjan z ustrezno vrednostjo.", + "Long credits": "Poln seznam zaslug", + "No licence has been set": "Ni določenega dovoljenja za uporabo", + "Popup content template": "Predloga pojavne vsebine", + "Short credits": "Kratek zapis zaslug", + "Will be displayed in the bottom right corner of the map": "Prikazan bo v spodnjem desnem kotu zemljevida", + "Will be visible in the caption of the map": "Prikazan bo v naslovu zemljevida", + "Map has been saved!": "Zemljevid je shranjen!", + "Save anyway": "Vseeno shrani", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Opa! Nekdo drug je najverjetneje urejal podatke. Spremembe lahko vseeno shranite, vendar bo to prepisalo spremembe, ustvarjene s strani drugih urednikov.", + "Comma separated list of properties to use when filtering features": "Z vejico ločen seznam lastnosti, uporabljenimi med filtriranjem predmetov", + "Keep current visible layers": "Ohrani trenutno vidne plasti", + "Coordinates": "Koordinate", + "Latitude": "Geografska širina", + "Longitude": "Geografska dolžina", + "Continue line (Ctrl-click)": "Nadaljuj s črto (ctrl-klik)", + "Start a hole here": "Začni z vrisovanjem luknje", + "Click last point to finish shape": "Kliknite na zadnjo točko za dokončanje risanja oblike", + "Click to add a marker": "Kliknite za dodajanje označbe", + "Click to continue drawing": "Kliknite za nadaljevanje risanja", + "Click to start drawing a line": "Kliknite za začetek risanja črte", + "Click to start drawing a polygon": "Kliknite za začetek risanja mnogokotnika", + "Import in a new layer": "Uvozi v novo plast", + "Layer": "Plast", + "Please choose a format": "Izbrati je treba zapis", + "Imports all umap data, including layers and settings.": "Uvozi vse podatke umap, vključno s plastmi in nastavitvami.", + "Invalid umap data": "Neveljavni podatki umap", + "Invalid umap data in {filename}": "Neveljavni podatki umap v datoteki {filename}", + "Add a line to the current multi": "Dodaj črto k trenutnemu večtočkovnemu predmetu", + "Add a polygon to the current multi": "Dodaj mnogokotnik k trenutnemu večtočkovnemu predmetu", + "Click to edit": "Kliknite za urejanje", + "Continue line": "Nadaljuj z risanjem črte", + "Delete this shape": "Izbriši ta predmet", + "Make main shape": "Nastavi kot glavni predmet", + "Merge lines": "Združi črte", + "Remove shape from the multi": "Odstrani obliko iz večtočkovnega predmeta", + "Transfer shape to edited feature": "Prenesi obliko na urejen predmet", + "next": "naslednji", + "previous": "predhodni", + "Measure distances": "Izmeri razdaljo", + "NM": "NM", + "kilometers": "kilometri", + "km": "km", + "mi": "mi", + "miles": "milje", + "nautical miles": "navtične milje", + "{area} acres": "{area} aker", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Ali res želite obnoviti to različico?", + "Extract shape to separate feature": "Izloči obliko v ločen predmet", + "Layer properties": "Lastnosti plasti", + "Restore this version": "Obnovi različico", + "Versions": "Različice", + "You have unsaved changes.": "Zaznane so neshranjene spremembe.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Z vejilo ločen seznam števil, ki določajo vzorec poteze. Na primer »5, 10, 15«.", + "Advanced transition": "Napredni prehodi", + "Allow interactions": "Dovoli interakcije", + "Autostart when map is loaded": "Samodejno zaženi, ko je zemljevid naložen", + "Default interaction options": "Privzete možnosti interakcije", + "Default shape properties": "Privzete možnosti oblike", + "Default zoom level": "Privzeta raven približanja", + "Define link to open in a new window on polygon click.": "Določitev povezave za odpiranje v novem oknu ob kliku na mnogokotnik.", + "Delete this vertex (Alt-click)": "Izbriši to točko (alt + klik)", + "Display the control to open OpenStreetMap editor": "Pokaži gumb za odpiranje urejevalnika OpenstreetMap", + "Display the data layers control": "Pokaži gumb za nadzor podatkov plasti", + "Display the embed control": "Pokaži gumb za vstavljanje predmetov", + "Display the fullscreen control": "Pokaži gumb za preklop v celozaslonski način", + "Display the locate control": "Pokaži gumb za omogočanje lokacijskih storitev", + "Display the measure control": "Pokaži gumb za merjenje razdalij", + "Display the search control": "Pokaži možnosti za iskanje", + "Display the tile layers control": "Pokaži gumb za upravljanje s sličicami plasti", + "Display the zoom control": "Pokaži gumb za približanje", + "Exit Fullscreen": "Končaj celozaslonski način", + "Fetch data each time map view changes.": "Pridobi podatke vsakič, ko se spremeni pogled zemljevida.", + "Filter keys": "Filtri", + "Icon shape": "Oblika ikone", + "Icon symbol": "Simbol ikone", + "Interaction options": "Možnosti interakcije", + "Label key": "Oznaka", + "Link to…": "Povezava z ...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Vrednost mora biti skladna z zapisom CSS (na primer: DarkBlue ali #123456)", + "No results": "Ni zadetkov", + "Popup style": "Slog pojavnega okna", + "Replace layer content": "Zamenjaj vsebino plasti", + "Save this location as new feature": "Shrani mesto kot nov predmet", + "Search location": "Preišči mesto", + "Set URL": "Nastavi naslov URL", + "Shape properties": "Lastnosti oblike", + "Simplify": "Poenostavi", + "Sort key": "Razvrščanje", + "The name of the property to use as feature label (ex.: \"nom\")": "Ime lastnosti, ki naj se uporabi kot oznaka predmeta (na primer »nom«)", + "Toggle edit mode (shift-click)": "Preklop načina urejanja (shift + klik)", + "View Fullscreen": "Pokaži v celozaslonskem načinu", + "Whether to display or not polygons paths.": "Ali naj bodo izrisane daljice mnogokotnika.", + "Whether to fill polygons with color.": "Ali naj bodo mnogokotniki zapolnjeni z barvo.", + "Zoom to this place": "Približaj na to mesto", + "always": "vedno", + "clear": "počisti", + "define": "določi", + "hidden": "skrito", + "never": "nikoli", + "Automatic": "Samodejno", + "Clone this feature": "Kloniraj predmet", + "Display label": "Pokaži oznako", + "Drag to reorder": "Potegni za prerazvrstitev", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Predmet Iframe z višino in širino po meri (v točkah): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Oznake so klikljive", + "Label direction": "Usmerjenost oznake", + "Manage layers": "Upravljanje s plastmi", + "On the bottom": "Na dnu", + "On the left": "Na levi", + "On the right": "Na desni", + "On the top": "Na vrhu", + "Only display label on mouse hover": "Oznako pokaži le ob prehodu miške", + "Open link in…": "Odpri povezavo v ...", + "Unable to detect format of file {filename}": "Ni mogoče zaznati zapisa datoteke {filename}", + "collapsed": "zloženo", + "expanded": "razširjeno", + "iframe": "iframe", + "new window": "novo okno", + "parent window": "glavno okno", + "{count} errors during import: {message}": "Zaznane so napake ({count}) med uvozom: {message}", + "Are you sure you want to delete this layer?": "Ali ste prepričani, da želite izbrisati to plast?", + "Delete layer": "Izbriši plast", + "Error while fetching {url}": "Napaka pridobivanja naslova URL {url}", + "Home": "Začetna stran", + "Delete all layers": "Izbriši vse plasti", + "Full map data": "Polni podatki zemljevida", + "Smart transitions": "Pametni prehodi", + "Activate slideshow mode": "Omogoči predstavitveni način", + "Data is browsable": "Podatke je mogoče brskati", + "Delay between two transitions when in play mode": "Zamik med prehodi v načinu predvajanja", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Neizbrana možnost skrije plast med predstavitvijo, v pregledovalniku podatkov, ...", + "{delay} seconds": "{delay} sekund", + "Display measure": "Pokaži merilo" +} \ No newline at end of file diff --git a/umap/static/umap/locale/th_TH.json b/umap/static/umap/locale/th_TH.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/th_TH.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/tr.json b/umap/static/umap/locale/tr.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/tr.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/uk_UA.js b/umap/static/umap/locale/uk_UA.js new file mode 100644 index 00000000..b431d81f --- /dev/null +++ b/umap/static/umap/locale/uk_UA.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Про це", + "Action not allowed :(": "Дія недоступна :(", + "Add a layer": "Додати шар", + "Add symbol": "Додати зображення", + "Advanced actions": "Додаткові дії", + "Advanced properties": "Розширенні параметри", + "Allow scroll wheel zoom?": "Дозволити зміну масштабу колесом миші?", + "An error occured": "Виникла помилка", + "Are you sure you want to cancel your changes?": "Ви впевнені, що хочете скасувати зроблені зміни?", + "Are you sure you want to clone this map and all its datalayers?": "Ви впевнені, що бажаєте скопіювати цю мапу з її усіма даними", + "Are you sure you want to delete the feature?": "Ви впевнені, що хочете вилучити об’єкт?", + "Are you sure you want to delete this map?": "Ви впевнені, що хочете вилучити мапу?", + "Ball": "Шпилька", + "Bring feature to center": "Помістити об’єкт в центр", + "Browse data": "Огляд даних", + "Cancel": "Скасувати", + "Cancel edits": "Скасувати правки", + "Center map on your location": "Центрувати мапу за Вашим місцем розташування", + "Change map background": "Змінити фонову мапу", + "Change symbol": "Змінити зображення", + "Change tilelayers": "Вибрати фонові шари", + "Choose the format of the data to import": "Виберіть формат даних для імпорту", + "Choose the layer of the feature": "Виберіть шар для об’єкта", + "Choose the layer to import in": "Виберіть шар для імпорту в нього", + "Circle": "Коло", + "Clone this map": "Створити копію мапи", + "Default": "За умовчанням", + "Delete": "Видалити", + "Delete this feature": "Вилучити цей об’єкт", + "Disable editing": "Вимкнути редагування", + "Display on load": "Відображати при завантаженні", + "Do you want to display a minimap?": "Показувати мінімапу?", + "Do you want to display popup footer?": "Хочете використовувати спливаючу підказку знизу?", + "Do you want to display the scale control?": "Показувати шкалу відстаней?", + "Download data": "Звантажити дані", + "Draw a line": "Намалювати лінію", + "Draw a marker": "Додати позначку", + "Draw a polygon": "Намалювати багатокутник", + "Draw a polyline": "Намалювати лінію", + "Drop": "Крапля", + "Dynamic": "Динамічний", + "Edit": "Редагувати", + "Edit feature's layer": "Змінити шар об’єкту", + "Edit map properties": "Редагуємо властивості мапи", + "Edit map settings": "Змінити властивості мапи", + "Edit this feature": "Редагувати цей об’єкт", + "Embed and share this map": "Вбудувати мапу та поділитися нею", + "Enable editing": "Задіяти редагування", + "Format": "Формат", + "From zoom": "З масштабу", + "Go to «{feature}»": "Перейти до «{feature}»", + "Hide controls": "Прибрати елементи управління", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Наскільки сильно спрощувати лінії на кожному масштабі (більше значення — більша швидкість, але виглядає гірше; менше значення — більш гладке відображення)", + "Import": "Імпорт", + "Import data": "Імпорт даних", + "Inherit": "Успадковувати", + "Licence": "Ліцензія", + "Map background credits": "Права/подяки на фонову мапу", + "Map user content has been published under licence": "Картографічні дані користувача опубліковані згідно ліцензії", + "More controls": "Інші елементи управління", + "Optional. Same as color if not set.": "Додатково. Якщо не вибрано, то як колір.", + "Optionnal.": "Додатково.", + "Paste here your data": "Вставити Ваші дані сюди", + "Please be sure the licence is compliant with your use.": "Переконайтеся, що ліцензія відповідає правилам використання.", + "Problem in the response": "Проблема з відповіддю", + "Problem in the response format": "Формат відповіді не розпізнано", + "Provide an URL here": "Вкажіть посилання тут", + "Remote data": "Віддалені дані", + "Save": "Зберегти", + "Save current edits": "Зберегти поточні правки", + "Save this center and zoom": "Зберегти такі центрування та масштаб", + "Show/hide layer": "Показати/приховати шар", + "Start editing": "Почати редагування", + "Stop editing": "Зупинити редагування", + "The zoom and center have been setted.": "Масштаб й центрування виставлені", + "To zoom": "Масштабувати", + "Untitled layer": "Шар без назви", + "Untitled map": "Безіменна мапа", + "Update permissions and editors": "Налаштувати привілеї та редакторів", + "Url": "Посилання", + "User content credits": "Права/подяки на користувацькі дані", + "Where do we go from here?": "Що можна зробити з мапою далі?", + "Zoom in": "Збільшити масштаб", + "Zoom out": "Зменшити масштаб", + "Zoom to layer extent": "Масштабувати до кордонів шару", + "Zoom to this feature": "Наблизитися до цього об’єкта", + "color": "колір", + "dash array": "штрихи", + "description": "опис", + "fill": "заливка", + "fill color": "колір заливки", + "fill opacity": "Непрозорість заливки", + "inherit": "успадковувати", + "licence": "ліцензія", + "name": "назва", + "no": "ні", + "opacity": "непрозорість", + "stroke": "штрихи", + "weight": "товщина", + "yes": "так", + "Editing": "Редагуємо ", + "Embed the map": "Вбудувати мапу", + "Short URL": "Коротке посилання", + "# one hash for main heading": "# один знак решітки — основний заголовок", + "## two hashes for second heading": "## два знаки решітки — підзаголовок", + "### three hashes for third heading": "### три знаки решітки — підзаголовок підзаголовка", + "**double star for bold**": "**подвійні зірочки — жирний**", + "*simple star for italic*": "*одинарні зірочки — курсив*", + "--- for an horizontal rule": "--- горизонтальна лінія", + "All properties are imported.": "Усі властивості імпортовані.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Як роздільник використовуються коми, табуляції і крапки з комою. Застосовується датум WGS84. Імпорт переглядає заголовок на наявність полів „lat“ та „lon“, регістр не має значення. Усі інші поля імпортуються як властивості.", + "Custom background": "Користувацька фонова мапа", + "Help": "Допомога", + "Image: {{http://image.url.com}}": "Зображення: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Посилання з текстом: [[http://example.com|текст для посилання]]", + "Properties imported:": "Імпортовані властивості: ", + "Simple link: [[http://example.com]]": "Просте посилання: [[http://example.com]]", + "Supported scheme": "Підтримувана схема", + "Supported variables that will be dynamically replaced": "Підтримувані змінні для автоматичної заміни", + "Text formatting": "Форматування тексту", + "attribution": "призначені властивості", + "display name": "відображувана назва", + "max zoom": "максимальний масштаб", + "min zoom": "мінімальний масштаб", + "Skipping unkown geometry.type: {type}": "Пропущена невідома властивість geometry.type: {type}", + "Please save the map before": "Будь ласка, спочатку збережіть мапу", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Ви можете використовувати властивості об’єктів як змінні. Наприклад, в „http://myserver.org/images/{name}.png“, змінна {name} буде замінена значенням поля „name“ кожної позначки на мапі.", + "Transform to polygon": "Перетворити на багатокутник", + "Transform to lines": "Перетворити на лінію", + "Choose the data format": "Виберіть формат даних", + "Error in the tilelayer URL": "Помилка в посиланні на шар мапи", + "Directions from here": "Навігація звідси", + "Choose a preset": "Виберіть шаблон", + "Limit bounds": "Встановлення меж", + "Use current bounds": "Використовувати поточні межі", + "max East": "макс. на схід", + "max North": "макс. на північ", + "max South": "макс. на південь", + "max West": "макс. на захід", + "TMS format": "Формат TMS", + "Credits": "Авторські права / подяки", + "Only visible features will be downloaded.": "Будуть завантажені лише відображувані об’єкти.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Відкрийте цю частину мапи у редакторі OpenStreetMap, щоб поліпшити дані", + "Default properties": "Властивості за умовчанням", + "User interface options": "Налаштування інтерфейсу", + "Image with custom width (in px): {{http://image.url.com|width}}": "Зображення із зазначенням ширини (в пікселях): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Поточний вид замість виду мапи за умовчанням?", + "Iframe export options": "Властивості експорту для Iframe", + "Include full screen link?": "Долучити посилання на повноекранний вид?", + "See full screen": "Дивитися в повноекранному режимі", + "height": "висота", + "width": "ширина", + "Clustered": "Кластеризованний", + "Clustering radius": "Радіус кластеризації", + "GeoRSS (only link)": "GeoRSS (лише посилання)", + "GeoRSS (title + image)": "GeoRSS (заголовок та зображення)", + "Heatmap": "Теплова мапа", + "Heatmap radius": "Радіус для теплової мапи", + "Name and description": "Назва та опис", + "Override clustering radius (default 80)": "Перевизначити радіус кластеризації (за умовчанням 80)", + "Override heatmap radius (default 25)": "Перевизначити радіус для теплової мапи (за умовчанням 25)", + "Proxy request": "Запит проксі", + "Table": "Таблиця", + "To use if remote server doesn't allow cross domain (slower)": "Якщо віддалений сервер не дозволяє крос-домен (повільно)", + "Type of layer": "Тип шару", + "Filter…": "Відбір…", + "Heatmap intensity property": "Властивість інтенсивності теплової мапи", + "Optional intensity property for heatmap": "Додаткові властивості інтенсивності теплової мапи", + "Caption": "Заголовок", + "Data browser": "Оглядач даних", + "Do you want to display a caption bar?": "Показувати рядок заголовку?", + "Do you want to display a panel on load?": "Показувати панель керування при завантаженні?", + "None": "Ні", + "by": "від", + "Name and description (large)": "Назва та опис (розширено)", + "Empty": "Очистити", + "Split line": "Розділити лінію", + "Clone": "Створити копію", + "Clone of {name}": "Копія {name}", + "Side panel": "Бічна панель", + "Powered by Leaflet and Django, glued by uMap project.": "Працює на Leaflet та Django, об’єднані проектом uMap.", + "Zoom level for automatic zooms": "Рівень масштабу для автоматичного масштабування", + "Do you want to display the «more» control?": "Показувати кнопку „Більше“?", + "Auto": "Автоматично", + "Default: name": "За умовчанням: назва", + "Property to use for sorting features": "Властивість для сортування об’єктів", + "Slideshow": "Слайдшоу", + "Start slideshow": "Почати слайдшоу", + "Stop slideshow": "Зупинити слайдшоу", + "Text color for the cluster label": "Колір тексту для позначок кластера", + "Zoom to the next": "Наблизитися до наступного", + "Zoom to the previous": "Наблизитися до попереднього", + "Add a new property": "Додати нову властивість", + "Are you sure you want to delete this property on all the features?": "Ви впевнені, що хочете вилучити цю властивість у всіх об’єктів?", + "Close": "Зачинити", + "Delete this property on all the features": "Вилучити цю властивість у всіх об’єктів", + "Edit properties in a table": "Редагувати властивості в таблиці", + "Please enter the name of the property": "Будь ласка, введіть назву властивості", + "Please enter the new name of this property": "Будь ласка, введіть нову назву властивості", + "Rename this property on all the features": "Перейменувати цю властивість у всіх об’єктів", + "If false, the polygon will act as a part of the underlying map.": "Якщо ні, тоді багатокутник буде виглядати як частина мапи", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe із зазначенням висоти (в пікселях): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Переглянути усе", + "Dynamic properties": "Динамічні властивості", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Використовуйте змінні в дужках з властивостями об’єктів, наприклад, {name}, вони будуть автоматично замінені відповідними значеннями.", + "Long credits": "Повний опис прав/подяки", + "No licence has been set": "Ліцензія не була зазначена", + "Popup content template": "Шаблон спливаючої підказки", + "Short credits": "Короткий опис прав/подяки", + "Will be displayed in the bottom right corner of the map": "Буде показано в правому нижньому кутку мапи", + "Will be visible in the caption of the map": "Буде показано у заголовку мапи", + "Map has been saved!": "Мапу збережено!", + "Save anyway": "Зберегти в будь-якому випадку", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Упс! Схоже, хтось інший теж редагує ці дані. Ви можете зберегти свої правки, але це знищить правки іншого учасника.", + "Comma separated list of properties to use when filtering features": "Список властивостей, розділених комами, для використання при фільтрації", + "Keep current visible layers": "Залишити поточні видимі шари", + "Coordinates": "Координати", + "Latitude": "Широта", + "Longitude": "Довгота", + "Continue line (Ctrl-click)": "Продовжити лінію (Ctrl + клацання)", + "Start a hole here": "Почати отвір звідси", + "Click last point to finish shape": "Клацніть на останній точці, щоб завершити", + "Click to add a marker": "Клацніть, щоб додати позначку", + "Click to continue drawing": "Клацайте, щоб продовжити малювання", + "Click to start drawing a line": "Клацайте, щоб продовжити малювання", + "Click to start drawing a polygon": "Клацніть, щоб почати малювання багатокутника", + "Import in a new layer": "Імпортувати в новий шар", + "Layer": "Шар", + "Please choose a format": "Будь ласка, виберіть формат", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Виміряти відстань", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("uk_UA", locale); +L.setLocale("uk_UA"); \ No newline at end of file diff --git a/umap/static/umap/locale/uk_UA.json b/umap/static/umap/locale/uk_UA.json new file mode 100644 index 00000000..f63f8b19 --- /dev/null +++ b/umap/static/umap/locale/uk_UA.json @@ -0,0 +1,350 @@ +{ + "About": "Про це", + "Action not allowed :(": "Дія недоступна :(", + "Add a layer": "Додати шар", + "Add symbol": "Додати зображення", + "Advanced actions": "Додаткові дії", + "Advanced properties": "Розширенні параметри", + "Allow scroll wheel zoom?": "Дозволити зміну масштабу колесом миші?", + "An error occured": "Виникла помилка", + "Are you sure you want to cancel your changes?": "Ви впевнені, що хочете скасувати зроблені зміни?", + "Are you sure you want to clone this map and all its datalayers?": "Ви впевнені, що бажаєте скопіювати цю мапу з її усіма даними", + "Are you sure you want to delete the feature?": "Ви впевнені, що хочете вилучити об’єкт?", + "Are you sure you want to delete this map?": "Ви впевнені, що хочете вилучити мапу?", + "Ball": "Шпилька", + "Bring feature to center": "Помістити об’єкт в центр", + "Browse data": "Огляд даних", + "Cancel": "Скасувати", + "Cancel edits": "Скасувати правки", + "Center map on your location": "Центрувати мапу за Вашим місцем розташування", + "Change map background": "Змінити фонову мапу", + "Change symbol": "Змінити зображення", + "Change tilelayers": "Вибрати фонові шари", + "Choose the format of the data to import": "Виберіть формат даних для імпорту", + "Choose the layer of the feature": "Виберіть шар для об’єкта", + "Choose the layer to import in": "Виберіть шар для імпорту в нього", + "Circle": "Коло", + "Clone this map": "Створити копію мапи", + "Default": "За умовчанням", + "Delete": "Видалити", + "Delete this feature": "Вилучити цей об’єкт", + "Disable editing": "Вимкнути редагування", + "Display on load": "Відображати при завантаженні", + "Do you want to display a minimap?": "Показувати мінімапу?", + "Do you want to display popup footer?": "Хочете використовувати спливаючу підказку знизу?", + "Do you want to display the scale control?": "Показувати шкалу відстаней?", + "Download data": "Звантажити дані", + "Draw a line": "Намалювати лінію", + "Draw a marker": "Додати позначку", + "Draw a polygon": "Намалювати багатокутник", + "Draw a polyline": "Намалювати лінію", + "Drop": "Крапля", + "Dynamic": "Динамічний", + "Edit": "Редагувати", + "Edit feature's layer": "Змінити шар об’єкту", + "Edit map properties": "Редагуємо властивості мапи", + "Edit map settings": "Змінити властивості мапи", + "Edit this feature": "Редагувати цей об’єкт", + "Embed and share this map": "Вбудувати мапу та поділитися нею", + "Enable editing": "Задіяти редагування", + "Format": "Формат", + "From zoom": "З масштабу", + "Go to «{feature}»": "Перейти до «{feature}»", + "Hide controls": "Прибрати елементи управління", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Наскільки сильно спрощувати лінії на кожному масштабі (більше значення — більша швидкість, але виглядає гірше; менше значення — більш гладке відображення)", + "Import": "Імпорт", + "Import data": "Імпорт даних", + "Inherit": "Успадковувати", + "Licence": "Ліцензія", + "Map background credits": "Права/подяки на фонову мапу", + "Map user content has been published under licence": "Картографічні дані користувача опубліковані згідно ліцензії", + "More controls": "Інші елементи управління", + "Optional. Same as color if not set.": "Додатково. Якщо не вибрано, то як колір.", + "Optionnal.": "Додатково.", + "Paste here your data": "Вставити Ваші дані сюди", + "Please be sure the licence is compliant with your use.": "Переконайтеся, що ліцензія відповідає правилам використання.", + "Problem in the response": "Проблема з відповіддю", + "Problem in the response format": "Формат відповіді не розпізнано", + "Provide an URL here": "Вкажіть посилання тут", + "Remote data": "Віддалені дані", + "Save": "Зберегти", + "Save current edits": "Зберегти поточні правки", + "Save this center and zoom": "Зберегти такі центрування та масштаб", + "Show/hide layer": "Показати/приховати шар", + "Start editing": "Почати редагування", + "Stop editing": "Зупинити редагування", + "The zoom and center have been setted.": "Масштаб й центрування виставлені", + "To zoom": "Масштабувати", + "Untitled layer": "Шар без назви", + "Untitled map": "Безіменна мапа", + "Update permissions and editors": "Налаштувати привілеї та редакторів", + "Url": "Посилання", + "User content credits": "Права/подяки на користувацькі дані", + "Where do we go from here?": "Що можна зробити з мапою далі?", + "Zoom in": "Збільшити масштаб", + "Zoom out": "Зменшити масштаб", + "Zoom to layer extent": "Масштабувати до кордонів шару", + "Zoom to this feature": "Наблизитися до цього об’єкта", + "color": "колір", + "dash array": "штрихи", + "description": "опис", + "fill": "заливка", + "fill color": "колір заливки", + "fill opacity": "Непрозорість заливки", + "inherit": "успадковувати", + "licence": "ліцензія", + "name": "назва", + "no": "ні", + "opacity": "непрозорість", + "stroke": "штрихи", + "weight": "товщина", + "yes": "так", + "Editing": "Редагуємо ", + "Embed the map": "Вбудувати мапу", + "Short URL": "Коротке посилання", + "# one hash for main heading": "# один знак решітки — основний заголовок", + "## two hashes for second heading": "## два знаки решітки — підзаголовок", + "### three hashes for third heading": "### три знаки решітки — підзаголовок підзаголовка", + "**double star for bold**": "**подвійні зірочки — жирний**", + "*simple star for italic*": "*одинарні зірочки — курсив*", + "--- for an horizontal rule": "--- горизонтальна лінія", + "All properties are imported.": "Усі властивості імпортовані.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Як роздільник використовуються коми, табуляції і крапки з комою. Застосовується датум WGS84. Імпорт переглядає заголовок на наявність полів „lat“ та „lon“, регістр не має значення. Усі інші поля імпортуються як властивості.", + "Custom background": "Користувацька фонова мапа", + "Help": "Допомога", + "Image: {{http://image.url.com}}": "Зображення: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Посилання з текстом: [[http://example.com|текст для посилання]]", + "Properties imported:": "Імпортовані властивості: ", + "Simple link: [[http://example.com]]": "Просте посилання: [[http://example.com]]", + "Supported scheme": "Підтримувана схема", + "Supported variables that will be dynamically replaced": "Підтримувані змінні для автоматичної заміни", + "Text formatting": "Форматування тексту", + "attribution": "призначені властивості", + "display name": "відображувана назва", + "max zoom": "максимальний масштаб", + "min zoom": "мінімальний масштаб", + "Skipping unkown geometry.type: {type}": "Пропущена невідома властивість geometry.type: {type}", + "Please save the map before": "Будь ласка, спочатку збережіть мапу", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Ви можете використовувати властивості об’єктів як змінні. Наприклад, в „http://myserver.org/images/{name}.png“, змінна {name} буде замінена значенням поля „name“ кожної позначки на мапі.", + "Transform to polygon": "Перетворити на багатокутник", + "Transform to lines": "Перетворити на лінію", + "Choose the data format": "Виберіть формат даних", + "Error in the tilelayer URL": "Помилка в посиланні на шар мапи", + "Directions from here": "Навігація звідси", + "Choose a preset": "Виберіть шаблон", + "Limit bounds": "Встановлення меж", + "Use current bounds": "Використовувати поточні межі", + "max East": "макс. на схід", + "max North": "макс. на північ", + "max South": "макс. на південь", + "max West": "макс. на захід", + "TMS format": "Формат TMS", + "Credits": "Авторські права / подяки", + "Only visible features will be downloaded.": "Будуть завантажені лише відображувані об’єкти.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Відкрийте цю частину мапи у редакторі OpenStreetMap, щоб поліпшити дані", + "Default properties": "Властивості за умовчанням", + "User interface options": "Налаштування інтерфейсу", + "Image with custom width (in px): {{http://image.url.com|width}}": "Зображення із зазначенням ширини (в пікселях): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Поточний вид замість виду мапи за умовчанням?", + "Iframe export options": "Властивості експорту для Iframe", + "Include full screen link?": "Долучити посилання на повноекранний вид?", + "See full screen": "Дивитися в повноекранному режимі", + "height": "висота", + "width": "ширина", + "Clustered": "Кластеризованний", + "Clustering radius": "Радіус кластеризації", + "GeoRSS (only link)": "GeoRSS (лише посилання)", + "GeoRSS (title + image)": "GeoRSS (заголовок та зображення)", + "Heatmap": "Теплова мапа", + "Heatmap radius": "Радіус для теплової мапи", + "Name and description": "Назва та опис", + "Override clustering radius (default 80)": "Перевизначити радіус кластеризації (за умовчанням 80)", + "Override heatmap radius (default 25)": "Перевизначити радіус для теплової мапи (за умовчанням 25)", + "Proxy request": "Запит проксі", + "Table": "Таблиця", + "To use if remote server doesn't allow cross domain (slower)": "Якщо віддалений сервер не дозволяє крос-домен (повільно)", + "Type of layer": "Тип шару", + "Filter…": "Відбір…", + "Heatmap intensity property": "Властивість інтенсивності теплової мапи", + "Optional intensity property for heatmap": "Додаткові властивості інтенсивності теплової мапи", + "Caption": "Заголовок", + "Data browser": "Оглядач даних", + "Do you want to display a caption bar?": "Показувати рядок заголовку?", + "Do you want to display a panel on load?": "Показувати панель керування при завантаженні?", + "None": "Ні", + "by": "від", + "Name and description (large)": "Назва та опис (розширено)", + "Empty": "Очистити", + "Split line": "Розділити лінію", + "Clone": "Створити копію", + "Clone of {name}": "Копія {name}", + "Side panel": "Бічна панель", + "Powered by Leaflet and Django, glued by uMap project.": "Працює на Leaflet та Django, об’єднані проектом uMap.", + "Zoom level for automatic zooms": "Рівень масштабу для автоматичного масштабування", + "Do you want to display the «more» control?": "Показувати кнопку „Більше“?", + "Auto": "Автоматично", + "Default: name": "За умовчанням: назва", + "Property to use for sorting features": "Властивість для сортування об’єктів", + "Slideshow": "Слайдшоу", + "Start slideshow": "Почати слайдшоу", + "Stop slideshow": "Зупинити слайдшоу", + "Text color for the cluster label": "Колір тексту для позначок кластера", + "Zoom to the next": "Наблизитися до наступного", + "Zoom to the previous": "Наблизитися до попереднього", + "Add a new property": "Додати нову властивість", + "Are you sure you want to delete this property on all the features?": "Ви впевнені, що хочете вилучити цю властивість у всіх об’єктів?", + "Close": "Зачинити", + "Delete this property on all the features": "Вилучити цю властивість у всіх об’єктів", + "Edit properties in a table": "Редагувати властивості в таблиці", + "Please enter the name of the property": "Будь ласка, введіть назву властивості", + "Please enter the new name of this property": "Будь ласка, введіть нову назву властивості", + "Rename this property on all the features": "Перейменувати цю властивість у всіх об’єктів", + "If false, the polygon will act as a part of the underlying map.": "Якщо ні, тоді багатокутник буде виглядати як частина мапи", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe із зазначенням висоти (в пікселях): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Переглянути усе", + "Dynamic properties": "Динамічні властивості", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Використовуйте змінні в дужках з властивостями об’єктів, наприклад, {name}, вони будуть автоматично замінені відповідними значеннями.", + "Long credits": "Повний опис прав/подяки", + "No licence has been set": "Ліцензія не була зазначена", + "Popup content template": "Шаблон спливаючої підказки", + "Short credits": "Короткий опис прав/подяки", + "Will be displayed in the bottom right corner of the map": "Буде показано в правому нижньому кутку мапи", + "Will be visible in the caption of the map": "Буде показано у заголовку мапи", + "Map has been saved!": "Мапу збережено!", + "Save anyway": "Зберегти в будь-якому випадку", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Упс! Схоже, хтось інший теж редагує ці дані. Ви можете зберегти свої правки, але це знищить правки іншого учасника.", + "Comma separated list of properties to use when filtering features": "Список властивостей, розділених комами, для використання при фільтрації", + "Keep current visible layers": "Залишити поточні видимі шари", + "Coordinates": "Координати", + "Latitude": "Широта", + "Longitude": "Довгота", + "Continue line (Ctrl-click)": "Продовжити лінію (Ctrl + клацання)", + "Start a hole here": "Почати отвір звідси", + "Click last point to finish shape": "Клацніть на останній точці, щоб завершити", + "Click to add a marker": "Клацніть, щоб додати позначку", + "Click to continue drawing": "Клацайте, щоб продовжити малювання", + "Click to start drawing a line": "Клацайте, щоб продовжити малювання", + "Click to start drawing a polygon": "Клацніть, щоб почати малювання багатокутника", + "Import in a new layer": "Імпортувати в новий шар", + "Layer": "Шар", + "Please choose a format": "Будь ласка, виберіть формат", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Виміряти відстань", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/vi.js b/umap/static/umap/locale/vi.js new file mode 100644 index 00000000..0e877a4e --- /dev/null +++ b/umap/static/umap/locale/vi.js @@ -0,0 +1,352 @@ +var locale = { + "About": "Về", + "Action not allowed :(": "Hoạt động này không được phép", + "Add a layer": "Thêm một layer", + "Add symbol": "Thêm một symbol", + "Advanced actions": "Hoat động nâng cao", + "Advanced properties": "Thuộc tính nâng cao", + "Allow scroll wheel zoom?": "Cho phép thu phóng bằng chuột giữa?", + "An error occured": "Có lỗi", + "Are you sure you want to cancel your changes?": "Bạn có chắc muốn hủy các thay đổi?", + "Are you sure you want to clone this map and all its datalayers?": "Bạn có chắc muốn sao chép bản đồ này và các layer dữ liệu đi kèm với nó?", + "Are you sure you want to delete the feature?": "Bạn có chắc muốn xóa đối tượng này?", + "Are you sure you want to delete this map?": "Bạn có chắc muốn xóa bản đồ này?", + "Ball": "Bóng", + "Bring feature to center": "Đặt đối tượng vào giữa", + "Browse data": "Mở dữ liệu", + "Cancel": "Hủy", + "Cancel edits": "Hủy các chỉnh sửa", + "Center map on your location": "Tạo bản đồ với vị trí của bạn", + "Change map background": "Thay đổi bản đồ nền", + "Change symbol": "Thay đỏi symbol", + "Change tilelayers": "Thay đổi titlelayer", + "Choose the format of the data to import": "Chọn định dạng tập tin", + "Choose the layer of the feature": "Chọn lớp chức năng", + "Choose the layer to import in": "Chọn lớp cần nhập vào", + "Circle": "Vòng tròn", + "Clone this map": "Sao bản đồ này", + "Default": "Mặc định", + "Delete": "Xóa", + "Delete this feature": "Xóa chức năng này", + "Disable editing": "Tắt chỉnh sửa", + "Display on load": "Hiển thị khi tải", + "Do you want to display a minimap?": "Bạn có muốn hiện thị bản đồ nhỏ hay không?", + "Do you want to display popup footer?": "Bạn có muốn hiển thị thông báo ở dưới hay không?", + "Do you want to display the scale control?": "Bạn có muốn hiện thị bảng mở rộng hay không?", + "Download data": "Tải dữ liệu", + "Draw a line": "Vẽ đường thẳng", + "Draw a marker": "Vẽ điểm", + "Draw a polygon": "Vẽ đa giác", + "Draw a polyline": "Vẽ nhiều đường", + "Drop": "Bỏ", + "Dynamic": "Động", + "Edit": "Sửa", + "Edit feature's layer": "Chỉnh sửa lớp", + "Edit map properties": "Chỉnh sửa thuộc tính bản đồ", + "Edit map settings": "Tin chỉnh bản đồ", + "Edit this feature": "Sửa chức năng này", + "Embed and share this map": "Nhúng và chia sẽ bản đồ này", + "Enable editing": "Bật chức năng chỉnh sửa", + "Format": "Định dạng", + "From zoom": "Phóng to từ", + "Go to «{feature}»": "Tới «{feature}»", + "Hide controls": "Dấu bảng điều khiển", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Hãy chọn một định dạng", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("vi", locale); +L.setLocale("vi"); \ No newline at end of file diff --git a/umap/static/umap/locale/vi.json b/umap/static/umap/locale/vi.json new file mode 100644 index 00000000..abc32900 --- /dev/null +++ b/umap/static/umap/locale/vi.json @@ -0,0 +1,350 @@ +{ + "About": "Về", + "Action not allowed :(": "Hoạt động này không được phép", + "Add a layer": "Thêm một layer", + "Add symbol": "Thêm một symbol", + "Advanced actions": "Hoat động nâng cao", + "Advanced properties": "Thuộc tính nâng cao", + "Allow scroll wheel zoom?": "Cho phép thu phóng bằng chuột giữa?", + "An error occured": "Có lỗi", + "Are you sure you want to cancel your changes?": "Bạn có chắc muốn hủy các thay đổi?", + "Are you sure you want to clone this map and all its datalayers?": "Bạn có chắc muốn sao chép bản đồ này và các layer dữ liệu đi kèm với nó?", + "Are you sure you want to delete the feature?": "Bạn có chắc muốn xóa đối tượng này?", + "Are you sure you want to delete this map?": "Bạn có chắc muốn xóa bản đồ này?", + "Ball": "Bóng", + "Bring feature to center": "Đặt đối tượng vào giữa", + "Browse data": "Mở dữ liệu", + "Cancel": "Hủy", + "Cancel edits": "Hủy các chỉnh sửa", + "Center map on your location": "Tạo bản đồ với vị trí của bạn", + "Change map background": "Thay đổi bản đồ nền", + "Change symbol": "Thay đỏi symbol", + "Change tilelayers": "Thay đổi titlelayer", + "Choose the format of the data to import": "Chọn định dạng tập tin", + "Choose the layer of the feature": "Chọn lớp chức năng", + "Choose the layer to import in": "Chọn lớp cần nhập vào", + "Circle": "Vòng tròn", + "Clone this map": "Sao bản đồ này", + "Default": "Mặc định", + "Delete": "Xóa", + "Delete this feature": "Xóa chức năng này", + "Disable editing": "Tắt chỉnh sửa", + "Display on load": "Hiển thị khi tải", + "Do you want to display a minimap?": "Bạn có muốn hiện thị bản đồ nhỏ hay không?", + "Do you want to display popup footer?": "Bạn có muốn hiển thị thông báo ở dưới hay không?", + "Do you want to display the scale control?": "Bạn có muốn hiện thị bảng mở rộng hay không?", + "Download data": "Tải dữ liệu", + "Draw a line": "Vẽ đường thẳng", + "Draw a marker": "Vẽ điểm", + "Draw a polygon": "Vẽ đa giác", + "Draw a polyline": "Vẽ nhiều đường", + "Drop": "Bỏ", + "Dynamic": "Động", + "Edit": "Sửa", + "Edit feature's layer": "Chỉnh sửa lớp", + "Edit map properties": "Chỉnh sửa thuộc tính bản đồ", + "Edit map settings": "Tin chỉnh bản đồ", + "Edit this feature": "Sửa chức năng này", + "Embed and share this map": "Nhúng và chia sẽ bản đồ này", + "Enable editing": "Bật chức năng chỉnh sửa", + "Format": "Định dạng", + "From zoom": "Phóng to từ", + "Go to «{feature}»": "Tới «{feature}»", + "Hide controls": "Dấu bảng điều khiển", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Hãy chọn một định dạng", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/vi_VN.json b/umap/static/umap/locale/vi_VN.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/vi_VN.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/zh.js b/umap/static/umap/locale/zh.js new file mode 100644 index 00000000..239bfbfa --- /dev/null +++ b/umap/static/umap/locale/zh.js @@ -0,0 +1,352 @@ +var locale = { + "About": "关于", + "Action not allowed :(": "操作不允许", + "Add a layer": "增加图层", + "Add symbol": "增加符号", + "Advanced actions": "高级操作", + "Advanced properties": "高级属性", + "Allow scroll wheel zoom?": "是否允许滚轮缩放?", + "An error occured": "发生错误", + "Are you sure you want to cancel your changes?": "是否确定取消改变?", + "Are you sure you want to clone this map and all its datalayers?": "是否确定复制这个地图及其所有数据图层?", + "Are you sure you want to delete the feature?": "是否确定删除该要素?", + "Are you sure you want to delete this map?": "是否确定删除地图?", + "Ball": "Ball", + "Bring feature to center": "移到以对象为中心", + "Browse data": "浏览数据", + "Cancel": "取消", + "Cancel edits": "取消编辑", + "Center map on your location": "Center map on your location", + "Change map background": "改变地图背景", + "Change symbol": "改变符号", + "Change tilelayers": "改变瓦片图层", + "Choose the format of the data to import": "选择导入的数据格式", + "Choose the layer of the feature": "选择要素的图层", + "Choose the layer to import in": "选择导入的图层", + "Circle": "圆", + "Clone this map": "复制地图", + "Default": "默认", + "Delete": "删除", + "Delete this feature": "删除对象", + "Disable editing": "不可编辑", + "Display on load": "加载时显示", + "Do you want to display a minimap?": "是否想显示鹰眼图?", + "Do you want to display popup footer?": "你是否想要显示页脚?", + "Do you want to display the scale control?": "是否显示比例尺控件?", + "Download data": "下载数据", + "Draw a line": "画线", + "Draw a marker": "画标记", + "Draw a polygon": "画多边形", + "Draw a polyline": "画线", + "Drop": "Drop", + "Dynamic": "动态", + "Edit": "编辑", + "Edit feature's layer": "编辑要素图层", + "Edit map properties": "编辑地图属性", + "Edit map settings": "编辑地图设置", + "Edit this feature": "编辑该要素", + "Embed and share this map": "嵌入与分享地图", + "Enable editing": "可编辑", + "Format": "格式", + "From zoom": "From zoom", + "Go to «{feature}»": "转到«{feature}»", + "Hide controls": "隐藏控件", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "导入", + "Import data": "导入数据", + "Inherit": "继承", + "Licence": "许可证", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "更多控件", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "粘贴", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "响应错误", + "Problem in the response format": "响应内容格式问题", + "Provide an URL here": "提供URL", + "Remote data": "远程数据", + "Save": "保存", + "Save current edits": "保存当前编辑内容", + "Save this center and zoom": "保存地图中心与比例尺", + "Show/hide layer": "显示/隐藏图层", + "Start editing": "开始编辑", + "Stop editing": "结束编辑", + "The zoom and center have been setted.": "缩放比例尺与中心设置完成", + "To zoom": "放大", + "Untitled layer": "未命名图层", + "Untitled map": "未命名地图", + "Update permissions and editors": "更新权限与编辑员", + "Url": "Url", + "User content credits": "用户内容信用", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "缩小", + "Zoom out": "放大", + "Zoom to layer extent": "缩放到图层范围", + "Zoom to this feature": "缩放到该对象", + "color": "颜色", + "dash array": "dash array", + "description": "描述", + "fill": "填充", + "fill color": "填充色", + "fill opacity": "透明", + "inherit": "inherit", + "licence": "licence", + "name": "名称", + "no": "否", + "opacity": "不透明度", + "stroke": "画笔", + "weight": "weight", + "yes": "是", + "Editing": "编辑", + "Embed the map": "嵌入地图", + "Short URL": "Short URL", + "# one hash for main heading": "# 一个井号表示一级标题", + "## two hashes for second heading": "## 两个井号表示二级标题", + "### three hashes for third heading": "### 三个井号表示三级标题", + "**double star for bold**": "**两个星号表示粗体**", + "*simple star for italic*": "*一个星号表示斜体*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "属性已导入。", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "自定义背景", + "Help": "帮助", + "Image: {{http://image.url.com}}": "图片: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "文本格式", + "attribution": "属性", + "display name": "显示名称", + "max zoom": "最大缩放等级", + "min zoom": "最小缩放等级", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "请先保存地图", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "转换为多边形", + "Transform to lines": "转换为线", + "Choose the data format": "选择数据格式", + "Error in the tilelayer URL": "瓦片图层URL错误", + "Directions from here": "方向", + "Choose a preset": "Choose a preset", + "Limit bounds": "限制外包框", + "Use current bounds": "使用当前范围", + "max East": "东", + "max North": "北", + "max South": "南", + "max West": "西", + "TMS format": "TMS格式", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "默认属性", + "User interface options": "用户接口选项", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "使用当前视口替换默认地图视口?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "全屏", + "height": "高", + "width": "宽", + "Clustered": "Clustered", + "Clustering radius": "聚类半径", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "名称与描述", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "表格", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "图层类型", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "数据浏览器", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "空", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "空", + "Split line": "打断线", + "Clone": "复制", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "是否显示 «more» 控件?", + "Auto": "自动", + "Default: name": "默认:名称", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "幻灯秀", + "Start slideshow": "开始幻灯秀", + "Stop slideshow": "结束幻灯秀", + "Text color for the cluster label": "标注文本颜色", + "Zoom to the next": "下一个", + "Zoom to the previous": "上一个", + "Add a new property": "添加属性", + "Are you sure you want to delete this property on all the features?": "是否确定删除全部要素的该属性?", + "Close": "关闭", + "Delete this property on all the features": "删除全部要素的该属性", + "Edit properties in a table": "在表格中编辑属性", + "Please enter the name of the property": "请输入属性名称", + "Please enter the new name of this property": "请输入属性的新名称", + "Rename this property on all the features": "重命名全部要素的该属性", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "查看全部", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "坐标", + "Latitude": "纬度", + "Longitude": "经度", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "导入一个新图层", + "Layer": "图层", + "Please choose a format": "请选择一种格式", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "测距", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +}; +L.registerLocale("zh", locale); +L.setLocale("zh"); \ No newline at end of file diff --git a/umap/static/umap/locale/zh.json b/umap/static/umap/locale/zh.json new file mode 100644 index 00000000..6f233210 --- /dev/null +++ b/umap/static/umap/locale/zh.json @@ -0,0 +1,350 @@ +{ + "About": "关于", + "Action not allowed :(": "操作不允许", + "Add a layer": "增加图层", + "Add symbol": "增加符号", + "Advanced actions": "高级操作", + "Advanced properties": "高级属性", + "Allow scroll wheel zoom?": "是否允许滚轮缩放?", + "An error occured": "发生错误", + "Are you sure you want to cancel your changes?": "是否确定取消改变?", + "Are you sure you want to clone this map and all its datalayers?": "是否确定复制这个地图及其所有数据图层?", + "Are you sure you want to delete the feature?": "是否确定删除该要素?", + "Are you sure you want to delete this map?": "是否确定删除地图?", + "Ball": "Ball", + "Bring feature to center": "移到以对象为中心", + "Browse data": "浏览数据", + "Cancel": "取消", + "Cancel edits": "取消编辑", + "Center map on your location": "Center map on your location", + "Change map background": "改变地图背景", + "Change symbol": "改变符号", + "Change tilelayers": "改变瓦片图层", + "Choose the format of the data to import": "选择导入的数据格式", + "Choose the layer of the feature": "选择要素的图层", + "Choose the layer to import in": "选择导入的图层", + "Circle": "圆", + "Clone this map": "复制地图", + "Default": "默认", + "Delete": "删除", + "Delete this feature": "删除对象", + "Disable editing": "不可编辑", + "Display on load": "加载时显示", + "Do you want to display a minimap?": "是否想显示鹰眼图?", + "Do you want to display popup footer?": "你是否想要显示页脚?", + "Do you want to display the scale control?": "是否显示比例尺控件?", + "Download data": "下载数据", + "Draw a line": "画线", + "Draw a marker": "画标记", + "Draw a polygon": "画多边形", + "Draw a polyline": "画线", + "Drop": "Drop", + "Dynamic": "动态", + "Edit": "编辑", + "Edit feature's layer": "编辑要素图层", + "Edit map properties": "编辑地图属性", + "Edit map settings": "编辑地图设置", + "Edit this feature": "编辑该要素", + "Embed and share this map": "嵌入与分享地图", + "Enable editing": "可编辑", + "Format": "格式", + "From zoom": "From zoom", + "Go to «{feature}»": "转到«{feature}»", + "Hide controls": "隐藏控件", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "导入", + "Import data": "导入数据", + "Inherit": "继承", + "Licence": "许可证", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "更多控件", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "粘贴", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "响应错误", + "Problem in the response format": "响应内容格式问题", + "Provide an URL here": "提供URL", + "Remote data": "远程数据", + "Save": "保存", + "Save current edits": "保存当前编辑内容", + "Save this center and zoom": "保存地图中心与比例尺", + "Show/hide layer": "显示/隐藏图层", + "Start editing": "开始编辑", + "Stop editing": "结束编辑", + "The zoom and center have been setted.": "缩放比例尺与中心设置完成", + "To zoom": "放大", + "Untitled layer": "未命名图层", + "Untitled map": "未命名地图", + "Update permissions and editors": "更新权限与编辑员", + "Url": "Url", + "User content credits": "用户内容信用", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "缩小", + "Zoom out": "放大", + "Zoom to layer extent": "缩放到图层范围", + "Zoom to this feature": "缩放到该对象", + "color": "颜色", + "dash array": "dash array", + "description": "描述", + "fill": "填充", + "fill color": "填充色", + "fill opacity": "透明", + "inherit": "inherit", + "licence": "licence", + "name": "名称", + "no": "否", + "opacity": "不透明度", + "stroke": "画笔", + "weight": "weight", + "yes": "是", + "Editing": "编辑", + "Embed the map": "嵌入地图", + "Short URL": "Short URL", + "# one hash for main heading": "# 一个井号表示一级标题", + "## two hashes for second heading": "## 两个井号表示二级标题", + "### three hashes for third heading": "### 三个井号表示三级标题", + "**double star for bold**": "**两个星号表示粗体**", + "*simple star for italic*": "*一个星号表示斜体*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "属性已导入。", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "自定义背景", + "Help": "帮助", + "Image: {{http://image.url.com}}": "图片: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "文本格式", + "attribution": "属性", + "display name": "显示名称", + "max zoom": "最大缩放等级", + "min zoom": "最小缩放等级", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "请先保存地图", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "转换为多边形", + "Transform to lines": "转换为线", + "Choose the data format": "选择数据格式", + "Error in the tilelayer URL": "瓦片图层URL错误", + "Directions from here": "方向", + "Choose a preset": "Choose a preset", + "Limit bounds": "限制外包框", + "Use current bounds": "使用当前范围", + "max East": "东", + "max North": "北", + "max South": "南", + "max West": "西", + "TMS format": "TMS格式", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "默认属性", + "User interface options": "用户接口选项", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "使用当前视口替换默认地图视口?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "全屏", + "height": "高", + "width": "宽", + "Clustered": "Clustered", + "Clustering radius": "聚类半径", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "名称与描述", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "表格", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "图层类型", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "数据浏览器", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "空", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "空", + "Split line": "打断线", + "Clone": "复制", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "是否显示 «more» 控件?", + "Auto": "自动", + "Default: name": "默认:名称", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "幻灯秀", + "Start slideshow": "开始幻灯秀", + "Stop slideshow": "结束幻灯秀", + "Text color for the cluster label": "标注文本颜色", + "Zoom to the next": "下一个", + "Zoom to the previous": "上一个", + "Add a new property": "添加属性", + "Are you sure you want to delete this property on all the features?": "是否确定删除全部要素的该属性?", + "Close": "关闭", + "Delete this property on all the features": "删除全部要素的该属性", + "Edit properties in a table": "在表格中编辑属性", + "Please enter the name of the property": "请输入属性名称", + "Please enter the new name of this property": "请输入属性的新名称", + "Rename this property on all the features": "重命名全部要素的该属性", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "查看全部", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "坐标", + "Latitude": "纬度", + "Longitude": "经度", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "导入一个新图层", + "Layer": "图层", + "Please choose a format": "请选择一种格式", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "测距", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/zh_CN.json b/umap/static/umap/locale/zh_CN.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/zh_CN.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/zh_TW.Big5.json b/umap/static/umap/locale/zh_TW.Big5.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/zh_TW.Big5.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/zh_TW.js b/umap/static/umap/locale/zh_TW.js new file mode 100644 index 00000000..365b632d --- /dev/null +++ b/umap/static/umap/locale/zh_TW.js @@ -0,0 +1,352 @@ +var locale = { + "About": "關於", + "Action not allowed :(": "行為不被允許:(", + "Add a layer": "新增圖層", + "Add symbol": "新增圖示", + "Advanced actions": "進階動作", + "Advanced properties": "進階屬性", + "Allow scroll wheel zoom?": "允許捲動放大?", + "An error occured": "發生錯誤", + "Are you sure you want to cancel your changes?": "您確定要取消您所做的變更?", + "Are you sure you want to clone this map and all its datalayers?": "您確定要複製此地圖及所有資料圖層?", + "Are you sure you want to delete the feature?": "您確定要刪除該圖徵?", + "Are you sure you want to delete this map?": "您確定要刪除此地圖?", + "Ball": "球", + "Bring feature to center": "將圖徵置中", + "Browse data": "瀏覽資料", + "Cancel": "取消", + "Cancel edits": "取消編輯", + "Center map on your location": "將您的位置設為地圖中心", + "Change map background": "更改地圖背景", + "Change symbol": "更改圖示", + "Change tilelayers": "改變地圖磚圖層", + "Choose the format of the data to import": "選擇匯入的資料格式", + "Choose the layer of the feature": "選擇圖徵的圖層", + "Choose the layer to import in": "選擇匯入圖層", + "Circle": "圓圈", + "Clone this map": "複製此地圖", + "Default": "預設", + "Delete": "刪除", + "Delete this feature": "刪除此圖徵", + "Disable editing": "停用編輯功能", + "Display on load": "載入時顯示", + "Do you want to display a minimap?": "您想要顯示小型地圖嗎?", + "Do you want to display popup footer?": "您是否要顯示註腳彈出?", + "Do you want to display the scale control?": "您是否要顯示尺標?", + "Download data": "下載資料", + "Draw a line": "描繪線條", + "Draw a marker": "描繪標記", + "Draw a polygon": "描繪多邊形", + "Draw a polyline": "描繪折線", + "Drop": "中止", + "Dynamic": "動態", + "Edit": "編輯", + "Edit feature's layer": "編輯圖徵的圖層", + "Edit map properties": "編輯地圖屬性", + "Edit map settings": "編輯地圖設定值", + "Edit this feature": "編輯此圖徵", + "Embed and share this map": "將地圖內嵌並分享", + "Enable editing": "啟用編輯功能", + "Format": "格式", + "From zoom": "由縮放大小", + "Go to «{feature}»": "轉至 «{feature}»", + "Hide controls": "隱藏控制列", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "在不同縮放比例下,多邊形的精簡程度 (精簡越多有較好的效率、多邊形越平滑,精簡越少圖形越精確)", + "Import": "匯入", + "Import data": "匯入資料", + "Inherit": "繼承", + "Licence": "授權", + "Map background credits": "地圖背景取自", + "Map user content has been published under licence": "使用者地圖資訊內容已經以以下授權發佈", + "More controls": "更多控制項目", + "Optional. Same as color if not set.": "可選,若您未選取顏色,則採用預設值", + "Optionnal.": "選填", + "Paste here your data": "在此貼入資料", + "Please be sure the licence is compliant with your use.": "請再次確認所選的授權方式符合您的需求", + "Problem in the response": "回應出現錯誤", + "Problem in the response format": "回應的格式出現錯誤", + "Provide an URL here": "提供 URL網址", + "Remote data": "遠端資料", + "Save": "儲存", + "Save current edits": "儲存近期的變更", + "Save this center and zoom": "保存地圖中心點位置與縮放大小", + "Show/hide layer": "顯示/隱藏圖層", + "Start editing": "開始編輯", + "Stop editing": "停止編輯", + "The zoom and center have been setted.": "已完成置中及切換功能設定", + "To zoom": "至縮放大小", + "Untitled layer": "未命名圖層", + "Untitled map": "未命名地圖", + "Update permissions and editors": "更新可編輯權限及編輯者", + "Url": "網址", + "User content credits": "使用者內容清單", + "Where do we go from here?": "我們要去哪裡?", + "Zoom in": "放大", + "Zoom out": "縮小", + "Zoom to layer extent": "切換至圖層範圍", + "Zoom to this feature": "縮放至圖徵範圍", + "color": "色彩", + "dash array": "虛線排列", + "description": "描述", + "fill": "填入", + "fill color": "填入色彩", + "fill opacity": "填入不透明度", + "inherit": "繼承", + "licence": "授權", + "name": "名稱", + "no": "否", + "opacity": "不透明度", + "stroke": "筆畫粗細", + "weight": "寬度", + "yes": "是", + "Editing": "編輯", + "Embed the map": "嵌入地圖", + "Short URL": "短網址", + "# one hash for main heading": "單個 # 代表主標題", + "## two hashes for second heading": "兩個 # 代表次標題", + "### three hashes for third heading": "三個 # 代表第三標題", + "**double star for bold**": "** 重複兩次星號代表粗體 **", + "*simple star for italic*": "*單個星號代表斜體*", + "--- for an horizontal rule": "-- 代表水平線", + "All properties are imported.": "所有物件皆已匯入", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "使用逗號、定位鍵或是分號分隔的地理數據。預設座標系為 SRS WGS84。只會匯入地理座標點。匯入時抓取 «lat» 與 «lon» 開頭的欄位資料,不分大小寫。其他欄位則歸入屬性資料。", + "Custom background": "自訂背景", + "Help": "幫助", + "Image: {{http://image.url.com}}": "圖像: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "帶有超連結的文字: [[http://example.com|text of the link]]", + "Properties imported:": "屬性匯入完成", + "Simple link: [[http://example.com]]": "簡單連結: [[http://example.com]]", + "Supported scheme": "支援的模板", + "Supported variables that will be dynamically replaced": "支援的物件將直接動態轉換", + "Text formatting": "文字格式", + "attribution": "表彰", + "display name": "顯示名稱", + "max zoom": "放到最大", + "min zoom": "縮至最小", + "Skipping unkown geometry.type: {type}": "略過未知的地理資料格式 geometry.type: {type}", + "Please save the map before": "請先儲存您的地圖", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "您可以圖徵屬性作為變數使用:例如 \"http://myserver.org/images/{name}.png\", 這裡 {name} 是個變數,會以圖標的 \"name\" 值來取代。", + "Transform to polygon": "轉換為多邊形", + "Transform to lines": "轉換為線條", + "Choose the data format": "選擇資料格式", + "Error in the tilelayer URL": "地圖磚圖層 URL 錯誤", + "Directions from here": "從此處開始導航", + "Choose a preset": "選擇一種預設值", + "Limit bounds": "限制範圍", + "Use current bounds": "使用目前範圍", + "max East": "最東方", + "max North": "最北方", + "max South": "最南方", + "max West": "最西方", + "TMS format": "TMS 格式", + "Credits": "工作人員名單", + "Only visible features will be downloaded.": "只有可見的圖徵會被下載", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "在地圖編輯器中打開此地圖,提供更多準確資料給 OpenStreetMap", + "Default properties": "預設屬性", + "User interface options": "使用者界面選項", + "Image with custom width (in px): {{http://image.url.com|width}}": "自訂圖像的寬度(像素): {{http://image.url.com|width}}", + "Current view instead of default map view?": "將目前視點設為預設視點?", + "Iframe export options": "Iframe 匯出選項", + "Include full screen link?": "是否包含全螢幕的連結?", + "See full screen": "觀看全螢幕", + "height": "高度", + "width": "寬度", + "Clustered": "群集後", + "Clustering radius": "群集分析半徑", + "GeoRSS (only link)": "GeoRSS (只有連結)", + "GeoRSS (title + image)": "GeoRSS (標題與圖片)", + "Heatmap": "熱點圖", + "Heatmap radius": "熱點圖半徑", + "Name and description": "名稱與說明", + "Override clustering radius (default 80)": "覆蓋群集分析半徑 (預設80)", + "Override heatmap radius (default 25)": "覆蓋指定熱圖 heatmap 半徑 (預設 25)", + "Proxy request": "使用代理請求", + "Table": "表格", + "To use if remote server doesn't allow cross domain (slower)": "如果遠端伺服器不允許跨網域存取時使用 (效率較差)", + "Type of layer": "圖層類型", + "Filter…": "篩選器", + "Heatmap intensity property": "熱點圖強度屬性", + "Optional intensity property for heatmap": "選用的熱圖 heatmap 強度屬性", + "Caption": "標題", + "Data browser": "資料檢視器", + "Do you want to display a caption bar?": "您是否要顯示標題列?", + "Do you want to display a panel on load?": "您是否要顯示", + "None": "以上皆非", + "by": "由", + "Name and description (large)": "名稱和敘述(大型)", + "Empty": "空白", + "Split line": "分隔線", + "Clone": "複製", + "Clone of {name}": "複製 {name}", + "Side panel": "側邊框", + "Powered by Leaflet and Django, glued by uMap project.": "使用 LeafletDjango 技術﹐由 uMap 計畫 整合。", + "Zoom level for automatic zooms": "自動縮放的比例大小", + "Do you want to display the «more» control?": "您是否要顯示 《更多》?", + "Auto": "自動", + "Default: name": "預設: name", + "Property to use for sorting features": "排序圖徵所使用的屬性", + "Slideshow": "投影片", + "Start slideshow": "開啟投影片", + "Stop slideshow": "中止投影片", + "Text color for the cluster label": "叢集標籤的文字顏色", + "Zoom to the next": "切換至下一頁", + "Zoom to the previous": "切換至前一頁", + "Add a new property": "新增屬性", + "Are you sure you want to delete this property on all the features?": "您確定要刪除所有圖徵中的此項屬性?", + "Close": "關閉", + "Delete this property on all the features": "從所有圖徵中刪除此屬性", + "Edit properties in a table": "在表格中編輯屬性", + "Please enter the name of the property": "請輸入物件名稱", + "Please enter the new name of this property": "請輸入新的物件名稱", + "Rename this property on all the features": "在所有特徵中重新命名該物件", + "If false, the polygon will act as a part of the underlying map.": "選擇「否」時,多邊形物件會被當成為底圖的一部分。", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "自訂 iframe 高度 (以 px 為單位): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "觀看完整內容", + "Dynamic properties": "動態屬性", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "以圖徵的屬性加上括弧作為標記,例如 {name},這樣子就可以動態被取代成對應的數值。", + "Long credits": "詳細工作人員名單", + "No licence has been set": "尚未設定授權條例", + "Popup content template": "彈出內文範本", + "Short credits": "簡短工作人員名單", + "Will be displayed in the bottom right corner of the map": "將會顯示在地圖的右下角", + "Will be visible in the caption of the map": "標題將出現在地圖上", + "Map has been saved!": "地圖儲存已完成", + "Save anyway": "通通都儲存吧!", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "糟糕,好像有人正在進行編輯,您仍可儲存資料,但您做的變更將被他人修改取代。", + "Comma separated list of properties to use when filtering features": "以逗號分開列出篩選時要使用的屬性", + "Keep current visible layers": "保留目前可見圖層", + "Coordinates": "座標", + "Latitude": "緯度", + "Longitude": "經度", + "Continue line (Ctrl-click)": "連續線(Ctrl+點擊鍵)", + "Start a hole here": "開始一個凹洞", + "Click last point to finish shape": "點下最後一點後完成外形", + "Click to add a marker": "點選以新增標記", + "Click to continue drawing": "點擊以繼續繪製", + "Click to start drawing a line": "點擊以開始繪製直線", + "Click to start drawing a polygon": "點選開始繪製多邊形", + "Import in a new layer": "匯入至新圖層", + "Layer": "圖層", + "Please choose a format": "請選擇地圖格式", + "Imports all umap data, including layers and settings.": "匯入所有 umap 資料,包含圖層與設定。", + "Invalid umap data": "無效的 umap 資料", + "Invalid umap data in {filename}": "無效的 umap 資料於檔案 {filename}", + "Add a line to the current multi": "新增線段", + "Add a polygon to the current multi": "新增多邊形", + "Click to edit": "點擊開始編輯", + "Continue line": "連續線段", + "Delete this shape": "刪除外形", + "Make main shape": "設為主要外形", + "Merge lines": "合併線段", + "Remove shape from the multi": "移除外形", + "Transfer shape to edited feature": "將外形加到編輯中的特徵", + "next": "下一個", + "previous": "前一個", + "Measure distances": "測量距離", + "NM": "NM", + "kilometers": "公里", + "km": "km", + "mi": "mi", + "miles": "英里", + "nautical miles": "海浬", + "{area} acres": "{area} 弧線", + "{area} ha": "{area} ha", + "{area} m²": "{area} 平方公尺", + "{area} mi²": "{area} 平方英哩", + "{area} yd²": "{area} 平方英呎", + "{distance} NM": "{距離} NM", + "{distance} km": "{距離} km", + "{distance} m": "{distance} 公尺", + "{distance} miles": "{distance} 英哩", + "{distance} yd": "{distance} 英呎", + "Are you sure you want to restore this version?": "您確定要回復此一版本嗎?", + "Extract shape to separate feature": "由外形分離出圖徵", + "Layer properties": "圖層屬性", + "Restore this version": "回復此版本", + "Versions": "版本", + "You have unsaved changes.": "您有變更尚未儲存", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "用逗號來分隔一列列的虛線模式,例如:\"5, 10, 15\"。", + "Advanced transition": "進階轉換", + "Allow interactions": "允許互動", + "Autostart when map is loaded": "當讀取地圖時自動啟動", + "Default interaction options": "預設互動選項", + "Default shape properties": "預設形狀屬性", + "Default zoom level": "預設縮放等級", + "Define link to open in a new window on polygon click.": "指定點多邊形連結時開新視窗。", + "Delete this vertex (Alt-click)": "刪除頂點 (Alt-click)", + "Display the control to open OpenStreetMap editor": "顯示開啟開放街圖編輯器的按鍵", + "Display the data layers control": "顯示資料圖層鍵", + "Display the embed control": "顯示嵌入鍵", + "Display the fullscreen control": "顯示全螢幕鍵", + "Display the locate control": "顯示定位鍵", + "Display the measure control": "顯示比例尺鍵", + "Display the search control": "顯示搜尋鍵", + "Display the tile layers control": "顯示圖層鍵", + "Display the zoom control": "顯示縮放鍵", + "Exit Fullscreen": "結束全螢幕模式", + "Fetch data each time map view changes.": "每次地圖檢視改變時截取資料。", + "Filter keys": "篩選鍵", + "Icon shape": "圖示圖形", + "Icon symbol": "圖示標誌", + "Interaction options": "互動選項", + "Label key": "標籤鍵", + "Link to…": "連結至...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "必須是有效的 CSS 值 (例如:DarkBlue 或是 #123456)", + "No results": "沒有結果", + "Popup style": "彈出視窗樣式", + "Replace layer content": "取代圖層內容", + "Save this location as new feature": "將地點存為新的圖徵", + "Search location": "搜尋地點", + "Set URL": "設定網址", + "Shape properties": "形狀屬性", + "Simplify": "簡化", + "Sort key": "排序鍵", + "The name of the property to use as feature label (ex.: \"nom\")": "用作圖徵標籤的屬性名稱 (例如:“nom”)", + "Toggle edit mode (shift-click)": "切換編輯模式 (shift-click)", + "View Fullscreen": "以全屏幕模式顯示", + "Whether to display or not polygons paths.": "是否顯示多邊形的路徑。", + "Whether to fill polygons with color.": "是否將多邊形填入色彩。", + "Zoom to this place": "縮放到這個地方", + "always": "經常", + "clear": "清除", + "define": "定義", + "hidden": "隱藏", + "never": "永不", + "Automatic": "自動", + "Clone this feature": "複製此項目", + "Display label": "顯示標籤", + "Drag to reorder": "拖拽以排序", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "自訂 iframe 高度和寬度 (以 px 為單位):{{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "標籤可點擊", + "Label direction": "標籤方向", + "Manage layers": "管理圖層", + "On the bottom": "在底部", + "On the left": "在左側", + "On the right": "在右側", + "On the top": "在頂部", + "Only display label on mouse hover": "僅在滑鼠移至標籤時顯示", + "Open link in…": "開啓連結於...", + "Unable to detect format of file {filename}": "無法偵測 {filename} 的檔案格式", + "collapsed": "收起", + "expanded": "展開", + "iframe": "iframe", + "new window": "新視窗", + "parent window": "父視窗", + "{count} errors during import: {message}": "於匯入時發生 {count} 項錯誤: {message}", + "Are you sure you want to delete this layer?": "你確定要刪除這個圖層嗎?", + "Delete layer": "刪除圖層", + "Error while fetching {url}": "擷取網址時發生錯誤 {url}", + "Home": "首頁", + "Delete all layers": "刪除所有圖層", + "Full map data": "全部地圖資料", + "Smart transitions": "智慧轉換", + "Activate slideshow mode": "開啟幻燈片模式", + "Data is browsable": "資料是可檢視的", + "Delay between two transitions when in play mode": "播放模式下兩個轉換間會延遲", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "設定為假時,在幻燈片時、資料檢視器和彈出式導航中可將此圖層隱藏...", + "{delay} seconds": "{delay} 秒", + "Display measure": "Display measure" +}; +L.registerLocale("zh_TW", locale); +L.setLocale("zh_TW"); \ No newline at end of file diff --git a/umap/static/umap/locale/zh_TW.json b/umap/static/umap/locale/zh_TW.json new file mode 100644 index 00000000..6b7b4188 --- /dev/null +++ b/umap/static/umap/locale/zh_TW.json @@ -0,0 +1,350 @@ +{ + "About": "關於", + "Action not allowed :(": "行為不被允許:(", + "Add a layer": "新增圖層", + "Add symbol": "新增圖示", + "Advanced actions": "進階動作", + "Advanced properties": "進階屬性", + "Allow scroll wheel zoom?": "允許捲動放大?", + "An error occured": "發生錯誤", + "Are you sure you want to cancel your changes?": "您確定要取消您所做的變更?", + "Are you sure you want to clone this map and all its datalayers?": "您確定要複製此地圖及所有資料圖層?", + "Are you sure you want to delete the feature?": "您確定要刪除該圖徵?", + "Are you sure you want to delete this map?": "您確定要刪除此地圖?", + "Ball": "球", + "Bring feature to center": "將圖徵置中", + "Browse data": "瀏覽資料", + "Cancel": "取消", + "Cancel edits": "取消編輯", + "Center map on your location": "將您的位置設為地圖中心", + "Change map background": "更改地圖背景", + "Change symbol": "更改圖示", + "Change tilelayers": "改變地圖磚圖層", + "Choose the format of the data to import": "選擇匯入的資料格式", + "Choose the layer of the feature": "選擇圖徵的圖層", + "Choose the layer to import in": "選擇匯入圖層", + "Circle": "圓圈", + "Clone this map": "複製此地圖", + "Default": "預設", + "Delete": "刪除", + "Delete this feature": "刪除此圖徵", + "Disable editing": "停用編輯功能", + "Display on load": "載入時顯示", + "Do you want to display a minimap?": "您想要顯示小型地圖嗎?", + "Do you want to display popup footer?": "您是否要顯示註腳彈出?", + "Do you want to display the scale control?": "您是否要顯示尺標?", + "Download data": "下載資料", + "Draw a line": "描繪線條", + "Draw a marker": "描繪標記", + "Draw a polygon": "描繪多邊形", + "Draw a polyline": "描繪折線", + "Drop": "中止", + "Dynamic": "動態", + "Edit": "編輯", + "Edit feature's layer": "編輯圖徵的圖層", + "Edit map properties": "編輯地圖屬性", + "Edit map settings": "編輯地圖設定值", + "Edit this feature": "編輯此圖徵", + "Embed and share this map": "將地圖內嵌並分享", + "Enable editing": "啟用編輯功能", + "Format": "格式", + "From zoom": "由縮放大小", + "Go to «{feature}»": "轉至 «{feature}»", + "Hide controls": "隱藏控制列", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "在不同縮放比例下,多邊形的精簡程度 (精簡越多有較好的效率、多邊形越平滑,精簡越少圖形越精確)", + "Import": "匯入", + "Import data": "匯入資料", + "Inherit": "繼承", + "Licence": "授權", + "Map background credits": "地圖背景取自", + "Map user content has been published under licence": "使用者地圖資訊內容已經以以下授權發佈", + "More controls": "更多控制項目", + "Optional. Same as color if not set.": "可選,若您未選取顏色,則採用預設值", + "Optionnal.": "選填", + "Paste here your data": "在此貼入資料", + "Please be sure the licence is compliant with your use.": "請再次確認所選的授權方式符合您的需求", + "Problem in the response": "回應出現錯誤", + "Problem in the response format": "回應的格式出現錯誤", + "Provide an URL here": "提供 URL網址", + "Remote data": "遠端資料", + "Save": "儲存", + "Save current edits": "儲存近期的變更", + "Save this center and zoom": "保存地圖中心點位置與縮放大小", + "Show/hide layer": "顯示/隱藏圖層", + "Start editing": "開始編輯", + "Stop editing": "停止編輯", + "The zoom and center have been setted.": "已完成置中及切換功能設定", + "To zoom": "至縮放大小", + "Untitled layer": "未命名圖層", + "Untitled map": "未命名地圖", + "Update permissions and editors": "更新可編輯權限及編輯者", + "Url": "網址", + "User content credits": "使用者內容清單", + "Where do we go from here?": "我們要去哪裡?", + "Zoom in": "放大", + "Zoom out": "縮小", + "Zoom to layer extent": "切換至圖層範圍", + "Zoom to this feature": "縮放至圖徵範圍", + "color": "色彩", + "dash array": "虛線排列", + "description": "描述", + "fill": "填入", + "fill color": "填入色彩", + "fill opacity": "填入不透明度", + "inherit": "繼承", + "licence": "授權", + "name": "名稱", + "no": "否", + "opacity": "不透明度", + "stroke": "筆畫粗細", + "weight": "寬度", + "yes": "是", + "Editing": "編輯", + "Embed the map": "嵌入地圖", + "Short URL": "短網址", + "# one hash for main heading": "單個 # 代表主標題", + "## two hashes for second heading": "兩個 # 代表次標題", + "### three hashes for third heading": "三個 # 代表第三標題", + "**double star for bold**": "** 重複兩次星號代表粗體 **", + "*simple star for italic*": "*單個星號代表斜體*", + "--- for an horizontal rule": "-- 代表水平線", + "All properties are imported.": "所有物件皆已匯入", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "使用逗號、定位鍵或是分號分隔的地理數據。預設座標系為 SRS WGS84。只會匯入地理座標點。匯入時抓取 «lat» 與 «lon» 開頭的欄位資料,不分大小寫。其他欄位則歸入屬性資料。", + "Custom background": "自訂背景", + "Help": "幫助", + "Image: {{http://image.url.com}}": "圖像: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "帶有超連結的文字: [[http://example.com|text of the link]]", + "Properties imported:": "屬性匯入完成", + "Simple link: [[http://example.com]]": "簡單連結: [[http://example.com]]", + "Supported scheme": "支援的模板", + "Supported variables that will be dynamically replaced": "支援的物件將直接動態轉換", + "Text formatting": "文字格式", + "attribution": "表彰", + "display name": "顯示名稱", + "max zoom": "放到最大", + "min zoom": "縮至最小", + "Skipping unkown geometry.type: {type}": "略過未知的地理資料格式 geometry.type: {type}", + "Please save the map before": "請先儲存您的地圖", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "您可以圖徵屬性作為變數使用:例如 \"http://myserver.org/images/{name}.png\", 這裡 {name} 是個變數,會以圖標的 \"name\" 值來取代。", + "Transform to polygon": "轉換為多邊形", + "Transform to lines": "轉換為線條", + "Choose the data format": "選擇資料格式", + "Error in the tilelayer URL": "地圖磚圖層 URL 錯誤", + "Directions from here": "從此處開始導航", + "Choose a preset": "選擇一種預設值", + "Limit bounds": "限制範圍", + "Use current bounds": "使用目前範圍", + "max East": "最東方", + "max North": "最北方", + "max South": "最南方", + "max West": "最西方", + "TMS format": "TMS 格式", + "Credits": "工作人員名單", + "Only visible features will be downloaded.": "只有可見的圖徵會被下載", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "在地圖編輯器中打開此地圖,提供更多準確資料給 OpenStreetMap", + "Default properties": "預設屬性", + "User interface options": "使用者界面選項", + "Image with custom width (in px): {{http://image.url.com|width}}": "自訂圖像的寬度(像素): {{http://image.url.com|width}}", + "Current view instead of default map view?": "將目前視點設為預設視點?", + "Iframe export options": "Iframe 匯出選項", + "Include full screen link?": "是否包含全螢幕的連結?", + "See full screen": "觀看全螢幕", + "height": "高度", + "width": "寬度", + "Clustered": "群集後", + "Clustering radius": "群集分析半徑", + "GeoRSS (only link)": "GeoRSS (只有連結)", + "GeoRSS (title + image)": "GeoRSS (標題與圖片)", + "Heatmap": "熱點圖", + "Heatmap radius": "熱點圖半徑", + "Name and description": "名稱與說明", + "Override clustering radius (default 80)": "覆蓋群集分析半徑 (預設80)", + "Override heatmap radius (default 25)": "覆蓋指定熱圖 heatmap 半徑 (預設 25)", + "Proxy request": "使用代理請求", + "Table": "表格", + "To use if remote server doesn't allow cross domain (slower)": "如果遠端伺服器不允許跨網域存取時使用 (效率較差)", + "Type of layer": "圖層類型", + "Filter…": "篩選器", + "Heatmap intensity property": "熱點圖強度屬性", + "Optional intensity property for heatmap": "選用的熱圖 heatmap 強度屬性", + "Caption": "標題", + "Data browser": "資料檢視器", + "Do you want to display a caption bar?": "您是否要顯示標題列?", + "Do you want to display a panel on load?": "您是否要顯示", + "None": "以上皆非", + "by": "由", + "Name and description (large)": "名稱和敘述(大型)", + "Empty": "空白", + "Split line": "分隔線", + "Clone": "複製", + "Clone of {name}": "複製 {name}", + "Side panel": "側邊框", + "Powered by Leaflet and Django, glued by uMap project.": "使用 LeafletDjango 技術﹐由 uMap 計畫 整合。", + "Zoom level for automatic zooms": "自動縮放的比例大小", + "Do you want to display the «more» control?": "您是否要顯示 《更多》?", + "Auto": "自動", + "Default: name": "預設: name", + "Property to use for sorting features": "排序圖徵所使用的屬性", + "Slideshow": "投影片", + "Start slideshow": "開啟投影片", + "Stop slideshow": "中止投影片", + "Text color for the cluster label": "叢集標籤的文字顏色", + "Zoom to the next": "切換至下一頁", + "Zoom to the previous": "切換至前一頁", + "Add a new property": "新增屬性", + "Are you sure you want to delete this property on all the features?": "您確定要刪除所有圖徵中的此項屬性?", + "Close": "關閉", + "Delete this property on all the features": "從所有圖徵中刪除此屬性", + "Edit properties in a table": "在表格中編輯屬性", + "Please enter the name of the property": "請輸入物件名稱", + "Please enter the new name of this property": "請輸入新的物件名稱", + "Rename this property on all the features": "在所有特徵中重新命名該物件", + "If false, the polygon will act as a part of the underlying map.": "選擇「否」時,多邊形物件會被當成為底圖的一部分。", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "自訂 iframe 高度 (以 px 為單位): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "觀看完整內容", + "Dynamic properties": "動態屬性", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "以圖徵的屬性加上括弧作為標記,例如 {name},這樣子就可以動態被取代成對應的數值。", + "Long credits": "詳細工作人員名單", + "No licence has been set": "尚未設定授權條例", + "Popup content template": "彈出內文範本", + "Short credits": "簡短工作人員名單", + "Will be displayed in the bottom right corner of the map": "將會顯示在地圖的右下角", + "Will be visible in the caption of the map": "標題將出現在地圖上", + "Map has been saved!": "地圖儲存已完成", + "Save anyway": "通通都儲存吧!", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "糟糕,好像有人正在進行編輯,您仍可儲存資料,但您做的變更將被他人修改取代。", + "Comma separated list of properties to use when filtering features": "以逗號分開列出篩選時要使用的屬性", + "Keep current visible layers": "保留目前可見圖層", + "Coordinates": "座標", + "Latitude": "緯度", + "Longitude": "經度", + "Continue line (Ctrl-click)": "連續線(Ctrl+點擊鍵)", + "Start a hole here": "開始一個凹洞", + "Click last point to finish shape": "點下最後一點後完成外形", + "Click to add a marker": "點選以新增標記", + "Click to continue drawing": "點擊以繼續繪製", + "Click to start drawing a line": "點擊以開始繪製直線", + "Click to start drawing a polygon": "點選開始繪製多邊形", + "Import in a new layer": "匯入至新圖層", + "Layer": "圖層", + "Please choose a format": "請選擇地圖格式", + "Imports all umap data, including layers and settings.": "匯入所有 umap 資料,包含圖層與設定。", + "Invalid umap data": "無效的 umap 資料", + "Invalid umap data in {filename}": "無效的 umap 資料於檔案 {filename}", + "Add a line to the current multi": "新增線段", + "Add a polygon to the current multi": "新增多邊形", + "Click to edit": "點擊開始編輯", + "Continue line": "連續線段", + "Delete this shape": "刪除外形", + "Make main shape": "設為主要外形", + "Merge lines": "合併線段", + "Remove shape from the multi": "移除外形", + "Transfer shape to edited feature": "將外形加到編輯中的特徵", + "next": "下一個", + "previous": "前一個", + "Measure distances": "測量距離", + "NM": "NM", + "kilometers": "公里", + "km": "km", + "mi": "mi", + "miles": "英里", + "nautical miles": "海浬", + "{area} acres": "{area} 弧線", + "{area} ha": "{area} ha", + "{area} m²": "{area} 平方公尺", + "{area} mi²": "{area} 平方英哩", + "{area} yd²": "{area} 平方英呎", + "{distance} NM": "{距離} NM", + "{distance} km": "{距離} km", + "{distance} m": "{distance} 公尺", + "{distance} miles": "{distance} 英哩", + "{distance} yd": "{distance} 英呎", + "Are you sure you want to restore this version?": "您確定要回復此一版本嗎?", + "Extract shape to separate feature": "由外形分離出圖徵", + "Layer properties": "圖層屬性", + "Restore this version": "回復此版本", + "Versions": "版本", + "You have unsaved changes.": "您有變更尚未儲存", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "用逗號來分隔一列列的虛線模式,例如:\"5, 10, 15\"。", + "Advanced transition": "進階轉換", + "Allow interactions": "允許互動", + "Autostart when map is loaded": "當讀取地圖時自動啟動", + "Default interaction options": "預設互動選項", + "Default shape properties": "預設形狀屬性", + "Default zoom level": "預設縮放等級", + "Define link to open in a new window on polygon click.": "指定點多邊形連結時開新視窗。", + "Delete this vertex (Alt-click)": "刪除頂點 (Alt-click)", + "Display the control to open OpenStreetMap editor": "顯示開啟開放街圖編輯器的按鍵", + "Display the data layers control": "顯示資料圖層鍵", + "Display the embed control": "顯示嵌入鍵", + "Display the fullscreen control": "顯示全螢幕鍵", + "Display the locate control": "顯示定位鍵", + "Display the measure control": "顯示比例尺鍵", + "Display the search control": "顯示搜尋鍵", + "Display the tile layers control": "顯示圖層鍵", + "Display the zoom control": "顯示縮放鍵", + "Exit Fullscreen": "結束全螢幕模式", + "Fetch data each time map view changes.": "每次地圖檢視改變時截取資料。", + "Filter keys": "篩選鍵", + "Icon shape": "圖示圖形", + "Icon symbol": "圖示標誌", + "Interaction options": "互動選項", + "Label key": "標籤鍵", + "Link to…": "連結至...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "必須是有效的 CSS 值 (例如:DarkBlue 或是 #123456)", + "No results": "沒有結果", + "Popup style": "彈出視窗樣式", + "Replace layer content": "取代圖層內容", + "Save this location as new feature": "將地點存為新的圖徵", + "Search location": "搜尋地點", + "Set URL": "設定網址", + "Shape properties": "形狀屬性", + "Simplify": "簡化", + "Sort key": "排序鍵", + "The name of the property to use as feature label (ex.: \"nom\")": "用作圖徵標籤的屬性名稱 (例如:“nom”)", + "Toggle edit mode (shift-click)": "切換編輯模式 (shift-click)", + "View Fullscreen": "以全屏幕模式顯示", + "Whether to display or not polygons paths.": "是否顯示多邊形的路徑。", + "Whether to fill polygons with color.": "是否將多邊形填入色彩。", + "Zoom to this place": "縮放到這個地方", + "always": "經常", + "clear": "清除", + "define": "定義", + "hidden": "隱藏", + "never": "永不", + "Automatic": "自動", + "Clone this feature": "複製此項目", + "Display label": "顯示標籤", + "Drag to reorder": "拖拽以排序", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "自訂 iframe 高度和寬度 (以 px 為單位):{{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "標籤可點擊", + "Label direction": "標籤方向", + "Manage layers": "管理圖層", + "On the bottom": "在底部", + "On the left": "在左側", + "On the right": "在右側", + "On the top": "在頂部", + "Only display label on mouse hover": "僅在滑鼠移至標籤時顯示", + "Open link in…": "開啓連結於...", + "Unable to detect format of file {filename}": "無法偵測 {filename} 的檔案格式", + "collapsed": "收起", + "expanded": "展開", + "iframe": "iframe", + "new window": "新視窗", + "parent window": "父視窗", + "{count} errors during import: {message}": "於匯入時發生 {count} 項錯誤: {message}", + "Are you sure you want to delete this layer?": "你確定要刪除這個圖層嗎?", + "Delete layer": "刪除圖層", + "Error while fetching {url}": "擷取網址時發生錯誤 {url}", + "Home": "首頁", + "Delete all layers": "刪除所有圖層", + "Full map data": "全部地圖資料", + "Smart transitions": "智慧轉換", + "Activate slideshow mode": "開啟幻燈片模式", + "Data is browsable": "資料是可檢視的", + "Delay between two transitions when in play mode": "播放模式下兩個轉換間會延遲", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "設定為假時,在幻燈片時、資料檢視器和彈出式導航中可將此圖層隱藏...", + "{delay} seconds": "{delay} 秒", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/map.css b/umap/static/umap/map.css new file mode 100644 index 00000000..361210bf --- /dev/null +++ b/umap/static/umap/map.css @@ -0,0 +1,1335 @@ +/* *********** */ +/* Map details */ +/* *********** */ +#map { + height: 100%; + width: 100%; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + + +/* *********** */ +/* Controls */ +/* *********** */ + +.leaflet-control-zoom, +.umap-control { + background: none no-repeat scroll center center #F8F8F9; + border-radius: 4px; + border: 1px solid #bbb; +} +.leaflet-control-fullscreen a:hover, +.leaflet-control-fullscreen a { + height: 36px; + width: 36px; + background-size: 36px 68px; +} +.leaflet-touch .leaflet-control-fullscreen a { + height: 36px; + width: 36px; + background-position: 0px 0px; +} +.leaflet-fullscreen-on .leaflet-control-fullscreen a { + background-position: 0 -32px; +} +.leaflet-measure-control a, +.umap-control a { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; + height: 36px; + width: 36px; + line-height: 36px; + background-image: url('./img/24.png'); +} +.leaflet-control.display-on-more, +a.umap-control-less { + display: none; +} +.umap-control-more, +.umap-control-less { + background-image: url('./img/16-white.png'); + background-position: -160px -210px; +} +.umap-more-controls .display-on-more, +.umap-more-controls .umap-control-less { + display: block; +} +.umap-more-controls .umap-control-more { + display: none; +} +.leaflet-control-embed a { + background-position: -82px -122px; +} +.leaflet-control-tilelayers a { + background-position: -82px -2px; +} +.leaflet-control-home a { + background-position: -122px -82px; +} +.leaflet-control-locate a { + background-position: -2px -122px; +} +.leaflet-control-search a { + background-position: -42px -122px; + display: block; +} +.leaflet-control-search a.loading { + background-image: url('./img/search.gif'); +} +a.umap-control-text { + float: right; + margin: 0; + width: 36px; + height: 23px; + line-height: 23px; + border: 1px solid #444; + border-radius: 2px; + background-color: #666; + color: #f8f8f8; + text-align: center; + font-size: 0.8em; +} +.leaflet-control-edit-enable a { + background-image: url('./img/24-white.png'); + background-position: -1px -1px; + background-color: #353c3e; +} + + + + +/* ***************** */ +/* Search panel */ +/* ***************** */ +ul.photon-autocomplete { + position: absolute; + background-color: white; + z-index: 1000; + display: none; +} +.photon-autocomplete li { + min-height: 40px; + line-height: 1em; + padding: 5px 10px; + overflow: hidden; + white-space: nowrap; + font-size: 1em; + border-left: 4px solid #efefef; +} +.photon-autocomplete li strong { + display: block; +} +.photon-autocomplete li.on { + border-left: 4px solid #2980b9; + cursor: pointer; +} +.photon-autocomplete li.photon-no-result { + text-align: center; + color: #666; + font-size: 0.9em; + line-height: 40px; +} +.photon-autocomplete .photon-feedback { + display: block; + text-align: right; + font-size: 0.8em; + padding: 3px; + color: #999; + border-top: 1px solid #eee; +} +.search-result-tools { + float: right; + display: block; +} + + + +/* *********** */ +/* Draw */ +/* *********** */ +.leaflet-drawing-icon, +.leaflet-editable-drawing { + cursor: crosshair; +} +.leaflet-control-toolbar > li > .leaflet-toolbar-icon, +.umap-toolbar a, +.umap-toolbar a:hover { + height: 40px; + width: 40px; + display: none; + margin-top: 0; + vertical-align: top; + border-bottom: none; + background-color: #323737; + border-right: 1px solid #eee; + background-repeat: no-repeat; + background-image: url('./img/24.png'); + background-size: auto auto; +} +.leaflet-control-toolbar li .leaflet-toolbar-icon.dark { + background-image: url('./img/24-white.png'); +} +.leaflet-control-toolbar .leaflet-toolbar-icon.dark:hover { + background-color: #353c3e; +} +.umap-toolbar { + margin-top: 0; +} +.update-map-extent, +.leaflet-container .umap-toolbar .update-map-extent { + background-position: 0 -40px; +} +.umap-toolbar .update-map-tilelayers, +.update-map-tilelayers { + background-position: -80px 0; +} +.manage-datalayers { + background-position: -40px -80px; +} +.umap-toolbar .update-map-permissions, +.update-map-permissions { + background-position: -40px -40px; +} +.umap-toolbar .upload-data, +.upload-data { + background-position: -160px 0; +} +.umap-toolbar .update-map-settings, +.update-map-settings { + background-position: -120px 0; +} +.umap-draw-marker, +.umap-toolbar .umap-draw-marker { + background-position: -160px -40px; +} +.umap-draw-polyline, +.umap-toolbar .umap-draw-polyline { + background-position: -120px -40px; +} +.umap-draw-polyline-multi, +.umap-toolbar .umap-draw-polyline-multi { + background-position: -42px -162px; +} +.umap-draw-polygon, +.umap-toolbar .umap-draw-polygon { + background-position: -80px -40px; +} +.umap-draw-polygon-multi, +.umap-toolbar .umap-draw-polygon-multi { + background-position: -2px -162px; +} +.umap-edit-enabled .leaflet-control-toolbar > li > .leaflet-toolbar-icon, +.umap-edit-enabled .umap-toolbar a { + display: block; +} + + +/* ********************************* */ +/* Third party plugin override */ +/* ********************************* */ + +.leaflet-control-edit-in-osm .leaflet-control-edit-in-osm-toggle { + background-image: url('img/24.png'); + background-position: -121px -121px; +} +.leaflet-measure-control, +.leaflet-control-edit-in-osm { + border: 1px solid #bbb; + border-radius: 4px; + box-shadow: none; +} +.leaflet-measure-control a { + background-position: -1px -81px; +} +.leaflet-control .leaflet-measure-toggle { + display: inline-block; + vertical-align: middle; +} + + +/* ********************************* */ +/* Help Lightbox */ +/* ********************************* */ +.umap-help-box { + z-index: 10001; + position: absolute; + margin: 0 calc(50% - 500px/2); + width: 500px; + padding: 40px 20px; + border: 1px solid #222; + background-color: #323737; + color: #efefef; + font-size: 0.8em; + visibility: hidden; + top: -100%; +} +.umap-help-box .umap-close-link { + float: right; +} +.umap-help-button { + display: inline-block; + width: 16px; + height: 16px; + margin-left: 5px; + background-position: -12px -12px; + background-repeat: no-repeat; + background-image: url('./img/16.png'); + vertical-align: middle; +} +.dark .umap-help-button { + background-image: url('./img/16-white.png'); +} +.umap-help-on .umap-help-box { + visibility: visible; + top: 100px; +} +.umap-help-entry + .umap-help-entry { + margin-top: 10px; + border-top: 1px solid #aaa; + padding-top: 10px; +} + + +/* ********************************* */ +/* Edit main toolbox */ +/* ********************************* */ + +.leaflet-container a.leaflet-control-edit-save, +.leaflet-container a.leaflet-control-edit-cancel, +.leaflet-container a.leaflet-control-edit-disable { + display: block; + height: 36px; + line-height: 36px; + color: #efefef; + border: none; + font-size: 11px; + margin-left: 10px; + float: right; +} +.leaflet-container a.leaflet-control-edit-cancel, +.leaflet-container a.leaflet-control-edit-save { + color: #f8f8f8; + width: auto; + height: 36px; + line-height: 36px; + min-height: 36px; + padding: 0 10px; + min-width: 100px; +} +.leaflet-container a.leaflet-control-edit-cancel { + background-color: #C60F13; +} +.leaflet-container a.leaflet-control-edit-save { + opacity: 0.5; + cursor: not-allowed; + background-color: #215d9c; +} +.umap-is-dirty a.leaflet-control-edit-save { + opacity: 1; + cursor: pointer; +} +.leaflet-container a.leaflet-control-edit-save, +.leaflet-container a.leaflet-control-edit-cancel, +.leaflet-container a.leaflet-control-edit-disable, +.umap-edit-enabled .leaflet-control-edit-enable { + display: none; +} +.umap-edit-enabled a.leaflet-control-edit-save, +.umap-edit-enabled a.leaflet-control-edit-disable, +.umap-edit-enabled .umap-is-dirty a.leaflet-control-edit-cancel { + display: inline-block; +} +.umap-is-dirty a.leaflet-control-edit-disable { + display: none; +} +.umap-click-to-edit { + color: #4a90d9; + font-weight: bold; +} +.umap-click-to-edit:after { + content: "\00a0"; + background-repeat: no-repeat; + background-position: center center; + cursor: pointer; + width: 26px; + height: 100%; + display: inline-block; + background-position: -82px -82px; +} +.umap-click-to-edit:hover:after { + background-image: url('./img/16.png'); +} +.dark .umap-click-to-edit:hover:after { + background-image: url('./img/16-white.png'); +} +.umap-caption-bar { + display: none; +} +.umap-main-edit-toolbox { + top: -46px; + position: absolute; + width: 100%; + left: 0; + right: 0; + height: 46px; + background-color: #323737; + padding: 5px; + text-align: left; + line-height: 36px; + cursor: auto; + border-bottom: 1px solid #222; + z-index: 1000; + opacity: 0.98; + color: #efefef; +} +.umap-edit-enabled .umap-main-edit-toolbox { + top: 0; +} +.umap-edit-enabled .umap-caption-bar { + display: none; +} +.umap-caption-bar h3, +.umap-main-edit-toolbox h3 { + display: inline; +} +.umap-edit-enabled .leaflet-top { + top: 48px; +} +.umap-caption-bar-enabled .umap-caption-bar { + display: block; + height: 46px; + background-color: #fff; + width: 100%; + position: absolute; + left: 0; + bottom: 0; + right: 0; + padding: 0 0 0 5px; + text-align: left; + line-height: 46px; + cursor: auto; + border-top: 1px solid #ddd; + opacity: 0.93; + z-index: 1000; +} +.umap-caption-bar-enabled .leaflet-bottom { + bottom: 46px; +} +.umap-help { + font-style: italic; +} +.umap-slideshow-toolbox { + float: right; + display: none; +} +.umap-slideshow-enabled .umap-slideshow-toolbox { + display: inline-block; +} +.umap-slideshow-toolbox li { + display: inline-block; + cursor: pointer; + font-size: 1.5em; + background-color: #464646; + color: #fff; + height: 46px; + width: 70px; + line-height: 46px; + vertical-align: middle; + text-align: center; +} +.umap-slideshow-toolbox li + li { + border-left: 1px solid #aaa; +} +.umap-slideshow-toolbox li:hover { + background-color: #666; +} +.umap-slideshow-active .umap-slideshow-toolbox .play, +.umap-slideshow-toolbox .play { + width: 100px; + text-align: left; + padding-left: 20px; +} +.umap-slideshow-toolbox .play:after { + content: ' ▶'; +} +.umap-slideshow-active .umap-slideshow-toolbox .play:after { + content: ' ❚❚'; +} +.umap-slideshow-toolbox .stop:before { + content: '■'; +} +.umap-slideshow-toolbox .next:before { + content: '➡'; +} +.umap-slideshow-toolbox .prev:before { + content: '⬅'; +} +.umap-slideshow-toolbox .play div { + height: 20px; + width: 20px; + margin: 0px auto; + position: relative; + top: 5px; + -webkit-animation: rotation 5s infinite linear; + -moz-animation: rotation 5s infinite linear; + -o-animation: rotation 5s infinite linear; + animation: rotation 5s infinite linear; + border-left: 3px solid rgba(255,255,239,.15); + border-right: 3px solid rgba(255,255,255,.15); + border-bottom: 3px solid rgba(255,255,255,.15); + border-top: 3px solid rgba(255,255,255,.8); + border-radius:100%; + display: inline-block; + visibility: hidden; +} +@-webkit-keyframes rotation { + from {-webkit-transform: rotate(0deg);} + to {-webkit-transform: rotate(359deg);} +} +@-moz-keyframes rotation { + from {-moz-transform: rotate(0deg);} + to {-moz-transform: rotate(359deg);} +} +@-o-keyframes rotation { + from {-o-transform: rotate(0deg);} + to {-o-transform: rotate(359deg);} +} +@keyframes rotation { + from {transform: rotate(0deg);} + to {transform: rotate(359deg);} +} +.umap-slideshow-active .umap-slideshow-toolbox .play .spinner { + visibility: visible; +} +.umap-datalayer-version { + padding: 5px 0; + border-bottom: 1px solid #202425; +} +.umap-datalayer-version a { + display: inline-block; + width: 20px; + height: 20px; + margin-left: 5px; + background-position: -209px -130px; + background-repeat: no-repeat; + background-image: url('./img/16-white.png'); + vertical-align: middle; + margin-right: 5px; + border: 1px solid #202425; + background-color: #2c3233; +} + + + +/* ********************************* */ +/* Datalayers Control */ +/* ********************************* */ + +.leaflet-control-browse .umap-browse-toggle { + background-image: url('./img/24.png'); + width: 36px; + height: 36px; + background-position: -41px -81px; +} +.leaflet-control-browse .umap-browse-actions { + background-color: #fff; + padding: 10px; + display: none; + line-height: 24px; + border-radius: 2px; +} +.leaflet-control-browse .umap-browse-datalayers { + max-height: 10em; + overflow-y: auto; +} +.search-result-tools i, +.leaflet-inplace-toolbar a, +.umap-browse-features i, +.umap-caption i, +.umap-browse-datalayers i { + background-repeat: no-repeat; + background-image: url('./img/16.png'); + display: inline; + padding: 0 10px; + cursor: pointer; + height: 24px; + line-height: 24px; + vertical-align: middle; +} +.dark .umap-browse-datalayers i { + background-image: url('./img/16-white.png'); +} +.umap-browse-datalayers li[draggable] .drag-handle { + float: right; + background-position: -130px -130px; + margin-right: 5px; + cursor: move; +} +.leaflet-inplace-toolbar a { + background-image: url('./img/16-white.png'); + background-color: #323737!important; +} +.leaflet-toolbar-tip { + background-color: #323737; +} +.leaflet-inplace-toolbar a:hover { + background-color: #353c3e!important; +} +.leaflet-control-browse .umap-browse-datalayers .off i { + cursor: inherit; +} +.layer-toggle { + background-position: -90px -51px; +} +.off .layer-toggle { + background-position: -130px -51px; +} +.feature-zoom_to { + background-position: -10px -88px; +} +.layer-zoom_to { + background-position: -10px -91px; +} +.layer-table-edit { + background-position: -90px -10px; +} +.layer-delete { + background-position: -209px -90px; +} +.feature-edit, +.layer-edit { + background-position: -90px -89px; +} +.umap-toggle-edit { + background-position: -85px -85px; +} +.off .layer-table-edit { + background-position: -129px -10px; +} +.off .layer-edit { + background-position: -90px -129px; +} +.off .layer-zoom_to { + background-position: -50px -91px; +} +.off .layer-delete { + background-position: -209px -208px; +} +.umap-new-hole { + background-position: -125px -165px; +} +.umap-delete-all { + background-position: -204px -85px; +} +.umap-delete-one-of-multi { + background-position: -165px -125px; +} +.umap-delete-one-of-one { + background-position: -204px -86px; +} +.umap-delete-vertex { + background-position: -205px -165px; +} +.umap-continue-line { + background-position: -165px -5px; +} +.umap-split-line { + background-position: -205px -45px; +} +.umap-extract-shape-from-multi{ + background-position: -205px -5px; +} +.umap-browse-features .feature-title, +.leaflet-control-browse .umap-browse-actions .layer-title { + width: inherit; + cursor: inherit; + padding-left: 6px; +} +.umap-browse-features .feature-title { + font-size: 12px; + cursor: pointer; +} +.leaflet-control-browse .umap-browse-actions .off .layer-title { + color: rgb(179, 179, 179); +} +.leaflet-control-browse.expanded > a { + display: none; +} +.leaflet-control-browse.expanded .umap-browse-actions { + display: block; +} +.leaflet-control-browse a.umap-browse-link { + background-image: none; + background-color: rgb(68, 68, 68); + color: white; + display: block; + height: 24px; + line-height: 24px; + margin-top: 14px; + padding: 0 5px; + text-align: right; + min-width: 160px; + width: 100%; + border-radius: 2px; +} +a.add-datalayer:before, +.leaflet-control-browse a.umap-browse-link:before { + background-image: url('./img/16.png'); + background-repeat: no-repeat; + background-position: -92px -168px; + width: 24px; + height: 24px; + content: " "; + display: block; + float: left; +} +a.add-datalayer:before { + background-position: -45px -45px; +} +a.add-datalayer:hover, +.leaflet-control-browse a.umap-browse-link:hover { + background-color: rgb(99, 99, 99); +} +.umap-browse-data .off .feature { + display: none; +} + + +/* ********************************* */ +/* Features browser panel */ +/* ********************************* */ + +.umap-browse-features > div { + border: 1px solid #d3d3d3; + margin-bottom: 14px; + border-radius: 2px; +} +.umap-browse-features h5 { + height: 30px; + line-height: 30px; + background-color: #eeeee0; + margin-bottom: 0; + color: #666; + overflow: hidden; + padding-left: 5px; +} +.umap-browse-features h5 span { + margin-left: 10px; +} +.umap-browse-features li { + padding: 2px 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.umap-browse-features li:nth-child(even) { + background-color: #f8f8f3; +} +.umap-browse-features .feature-color { + box-shadow: 0 0 4px 0 black inset; + background-size: 70% 70%; + border: 4px solid #f8f8f3; + cursor: inherit; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing: border-box; + background-position: center; + display: inline-block; + padding: 0; + width: 24px; +} +.umap-browse-features .polygon .feature-color, +.umap-browse-features .polyline .feature-color { + box-shadow: 0 0 4px 0 black inset; + background-image: url('./img/24.png'); + background-size: 500%; +} +.umap-browse-features .polyline .feature-color { + background-position: -48px -16px; +} +.umap-browse-features .polygon .feature-color { + background-position: -32px -16px; +} +.show-on-edit { + display: none!important; +} +.umap-edit-enabled .show-on-edit { + display: inline-block!important; +} +.umap-edit-enabled .show-on-edit.inline { + display: inline!important; +} +.umap-edit-enabled .show-on-edit.block { + display: block!important; +} + +.umap-browse-description { + font-size: 0.9em; + margin-bottom: 14px; +} + + +/* ********************************* */ +/* Table Editor */ +/* ********************************* */ +#umap-ui-container.umap-table-editor { + padding-left: 0; + padding-right: 0; +} +#umap-ui-container.umap-table-editor .toolbox li { + float: left; +} + +.umap-table-editor .umap-close-link { + right: auto; + left: 20px; +} +.umap-table-editor .table { + display: table; + width: 100%; + white-space: nowrap; + table-layout: fixed; +} +.umap-table-editor .tbody { + display: table-row-group; +} +.umap-table-editor .thead, +.umap-table-editor .trow { + display: table-row; +} +.umap-table-editor .tcell { + display: table-cell; + width: 200px; +} +.umap-table-editor .thead { + text-align: center; + height: 48px; + line-height: 48px; + background-color: #2c3133; +} +.umap-table-editor .thead .tcell { + border-left: 1px solid #0b0c0c; +} +.umap-table-editor .tbody .trow input { + margin: 0; + border-right: none; + display: inline; +} +.umap-table-editor .tbody .trow + .trow input { + border-top: none; +} +.umap-table-editor .thead i { + display: none; + width: 50%; + cursor: pointer; + padding: 10px 0; + height: 24px; + line-height: 24px; +} +.umap-table-editor .thead i:before { + width: 40px; +} +.umap-table-editor .thead .tcell:hover i { + display: inline-block; +} +.umap-table-editor .thead .tcell i:hover { + background-color: #33393b; +} +.umap-table-editor .thead .tcell:hover span { + display: none; +} +.remotelayer .layer-table-edit { + display: none !important; +} + +/* ********************************* */ +/* Icons */ +/* ********************************* */ +.umap-icon-16 { + background-repeat: no-repeat; + background-image: url('./img/16.png'); + display: inline; + padding: 0 10px; + vertical-align: middle; +} +.umap-add { + background-position: -12px -49px; +} +.umap-list { + background-position: -52px -168px; +} +.umap-list-white { + background-position: -92px -168px; +} +.umap-caption { + background-position: -170px -52px; +} + +/* ********************************* */ +/* Tilelayer switcher */ +/* ********************************* */ + +.umap-tilelayer-switcher-container { + margin-top: 10px; +} +.umap-tilelayer-switcher-container li { + border: 1px solid rgb(116, 116, 116); + border-radius: 4px 4px 4px 4px; + margin-bottom: 14px; + overflow: hidden; + position: relative; + width: 256px; + cursor: pointer; + height: 200px; + margin-left: auto; + margin-right: auto; +} +.umap-tilelayer-switcher-container li div { + background-color: rgb(116, 116, 116); + bottom: 0; + color: rgb(247, 246, 241); + height: 56px; + line-height: 56px; + opacity: 0.9; + padding-left: 10px; + position: absolute; + width: 100%; + text-align: center; +} +.umap-tilelayer-switcher-container li:hover div:before, +.umap-tilelayer-switcher-container .selected div:before { + content: "✓"; + font-size: 1.3em; + line-height: 56px; + padding-right: 7px; + position: absolute; + left: 7px; +} +.umap-tilelayer-switcher-container li img { + display: block; + max-width: 100%; +} + +/* ********************************* */ +/* Caption */ +/* ********************************* */ +.datalayer-color { + display: inline-block; + width: 16px; + height: 16px; + margin-right: 10px; + border: 1px solid #000; + background-color: transparent; + vertical-align: middle; +} + + +/* ********************************* */ +/* Popup */ +/* ********************************* */ +.umap-popup { + display: flex; + flex-flow: column nowrap; + height:100%; +} + +.umap-popup-footer { + background-color: rgb(68, 68, 68); + color: white; + display: table; + width: 100%; + margin-top: auto; + min-width: 99px; + border-radius: 2px; + max-height: 24px; +} +.umap-popup-footer li { + line-height: 24px; + height: 24px; + display: table-cell; + width: 33.3%; + cursor: pointer; + text-align: center; +} +.umap-popup-footer li:before { + display: inline-block; + width: 16px; + height: 16px; + margin-left: 5px; + background-repeat: no-repeat; + background-image: url('./img/16.png'); + vertical-align: middle; + content: " "; +} +.umap-popup-footer li.zoom:before { + background-position: -12px -170px; +} +.umap-popup-footer li.previous:before { + background-position: -52px -130px; +} +.umap-popup-footer li.next:before { + background-position: -12px -130px; +} + + +/* ************* */ +/* Marker's Icon */ +/* ************* */ +.umap-div-icon .icon_container { + background-color: white; + border-radius: 4px 4px 4px 4px; + height: 32px; + width: 32px; + box-shadow: 7px 10px 8px -5px black; + opacity: 0.9; + background-color: #2470b5; + text-align: center; + line-height: 32px; +} +.umap-div-icon .icon_container img { + vertical-align: middle; + max-width: 24px!important; /* leaflet.css has !important, so... */ +} +.umap-div-icon .icon_arrow { + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #2270b5; + height: 0; + left: 8px; + position: relative; + width: 0; + opacity: 0.9; + /*box-shadow: 4px 8px 6px -3px black;*/ +} +.umap-drop-icon .icon_arrow { + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 16px solid #2270B5; + height: 0; + left: 6px; + position: relative; + top: -4px; + width: 0; +} +.umap-drop-icon .icon_container { + background-color: #2470B5; + border-radius: 16px 16px 16px 16px; + box-shadow: 6px 13px 8px -4px black; + height: 32px; + line-height: 32px; + opacity: 0.9; + text-align: center; + width: 32px; +} +.umap-drop-icon .icon_container img { + vertical-align: middle; + max-width: 24px !important; +} +.umap-circle-icon { + border: 1px solid white; + border-radius: 10px 10px 10px 10px; + height: 12px; + width: 12px; +} +.umap-ball-icon .icon_container { + background-color: darkblue; + background: radial-gradient(circle at 6px 38% , white -4px, darkblue 8px) repeat scroll 0 0 transparent; + border-radius: 8px 8px 8px 8px; + box-shadow: 1px 21px 6px -3px black; + height: 16px; + opacity: 0.9; + text-align: center; + width: 16px; +} +.umap-ball-icon .icon_arrow { + background-color: black; + height: 16px; + left: 7px; + opacity: 0.9; + position: relative; + top: -1px; + width: 2px; +} +.umap-edit-enabled .readonly { + cursor: not-allowed; +} + + +/* ********************************* */ +/* Ajax loader */ +/* ********************************* */ +.umap-loading .umap-loader +{ + display: block; + -webkit-animation: shift-rightwards 3s ease-in-out infinite; + -moz-animation: shift-rightwards 3s ease-in-out infinite; + -ms-animation: shift-rightwards 3s ease-in-out infinite; + -o-animation: shift-rightwards 3s ease-in-out infinite; + animation: shift-rightwards 3s ease-in-out infinite; + -webkit-animation-delay: .2s; + -moz-animation-delay: .2s; + -o-animation-delay: .2s; + animation-delay: .2s; +} +.umap-loader +{ + position: absolute; + display: none; + top: 0; + left: 0; + right: 0; + height: 4px; + z-index: 10100; + background-color: #79c1c0 !important; + -webkit-transform: translateX(100%); + -moz-transform: translateX(100%); + -o-transform: translateX(100%); + transform: translateX(100%); +} + + +@-webkit-keyframes shift-rightwards +{ + 0% + { + -webkit-transform:translateX(-100%); + -moz-transform:translateX(-100%); + -o-transform:translateX(-100%); + transform:translateX(-100%); + } + + 40% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 60% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 100% + { + -webkit-transform:translateX(100%); + -moz-transform:translateX(100%); + -o-transform:translateX(100%); + transform:translateX(100%); + } + +} +@-moz-keyframes shift-rightwards +{ + 0% + { + -webkit-transform:translateX(-100%); + -moz-transform:translateX(-100%); + -o-transform:translateX(-100%); + transform:translateX(-100%); + } + + 40% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 60% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 100% + { + -webkit-transform:translateX(100%); + -moz-transform:translateX(100%); + -o-transform:translateX(100%); + transform:translateX(100%); + } + +} +@-o-keyframes shift-rightwards +{ + 0% + { + -webkit-transform:translateX(-100%); + -moz-transform:translateX(-100%); + -o-transform:translateX(-100%); + transform:translateX(-100%); + } + + 40% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 60% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 100% + { + -webkit-transform:translateX(100%); + -moz-transform:translateX(100%); + -o-transform:translateX(100%); + transform:translateX(100%); + } + +} +@keyframes shift-rightwards +{ + 0% + { + -webkit-transform:translateX(-100%); + -moz-transform:translateX(-100%); + -o-transform:translateX(-100%); + transform:translateX(-100%); + } + + 40% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 60% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 100% + { + -webkit-transform:translateX(100%); + -moz-transform:translateX(100%); + -o-transform:translateX(100%); + transform:translateX(100%); + } +} + +/* *************************** */ +/* Overriding leaflet defaults */ +/* *************************** */ + +.leaflet-control-zoom a, .leaflet-control-zoom a:hover { + height: 36px; + width: 36px; + line-height: 36px; +} +.leaflet-container .leaflet-control-zoom { + margin-left: 10px; +} +.leaflet-top { + z-index: 1001; +} +.leaflet-popup-content { + min-width: 100px; + line-height: inherit; +} +.leaflet-popup-content-wrapper, .leaflet-popup-tip { + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.4); +} +.leaflet-popup-content-wrapper { + border-radius: 4px; +} +.umap-popup-content { + max-height: 500px; + flex-grow: 1; + overflow-y: auto; + overflow-x: hidden; + margin-bottom: 14px; +} +.umap-popup-content iframe { + min-width: 300px; +} +.leaflet-popup-content h3 { + margin-bottom: 0; +} +.leaflet-control-toolbar, +.leaflet-bar { + box-shadow: none; +} +.marker-cluster { + background-color: white; + width: 40px; + height: 40px; +} +.leaflet-contextmenu-icon { + display: none; +} +.umap-popup-content img, +.umap-popup-content iframe { + max-width: 300px !important; +} +.umap-popup-large iframe, +.umap-popup-large img { + /* See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847 */ + max-width: 500px !important; +} +.umap-georss-link .popup-title { + text-align: center; +} +.leaflet-inplace-toolbar { + z-index: 10000!important; +} +.leaflet-touch .leaflet-control-layers, .leaflet-touch .leaflet-bar { + border-width: 1px; +} +.leaflet-touch .leaflet-bar a { + width: 36px; + height: 36px; + line-height: 36px; +} + +/* ****** */ +/* Mobile */ +/* ****** */ + +@media all and (max-width: 480px) { + + .leaflet-control-layers-expanded label { + display: inline-block; + margin-right: 10px; + } + + .leaflet-control-layers-expanded { + margin-left: 10px; + } +} + +/* ****** */ +/* Print */ +/* ****** */ + +@media print { + + .leaflet-control-container { + display: none; + } +} diff --git a/umap/static/umap/nav.css b/umap/static/umap/nav.css index 2cf21774..48efa3c8 100644 --- a/umap/static/umap/nav.css +++ b/umap/static/umap/nav.css @@ -1,3 +1,33 @@ +header { + margin: 14px 0; +} + +footer { + height: 140px; + margin-top: 40px; + background-color: #2E3641; + text-align: center; + line-height: 140px; + color: #8F96A3; +} +footer a.branding { + background-image: url("./img/logo_filigree.png"); + background-position: left center; + background-repeat: no-repeat; + background-size: 60px auto; + font-size: 30px; + font-weight: bold; + height: 140px; + padding-left: 70px; + color: #8F96A3; + display: inline-block; +} + +footer .i18n_switch { + display: inline-block; +} + + .umap-nav { display: flex; flex-direction: column; diff --git a/umap/static/umap/test/.eslintrc b/umap/static/umap/test/.eslintrc new file mode 100644 index 00000000..08d92416 --- /dev/null +++ b/umap/static/umap/test/.eslintrc @@ -0,0 +1,22 @@ +{ + "globals": { + "describe": true, + "happen": true, + "assert": true, + "before": true, + "after": true, + "it": true, + "sinon": true, + "qs": true, + "enableEdit": true, + "disableEdit": true, + "changeInputValue": true, + "resetMap": true, + "initMap": true, + "clickCancel": true, + "map": true, + "qs": true, + "qsa": true, + "qst": true + } +} diff --git a/umap/static/umap/test/Controls.js b/umap/static/umap/test/Controls.js new file mode 100644 index 00000000..a0611f65 --- /dev/null +++ b/umap/static/umap/test/Controls.js @@ -0,0 +1,50 @@ +describe('L.Utorage.Controls', function(){ + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.map = initMap({umap_id: 99}); + this.server.respond(); + this.datalayer = this.map.getDataLayerByUmapId(62); + }); + after(function () { + this.server.restore(); + resetMap(); + }); + + describe('#databrowser()', function(){ + + it('should be opened at datalayer button click', function() { + var button = qs('.umap-browse-actions .umap-browse-link'); + assert.ok(button); + happen.click(button); + assert.ok(qs('#umap-ui-container .umap-browse-data')); + }); + + it('should contain datalayer section', function() { + assert.ok(qs('#browse_data_datalayer_62')); + }); + + it('should contain datalayer\'s features list', function() { + assert.equal(qsa('#browse_data_datalayer_62 ul li').length, 3); + }); + + it('should redraw datalayer\'s features list at feature delete', function() { + var oldConfirm = window.confirm; + window.confirm = function () {return true;}; + enableEdit(); + happen.once(qs('path[fill="DarkBlue"]'), {type: 'contextmenu'}); + happen.click(qs('.leaflet-contextmenu .umap-delete')); + assert.equal(qsa('#browse_data_datalayer_62 ul li').length, 2); + window.confirm = oldConfirm; + }); + + it('should redraw datalayer\'s features list on edit cancel', function() { + clickCancel(); + happen.click(qs('.umap-browse-actions .umap-browse-link')); + assert.equal(qsa('#browse_data_datalayer_62 ul li').length, 3); + }); + + }); + +}); diff --git a/umap/static/umap/test/DataLayer.js b/umap/static/umap/test/DataLayer.js new file mode 100644 index 00000000..72ece389 --- /dev/null +++ b/umap/static/umap/test/DataLayer.js @@ -0,0 +1,334 @@ +describe('L.U.DataLayer', function () { + var path = '/map/99/datalayer/edit/62/'; + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('GET', '/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.map = initMap({umap_id: 99}); + this.datalayer = this.map.getDataLayerByUmapId(62); + this.server.respond(); + enableEdit(); + }); + after(function () { + this.server.restore(); + resetMap(); + }); + + describe('#init()', function () { + + it('should be added in datalayers index', function () { + assert.notEqual(this.map.datalayers_index.indexOf(this.datalayer), -1); + }); + + }); + + describe('#edit()', function () { + var editButton, form, input, forceButton; + + it('row in control should be active', function () { + assert.notOk(qs('.leaflet-control-browse #browse_data_toggle_' + L.stamp(this.datalayer) + '.off')); + }); + + it('should have edit button', function () { + editButton = qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-edit'); + assert.ok(editButton); + }); + + it('should have toggle visibility element', function () { + assert.ok(qs('.leaflet-control-browse i.layer-toggle')); + }); + + it('should exist only one datalayer', function () { + assert.equal(qsa('.leaflet-control-browse i.layer-toggle').length, 1); + }); + + it('should build a form on edit button click', function () { + happen.click(editButton); + form = qs('form.umap-form'); + input = qs('form.umap-form input[name="name"]'); + assert.ok(form); + assert.ok(input); + }); + + it('should update name on input change', function () { + var new_name = 'This is a new name'; + input.value = new_name; + happen.once(input, {type: 'input'}); + assert.equal(this.datalayer.options.name, new_name); + }); + + it('should have made datalayer dirty', function () { + assert.ok(this.datalayer.isDirty); + assert.notEqual(this.map.dirty_datalayers.indexOf(this.datalayer), -1); + }); + + it('should have made Map dirty', function () { + assert.ok(this.map.isDirty); + }); + + it('should call datalayer.save on save button click', function (done) { + sinon.spy(this.datalayer, 'save'); + this.server.flush(); + this.server.respondWith('POST', '/map/99/update/settings/', JSON.stringify({id: 99})); + this.server.respondWith('POST', '/map/99/datalayer/update/62/', JSON.stringify(defaultDatalayerData())); + clickSave(); + this.server.respond(); + this.server.respond(); + assert(this.datalayer.save.calledOnce); + this.datalayer.save.restore(); + done(); + }); + + it('should show alert if server respond 412', function () { + cleanAlert(); + this.server.flush(); + this.server.respondWith('POST', '/map/99/update/settings/', JSON.stringify({id: 99})); + this.server.respondWith('POST', '/map/99/datalayer/update/62/', [412, {}, '']); + happen.click(editButton); + input = qs('form.umap-form input[name="name"]'); + input.value = 'a new name'; + happen.once(input, {type: 'input'}); + clickSave(); + this.server.respond(); + this.server.respond(); + assert(L.DomUtil.hasClass(this.map._container, 'umap-alert')); + assert.notEqual(this.map.dirty_datalayers.indexOf(this.datalayer), -1); + forceButton = qs('#umap-alert-container .umap-action'); + assert.ok(forceButton); + }); + + it('should save anyway on force save button click', function () { + sinon.spy(this.map, 'continueSaving'); + happen.click(forceButton); + this.server.flush(); + this.server.respond('POST', '/map/99/datalayer/update/62/', JSON.stringify(defaultDatalayerData())); + assert.notOk(qs('#umap-alert-container .umap-action')); + assert(this.map.continueSaving.calledOnce); + this.map.continueSaving.restore(); + assert.equal(this.map.dirty_datalayers.indexOf(this.datalayer), -1); + }); + + }); + + describe('#save() new', function () { + var newLayerButton, form, input, newDatalayer, editButton, manageButton; + + it('should have a manage datalayers action', function () { + enableEdit(); + manageButton = qs('.manage-datalayers'); + assert.ok(manageButton); + happen.click(manageButton); + }); + + it('should have a new layer button', function () { + newLayerButton = qs('#umap-ui-container .add-datalayer'); + assert.ok(newLayerButton); + }); + + it('should build a form on new layer button click', function () { + happen.click(newLayerButton); + form = qs('form.umap-form'); + input = qs('form.umap-form input[name="name"]'); + assert.ok(form); + assert.ok(input); + }); + + it('should have an empty name', function () { + assert.notOk(input.value); + }); + + it('should have created a new datalayer', function () { + assert.equal(this.map.datalayers_index.length, 2); + newDatalayer = this.map.datalayers_index[1]; + }); + + it('should have made Map dirty', function () { + assert.ok(this.map.isDirty); + }); + + it('should update name on input change', function () { + var new_name = 'This is a new name'; + input.value = new_name; + happen.once(input, {type: 'input'}); + assert.equal(newDatalayer.options.name, new_name); + }); + + it('should set umap_id on save callback', function () { + assert.notOk(newDatalayer.umap_id); + this.server.flush(); + this.server.respondWith('POST', '/map/99/update/settings/', JSON.stringify({id: 99})); + this.server.respondWith('POST', '/map/99/datalayer/create/', JSON.stringify(defaultDatalayerData({id: 63}))); + clickSave(); + this.server.respond(); + this.server.respond(); // First respond will then trigger another Xhr request (continueSaving) + assert.equal(newDatalayer.umap_id, 63); + }); + + it('should have unset map dirty', function () { + assert.notOk(this.map.isDirty); + }); + + it('should have edit button', function () { + editButton = qs('#browse_data_toggle_' + L.stamp(newDatalayer) + ' .layer-edit'); + assert.ok(editButton); + }); + + it('should call update if we edit again', function () { + happen.click(editButton); + assert.notOk(this.map.isDirty); + input = qs('form.umap-form input[name="name"]'); + input.value = 'a new name again but we don\'t care which'; + happen.once(input, {type: 'input'}); + assert.ok(this.map.isDirty); + var response = function (request) { + return request.respond(200, {}, JSON.stringify(defaultDatalayerData({pk: 63}))); + }; + var spy = sinon.spy(response); + this.server.flush(); + this.server.respondWith('POST', '/map/99/update/settings/', JSON.stringify({id: 99})); + this.server.respondWith('POST', '/map/99/datalayer/update/63/', spy); + clickSave(); + this.server.respond(); + this.server.respond(); + assert.ok(spy.calledOnce); + }); + + }); + + describe('#iconClassChange()', function () { + + it('should change icon class', function () { + happen.click(qs('[data-id="' + this.datalayer._leaflet_id +'"] .layer-edit')); + changeSelectValue(qs('form#datalayer-advanced-properties select[name=iconClass]'), 'Circle'); + assert.notOk(qs('div.umap-div-icon')); + assert.ok(qs('div.umap-circle-icon')); + happen.click(qs('form#datalayer-advanced-properties .umap-field-iconClass .undefine')); + assert.notOk(qs('div.umap-circle-icon')); + assert.ok(qs('div.umap-div-icon')); + clickCancel(); + }); + + }); + + describe('#show/hide', function () { + + it('should hide features on hide', function () { + assert.ok(qs('div.umap-div-icon')); + assert.ok(qs('path[fill="none"]')); + this.datalayer.hide(); + assert.notOk(qs('div.umap-div-icon')); + assert.notOk(qs('path[fill="none"]')); + }); + + it('should show features on show', function () { + assert.notOk(qs('div.umap-div-icon')); + assert.notOk(qs('path[fill="none"]')); + this.datalayer.show(); + assert.ok(qs('div.umap-div-icon')); + assert.ok(qs('path[fill="none"]')); + }); + + }); + + describe('#clone()', function () { + + it('should clone everything but the id and the name', function () { + enableEdit(); + var clone = this.datalayer.clone(); + assert.notOk(clone.umap_id); + assert.notEqual(clone.options.name, this.datalayer.name); + assert.ok(clone.options.name); + assert.equal(clone.options.color, this.datalayer.options.color); + assert.equal(clone.options.stroke, this.datalayer.options.stroke); + clone._delete(); + clickSave(); + }); + + }); + + describe('#restore()', function () { + var oldConfirm, + newConfirm = function () { + return true; + }; + + before(function () { + oldConfirm = window.confirm; + window.confirm = newConfirm; + }); + after(function () { + window.confirm = oldConfirm; + }); + + it('should restore everything', function () { + enableEdit(); + var geojson = L.Util.CopyJSON(RESPONSES.datalayer62_GET); + geojson.features.push({ + 'geometry': { + 'type': 'Point', + 'coordinates': [-1.274658203125, 50.57634993749885] + }, + 'type': 'Feature', + 'id': 1807, + 'properties': {_umap_options: {}, name: 'new point from restore'} + }); + geojson._umap_options.color = 'Chocolate'; + this.server.respondWith('GET', '/datalayer/62/olderversion.geojson', JSON.stringify(geojson)); + sinon.spy(window, 'confirm'); + this.datalayer.restore('olderversion.geojson'); + this.server.respond(); + assert(window.confirm.calledOnce); + window.confirm.restore(); + assert.equal(this.datalayer.umap_id, 62); + assert.ok(this.datalayer.isDirty); + assert.equal(this.datalayer._index.length, 4); + assert.ok(qs('path[fill="Chocolate"]')); + }); + + it('should revert anything on cancel click', function () { + clickCancel(); + assert.equal(this.datalayer._index.length, 3); + assert.notOk(qs('path[fill="Chocolate"]')); + }); + + }); + + describe('#delete()', function () { + var deleteLink, deletePath = '/map/99/datalayer/delete/62/'; + + it('should have a delete link in update form', function () { + enableEdit(); + happen.click(qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-edit')); + deleteLink = qs('a.delete_datalayer_button'); + assert.ok(deleteLink); + }); + + it('should delete features on datalayer delete', function () { + happen.click(deleteLink); + assert.notOk(qs('div.icon_container')); + }); + + it('should have set map dirty', function () { + assert.ok(this.map.isDirty); + }); + + it('should delete layer control row on delete', function () { + assert.notOk(qs('.leaflet-control-browse #browse_data_toggle_' + L.stamp(this.datalayer))); + }); + + it('should be removed from map.datalayers_index', function () { + assert.equal(this.map.datalayers_index.indexOf(this.datalayer), -1); + }); + + it('should be removed from map.datalayers', function () { + assert.notOk(this.map.datalayers[L.stamp(this.datalayer)]); + }); + + it('should be visible again on edit cancel', function () { + clickCancel(); + assert.ok(qs('div.icon_container')); + }); + + }); + +}); diff --git a/umap/static/umap/test/Feature.js b/umap/static/umap/test/Feature.js new file mode 100644 index 00000000..fce7ff3e --- /dev/null +++ b/umap/static/umap/test/Feature.js @@ -0,0 +1,234 @@ +describe('L.U.FeatureMixin', function () { + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('GET', '/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.map = initMap({umap_id: 99}); + this.datalayer = this.map.getDataLayerByUmapId(62); + this.server.respond(); + }); + after(function () { + this.server.restore(); + resetMap(); + }); + + describe('#edit()', function () { + var link; + + it('should have datalayer features created', function () { + assert.equal(document.querySelectorAll('#map > .leaflet-map-pane > .leaflet-overlay-pane path.leaflet-interactive').length, 2); + assert.ok(qs('path[fill="none"]')); // Polyline + assert.ok(qs('path[fill="DarkBlue"]')); // Polygon + }); + + it('should take into account styles changes made in the datalayer', function () { + enableEdit(); + happen.click(qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-edit')); + var colorInput = qs('form#datalayer-advanced-properties input[name=color]'); + changeInputValue(colorInput, 'DarkRed'); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + assert.notOk(qs('path[fill="DarkBlue"]')); + assert.ok(qs('path[fill="DarkRed"]')); + }); + + it('should open a popup toolbar on feature click', function () { + enableEdit(); + happen.click(qs('path[fill="DarkRed"]')); + var toolbar = qs('ul.leaflet-inplace-toolbar'); + assert.ok(toolbar); + link = qs('a.umap-toggle-edit', toolbar); + assert.ok(link); + }); + + it('should open a form on popup toolbar toggle edit click', function () { + happen.click(link); + var form = qs('form#umap-feature-properties'); + var input = qs('form#umap-feature-properties input[name="name"]'); + assert.ok(form); + assert.ok(input); + }); + + it('should not handle _umap_options has normal property', function () { + assert.notOk(qs('form#umap-feature-properties input[name="_umap_options"]')); + }); + + it('should give precedence to feature style over datalayer styles', function () { + var input = qs('#umap-ui-container form input[name="color"]'); + assert.ok(input); + changeInputValue(input, 'DarkGreen'); + assert.notOk(qs('path[fill="DarkRed"]')); + assert.notOk(qs('path[fill="DarkBlue"]')); + assert.ok(qs('path[fill="DarkGreen"]')); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + }); + + it('should remove stroke if set to no', function () { + assert.notOk(qs('path[stroke="none"]')); + var defineButton = qs('#umap-feature-shape-properties .formbox:nth-child(4) .define'); + happen.click(defineButton); + var input = qs('#umap-feature-shape-properties input[name="stroke"]'); + assert.ok(input); + input.checked = false; + happen.once(input, {type: 'change'}); + assert.ok(qs('path[stroke="none"]')); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + }); + + it('should not override already set style on features', function () { + happen.click(qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-edit')); + changeInputValue(qs('#umap-ui-container form input[name=color]'), 'Chocolate'); + assert.notOk(qs('path[fill="DarkBlue"]')); + assert.notOk(qs('path[fill="DarkRed"]')); + assert.notOk(qs('path[fill="Chocolate"]')); + assert.ok(qs('path[fill="DarkGreen"]')); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + }); + + it('should reset style on cancel click', function () { + clickCancel(); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + assert.ok(qs('path[fill="DarkBlue"]')); + assert.notOk(qs('path[fill="DarkRed"]')); + }); + + it('should set map.editedFeature on edit', function () { + enableEdit(); + assert.notOk(this.map.editedFeature); + happen.click(qs('path[fill="DarkBlue"]')); + happen.click(qs('ul.leaflet-inplace-toolbar a.umap-toggle-edit')); + assert.ok(this.map.editedFeature); + disableEdit(); + }); + + it('should reset map.editedFeature on panel open', function (done) { + enableEdit(); + assert.notOk(this.map.editedFeature); + happen.click(qs('path[fill="DarkBlue"]')); + happen.click(qs('ul.leaflet-inplace-toolbar a.umap-toggle-edit')); + assert.ok(this.map.editedFeature); + this.map.displayCaption(); + window.setTimeout(function () { + assert.notOk(this.map.editedFeature); + disableEdit(); + done(); + }, 1001); // CSS transition time. + }); + + }); + + describe('#utils()', function () { + var poly, marker; + function setFeatures (datalayer) { + datalayer.eachLayer(function (layer) { + if (!poly && layer instanceof L.Polygon) { + poly = layer; + } + if (!marker && layer instanceof L.Marker) { + marker = layer; + } + }); + } + it('should generate a valid geojson', function () { + setFeatures(this.datalayer); + assert.ok(poly); + assert.deepEqual(poly.toGeoJSON().geometry, {'type': 'Polygon', 'coordinates': [[[11.25, 53.585984], [10.151367, 52.975108], [12.689209, 52.167194], [14.084473, 53.199452], [12.634277, 53.618579], [11.25, 53.585984], [11.25, 53.585984]]]}); + // Ensure original latlngs has not been modified + assert.equal(poly.getLatLngs()[0].length, 6); + }); + + it('should remove empty _umap_options from exported geojson', function () { + setFeatures(this.datalayer); + assert.ok(poly); + assert.deepEqual(poly.toGeoJSON().properties, {name: 'name poly'}); + assert.ok(marker); + assert.deepEqual(marker.toGeoJSON().properties, {_umap_options: {color: 'OliveDrab'}, name: 'test'}); + }); + + }); + + describe('#changeDataLayer()', function () { + + it('should change style on datalayer select change', function () { + enableEdit(); + happen.click(qs('.manage-datalayers')); + happen.click(qs('#umap-ui-container .add-datalayer')); + changeInputValue(qs('form.umap-form input[name="name"]'), 'New layer'); + changeInputValue(qs('form#datalayer-advanced-properties input[name=color]'), 'MediumAquaMarine'); + happen.click(qs('path[fill="DarkBlue"]')); + happen.click(qs('ul.leaflet-inplace-toolbar a.umap-toggle-edit')); + var select = qs('select[name=datalayer]'); + select.selectedIndex = 0; + happen.once(select, {type: 'change'}); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + assert.notOk(qs('path[fill="DarkBlue"]')); + assert.ok(qs('path[fill="MediumAquaMarine"]')); + clickCancel(); + }); + + }); + + describe('#openPopup()', function () { + + it('should open a popup on click', function () { + assert.notOk(qs('.leaflet-popup-content')); + happen.click(qs('path[fill="DarkBlue"]')); + var title = qs('.leaflet-popup-content'); + assert.ok(title); + assert.ok(title.innerHTML.indexOf('name poly')); + }); + + }); + + describe('#properties()', function () { + + it('should rename property', function () { + var poly = this.datalayer._lineToLayer({}, [[0, 0], [0, 1], [0, 2]]); + poly.properties.prop1 = 'xxx'; + poly.renameProperty('prop1', 'prop2'); + assert.equal(poly.properties.prop2, 'xxx'); + assert.ok(typeof poly.properties.prop1 === 'undefined'); + }); + + it('should not create property when renaming', function () { + var poly = this.datalayer._lineToLayer({}, [[0, 0], [0, 1], [0, 2]]); + delete poly.properties.prop2; // Make sure it doesn't exist + poly.renameProperty('prop1', 'prop2'); + assert.ok(typeof poly.properties.prop2 === 'undefined'); + }); + + it('should delete property', function () { + var poly = this.datalayer._lineToLayer({}, [[0, 0], [0, 1], [0, 2]]); + poly.properties.prop = 'xxx'; + assert.equal(poly.properties.prop, 'xxx'); + poly.deleteProperty('prop'); + assert.ok(typeof poly.properties.prop === 'undefined'); + }); + + }); + + describe('#matchFilter()', function () { + var poly; + + it('should filter on properties', function () { + poly = this.datalayer._lineToLayer({}, [[0, 0], [0, 1], [0, 2]]); + poly.properties.name = 'mooring'; + assert.ok(poly.matchFilter('moo', ['name'])); + assert.notOk(poly.matchFilter('foo', ['name'])); + }); + + it('should be case unsensitive', function () { + assert.ok(poly.matchFilter('Moo', ['name'])); + }); + + it('should match also in the middle of a string', function () { + assert.ok(poly.matchFilter('oor', ['name'])); + }); + + it('should handle multiproperties', function () { + poly.properties.city = 'Teulada'; + assert.ok(poly.matchFilter('eul', ['name', 'city', 'foo'])); + }); + + }); + +}); diff --git a/umap/static/umap/test/Map.js b/umap/static/umap/test/Map.js new file mode 100644 index 00000000..93616109 --- /dev/null +++ b/umap/static/umap/test/Map.js @@ -0,0 +1,302 @@ +describe('L.U.Map', function(){ + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.options = { + umap_id: 99 + }; + this.map = initMap({umap_id: 99}); + this.server.respond(); + this.datalayer = this.map.getDataLayerByUmapId(62); + }); + after(function () { + this.server.restore(); + clickCancel(); + resetMap(); + }); + + describe('#init()', function(){ + + it('should be initialized', function(){ + assert.equal(this.map.options.umap_id, 99); + }); + + it('should have created the edit button', function(){ + assert.ok(qs('div.leaflet-control-edit-enable')); + }); + + it('should have datalayer control div', function(){ + assert.ok(qs('div.leaflet-control-browse')); + }); + + it('should have datalayer actions div', function(){ + assert.ok(qs('div.umap-browse-actions')); + }); + + it('should have icon container div', function(){ + assert.ok(qs('div.icon_container')); + }); + + it('should hide icon container div when hiding datalayer', function() { + var el = qs('.leaflet-control-browse #browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-toggle'); + happen.click(el); + assert.notOk(qs('div.icon_container')); + }); + + it('enable edit on click on toggle button', function () { + var el = qs('div.leaflet-control-edit-enable a'); + happen.click(el); + assert.isTrue(L.DomUtil.hasClass(document.body, 'umap-edit-enabled')); + }); + + it('should have only one datalayer in its index', function () { + assert.equal(this.map.datalayers_index.length, 1); + }); + }); + + describe('#editMetadata()', function () { + var form, input; + + it('should build a form on editMetadata control click', function (done) { + var button = qs('a.update-map-settings'); + assert.ok(button); + happen.click(button); + form = qs('form.umap-form'); + input = qs('form[class="umap-form"] input[name="name"]'); + assert.ok(form); + assert.ok(input); + done(); + }); + + it('should update map name on input change', function () { + var new_name = 'This is a new name'; + input.value = new_name; + happen.once(input, {type: 'input'}); + assert.equal(this.map.options.name, new_name); + }); + + it('should have made Map dirty', function () { + assert.ok(this.map.isDirty); + }); + + it('should have added dirty class on map container', function () { + assert.ok(L.DomUtil.hasClass(this.map._container, 'umap-is-dirty')); + }); + + }); + + describe('#delete()', function () { + var path = '/map/99/delete/', + oldConfirm, + newConfirm = function () { + return true; + }; + + before(function () { + oldConfirm = window.confirm; + window.confirm = newConfirm; + }); + after(function () { + window.confirm = oldConfirm; + }); + + it('should ask for confirmation on delete link click', function (done) { + var button = qs('a.update-map-settings'); + assert.ok(button, 'update map info button exists'); + happen.click(button); + var deleteLink = qs('a.umap-delete'); + assert.ok(deleteLink, 'delete map button exists'); + sinon.spy(window, 'confirm'); + this.server.respondWith('POST', path, JSON.stringify({redirect: '#'})); + happen.click(deleteLink); + this.server.respond(); + assert(window.confirm.calledOnce); + window.confirm.restore(); + done(); + }); + + }); + + describe('#importData()', function () { + var fileInput, textarea, submit, formatSelect, layerSelect, clearFlag; + + it('should build a form on click', function () { + happen.click(qs('a.upload-data')); + fileInput = qs('.umap-upload input[type="file"]'); + textarea = qs('.umap-upload textarea'); + submit = qs('.umap-upload input[type="button"]'); + formatSelect = qs('.umap-upload select[name="format"]'); + layerSelect = qs('.umap-upload select[name="datalayer"]'); + assert.ok(fileInput); + assert.ok(submit); + assert.ok(textarea); + assert.ok(formatSelect); + assert.ok(layerSelect); + }); + + it('should import geojson from textarea', function () { + this.datalayer.empty() + assert.equal(this.datalayer._index.length, 0); + textarea.value = '{"type": "FeatureCollection", "features": [{"geometry": {"type": "Point", "coordinates": [6.922931671142578, 47.481161607175736]}, "type": "Feature", "properties": {"color": "", "name": "Chez R\u00e9my", "description": ""}}, {"geometry": {"type": "LineString", "coordinates": [[2.4609375, 48.88639177703194], [2.48291015625, 48.76343113791796], [2.164306640625, 48.719961222646276]]}, "type": "Feature", "properties": {"color": "", "name": "P\u00e9rif", "description": ""}}]}'; + changeSelectValue(formatSelect, 'geojson'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 2); + }); + + it('should import kml from textarea', function () { + this.datalayer.empty() + happen.click(qs('a.upload-data')); + textarea = qs('.umap-upload textarea'); + submit = qs('.umap-upload input[type="button"]'); + formatSelect = qs('.umap-upload select[name="format"]'); + assert.equal(this.datalayer._index.length, 0); + textarea.value = kml_example; + changeSelectValue(formatSelect, 'kml'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 3); + }); + + it('should import gpx from textarea', function () { + this.datalayer.empty() + happen.click(qs('a.upload-data')); + textarea = qs('.umap-upload textarea'); + submit = qs('.umap-upload input[type="button"]'); + formatSelect = qs('.umap-upload select[name="format"]'); + assert.equal(this.datalayer._index.length, 0); + textarea.value = gpx_example; + changeSelectValue(formatSelect, 'gpx'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 2); + }); + + it('should import csv from textarea', function () { + this.datalayer.empty() + happen.click(qs('a.upload-data')); + textarea = qs('.umap-upload textarea'); + submit = qs('.umap-upload input[type="button"]'); + formatSelect = qs('.umap-upload select[name="format"]'); + assert.equal(this.datalayer._index.length, 0); + textarea.value = csv_example; + changeSelectValue(formatSelect, 'csv'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 1); + }); + + it('should replace content if asked so', function () { + happen.click(qs('a.upload-data')); + textarea = qs('.umap-upload textarea'); + submit = qs('.umap-upload input[type="button"]'); + formatSelect = qs('.umap-upload select[name="format"]'); + clearFlag = qs('.umap-upload input[name="clear"]'); + clearFlag.checked = true; + assert.equal(this.datalayer._index.length, 1); + textarea.value = csv_example; + changeSelectValue(formatSelect, 'csv'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 1); + }); + + + it('should import GeometryCollection from textarea', function () { + this.datalayer.empty() + textarea.value = '{"type": "GeometryCollection","geometries": [{"type": "Point","coordinates": [-80.66080570220947,35.04939206472683]},{"type": "Polygon","coordinates": [[[-80.66458225250244,35.04496519190309],[-80.66344499588013,35.04603679820616],[-80.66258668899536,35.045580049697556],[-80.66387414932251,35.044280059194946],[-80.66458225250244,35.04496519190309]]]},{"type": "LineString","coordinates": [[-80.66237211227417,35.05950973022538],[-80.66269397735596,35.0592638296087],[-80.66284418106079,35.05893010615862],[-80.66308021545409,35.05833291342246],[-80.66359519958496,35.057753281001425],[-80.66387414932251,35.05740198662245],[-80.66441059112549,35.05703312589789],[-80.66486120223999,35.056787217822475],[-80.66541910171509,35.05650617911516],[-80.66563367843628,35.05631296444281],[-80.66601991653441,35.055891403570705],[-80.66619157791138,35.05545227534804],[-80.66619157791138,35.05517123204622],[-80.66625595092773,35.05489018777713],[-80.6662130355835,35.054222703761525],[-80.6662130355835,35.05392409072499],[-80.66595554351807,35.05290528508858],[-80.66569805145262,35.052044560077285],[-80.66550493240356,35.0514824490509],[-80.665762424469,35.05048117920187],[-80.66617012023926,35.04972582715769],[-80.66651344299316,35.049286665781096],[-80.66692113876343,35.0485313026898],[-80.66700696945189,35.048215102112344],[-80.66707134246826,35.04777593261294],[-80.66704988479614,35.04738946150025],[-80.66696405410767,35.04698542156371],[-80.66681385040283,35.046353007216055],[-80.66659927368164,35.04596652937105],[-80.66640615463257,35.04561518428889],[-80.6659984588623,35.045193568195565],[-80.66552639007568,35.044877354697526],[-80.6649899482727,35.04454357245502],[-80.66449642181396,35.04417465365292],[-80.66385269165039,35.04387600387859],[-80.66303730010986,35.043717894732545]]}]}'; + formatSelect = qs('.umap-upload select[name="format"]'); + changeSelectValue(formatSelect, 'geojson'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 3); + }); + + it('should import multipolygon', function () { + this.datalayer.empty() + textarea.value = '{"type": "Feature", "properties": { "name": "Some states" }, "geometry": { "type": "MultiPolygon", "coordinates": [[[[-109, 36], [-109, 40], [-102, 37], [-109, 36]], [[-108, 39], [-107, 37], [-104, 37], [-108, 39]]], [[[-119, 42], [-120, 39], [-114, 41], [-119, 42]]]] }}'; + changeSelectValue(formatSelect, 'geojson'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 1); + var layer = this.datalayer.getFeatureByIndex(0); + assert.equal(layer._latlngs.length, 2); // Two shapes. + assert.equal(layer._latlngs[0].length, 2); // Hole. + }); + + it('should import multipolyline', function () { + this.datalayer.empty() + textarea.value = '{"type": "FeatureCollection", "features": [{ "type": "Feature", "properties": {}, "geometry": { "type": "MultiLineString", "coordinates": [[[-108, 46], [-113, 43]], [[-112, 45], [-115, 44]]] } }]}'; + changeSelectValue(formatSelect, 'geojson'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 1); + var layer = this.datalayer.getFeatureByIndex(0); + assert.equal(layer._latlngs.length, 2); // Two shapes. + }); + + it('should import raw umap data from textarea', function () { + //Right now, the import function will try to save and reload. Stop this from happening. + var disabledSaveFunction = this.map.save; + this.map.save = function(){}; + happen.click(qs('a.upload-data')); + var initialLayerCount = Object.keys(this.map.datalayers).length; + formatSelect = qs('.umap-upload select[name="format"]'); + textarea = qs('.umap-upload textarea'); + textarea.value = '{ "type": "umap", "geometry": { "type": "Point", "coordinates": [3.0528, 50.6269] }, "properties": { "umap_id": 666, "longCredit": "the illustrious mapmaker", "shortCredit": "the mapmaker", "slideshow": {}, "captionBar": true, "dashArray": "5,5", "fillOpacity": "0.5", "fillColor": "Crimson", "fill": true, "weight": "2", "opacity": "0.9", "smoothFactor": "1", "iconClass": "Drop", "color": "Red", "limitBounds": {}, "tilelayer": { "maxZoom": 18, "url_template": "http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.jpg", "minZoom": 0, "attribution": "Map tiles by [[http://stamen.com|Stamen Design]], under [[http://creativecommons.org/licenses/by/3.0|CC BY 3.0]]. Data by [[http://openstreetmap.org|OpenStreetMap]], under [[http://creativecommons.org/licenses/by-sa/3.0|CC BY SA]].", "name": "Watercolor" }, "licence": { "url": "", "name": "No licence set" }, "description": "Map description", "name": "Imported map", "tilelayersControl": true, "onLoadPanel": "caption", "displayPopupFooter": true, "miniMap": true, "moreControl": true, "scaleControl": true, "zoomControl": true, "scrollWheelZoom": true, "datalayersControl": true, "zoom": 6 }, "layers": [{ "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [4.2939, 50.8893], [4.2441, 50.8196], [4.3869, 50.7642], [4.4813, 50.7929], [4.413, 50.9119], [4.2939, 50.8893] ] ] }, "properties": { "name": "Bruxelles", "description": "polygon" } }, { "type": "Feature", "geometry": { "type": "Point", "coordinates": [3.0528, 50.6269] }, "properties": { "_umap_options": { "color": "Orange" }, "name": "Lille", "description": "une ville" } }], "_umap_options": { "displayOnLoad": true, "name": "Cities", "id": 108, "remoteData": {}, "description": "A layer with some cities", "color": "Navy", "iconClass": "Drop", "smoothFactor": "1", "dashArray": "5,1", "fillOpacity": "0.5", "fillColor": "Blue", "fill": true } }, { "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "LineString", "coordinates": [ [1.7715, 50.9255], [1.6589, 50.9696], [1.4941, 51.0128], [1.4199, 51.0638], [1.2881, 51.1104] ] }, "properties": { "_umap_options": { "weight": "4" }, "name": "tunnel sous la Manche" } }], "_umap_options": { "displayOnLoad": true, "name": "Tunnels", "id": 109, "remoteData": {} } }]}'; + formatSelect.value = 'umap'; + submit = qs('.umap-upload input[type="button"]'); + happen.click(submit); + assert.equal(Object.keys(this.map.datalayers).length, initialLayerCount + 2); + assert.equal(this.map.options.name, "Imported map"); + var foundFirstLayer = false; + var foundSecondLayer = false; + for (var idx in this.map.datalayers) { + var datalayer = this.map.datalayers[idx]; + if (datalayer.options.name === "Cities") { + foundFirstLayer = true; + assert.equal(datalayer._index.length, 2); + } + if (datalayer.options.name === "Tunnels") { + foundSecondLayer = true; + assert.equal(datalayer._index.length, 1); + } + } + assert.equal(foundFirstLayer, true); + assert.equal(foundSecondLayer, true); + + }); + + it('should only import options on the whitelist (umap format import)', function () { + assert.equal(this.map.options.umap_id, 99); + }); + + it('should update title bar (umap format import)', function () { + var title = qs("#map div.umap-main-edit-toolbox h3 a.umap-click-to-edit"); + assert.equal(title.innerHTML, "Imported map"); + }); + + it('should reinitialize controls (umap format import)', function () { + var minimap = qs("#map div.leaflet-control-container div.leaflet-control-minimap"); + assert.ok(minimap); + }); + + it('should update the tilelayer switcher control (umap format import)', function () { + //The tilelayer in the imported data isn't in the tilelayer list (set in _pre.js), there should be no selection on the tilelayer switcher + var selectedLayer = qs(".umap-tilelayer-switcher-container li.selected"); + assert.equal(selectedLayer, null); + }); + + it('should set the tilelayer (umap format import)', function () { + assert.equal(this.map.selected_tilelayer._url, "http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.jpg"); + }); + + }); + + describe('#localizeUrl()', function () { + + it('should replace known variables', function () { + assert.equal(this.map.localizeUrl('http://example.org/{zoom}'), 'http://example.org/' + this.map.getZoom()); + }); + + it('should keep unknown variables', function () { + assert.equal(this.map.localizeUrl('http://example.org/{unkown}'), 'http://example.org/{unkown}'); + }); + + }); + + +}); diff --git a/umap/static/umap/test/Marker.js b/umap/static/umap/test/Marker.js new file mode 100644 index 00000000..108d1a0f --- /dev/null +++ b/umap/static/umap/test/Marker.js @@ -0,0 +1,50 @@ +describe('L.U.Marker', function () { + + before(function () { + this.server = sinon.fakeServer.create(); + var datalayer_response = JSON.parse(JSON.stringify(RESPONSES.datalayer62_GET)); // Copy. + datalayer_response._umap_options.iconClass = 'Drop'; + this.server.respondWith('GET', '/datalayer/62/', JSON.stringify(datalayer_response)); + this.map = initMap({umap_id: 99}); + this.datalayer = this.map.getDataLayerByUmapId(62); + this.server.respond(); + }); + after(function () { + this.server.restore(); + resetMap(); + }); + + describe('#iconClassChange()', function () { + + it('should change icon class', function () { + enableEdit(); + happen.click(qs('div.umap-drop-icon')); + happen.click(qs('ul.leaflet-inplace-toolbar a.umap-toggle-edit')); + changeSelectValue(qs('form#umap-feature-shape-properties .umap-field-iconClass select[name=iconClass]'), 'Circle'); + assert.notOk(qs('div.umap-drop-icon')); + assert.ok(qs('div.umap-circle-icon')); + happen.click(qs('form#umap-feature-shape-properties .umap-field-iconClass .undefine')); + assert.notOk(qs('div.umap-circle-icon')); + assert.ok(qs('div.umap-drop-icon')); + clickCancel(); + }); + + }); + + describe('#clone', function () { + + it('should clone marker', function () { + var layer = new L.U.Marker(this.map, [10, 20], {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 4); + other = layer.clone(); + assert.ok(this.map.hasLayer(other)); + assert.equal(this.datalayer._index.length, 5); + // Must not be the same reference + assert.notEqual(layer._latlng, other._latlng); + assert.equal(L.Util.formatNum(layer._latlng.lat), other._latlng.lat); + assert.equal(L.Util.formatNum(layer._latlng.lng), other._latlng.lng); + }); + + }); + +}); diff --git a/umap/static/umap/test/Permissions.js b/umap/static/umap/test/Permissions.js new file mode 100644 index 00000000..f214dcd9 --- /dev/null +++ b/umap/static/umap/test/Permissions.js @@ -0,0 +1,77 @@ +describe('L.Permissions', function () { + var path = '/map/99/datalayer/edit/62/'; + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('GET', '/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.map = initMap({umap_id: 99}); + this.datalayer = this.map.getDataLayerByUmapId(62); + this.server.respond(); + enableEdit(); + }); + after(function () { + clickCancel(); + this.server.restore(); + resetMap(); + }); + + describe('#open()', function () { + var button; + + it('should exist update permissions link', function () { + button = qs('a.update-map-permissions'); + expect(button).to.be.ok; + }); + + it('should open table button click', function () { + happen.click(button); + expect(qs('.permissions-panel')).to.be.ok; + }); + + }); + describe('#anonymous with cookie', function () { + var button; + + it('should only allow edit_status', function () { + this.map.options.anonymous_edit_url = 'http://anonymous.url' + button = qs('a.update-map-permissions'); + happen.click(button); + expect(qs('select[name="edit_status"]')).to.be.ok; + expect(qs('select[name="share_status"]')).not.to.be.ok; + expect(qs('input.edit-owner')).not.to.be.ok; + }); + + }); + + describe('#editor', function () { + var button; + + it('should only allow editors', function () { + this.map.permissions.options.owner = {id: 1, url: '/url', name: 'jojo'}; + button = qs('a.update-map-permissions'); + happen.click(button); + expect(qs('select[name="edit_status"]')).not.to.be.ok; + expect(qs('select[name="share_status"]')).not.to.be.ok; + expect(qs('input.edit-owner')).not.to.be.ok; + expect(qs('input.edit-editors')).to.be.ok; + }); + + }); + + describe('#owner', function () { + var button; + + it('should allow everything', function () { + this.map.permissions.options.owner = {id: 1, url: '/url', name: 'jojo'}; + this.map.options.user = {id: 1, url: '/url', name: 'jojo'}; + button = qs('a.update-map-permissions'); + happen.click(button); + expect(qs('select[name="edit_status"]')).to.be.ok; + expect(qs('select[name="share_status"]')).to.be.ok; + expect(qs('input.edit-owner')).to.be.ok; + expect(qs('input.edit-editors')).to.be.ok; + }); + + }); + +}); diff --git a/umap/static/umap/test/Polygon.js b/umap/static/umap/test/Polygon.js new file mode 100644 index 00000000..0264afde --- /dev/null +++ b/umap/static/umap/test/Polygon.js @@ -0,0 +1,288 @@ +describe('L.Utorage.Polygon', function () { + var p2ll, map; + + before(function () { + this.map = map = initMap({umap_id: 99}); + enableEdit(); + p2ll = function (x, y) { + return map.containerPointToLatLng([x, y]); + }; + this.datalayer = this.map.createDataLayer(); + this.datalayer.connectToMap();; + }); + + after(function () { + clickCancel(); + resetMap(); + }); + + afterEach(function () { + this.datalayer.empty(); + }); + + describe('#isMulti()', function () { + + it('should return false for basic Polygon', function () { + var layer = new L.U.Polygon(this.map, [[1, 2], [3, 4], [5, 6]], {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return false for nested basic Polygon', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]] + ], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return false for simple Polygon with hole', function () { + var layer = new L.U.Polygon(this.map, [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]], {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return true for multi Polygon', function () { + var latLngs = [ + [ + [[1, 2], [3, 4], [5, 6]] + ], + [ + [[7, 8], [9, 10], [11, 12]] + ] + ]; + var layer = new L.U.Polygon(this.map, latLngs, {datalayer: this.datalayer}); + assert.ok(layer.isMulti()) + }); + + it('should return true for multi Polygon with hole', function () { + var latLngs = [ + [[[10, 20], [30, 40], [50, 60]]], + [[[0, 10], [10, 10], [10, 0]], [[2, 3], [2, 4], [3, 4]]] + ]; + var layer = new L.U.Polygon(this.map, latLngs, {datalayer: this.datalayer}); + assert.ok(layer.isMulti()) + }); + + }); + + describe('#contextmenu', function () { + + afterEach(function () { + // Make sure contextmenu is hidden + happen.once(document, {type: 'keydown', keyCode: 27}); + }); + + describe('#in edit mode', function () { + + it('should allow to remove shape when multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]], + [[p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)]] + ], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.equal(qst('Remove shape from the multi'), 1); + }); + + it('should not allow to remove shape when not multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]] + ], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Remove shape from the multi')); + }); + + it('should not allow to isolate shape when not multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]] + ], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Extract shape to separate feature')); + }); + + it('should allow to isolate shape when multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]], + [[p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)]] + ], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.ok(qst('Extract shape to separate feature')); + }); + + it('should not allow to transform to lines when multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]], + [[p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)]] + ], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transform to lines')); + }); + + it('should not allow to transform to lines when hole', function () { + var latlngs = [ + [ + [p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)], + [p2ll(120, 150), p2ll(150, 180), p2ll(180, 120)] + ] + ], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transform to lines')); + }); + + it('should allow to transform to lines when not multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]] + ]; + new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.at('contextmenu', 150, 150); + assert.equal(qst('Transform to lines'), 1); + }); + + it('should not allow to transfer shape when not editedFeature', function () { + new L.U.Polygon(this.map, [p2ll(100, 150), p2ll(100, 200), p2ll(200, 150)], {datalayer: this.datalayer}).addTo(this.datalayer); + happen.at('contextmenu', 110, 160); + assert.equal(qst('Delete this feature'), 1); // Make sure we have right clicked on the polygon. + assert.notOk(qst('Transfer shape to edited feature')); + }); + + it('should not allow to transfer shape when editedFeature is not a polygon', function () { + var layer = new L.U.Polygon(this.map, [p2ll(100, 150), p2ll(100, 200), p2ll(200, 150)], {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.U.Polyline(this.map, [p2ll(200, 250), p2ll(200, 300)], {datalayer: this.datalayer}).addTo(this.datalayer); + other.edit(); + happen.once(layer._path, {type: 'contextmenu'}); + assert.equal(qst('Delete this feature'), 1); // Make sure we have right clicked on the polygon. + assert.notOk(qst('Transfer shape to edited feature')); + }); + + it('should allow to transfer shape when another polygon is edited', function (done) { + this.datalayer.empty(); + var layer = new L.U.Polygon(this.map, [p2ll(200, 300), p2ll(300, 200), p2ll(200, 100)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); // This moves the map to put "other" at the center. + var other = new L.U.Polygon(this.map, [p2ll(100, 150), p2ll(100, 200), p2ll(200, 150)], {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(other._path, {type: 'contextmenu'}); + assert.equal(qst('Transfer shape to edited feature'), 1); + done(); + }); + + }); + + }); + + describe('#addShape', function () { + + it('"add shape" control should not be visible by default', function () { + assert.notOk(qs('.umap-draw-polygon-multi')); + }); + + it('"add shape" control should be visible when editing a Polygon', function () { + var layer = new L.U.Polygon(this.map, [p2ll(100, 100), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); + assert.ok(qs('.umap-draw-polygon-multi')); + }); + + it('"add shape" control should extend the same multi', function () { + var layer = new L.U.Polygon(this.map, [p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); + assert.notOk(layer.isMulti()); + happen.click(qs('.umap-draw-polygon-multi')); + happen.at('mousedown', 300, 300); + happen.at('mouseup', 300, 300); + happen.at('mousedown', 350, 300); + happen.at('mouseup', 350, 300); + happen.at('click', 350, 300); + assert.ok(layer.isMulti()); + assert.equal(this.datalayer._index.length, 1); + }); + + }); + + describe('#transferShape', function () { + + it('should transfer simple polygon shape to another polygon', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.U.Polygon(this.map, [p2ll(200, 350), p2ll(200, 300), p2ll(300, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + assert.ok(this.map.hasLayer(layer)); + layer.transferShape(p2ll(150, 150), other); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[1][0], latlngs); + assert.notOk(this.map.hasLayer(layer)); + }); + + it('should transfer multipolygon shape to another polygon', function () { + var latlngs = [ + [ + [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + [p2ll(120, 150), p2ll(150, 180), p2ll(180, 120)] + ], + [[p2ll(200, 300), p2ll(300, 200)]] + ], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.U.Polygon(this.map, [p2ll(200, 350), p2ll(200, 300), p2ll(300, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + assert.ok(this.map.hasLayer(layer)); + layer.transferShape(p2ll(150, 150), other); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[1][0], latlngs[0][0]); + assert.ok(this.map.hasLayer(layer)); + assert.equal(layer._latlngs.length, 1); + }); + + }); + + describe('#isolateShape', function () { + + it('should not allow to isolate simple polygon', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + assert.ok(this.map.hasLayer(layer)); + layer.isolateShape(p2ll(150, 150)); + assert.equal(layer._latlngs[0].length, 3); + assert.equal(this.datalayer._index.length, 1); + }); + + it('should isolate multipolygon shape', function () { + var latlngs = [ + [ + [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + [p2ll(120, 150), p2ll(150, 180), p2ll(180, 120)] + ], + [[p2ll(200, 300), p2ll(300, 200)]] + ], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + assert.ok(this.map.hasLayer(layer)); + var other = layer.isolateShape(p2ll(150, 150)); + assert.equal(this.datalayer._index.length, 2); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[0], latlngs[0][0]); + assert.ok(this.map.hasLayer(layer)); + assert.ok(this.map.hasLayer(other)); + assert.equal(layer._latlngs.length, 1); + other.remove(); + }); + + }); + + describe('#clone', function () { + + it('should clone polygon', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.U.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + other = layer.clone(); + assert.ok(this.map.hasLayer(other)); + assert.equal(this.datalayer._index.length, 2); + // Must not be the same reference + assert.notEqual(layer._latlngs, other._latlngs); + assert.equal(L.Util.formatNum(layer._latlngs[0][0].lat), other._latlngs[0][0].lat); + assert.equal(L.Util.formatNum(layer._latlngs[0][0].lng), other._latlngs[0][0].lng); + }); + + }); + +}); diff --git a/umap/static/umap/test/Polyline.js b/umap/static/umap/test/Polyline.js new file mode 100644 index 00000000..c92b19d0 --- /dev/null +++ b/umap/static/umap/test/Polyline.js @@ -0,0 +1,326 @@ +describe('L.Utorage.Polyline', function () { + var p2ll, map; + + before(function () { + this.map = map = initMap({umap_id: 99}); + enableEdit(); + p2ll = function (x, y) { + return map.containerPointToLatLng([x, y]); + }; + this.datalayer = this.map.createDataLayer(); + this.datalayer.connectToMap();; + }); + + after(function () { + clickCancel(); + resetMap(); + }); + + afterEach(function () { + this.datalayer.empty(); + }); + + describe('#isMulti()', function () { + + it('should return false for basic Polyline', function () { + var layer = new L.U.Polyline(this.map, [[1, 2], [3, 4], [5, 6]], {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return false for nested basic Polyline', function () { + var layer = new L.U.Polyline(this.map, [[[1, 2], [3, 4], [5, 6]]], {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return true for multi Polyline', function () { + var latLngs = [ + [ + [[1, 2], [3, 4], [5, 6]] + ], + [ + [[7, 8], [9, 10], [11, 12]] + ] + ]; + var layer = new L.U.Polyline(this.map, latLngs, {datalayer: this.datalayer}); + assert.ok(layer.isMulti()) + }); + + }); + + describe('#contextmenu', function () { + + afterEach(function () { + // Make sure contextmenu is hidden. + happen.once(document, {type: 'keydown', keyCode: 27}); + }); + + describe('#in edit mode', function () { + + it('should allow to remove shape when multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)], + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.equal(qst('Remove shape from the multi'), 1); + }); + + it('should not allow to remove shape when not multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.notOk(qst('Remove shape from the multi')); + }); + + it('should not allow to isolate shape when not multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.notOk(qst('Extract shape to separate feature')); + }); + + it('should allow to isolate shape when multi', function () { + var latlngs = [ + [p2ll(100, 150), p2ll(100, 200)], + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.ok(qst('Extract shape to separate feature')); + }); + + it('should not allow to transform to polygon when multi', function () { + var latlngs = [ + [p2ll(100, 150), p2ll(100, 200)], + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transform to polygon')); + }); + + it('should allow to transform to polygon when not multi', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.equal(qst('Transform to polygon'), 1); + }); + + it('should not allow to transfer shape when not editedFeature', function () { + var layer = new L.U.Polyline(this.map, [p2ll(100, 150), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transfer shape to edited feature')); + }); + + it('should not allow to transfer shape when editedFeature is not a line', function () { + var layer = new L.U.Polyline(this.map, [p2ll(100, 150), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.U.Polygon(this.map, [p2ll(200, 300), p2ll(300, 200), p2ll(200, 100)], {datalayer: this.datalayer}).addTo(this.datalayer); + other.edit(); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transfer shape to edited feature')); + }); + + it('should allow to transfer shape when another line is edited', function () { + var layer = new L.U.Polyline(this.map, [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.U.Polyline(this.map, [p2ll(200, 300), p2ll(300, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + other.edit(); + happen.once(layer._path, {type: 'contextmenu'}); + assert.equal(qst('Transfer shape to edited feature'), 1); + }); + + it('should allow to merge lines when multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)], + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.equal(qst('Merge lines'), 1); + }); + + it('should not allow to merge lines when not multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.notOk(qst('Merge lines')); + }); + + it('should allow to split lines when clicking on vertex', function () { + var latlngs = [ + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.enableEdit(); + happen.at('contextmenu', 350, 400); + assert.equal(qst('Split line'), 1); + }); + + it('should not allow to split lines when clicking on first vertex', function () { + var latlngs = [ + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.enableEdit(); + happen.at('contextmenu', 300, 350); + assert.equal(qst('Delete this feature'), 1); // Make sure we have clicked on the vertex. + assert.notOk(qst('Split line')); + }); + + it('should not allow to split lines when clicking on last vertex', function () { + var latlngs = [ + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.enableEdit(); + happen.at('contextmenu', 400, 300); + assert.equal(qst('Delete this feature'), 1); // Make sure we have clicked on the vertex. + assert.notOk(qst('Split line')); + }); + + }); + + }); + + describe('#addShape', function () { + + it('"add shape" control should not be visible by default', function () { + assert.notOk(qs('.umap-draw-polyline-multi')); + }); + + it('"add shape" control should be visible when editing a Polyline', function () { + var layer = new L.U.Polyline(this.map, [p2ll(100, 100), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); + assert.ok(qs('.umap-draw-polyline-multi')); + }); + + it('"add shape" control should extend the same multi', function () { + var layer = new L.U.Polyline(this.map, [p2ll(100, 100), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); + assert.notOk(layer.isMulti()); + happen.click(qs('.umap-draw-polyline-multi')); + happen.at('mousemove', 300, 300); + happen.at('click', 300, 300); + happen.at('mousemove', 350, 300); + happen.at('click', 350, 300); + happen.at('click', 350, 300); + assert.ok(layer.isMulti()); + assert.equal(this.datalayer._index.length, 1); + }); + + }); + + describe('#transferShape', function () { + + it('should transfer simple line shape to another line', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.U.Polyline(this.map, [p2ll(200, 300), p2ll(300, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + assert.ok(this.map.hasLayer(layer)); + layer.transferShape(p2ll(150, 150), other); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[1], latlngs); + assert.notOk(this.map.hasLayer(layer)); + }); + + it('should transfer multi line shape to another line', function () { + var latlngs = [ + [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + [p2ll(200, 300), p2ll(300, 200)] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.U.Polyline(this.map, [p2ll(250, 300), p2ll(350, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + assert.ok(this.map.hasLayer(layer)); + layer.transferShape(p2ll(150, 150), other); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[1], latlngs[0]); + assert.ok(this.map.hasLayer(layer)); + assert.equal(layer._latlngs.length, 1); + }); + + }); + + describe('#mergeShapes', function () { + + it('should remove duplicated join point when merging', function () { + var latlngs = [ + [[0, 0], [0, 1]], + [[0, 1], [0, 2]], + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.mergeShapes(); + layer.disableEdit(); // Remove vertex from latlngs to compare them. + assert.deepEqual(layer.getLatLngs(), [L.latLng([0, 0]), L.latLng([0, 1]), L.latLng([0, 2])]); + assert(this.map.isDirty); + }); + + it('should revert candidate if first point is closer', function () { + var latlngs = [ + [[0, 0], [0, 1]], + [[0, 2], [0, 1]], + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.mergeShapes(); + layer.disableEdit(); + assert.deepEqual(layer.getLatLngs(), [L.latLng([0, 0]), L.latLng([0, 1]), L.latLng([0, 2])]); + }); + + }); + + + describe('#isolateShape', function () { + + it('should not allow to isolate simple line', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + assert.ok(this.map.hasLayer(layer)); + layer.isolateShape(p2ll(150, 150)); + assert.equal(layer._latlngs.length, 3); + assert.equal(this.datalayer._index.length, 1); + }); + + it('should isolate multipolyline shape', function () { + var latlngs = [ + [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + [[p2ll(200, 300), p2ll(300, 200)]] + ], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + assert.ok(this.map.hasLayer(layer)); + var other = layer.isolateShape(p2ll(150, 150)); + assert.equal(this.datalayer._index.length, 2); + assert.equal(other._latlngs.length, 3); + assert.deepEqual(other._latlngs, latlngs[0]); + assert.ok(this.map.hasLayer(layer)); + assert.ok(this.map.hasLayer(other)); + assert.equal(layer._latlngs.length, 1); + other.remove(); + }); + + }); + + describe('#clone', function () { + + it('should clone polyline', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.U.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + other = layer.clone(); + assert.ok(this.map.hasLayer(other)); + assert.equal(this.datalayer._index.length, 2); + // Must not be the same reference + assert.notEqual(layer._latlngs, other._latlngs); + assert.equal(L.Util.formatNum(layer._latlngs[0].lat), other._latlngs[0].lat); + assert.equal(L.Util.formatNum(layer._latlngs[0].lng), other._latlngs[0].lng); + }); + + }); + +}); diff --git a/umap/static/umap/test/TableEditor.js b/umap/static/umap/test/TableEditor.js new file mode 100644 index 00000000..6672c16a --- /dev/null +++ b/umap/static/umap/test/TableEditor.js @@ -0,0 +1,94 @@ +describe('L.TableEditor', function () { + var path = '/map/99/datalayer/edit/62/'; + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('GET', '/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.map = initMap({umap_id: 99}); + this.datalayer = this.map.getDataLayerByUmapId(62); + this.server.respond(); + enableEdit(); + }); + after(function () { + clickCancel(); + this.server.restore(); + resetMap(); + }); + + describe('#open()', function () { + var button; + + it('should exist table click on edit mode', function () { + button = qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-table-edit'); + expect(button).to.be.ok; + }); + + it('should open table button click', function () { + happen.click(button); + expect(qs('#umap-ui-container div.table')).to.be.ok; + expect(qsa('#umap-ui-container div.table form').length).to.eql(3); // One per feature. + expect(qsa('#umap-ui-container div.table input').length).to.eql(3); // One per feature and per property. + }); + + }); + describe('#properties()', function () { + var feature; + + before(function () { + var firstIndex = this.datalayer._index[0]; + feature = this.datalayer._layers[firstIndex]; + }); + + it('should create new property column', function () { + var newPrompt = function () { + return 'newprop'; + }; + var oldPrompt = window.prompt; + window.prompt = newPrompt; + var button = qs('#umap-ui-container .add-property'); + expect(button).to.be.ok; + happen.click(button); + expect(qsa('#umap-ui-container div.table input').length).to.eql(6); // One per feature and per property. + window.prompt = oldPrompt; + }); + + it('should populate feature property on fill', function () { + var input = qs('form#umap-feature-properties_' + L.stamp(feature) + ' input[name=newprop]'); + changeInputValue(input, 'the value'); + expect(feature.properties.newprop).to.eql('the value'); + }); + + it('should update property name on update click', function () { + var newPrompt = function () { + return 'newname'; + }; + var oldPrompt = window.prompt; + window.prompt = newPrompt; + var button = qs('#umap-ui-container div.thead div.tcell:last-of-type .umap-edit'); + expect(button).to.be.ok; + happen.click(button); + expect(qsa('#umap-ui-container div.table input').length).to.eql(6); + expect(feature.properties.newprop).to.be.undefined; + expect(feature.properties.newname).to.eql('the value'); + window.prompt = oldPrompt; + }); + + it('should update property on delete click', function () { + var oldConfirm, + newConfirm = function () { + return true; + }; + oldConfirm = window.confirm; + window.confirm = newConfirm; + var button = qs('#umap-ui-container div.thead div.tcell:last-of-type .umap-delete'); + expect(button).to.be.ok; + happen.click(button); + FEATURE = feature; + expect(qsa('#umap-ui-container div.table input').length).to.eql(3); + expect(feature.properties.newname).to.be.undefined; + window.confirm = oldConfirm; + }); + + }); + +}); diff --git a/umap/static/umap/test/Util.js b/umap/static/umap/test/Util.js new file mode 100644 index 00000000..ba2fa618 --- /dev/null +++ b/umap/static/umap/test/Util.js @@ -0,0 +1,202 @@ +describe('L.Util', function () { + + describe('#toHTML()', function () { + + it('should handle title', function () { + assert.equal(L.Util.toHTML('# A title'), '

    A title

    '); + }); + + it('should handle title in the middle of the content', function () { + assert.equal(L.Util.toHTML('A phrase\n## A title'), 'A phrase
    \n

    A title

    '); + }); + + it('should handle hr', function () { + assert.equal(L.Util.toHTML('---'), '
    '); + }); + + it('should handle bold', function () { + assert.equal(L.Util.toHTML('Some **bold**'), 'Some bold'); + }); + + it('should handle italic', function () { + assert.equal(L.Util.toHTML('Some *italic*'), 'Some italic'); + }); + + it('should handle newlines', function () { + assert.equal(L.Util.toHTML('two\nlines'), 'two
    \nlines'); + }); + + it('should not change last newline', function () { + assert.equal(L.Util.toHTML('two\nlines\n'), 'two
    \nlines\n'); + }); + + it('should handle two successive newlines', function () { + assert.equal(L.Util.toHTML('two\n\nlines\n'), 'two
    \n
    \nlines\n'); + }); + + it('should handle links without formatting', function () { + assert.equal(L.Util.toHTML('A simple http://osm.org link'), 'A simple http://osm.org link'); + }); + + it('should handle simple link in title', function () { + assert.equal(L.Util.toHTML('# http://osm.org'), '

    http://osm.org

    '); + }); + + it('should handle links with url parameter', function () { + assert.equal(L.Util.toHTML('A simple https://osm.org/?url=https%3A//anotherurl.com link'), 'A simple https://osm.org/?url=https%3A//anotherurl.com link'); + }); + + it('should handle simple link inside parenthesis', function () { + assert.equal(L.Util.toHTML('A simple link (http://osm.org)'), 'A simple link (http://osm.org)'); + }); + + it('should handle simple link with formatting', function () { + assert.equal(L.Util.toHTML('A simple [[http://osm.org]] link'), 'A simple http://osm.org link'); + }); + + it('should handle simple link with formatting and content', function () { + assert.equal(L.Util.toHTML('A simple [[http://osm.org|link]]'), 'A simple link'); + }); + + it('should handle simple link followed by a carriage return', function () { + assert.equal(L.Util.toHTML('A simple link http://osm.org\nAnother line'), 'A simple link http://osm.org
    \nAnother line'); + }); + + it('should handle image', function () { + assert.equal(L.Util.toHTML('A simple image: {{http://osm.org/pouet.png}}'), 'A simple image: '); + }); + + it('should handle image without text', function () { + assert.equal(L.Util.toHTML('{{http://osm.org/pouet.png}}'), ''); + }); + + it('should handle image with width', function () { + assert.equal(L.Util.toHTML('A simple image: {{http://osm.org/pouet.png|100}}'), 'A simple image: '); + }); + + it('should handle iframe', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{http://osm.org/pouet.html}}}'), 'A simple iframe: '); + }); + + it('should handle iframe with height', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{http://osm.org/pouet.html|200}}}'), 'A simple iframe: '); + }); + + it('should handle iframe with height and width', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{http://osm.org/pouet.html|200*400}}}'), 'A simple iframe: '); + }); + + it('should handle iframe with height with px', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{http://osm.org/pouet.html|200px}}}'), 'A simple iframe: '); + }); + + it('should handle iframe with url parameter', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{https://osm.org/?url=https%3A//anotherurl.com}}}'), 'A simple iframe: '); + }); + + }); + + describe('#escapeHTML', function () { + + it('should escape HTML tags', function () { + assert.equal(L.Util.escapeHTML(''), '<a href="pouet">'); + }); + + it('should not fail with int value', function () { + assert.equal(L.Util.escapeHTML(25), '25'); + }); + + it('should not fail with null value', function () { + assert.equal(L.Util.escapeHTML(null), ''); + }); + + }); + + describe('#greedyTemplate', function () { + + it('should replace simple props', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {variable}.', {variable: 'thing'}), 'A phrase with a thing.'); + }); + + it('should not fail when missing key', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {missing}', {}), 'A phrase with a '); + }); + + it('should process brakets in brakets', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {{{variable}}}.', {variable: 'value'}), 'A phrase with a {{value}}.'); + }); + + it('should not process http links', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {{{http://iframeurl.com}}}.', {'http://iframeurl.com': 'value'}), 'A phrase with a {{{http://iframeurl.com}}}.'); + }); + + it('should not accept dash', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {var-iable}.', {'var-iable': 'value'}), 'A phrase with a {var-iable}.'); + }); + + it('should accept colon', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {variable:fr}.', {'variable:fr': 'value'}), 'A phrase with a value.'); + }); + + it('should replace even with ignore if key is found', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {variable:fr}.', {'variable:fr': 'value'}, true), 'A phrase with a value.'); + }); + + it('should keep string when using ignore if key is not found', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {variable:fr}.', {}, true), 'A phrase with a {variable:fr}.'); + }); + + }); + + describe('#TextColorFromBackgroundColor', function () { + + it('should output white for black', function () { + document.body.style.backgroundColor = 'black'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#ffffff'); + }); + + it('should output white for brown', function () { + document.body.style.backgroundColor = 'brown'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#ffffff'); + }); + + it('should output black for white', function () { + document.body.style.backgroundColor = 'white'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#000000'); + }); + + it('should output black for tan', function () { + document.body.style.backgroundColor = 'tan'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#000000'); + }); + + it('should output black by default', function () { + document.body.style.backgroundColor = 'transparent'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#000000'); + }); + + }); + + + describe('#flattenCoordinates()', function () { + + it('should not alter already flat coords', function () { + var coords = [[1, 2], [3, 4]]; + assert.deepEqual(L.Util.flattenCoordinates(coords), coords); + }) + + it('should flatten nested coords', function () { + var coords = [[[1, 2], [3, 4]]]; + assert.deepEqual(L.Util.flattenCoordinates(coords), coords[0]); + coords = [[[[1, 2], [3, 4]]]]; + assert.deepEqual(L.Util.flattenCoordinates(coords), coords[0][0]); + }) + + it('should not fail on empty coords', function () { + var coords = []; + assert.deepEqual(L.Util.flattenCoordinates(coords), coords); + }) + + }); + +}); diff --git a/umap/static/umap/test/_pre.js b/umap/static/umap/test/_pre.js new file mode 100644 index 00000000..386220dc --- /dev/null +++ b/umap/static/umap/test/_pre.js @@ -0,0 +1,300 @@ +var qs = function (selector, element) {return (element || document).querySelector(selector);}; +var qsa = function (selector) {return document.querySelectorAll(selector);}; +var qst = function (text, parent) { + // find element by its text content + var r = document.evaluate("descendant::*[contains(text(),'" + text + "')]", parent || qs('#map'), null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null), count = 0; + while(r.iterateNext()) console.log(++count); + return count; +}; +happen.at = function (what, x, y, props) { + this.once(document.elementFromPoint(x, y), L.Util.extend({ + type: what, + clientX: x, + clientY: y, + screenX: x, + screenY: y, + which: 1, + button: 0 + }, props || {})); +}; +var resetMap = function () { + var mapElement = qs('#map'); + mapElement.innerHTML = 'Done'; + delete mapElement._leaflet_id; + document.body.className = ''; +}; +var enableEdit = function () { + happen.click(qs('div.leaflet-control-edit-enable a')); +}; +var disableEdit = function () { + happen.click(qs('a.leaflet-control-edit-disable')); +}; +var clickSave = function () { + happen.click(qs('a.leaflet-control-edit-save')); +}; +var clickCancel = function () { + var _confirm = window.confirm; + window.confirm = function (text) { + return true; + }; + happen.click(qs('a.leaflet-control-edit-cancel')); + happen.once(document.body, {type: 'keypress', keyCode: 13}); + window.confirm = _confirm; +}; +var changeInputValue = function (input, value) { + input.value = value; + happen.once(input, {type: 'input'}); +}; +var changeSelectValue = function (path_or_select, value) { + if (typeof path_or_select === 'string') path_or_select = qs(path_or_select); + var found = false; + for (var i = 0; i < path_or_select.length; i++) { + if (path_or_select.options[i].value === value) { + path_or_select.options[i].selected = true; + found = true; + } + } + happen.once(path_or_select, {type: 'change'}); + if (!found) throw new Error('Value ' + value + 'not found in select ' + path_or_select); + return path_or_select; +} +var cleanAlert = function () { + L.DomUtil.removeClass(qs('#map'), 'umap-alert'); + L.DomUtil.get('umap-alert-container').innerHTML = ''; + UI_ALERT_ID = null; // Prevent setTimeout to be called +}; +var defaultDatalayerData = function (custom) { + var _default = { + iconClass: 'Default', + name: 'Elephants', + displayOnLoad: true, + id: 62, + pictogram_url: null, + opacity: null, + weight: null, + fillColor: '', + color: '', + stroke: true, + smoothFactor: null, + dashArray: '', + fillOpacity: null, + fill: true + }; + return L.extend({}, _default, custom); +}; + +function initMap (options) { + default_options = { + "geometry": { + "type": "Point", + "coordinates": [5.0592041015625, 52.05924589011585] + }, + "type": "Feature", + "properties": { + "umap_id": 42, + "datalayers": [], + "urls": { + "map": "/map/{slug}_{pk}", + "datalayer_view": "/datalayer/{pk}/", + "map_update": "/map/{map_id}/update/settings/", + "map_old_url": "/map/{username}/{slug}/", + "map_clone": "/map/{map_id}/update/clone/", + "map_short_url": "/m/{pk}/", + "map_anonymous_edit_url": "/map/anonymous-edit/{signature}", + "map_new": "/map/new/", + "datalayer_update": "/map/{map_id}/datalayer/update/{pk}/", + "map_delete": "/map/{map_id}/update/delete/", + "map_create": "/map/create/", + "logout": "/logout/", + "datalayer_create": "/map/{map_id}/datalayer/create/", + "login_popup_end": "/login/popupd/", + "login": "/login/", + "datalayer_delete": "/map/{map_id}/datalayer/delete/{pk}/", + "datalayer_versions": "/map/{map_id}/datalayer/{pk}/versions/", + "datalayer_version": "/datalayer/{pk}/{name}", + "pictogram_list_json": "/pictogram/json/", + "map_update_permissions": "/map/{map_id}/update/permissions/" + }, + "default_iconUrl": "../src/img/marker.png", + "zoom": 6, + "tilelayers": [ + { + "attribution": "\u00a9 OSM Contributors", + "name": "OpenStreetMap", + "url_template": "http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", + "minZoom": 0, + "maxZoom": 18, + "id": 1, + "selected": true + }, + { + "attribution": "HOT and friends", + "name": "HOT OSM-fr server", + "url_template": "http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", + "rank": 99, + "minZoom": 0, + "maxZoom": 20, + "id": 2 + }], + "tilelayer": { + "attribution": "HOT and friends", + "name": "HOT OSM-fr server", + "url_template": "http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", + "rank": 99, + "minZoom": 0, + "maxZoom": 20, + "id": 2 + }, + "licences": { + "No licence set": { + "url": "", + "name": "No licence set" + }, + "Licence ouverte/Open Licence": { + "url": "http://www.data.gouv.fr/Licence-Ouverte-Open-Licence", + "name": "Licence ouverte/Open Licence" + }, + "WTFPL": { + "url": "http://www.wtfpl.net/", + "name": "WTFPL" + }, + "ODbl": { + "url": "http://opendatacommons.org/licenses/odbl/", + "name": "ODbl" + } + }, + "name": "name of the map", + "description": "The description of the map", + "allowEdit": true, + "moreControl": true, + "scaleControl": true, + "miniMap": true, + "datalayersControl": true, + "displayCaptionOnLoad": false, + "displayPopupFooter": false, + "displayDataBrowserOnLoad": false + } + }; + default_options.properties.datalayers.push(defaultDatalayerData()); + options.properties = L.extend({}, default_options.properties, options); + return new L.U.Map("map", options); +} + +var RESPONSES = { + 'datalayer62_GET': { + "crs": null, + "type": "FeatureCollection", + "_umap_options": defaultDatalayerData(), + "features": [{ + "geometry": { + "type": "Point", + "coordinates": [-0.274658203125, 52.57634993749885] + }, + "type": "Feature", + "id": 1807, + "properties": {_umap_options: {color: "OliveDrab"}, name: "test"} + }, + { + "geometry": { + "type": "LineString", + "coordinates": [[-0.5712890625, 54.47642158429295], [0.439453125, 54.610254981579146], [1.724853515625, 53.44880683542759], [4.163818359375, 53.98839506479995], [5.306396484375, 53.533778184257805], [6.591796875, 53.70971358510174], [7.042236328124999, 53.35055131839989]] + }, + "type": "Feature", + "id": 20, "properties": {"_umap_options": {"fill": false}, "name": "test"} + }, + { + "geometry": { + "type": "Polygon", + "coordinates": [[[11.25, 53.585983654559804], [10.1513671875, 52.9751081817353], [12.689208984375, 52.16719363541221], [14.084472656249998, 53.199451902831555], [12.63427734375, 53.61857936489517], [11.25, 53.585983654559804], [11.25, 53.585983654559804]]] + }, + "type": "Feature", + "id": 76, + "properties": {name: "name poly"} + }] + } +}; + + +sinon.fakeServer.getRequest = function (path, method) { + var request; + for (var i=0, l=this.requests.length; i' + +''+ +'Simple point'+ +'Here is a simple description.'+ +''+ +'-122.0822035425683,37.42228990140251,0'+ +''+ +''+ +''+ +'Simple path'+ +'Simple description'+ +''+ +'-112.2550785337791,36.07954952145647,2357 -112.2549277039738,36.08117083492122,2357 -112.2552505069063,36.08260761307279,2357'+ +''+ +''+ +''+ +'Simple polygon'+ +'A description.'+ +''+ +''+ +''+ +''+ +' -77.05788457660967,38.87253259892824,100 '+ +' -77.05465973756702,38.87291016281703,100 '+ +' -77.05315536854791,38.87053267794386,100 '+ +' -77.05788457660967,38.87253259892824,100 '+ +''+ +''+ +''+ +''+ +''+ +''; + +var gpx_example = '' + +' 1374Simple PointSimple description' + +' ' + +' Simple path' + +' Simple description' + +' ' + +' ' + +' ' + +' ' + +' ' + +' ' + +''; + +var csv_example = 'Foo,Latitude,Longitude,title,description\n' + +'bar,41.34,122.86,a point somewhere,the description of this point'; + +// Make Sinon log readable +sinon.format = function (what) { + if (typeof what === 'object') { + return JSON.stringify(what, null, 4); + } else if (typeof what === "undefined") { + return ''; + } else { + return what.toString(); + } +}; diff --git a/umap/static/umap/test/index.html b/umap/static/umap/test/index.html new file mode 100644 index 00000000..f8bdaae5 --- /dev/null +++ b/umap/static/umap/test/index.html @@ -0,0 +1,117 @@ + + + Umap front Tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + diff --git a/umap/static/umap/umap.png b/umap/static/umap/umap.png deleted file mode 100644 index 7edbeff2..00000000 Binary files a/umap/static/umap/umap.png and /dev/null differ diff --git a/umap/templates/auth/user_detail.html b/umap/templates/auth/user_detail.html index 51374464..363b1529 100644 --- a/umap/templates/auth/user_detail.html +++ b/umap/templates/auth/user_detail.html @@ -9,7 +9,7 @@
    {% if maps %} - {% include "leaflet_storage/map_list.html" %} + {% include "umap/map_list.html" %} {% else %}
    {% blocktrans %}{{ current_user }} has no maps.{% endblocktrans %} diff --git a/umap/templates/base.html b/umap/templates/base.html index f6f1be68..c5fda761 100644 --- a/umap/templates/base.html +++ b/umap/templates/base.html @@ -4,22 +4,8 @@ {% block head_title %}{{ SITE_NAME }}{% endblock %} - {% compress css %} - - - - - - {% endcompress css %} - - {% block extra_head %} {% endblock extra_head %} - {% compress js %} - - {% endcompress js %} diff --git a/umap/templates/leaflet_storage/js.html b/umap/templates/leaflet_storage/js.html deleted file mode 100644 index 79e6cb2d..00000000 --- a/umap/templates/leaflet_storage/js.html +++ /dev/null @@ -1,42 +0,0 @@ -{% load compress %} -{% compress js %} - - - - - - - - - - - - - - - - - - - - - - -{% endcompress %} -{% if locale %} - -{% endif %} -{% compress js %} - - - - - - - - - - - - -{% endcompress %} diff --git a/umap/templates/leaflet_storage/map_detail.html b/umap/templates/leaflet_storage/map_detail.html deleted file mode 100644 index 07c629ef..00000000 --- a/umap/templates/leaflet_storage/map_detail.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends "base.html" %} -{% load leaflet_storage_tags compress i18n %} -{% block head_title %}{{ map.name }} - {{ SITE_NAME }}{% endblock %} -{% block body_class %}map_detail{% endblock %} - -{% block extra_head %} - {% compress css %} - {% leaflet_storage_css %} - {% endcompress %} - {% leaflet_storage_js locale=locale %} - {% if object.share_status != object.PUBLIC %} - - {% endif %} -{% endblock %} - -{% block content %} - {% block map_init %} - {% include "leaflet_storage/map_init.html" %} - {% endblock %} - {% include "leaflet_storage/map_messages.html" %} - -{% endblock %} diff --git a/umap/templates/registration/login.html b/umap/templates/registration/login.html index 3d052eb4..265af5d6 100644 --- a/umap/templates/registration/login.html +++ b/umap/templates/registration/login.html @@ -29,7 +29,7 @@ diff --git a/umap/templates/umap/content.html b/umap/templates/umap/content.html index 8435d7fd..ca7fb698 100644 --- a/umap/templates/umap/content.html +++ b/umap/templates/umap/content.html @@ -1,14 +1,14 @@ {% extends "base.html" %} -{% load leaflet_storage_tags compress i18n %} +{% load umap_tags compress i18n %} {% block body_class %}content{% endblock %} {% block extra_head %} {% compress css %} - {% leaflet_storage_css %} + {% umap_css %} {% endcompress css %} - {% leaflet_storage_js %} + {% umap_js %} {% endblock %} {% block header %} @@ -26,8 +26,8 @@ {{ block.super }} + + + + + + + + + + + + + + + + + + + + + +{% endcompress %} +{% if locale %} + +{% endif %} +{% compress js %} + + + + + + + + + + + + + + +{% endcompress %} diff --git a/umap/templates/umap/locale.js b/umap/templates/umap/locale.js new file mode 100644 index 00000000..374a6206 --- /dev/null +++ b/umap/templates/umap/locale.js @@ -0,0 +1,3 @@ +var locale = {{ locale|safe }}; +L.registerLocale("{{ locale_code }}", locale); +L.setLocale("{{ locale_code }}"); \ No newline at end of file diff --git a/umap/templates/umap/login_popup_end.html b/umap/templates/umap/login_popup_end.html new file mode 100644 index 00000000..fe2c1bfc --- /dev/null +++ b/umap/templates/umap/login_popup_end.html @@ -0,0 +1,18 @@ +{% load i18n %} +

    {% trans "You are logged in. Continuing..." %}

    + + diff --git a/umap/templates/umap/map_detail.html b/umap/templates/umap/map_detail.html new file mode 100644 index 00000000..fd9994f5 --- /dev/null +++ b/umap/templates/umap/map_detail.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} +{% load umap_tags compress i18n %} +{% block head_title %}{{ map.name }} - {{ SITE_NAME }}{% endblock %} +{% block body_class %}map_detail{% endblock %} + +{% block extra_head %} + {% compress css %} + {% umap_css %} + {% endcompress %} + {% umap_js locale=locale %} + {% if object.share_status != object.PUBLIC %} + + {% endif %} +{% endblock %} + +{% block content %} + {% block map_init %} + {% include "umap/map_init.html" %} + {% endblock %} + {% include "umap/map_messages.html" %} +{% endblock %} diff --git a/umap/templates/umap/map_fragment.html b/umap/templates/umap/map_fragment.html new file mode 100644 index 00000000..83bed716 --- /dev/null +++ b/umap/templates/umap/map_fragment.html @@ -0,0 +1,5 @@ +{% load umap_tags %} +
    + diff --git a/umap/templates/umap/map_init.html b/umap/templates/umap/map_init.html new file mode 100644 index 00000000..50af1a17 --- /dev/null +++ b/umap/templates/umap/map_init.html @@ -0,0 +1,5 @@ +{% load umap_tags %} +
    + diff --git a/umap/templates/leaflet_storage/map_list.html b/umap/templates/umap/map_list.html similarity index 92% rename from umap/templates/leaflet_storage/map_list.html rename to umap/templates/umap/map_list.html index 73d9b607..926bcdd3 100644 --- a/umap/templates/leaflet_storage/map_list.html +++ b/umap/templates/umap/map_list.html @@ -1,4 +1,4 @@ -{% load leaflet_storage_tags umap_tags i18n %} +{% load umap_tags umap_tags i18n %} {% for map_inst in maps %}
    diff --git a/umap/templates/umap/map_messages.html b/umap/templates/umap/map_messages.html new file mode 100644 index 00000000..5ee2c2fb --- /dev/null +++ b/umap/templates/umap/map_messages.html @@ -0,0 +1,11 @@ + diff --git a/umap/templates/umap/search.html b/umap/templates/umap/search.html index da860da7..51c37a17 100644 --- a/umap/templates/umap/search.html +++ b/umap/templates/umap/search.html @@ -8,7 +8,7 @@
    {% if maps %} - {% include "leaflet_storage/map_list.html" with prefix='search_map_' %} + {% include "umap/map_list.html" with prefix='search_map_' %} {% else %} {% trans "Not map found." %} {% endif %} diff --git a/umap/templates/umap/success.html b/umap/templates/umap/success.html new file mode 100644 index 00000000..b5754e20 --- /dev/null +++ b/umap/templates/umap/success.html @@ -0,0 +1 @@ +ok \ No newline at end of file diff --git a/umap/templatetags/umap_tags.py b/umap/templatetags/umap_tags.py index b86c8a62..be620533 100644 --- a/umap/templatetags/umap_tags.py +++ b/umap/templatetags/umap_tags.py @@ -1,10 +1,80 @@ +import json from copy import copy from django import template +from django.conf import settings + +from ..models import DataLayer, TileLayer +from ..views import _urls_for_js register = template.Library() +@register.inclusion_tag('umap/css.html') +def umap_css(): + return { + "STATIC_URL": settings.STATIC_URL + } + + +@register.inclusion_tag('umap/js.html') +def umap_js(locale=None): + return { + "STATIC_URL": settings.STATIC_URL, + "locale": locale + } + + +@register.inclusion_tag('umap/map_fragment.html') +def map_fragment(map_instance, **kwargs): + layers = DataLayer.objects.filter(map=map_instance) + datalayer_data = [c.metadata for c in layers] + tilelayers = TileLayer.get_list() # TODO: no need to all + map_settings = map_instance.settings + if "properties" not in map_settings: + map_settings['properties'] = {} + map_settings['properties'].update({ + 'tilelayers': tilelayers, + 'datalayers': datalayer_data, + 'urls': _urls_for_js(), + 'STATIC_URL': settings.STATIC_URL, + "allowEdit": False, + 'hash': False, + 'attributionControl': False, + 'scrollWheelZoom': False, + 'umapAttributionControl': False, + 'noControl': True, + 'umap_id': map_instance.pk, + 'onLoadPanel': "none", + 'captionBar': False, + 'default_iconUrl': "%sumap/img/marker.png" % settings.STATIC_URL, + 'slideshow': {} + }) + map_settings['properties'].update(kwargs) + prefix = kwargs.pop('prefix', None) or 'map_' + return { + "map_settings": json.dumps(map_settings), + "map": map_instance, + "prefix": prefix + } + + +@register.simple_tag +def tilelayer_preview(tilelayer): + """ + Return an tag with a tile of the tilelayer. + """ + output = '{alt}' + url = tilelayer.url_template.format(s="a", z=9, x=265, y=181) + output = output.format(src=url, alt=tilelayer.name, title=tilelayer.name) + return output + + +@register.filter +def notag(s): + return s.replace('<', '<') + + @register.simple_tag(takes_context=True) def paginate_querystring(context, page): qs = copy(context["request"].GET) diff --git a/umap/tests/__init__.py b/umap/tests/__init__.py index 92018579..e69de29b 100644 --- a/umap/tests/__init__.py +++ b/umap/tests/__init__.py @@ -1 +0,0 @@ -from .test_views import * diff --git a/umap/tests/base.py b/umap/tests/base.py new file mode 100644 index 00000000..b2c64942 --- /dev/null +++ b/umap/tests/base.py @@ -0,0 +1,96 @@ +import json + +import factory +from django.contrib.auth import get_user_model +from django.urls import reverse + +from umap.forms import DEFAULT_CENTER +from umap.models import DataLayer, Licence, Map, TileLayer + +User = get_user_model() + + +class LicenceFactory(factory.DjangoModelFactory): + name = "WTFPL" + + class Meta: + model = Licence + + +class TileLayerFactory(factory.DjangoModelFactory): + name = "Test zoom layer" + url_template = "http://{s}.test.org/{z}/{x}/{y}.png" + attribution = "Test layer attribution" + + class Meta: + model = TileLayer + + +class UserFactory(factory.DjangoModelFactory): + username = 'Joe' + email = factory.LazyAttribute( + lambda a: '{0}@example.com'.format(a.username).lower()) + password = factory.PostGenerationMethodCall('set_password', '123123') + + class Meta: + model = User + + +class MapFactory(factory.DjangoModelFactory): + name = "test map" + slug = "test-map" + center = DEFAULT_CENTER + settings = { + 'geometry': { + 'coordinates': [13.447265624999998, 48.94415123418794], + 'type': 'Point' + }, + 'properties': { + 'datalayersControl': True, + 'description': 'Which is just the Danube, at the end', + 'displayCaptionOnLoad': False, + 'displayDataBrowserOnLoad': False, + 'displayPopupFooter': False, + 'licence': '', + 'miniMap': False, + 'moreControl': True, + 'name': 'Cruising on the Donau', + 'scaleControl': True, + 'tilelayer': { + 'attribution': u'\xa9 OSM Contributors', + 'maxZoom': 18, + 'minZoom': 0, + 'url_template': 'http://{s}.osm.fr/{z}/{x}/{y}.png' + }, + 'tilelayersControl': True, + 'zoom': 7, + 'zoomControl': True + }, + 'type': 'Feature' + } + + licence = factory.SubFactory(LicenceFactory) + owner = factory.SubFactory(UserFactory) + + class Meta: + model = Map + + +class DataLayerFactory(factory.DjangoModelFactory): + map = factory.SubFactory(MapFactory) + name = "test datalayer" + description = "test description" + display_on_load = True + geojson = factory.django.FileField(data="""{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[13.68896484375,48.55297816440071]},"properties":{"_umap_options":{"color":"DarkCyan","iconClass":"Ball"},"name":"Here","description":"Da place anonymous again 755"}}],"_umap_options":{"displayOnLoad":true,"name":"Donau","id":926}}""") # noqa + + class Meta: + model = DataLayer + + +def login_required(response): + assert response.status_code == 200 + j = json.loads(response.content.decode()) + assert 'login_required' in j + redirect_url = reverse('login') + assert j['login_required'] == redirect_url + return True diff --git a/umap/tests/conftest.py b/umap/tests/conftest.py new file mode 100644 index 00000000..1ac6664f --- /dev/null +++ b/umap/tests/conftest.py @@ -0,0 +1,64 @@ +import shutil +import tempfile + +import pytest +from django.core.signing import get_cookie_signer + +from .base import (DataLayerFactory, LicenceFactory, MapFactory, + TileLayerFactory, UserFactory) + +TMP_ROOT = tempfile.mkdtemp() + + +def pytest_configure(config): + from django.conf import settings + settings.MEDIA_ROOT = TMP_ROOT + + +def pytest_unconfigure(config): + shutil.rmtree(TMP_ROOT, ignore_errors=True) + + +@pytest.fixture +def user(): + return UserFactory(password="123123") + + +@pytest.fixture +def licence(): + return LicenceFactory() + + +@pytest.fixture +def map(licence, tilelayer): + user = UserFactory(username="Gabriel", password="123123") + return MapFactory(owner=user, licence=licence) + + +@pytest.fixture +def anonymap(map): + map.owner = None + map.save() + return map + + +@pytest.fixture +def cookieclient(client, anonymap): + key, value = anonymap.signed_cookie_elements + client.cookies[key] = get_cookie_signer(salt=key).sign(value) + return client + + +@pytest.fixture +def allow_anonymous(settings): + settings.UMAP_ALLOW_ANONYMOUS = True + + +@pytest.fixture +def datalayer(map): + return DataLayerFactory(map=map, name="Default Datalayer") + + +@pytest.fixture +def tilelayer(): + return TileLayerFactory() diff --git a/umap/tests/fixtures/test_upload_data.csv b/umap/tests/fixtures/test_upload_data.csv new file mode 100644 index 00000000..107f2510 --- /dev/null +++ b/umap/tests/fixtures/test_upload_data.csv @@ -0,0 +1,2 @@ +Foo,Latitude,geo_Longitude,title,description +bar,41.34,122.86,a point somewhere,the description of this point \ No newline at end of file diff --git a/umap/tests/fixtures/test_upload_data.gpx b/umap/tests/fixtures/test_upload_data.gpx new file mode 100644 index 00000000..ea7e1080 --- /dev/null +++ b/umap/tests/fixtures/test_upload_data.gpx @@ -0,0 +1,17 @@ + + 1374Simple PointSimple description + + Simple path + Simple description + + + + + + + \ No newline at end of file diff --git a/umap/tests/fixtures/test_upload_data.json b/umap/tests/fixtures/test_upload_data.json new file mode 100644 index 00000000..8d7fc002 --- /dev/null +++ b/umap/tests/fixtures/test_upload_data.json @@ -0,0 +1,188 @@ +{ + "crs": null, + "type": "FeatureCollection", + "features": [ + { + "geometry": { + "type": "Point", + "coordinates": [ + -0.1318359375, + 51.474540439419755 + ] + }, + "type": "Feature", + "properties": { + "name": "London", + "description": "London description", + "color": "Pink" + } + }, + { + "geometry": { + "type": "Point", + "coordinates": [ + 4.350585937499999, + 51.26878915771344 + ] + }, + "type": "Feature", + "properties": { + "name": "Antwerpen", + "description": "" + } + }, + { + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 2.4005126953125, + 48.81228985866255 + ], + [ + 2.78228759765625, + 48.89903236496008 + ], + [ + 2.845458984375, + 48.89903236496008 + ], + [ + 2.86468505859375, + 48.96218736991556 + ], + [ + 2.9278564453125, + 48.93693495409401 + ], + [ + 2.93060302734375, + 48.99283383694349 + ], + [ + 3.04046630859375, + 49.01085236926211 + ], + [ + 3.0157470703125, + 48.96038404976431 + ], + [ + 3.12286376953125, + 48.94415123418794 + ], + [ + 3.1805419921874996, + 48.99824008113872 + ], + [ + 3.2684326171875, + 48.95497369808868 + ], + [ + 3.53759765625, + 49.0900564769189 + ], + [ + 3.57330322265625, + 49.057670047140604 + ], + [ + 3.72161865234375, + 49.095452162534826 + ], + [ + 3.9578247070312496, + 49.06486885623368 + ] + ] + }, + "type": "Feature", + "properties": { + "name": "2011" + } + }, + { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 10.04150390625, + 52.70967533219883 + ], + [ + 8.800048828125, + 51.80182150078305 + ], + [ + 11.271972656249998, + 51.12421275782688 + ], + [ + 12.689208984375, + 52.214338608258196 + ], + [ + 10.04150390625, + 52.70967533219883 + ] + ] + ] + }, + "type": "Feature", + "properties": { + "name": "test" + } + }, + { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.327880859374999, + 50.52041218671901 + ], + [ + 6.064453125, + 49.6462914122132 + ], + [ + 7.503662109375, + 49.54659778073743 + ], + [ + 6.8115234375, + 49.167338606291075 + ], + [ + 9.635009765625, + 48.99463598353408 + ], + [ + 10.557861328125, + 49.937079756975294 + ], + [ + 8.4814453125, + 49.688954878870305 + ], + [ + 9.173583984375, + 51.04830113331224 + ], + [ + 7.327880859374999, + 50.52041218671901 + ] + ] + ] + }, + "type": "Feature", + "properties": { + "name": "test polygon 2" + } + } + ] +} \ No newline at end of file diff --git a/umap/tests/fixtures/test_upload_data.kml b/umap/tests/fixtures/test_upload_data.kml new file mode 100644 index 00000000..af857078 --- /dev/null +++ b/umap/tests/fixtures/test_upload_data.kml @@ -0,0 +1,33 @@ + + + + Simple point + Here is a simple description. + + -122.0822035425683,37.42228990140251,0 + + + + Simple path + Simple description + + -112.2550785337791,36.07954952145647,2357 -112.2549277039738,36.08117083492122,2357 -112.2552505069063,36.08260761307279,2357 + + + + Simple polygon + A description. + + + + + -77.05788457660967,38.87253259892824,100 + -77.05465973756702,38.87291016281703,100 + -77.05315536854791,38.87053267794386,100 + -77.05788457660967,38.87253259892824,100 + + + + + + \ No newline at end of file diff --git a/umap/tests/fixtures/test_upload_empty_coordinates.json b/umap/tests/fixtures/test_upload_empty_coordinates.json new file mode 100644 index 00000000..65f8dd16 --- /dev/null +++ b/umap/tests/fixtures/test_upload_empty_coordinates.json @@ -0,0 +1,36 @@ +{ + "crs": null, + "type": "FeatureCollection", + "features": [ + { + "geometry": { + "type": "Point", + "coordinates": [] + }, + "type": "Feature", + "properties": { + "name": "London" + } + }, + { + "geometry": { + "type": "LineString", + "coordinates": [] + }, + "type": "Feature", + "properties": { + "name": "2011" + } + }, + { + "geometry": { + "type": "Polygon", + "coordinates": [[]] + }, + "type": "Feature", + "properties": { + "name": "test" + } + } + ] +} \ No newline at end of file diff --git a/umap/tests/fixtures/test_upload_missing_name.json b/umap/tests/fixtures/test_upload_missing_name.json new file mode 100644 index 00000000..e4e4acbf --- /dev/null +++ b/umap/tests/fixtures/test_upload_missing_name.json @@ -0,0 +1,153 @@ +{ + "crs": null, + "type": "FeatureCollection", + "features": [ + { + "geometry": { + "type": "Point", + "coordinates": [ + -0.1318359375, + 51.474540439419755 + ] + }, + "type": "Feature", + "properties": { + "name": "London" + } + }, + { + "geometry": { + "type": "Point", + "coordinates": [ + 4.350585937499999, + 51.26878915771344 + ] + }, + "type": "Feature", + "properties": { + "noname": "this feature is missing a name", + "name": null + } + }, + { + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 2.4005126953125, + 48.81228985866255 + ], + [ + 2.78228759765625, + 48.89903236496008 + ], + [ + 2.845458984375, + 48.89903236496008 + ], + [ + 2.86468505859375, + 48.96218736991556 + ], + [ + 2.9278564453125, + 48.93693495409401 + ], + [ + 2.93060302734375, + 48.99283383694349 + ], + [ + 3.04046630859375, + 49.01085236926211 + ], + [ + 3.0157470703125, + 48.96038404976431 + ], + [ + 3.12286376953125, + 48.94415123418794 + ], + [ + 3.1805419921874996, + 48.99824008113872 + ], + [ + 3.2684326171875, + 48.95497369808868 + ], + [ + 3.53759765625, + 49.0900564769189 + ], + [ + 3.57330322265625, + 49.057670047140604 + ], + [ + 3.72161865234375, + 49.095452162534826 + ], + [ + 3.9578247070312496, + 49.06486885623368 + ] + ] + }, + "type": "Feature", + "properties": { + "name": "2011" + } + }, + { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.327880859374999, + 50.52041218671901 + ], + [ + 6.064453125, + 49.6462914122132 + ], + [ + 7.503662109375, + 49.54659778073743 + ], + [ + 6.8115234375, + 49.167338606291075 + ], + [ + 9.635009765625, + 48.99463598353408 + ], + [ + 10.557861328125, + 49.937079756975294 + ], + [ + 8.4814453125, + 49.688954878870305 + ], + [ + 9.173583984375, + 51.04830113331224 + ], + [ + 7.327880859374999, + 50.52041218671901 + ] + ] + ] + }, + "type": "Feature", + "properties": { + "name": "test polygon 2" + } + } + ] +} \ No newline at end of file diff --git a/umap/tests/fixtures/test_upload_non_linear_ring.json b/umap/tests/fixtures/test_upload_non_linear_ring.json new file mode 100644 index 00000000..db22bb0b --- /dev/null +++ b/umap/tests/fixtures/test_upload_non_linear_ring.json @@ -0,0 +1,51 @@ +{ + "crs": null, + "type": "FeatureCollection", + "features": [ + { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.327880859374999, + 50.52041218671901 + ], + [ + 6.064453125, + 49.6462914122132 + ], + [ + 7.503662109375, + 49.54659778073743 + ], + [ + 6.8115234375, + 49.167338606291075 + ], + [ + 9.635009765625, + 48.99463598353408 + ], + [ + 10.557861328125, + 49.937079756975294 + ], + [ + 8.4814453125, + 49.688954878870305 + ], + [ + 9.173583984375, + 51.04830113331224 + ] + ] + ] + }, + "type": "Feature", + "properties": { + "name": "non linear ring" + } + } + ] +} \ No newline at end of file diff --git a/umap/tests/settings.py b/umap/tests/settings.py index a018ce88..38fb0d6f 100644 --- a/umap/tests/settings.py +++ b/umap/tests/settings.py @@ -1,3 +1,4 @@ from umap.settings.base import * # pylint: disable=W0614,W0401 SECRET_KEY = 'justfortests' +COMPRESS_ENABLED = False diff --git a/umap/tests/test_datalayer.py b/umap/tests/test_datalayer.py new file mode 100644 index 00000000..e1566e0f --- /dev/null +++ b/umap/tests/test_datalayer.py @@ -0,0 +1,81 @@ +import os + +import pytest +from django.core.files.base import ContentFile + +from .base import DataLayerFactory, MapFactory + +pytestmark = pytest.mark.django_db + + +def test_datalayers_should_be_ordered_by_rank(map, datalayer): + datalayer.rank = 5 + datalayer.save() + c4 = DataLayerFactory(map=map, rank=4) + c1 = DataLayerFactory(map=map, rank=1) + c3 = DataLayerFactory(map=map, rank=3) + c2 = DataLayerFactory(map=map, rank=2) + assert list(map.datalayer_set.all()) == [c1, c2, c3, c4, datalayer] + + +def test_upload_to(map, datalayer): + map.pk = 302 + datalayer.pk = 17 + assert datalayer.upload_to().startswith('datalayer/2/0/302/17_') + + +def test_save_should_use_pk_as_name(map, datalayer): + assert "/{}_".format(datalayer.pk) in datalayer.geojson.name + + +def test_same_geojson_file_name_will_be_suffixed(map, datalayer): + before = datalayer.geojson.name + datalayer.geojson.save(before, ContentFile("{}")) + assert datalayer.geojson.name != before + assert "/{}_".format(datalayer.pk) in datalayer.geojson.name + + +def test_clone_should_return_new_instance(map, datalayer): + clone = datalayer.clone() + assert datalayer.pk != clone.pk + assert datalayer.name == clone.name + assert datalayer.map == clone.map + + +def test_clone_should_update_map_if_passed(datalayer, user, licence): + map = MapFactory(owner=user, licence=licence) + clone = datalayer.clone(map_inst=map) + assert datalayer.pk != clone.pk + assert datalayer.name == clone.name + assert datalayer.map != clone.map + assert map == clone.map + + +def test_clone_should_clone_geojson_too(datalayer): + clone = datalayer.clone() + assert datalayer.pk != clone.pk + assert clone.geojson is not None + assert clone.geojson.path != datalayer.geojson.path + + +def test_should_remove_old_versions_on_save(datalayer, map, settings): + settings.UMAP_KEEP_VERSIONS = 3 + root = datalayer.storage_root() + before = len(datalayer.geojson.storage.listdir(root)[1]) + newer = '%s/%s_1440924889.geojson' % (root, datalayer.pk) + medium = '%s/%s_1440923687.geojson' % (root, datalayer.pk) + older = '%s/%s_1440918637.geojson' % (root, datalayer.pk) + for path in [medium, newer, older]: + datalayer.geojson.storage.save(path, ContentFile("{}")) + datalayer.geojson.storage.save(path + '.gz', ContentFile("{}")) + assert len(datalayer.geojson.storage.listdir(root)[1]) == 6 + before + datalayer.save() + files = datalayer.geojson.storage.listdir(root)[1] + assert len(files) == 5 + assert os.path.basename(newer) in files + assert os.path.basename(newer + '.gz') in files + assert os.path.basename(medium) in files + assert os.path.basename(medium + '.gz') in files + assert os.path.basename(datalayer.geojson.path) in files + assert os.path.basename(older) not in files + assert os.path.basename(older + '.gz') not in files diff --git a/umap/tests/test_datalayer_views.py b/umap/tests/test_datalayer_views.py new file mode 100644 index 00000000..b3689115 --- /dev/null +++ b/umap/tests/test_datalayer_views.py @@ -0,0 +1,162 @@ +import json + +import pytest +from django.core.files.base import ContentFile +from django.urls import reverse + +from umap.models import DataLayer, Map + +from .base import MapFactory + +pytestmark = pytest.mark.django_db + + +@pytest.fixture +def post_data(): + return { + "name": 'name', + "display_on_load": True, + "rank": 0, + "geojson": '{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-3.1640625,53.014783245859235],[-3.1640625,51.86292391360244],[-0.50537109375,51.385495069223204],[1.16455078125,52.38901106223456],[-0.41748046875,53.91728101547621],[-2.109375,53.85252660044951],[-3.1640625,53.014783245859235]]]},"properties":{"_umap_options":{},"name":"Ho god, sounds like a polygouine"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[1.8017578124999998,51.16556659836182],[-0.48339843749999994,49.710272582105695],[-3.1640625,50.0923932109388],[-5.60302734375,51.998410382390325]]},"properties":{"_umap_options":{},"name":"Light line"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[0.63720703125,51.15178610143037]},"properties":{"_umap_options":{},"name":"marker he"}}],"_umap_options":{"displayOnLoad":true,"name":"new name","id":1668,"remoteData":{},"color":"LightSeaGreen","description":"test"}}' # noqa + } + + +def test_get(client, settings, datalayer): + url = reverse('datalayer_view', args=(datalayer.pk, )) + response = client.get(url) + if getattr(settings, 'UMAP_XSENDFILE_HEADER', None): + assert response['ETag'] is not None + assert response['Last-Modified'] is not None + assert response['Cache-Control'] is not None + assert 'Content-Encoding' not in response + j = json.loads(response.content.decode()) + assert '_umap_options' in j + assert 'features' in j + assert j['type'] == 'FeatureCollection' + + +def test_update(client, datalayer, map, post_data): + url = reverse('datalayer_update', args=(map.pk, datalayer.pk)) + client.login(username=map.owner.username, password="123123") + name = 'new name' + rank = 2 + post_data['name'] = name + post_data['rank'] = rank + response = client.post(url, post_data, follow=True) + assert response.status_code == 200 + modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) + assert modified_datalayer.name == name + assert modified_datalayer.rank == rank + # Test response is a json + j = json.loads(response.content.decode()) + assert "id" in j + assert datalayer.pk == j['id'] + + +def test_should_not_be_possible_to_update_with_wrong_map_id_in_url(client, datalayer, map, post_data): # noqa + other_map = MapFactory(owner=map.owner) + url = reverse('datalayer_update', args=(other_map.pk, datalayer.pk)) + client.login(username=map.owner.username, password="123123") + name = 'new name' + post_data['name'] = name + response = client.post(url, post_data, follow=True) + assert response.status_code == 403 + modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) + assert modified_datalayer.name == datalayer.name + + +def test_delete(client, datalayer, map): + url = reverse('datalayer_delete', args=(map.pk, datalayer.pk)) + client.login(username=map.owner.username, password='123123') + response = client.post(url, {}, follow=True) + assert response.status_code == 200 + assert not DataLayer.objects.filter(pk=datalayer.pk).count() + # Check that map has not been impacted + assert Map.objects.filter(pk=map.pk).exists() + # Test response is a json + j = json.loads(response.content.decode()) + assert 'info' in j + + +def test_should_not_be_possible_to_delete_with_wrong_map_id_in_url(client, datalayer, map): # noqa + other_map = MapFactory(owner=map.owner) + url = reverse('datalayer_delete', args=(other_map.pk, datalayer.pk)) + client.login(username=map.owner.username, password='123123') + response = client.post(url, {}, follow=True) + assert response.status_code == 403 + assert DataLayer.objects.filter(pk=datalayer.pk).exists() + + +def test_get_gzipped(client, datalayer, settings): + url = reverse('datalayer_view', args=(datalayer.pk, )) + response = client.get(url, HTTP_ACCEPT_ENCODING='gzip') + if getattr(settings, 'UMAP_XSENDFILE_HEADER', None): + assert response['ETag'] is not None + assert response['Last-Modified'] is not None + assert response['Cache-Control'] is not None + assert response['Content-Encoding'] == 'gzip' + + +def test_optimistic_concurrency_control_with_good_etag(client, datalayer, map, post_data): # noqa + # Get Etag + url = reverse('datalayer_view', args=(datalayer.pk, )) + response = client.get(url) + etag = response['ETag'] + url = reverse('datalayer_update', + args=(map.pk, datalayer.pk)) + client.login(username=map.owner.username, password="123123") + name = 'new name' + post_data['name'] = 'new name' + response = client.post(url, post_data, follow=True, HTTP_IF_MATCH=etag) + assert response.status_code == 200 + modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) + assert modified_datalayer.name == name + + +def test_optimistic_concurrency_control_with_bad_etag(client, datalayer, map, post_data): # noqa + url = reverse('datalayer_update', args=(map.pk, datalayer.pk)) + client.login(username=map.owner.username, password='123123') + name = 'new name' + post_data['name'] = name + response = client.post(url, post_data, follow=True, HTTP_IF_MATCH='xxx') + assert response.status_code == 412 + modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) + assert modified_datalayer.name != name + + +def test_optimistic_concurrency_control_with_empty_etag(client, datalayer, map, post_data): # noqa + url = reverse('datalayer_update', args=(map.pk, datalayer.pk)) + client.login(username=map.owner.username, password='123123') + name = 'new name' + post_data['name'] = name + response = client.post(url, post_data, follow=True, HTTP_IF_MATCH=None) + assert response.status_code == 200 + modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) + assert modified_datalayer.name == name + + +def test_versions_should_return_versions(client, datalayer, map, settings): + root = datalayer.storage_root() + datalayer.geojson.storage.save( + '%s/%s_1440924889.geojson' % (root, datalayer.pk), + ContentFile("{}")) + datalayer.geojson.storage.save( + '%s/%s_1440923687.geojson' % (root, datalayer.pk), + ContentFile("{}")) + datalayer.geojson.storage.save( + '%s/%s_1440918637.geojson' % (root, datalayer.pk), + ContentFile("{}")) + url = reverse('datalayer_versions', args=(datalayer.pk, )) + versions = json.loads(client.get(url).content.decode()) + assert len(versions['versions']) == 4 + version = {'name': '%s_1440918637.geojson' % datalayer.pk, 'size': 2, + 'at': '1440918637'} + assert version in versions['versions'] + + +def test_version_should_return_one_version_geojson(client, datalayer, map): + root = datalayer.storage_root() + name = '%s_1440924889.geojson' % datalayer.pk + datalayer.geojson.storage.save('%s/%s' % (root, name), ContentFile("{}")) + url = reverse('datalayer_version', args=(datalayer.pk, name)) + assert client.get(url).content.decode() == "{}" diff --git a/umap/tests/test_fields.py b/umap/tests/test_fields.py new file mode 100644 index 00000000..4d744cd3 --- /dev/null +++ b/umap/tests/test_fields.py @@ -0,0 +1,43 @@ +import json + +import pytest + +from umap.models import Map + +pytestmark = pytest.mark.django_db + + +def test_can_use_dict(map): + d = {'locateControl': True} + map.settings = d + map.save() + assert Map.objects.get(pk=map.pk).settings == d + + +def test_can_set_item(map): + d = {'locateControl': True} + map.settings = d + map.save() + map_inst = Map.objects.get(pk=map.pk) + map_inst.settings['color'] = 'DarkGreen' + assert map_inst.settings['locateControl'] is True + + +def test_should_return_a_dict_if_none(map): + map.settings = None + map.save() + assert Map.objects.get(pk=map.pk).settings == {} + + +def test_should_not_double_dumps(map): + map.settings = '{"locate": true}' + map.save() + assert Map.objects.get(pk=map.pk).settings == {'locate': True} + + +def test_value_to_string(map): + d = {'locateControl': True} + map.settings = d + map.save() + field = Map._meta.get_field('settings') + assert json.loads(field.value_to_string(map)) == d diff --git a/umap/tests/test_licence.py b/umap/tests/test_licence.py new file mode 100644 index 00000000..fd5e606b --- /dev/null +++ b/umap/tests/test_licence.py @@ -0,0 +1,12 @@ +import pytest + +from umap.models import DataLayer, Map + +pytestmark = pytest.mark.django_db + + +def test_licence_delete_should_not_remove_linked_maps(map, licence, datalayer): + assert map.licence == licence + licence.delete() + assert Map.objects.filter(pk=map.pk).exists() + assert DataLayer.objects.filter(pk=datalayer.pk).exists() diff --git a/umap/tests/test_map.py b/umap/tests/test_map.py new file mode 100644 index 00000000..c72d3d1f --- /dev/null +++ b/umap/tests/test_map.py @@ -0,0 +1,109 @@ +import pytest +from django.contrib.auth.models import AnonymousUser +from django.urls import reverse + +from umap.models import Map + +from .base import MapFactory + +pytestmark = pytest.mark.django_db + + +def test_anonymous_can_edit_if_status_anonymous(map): + anonymous = AnonymousUser() + map.edit_status = map.ANONYMOUS + map.save() + assert map.can_edit(anonymous) + + +def test_anonymous_cannot_edit_if_not_status_anonymous(map): + anonymous = AnonymousUser() + map.edit_status = map.OWNER + map.save() + assert not map.can_edit(anonymous) + + +def test_non_editors_can_edit_if_status_anonymous(map, user): + assert map.owner != user + map.edit_status = map.ANONYMOUS + map.save() + assert map.can_edit(user) + + +def test_non_editors_cannot_edit_if_not_status_anonymous(map, user): + map.edit_status = map.OWNER + map.save() + assert not map.can_edit(user) + + +def test_editors_cannot_edit_if_status_owner(map, user): + map.edit_status = map.OWNER + map.editors.add(user) + map.save() + assert not map.can_edit(user) + + +def test_editors_can_edit_if_status_editors(map, user): + map.edit_status = map.EDITORS + map.editors.add(user) + map.save() + assert map.can_edit(user) + + +def test_logged_in_user_should_be_allowed_for_anonymous_map_with_anonymous_edit_status(map, user, rf): # noqa + map.owner = None + map.edit_status = map.ANONYMOUS + map.save() + url = reverse('map_update', kwargs={'map_id': map.pk}) + request = rf.get(url) + request.user = user + assert map.can_edit(user, request) + + +def test_clone_should_return_new_instance(map, user): + clone = map.clone() + assert map.pk != clone.pk + assert u"Clone of " + map.name == clone.name + assert map.settings == clone.settings + assert map.center == clone.center + assert map.zoom == clone.zoom + assert map.licence == clone.licence + assert map.tilelayer == clone.tilelayer + + +def test_clone_should_keep_editors(map, user): + map.editors.add(user) + clone = map.clone() + assert map.pk != clone.pk + assert user in map.editors.all() + assert user in clone.editors.all() + + +def test_clone_should_update_owner_if_passed(map, user): + clone = map.clone(owner=user) + assert map.pk != clone.pk + assert map.owner != clone.owner + assert user == clone.owner + + +def test_clone_should_clone_datalayers_and_features_too(map, user, datalayer): + clone = map.clone() + assert map.pk != clone.pk + assert map.datalayer_set.count() == 1 + assert clone.datalayer_set.count() == 1 + other = clone.datalayer_set.all()[0] + assert datalayer in map.datalayer_set.all() + assert other.pk != datalayer.pk + assert other.name == datalayer.name + assert other.geojson is not None + assert other.geojson.path != datalayer.geojson.path + + +def test_publicmanager_should_get_only_public_maps(map, user, licence): + map.share_status = map.PUBLIC + open_map = MapFactory(owner=user, licence=licence, share_status=Map.OPEN) + private_map = MapFactory(owner=user, licence=licence, + share_status=Map.PRIVATE) + assert map in Map.public.all() + assert open_map not in Map.public.all() + assert private_map not in Map.public.all() diff --git a/umap/tests/test_map_views.py b/umap/tests/test_map_views.py new file mode 100644 index 00000000..26541c62 --- /dev/null +++ b/umap/tests/test_map_views.py @@ -0,0 +1,437 @@ +import json + +import pytest +from django.contrib.auth import get_user_model +from django.urls import reverse + +from umap.models import DataLayer, Map + +from .base import login_required + +pytestmark = pytest.mark.django_db +User = get_user_model() + + +@pytest.fixture +def post_data(): + return { + 'name': 'name', + 'center': '{"type":"Point","coordinates":[13.447265624999998,48.94415123418794]}', # noqa + 'settings': '{"type":"Feature","geometry":{"type":"Point","coordinates":[5.0592041015625,52.05924589011585]},"properties":{"tilelayer":{"maxZoom":20,"url_template":"http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png","minZoom":0,"attribution":"HOT and friends"},"licence":"","description":"","name":"test enrhûmé","tilelayersControl":true,"displayDataBrowserOnLoad":false,"displayPopupFooter":true,"displayCaptionOnLoad":false,"miniMap":true,"moreControl":true,"scaleControl":true,"zoomControl":true,"datalayersControl":true,"zoom":8}}' # noqa + } + + +def test_create(client, user, post_data): + url = reverse('map_create') + # POST only mendatory fields + name = 'test-map-with-new-name' + post_data['name'] = name + client.login(username=user.username, password="123123") + response = client.post(url, post_data) + assert response.status_code == 200 + j = json.loads(response.content.decode()) + created_map = Map.objects.latest('pk') + assert j['id'] == created_map.pk + assert created_map.name == name + + +def test_map_create_permissions(client, settings): + settings.UMAP_ALLOW_ANONYMOUS = False + url = reverse('map_create') + # POST anonymous + response = client.post(url, {}) + assert login_required(response) + + +def test_map_update_access(client, map, user): + url = reverse('map_update', kwargs={'map_id': map.pk}) + # GET anonymous + response = client.get(url) + assert login_required(response) + # POST anonymous + response = client.post(url, {}) + assert login_required(response) + # GET with wrong permissions + client.login(username=user.username, password="123123") + response = client.get(url) + assert response.status_code == 403 + # POST with wrong permissions + client.login(username=user.username, password="123123") + response = client.post(url, {}) + assert response.status_code == 403 + + +def test_map_update_permissions_access(client, map, user): + url = reverse('map_update_permissions', kwargs={'map_id': map.pk}) + # GET anonymous + response = client.get(url) + assert login_required(response) + # POST anonymous + response = client.post(url, {}) + assert login_required(response) + # GET with wrong permissions + client.login(username=user.username, password="123123") + response = client.get(url) + assert response.status_code == 403 + # POST with wrong permissions + client.login(username=user.username, password="123123") + response = client.post(url, {}) + assert response.status_code == 403 + + +def test_update(client, map, post_data): + url = reverse('map_update', kwargs={'map_id': map.pk}) + # POST only mendatory fields + name = 'new map name' + post_data['name'] = name + client.login(username=map.owner.username, password="123123") + response = client.post(url, post_data) + assert response.status_code == 200 + j = json.loads(response.content.decode()) + assert 'html' not in j + updated_map = Map.objects.get(pk=map.pk) + assert j['id'] == updated_map.pk + assert updated_map.name == name + + +def test_delete(client, map, datalayer): + url = reverse('map_delete', args=(map.pk, )) + client.login(username=map.owner.username, password="123123") + response = client.post(url, {}, follow=True) + assert response.status_code == 200 + assert not Map.objects.filter(pk=map.pk).exists() + assert not DataLayer.objects.filter(pk=datalayer.pk).exists() + # Check that user has not been impacted + assert User.objects.filter(pk=map.owner.pk).exists() + # Test response is a json + j = json.loads(response.content.decode()) + assert 'redirect' in j + + +def test_wrong_slug_should_redirect_to_canonical(client, map): + url = reverse('map', kwargs={'pk': map.pk, 'slug': 'wrong-slug'}) + canonical = reverse('map', kwargs={'pk': map.pk, + 'slug': map.slug}) + response = client.get(url) + assert response.status_code == 301 + assert response['Location'] == canonical + + +def test_wrong_slug_should_redirect_with_query_string(client, map): + url = reverse('map', kwargs={'pk': map.pk, 'slug': 'wrong-slug'}) + url = "{}?allowEdit=0".format(url) + canonical = reverse('map', kwargs={'pk': map.pk, + 'slug': map.slug}) + canonical = "{}?allowEdit=0".format(canonical) + response = client.get(url) + assert response.status_code == 301 + assert response['Location'] == canonical + + +def test_should_not_consider_the_query_string_for_canonical_check(client, map): + url = reverse('map', kwargs={'pk': map.pk, 'slug': map.slug}) + url = "{}?allowEdit=0".format(url) + response = client.get(url) + assert response.status_code == 200 + + +def test_short_url_should_redirect_to_canonical(client, map): + url = reverse('map_short_url', kwargs={'pk': map.pk}) + canonical = reverse('map', kwargs={'pk': map.pk, + 'slug': map.slug}) + response = client.get(url) + assert response.status_code == 301 + assert response['Location'] == canonical + + +def test_clone_map_should_create_a_new_instance(client, map): + assert Map.objects.count() == 1 + url = reverse('map_clone', kwargs={'map_id': map.pk}) + client.login(username=map.owner.username, password="123123") + response = client.post(url) + assert response.status_code == 200 + assert Map.objects.count() == 2 + clone = Map.objects.latest('pk') + assert clone.pk != map.pk + assert clone.name == u"Clone of " + map.name + + +def test_user_not_allowed_should_not_clone_map(client, map, user, settings): + settings.UMAP_ALLOW_ANONYMOUS = False + assert Map.objects.count() == 1 + url = reverse('map_clone', kwargs={'map_id': map.pk}) + map.edit_status = map.OWNER + map.save() + response = client.post(url) + assert login_required(response) + client.login(username=user.username, password="123123") + response = client.post(url) + assert response.status_code == 403 + map.edit_status = map.ANONYMOUS + map.save() + client.logout() + response = client.post(url) + assert response.status_code == 403 + assert Map.objects.count() == 1 + + +def test_clone_should_set_cloner_as_owner(client, map, user): + url = reverse('map_clone', kwargs={'map_id': map.pk}) + map.edit_status = map.EDITORS + map.editors.add(user) + map.save() + client.login(username=user.username, password="123123") + response = client.post(url) + assert response.status_code == 200 + assert Map.objects.count() == 2 + clone = Map.objects.latest('pk') + assert clone.pk != map.pk + assert clone.name == u"Clone of " + map.name + assert clone.owner == user + + +def test_map_creation_should_allow_unicode_names(client, map, post_data): + url = reverse('map_create') + # POST only mendatory fields + name = u'Академический' + post_data['name'] = name + client.login(username=map.owner.username, password="123123") + response = client.post(url, post_data) + assert response.status_code == 200 + j = json.loads(response.content.decode()) + created_map = Map.objects.latest('pk') + assert j['id'] == created_map.pk + assert created_map.name == name + # Lower case of the russian original name + # self.assertEqual(created_map.slug, u"академический") + # for now we fallback to "map", see unicode_name branch + assert created_map.slug == 'map' + + +def test_anonymous_can_access_map_with_share_status_public(client, map): + url = reverse('map', args=(map.slug, map.pk)) + map.share_status = map.PUBLIC + map.save() + response = client.get(url) + assert response.status_code == 200 + + +def test_anonymous_can_access_map_with_share_status_open(client, map): + url = reverse('map', args=(map.slug, map.pk)) + map.share_status = map.OPEN + map.save() + response = client.get(url) + assert response.status_code == 200 + + +def test_anonymous_cannot_access_map_with_share_status_private(client, map): + url = reverse('map', args=(map.slug, map.pk)) + map.share_status = map.PRIVATE + map.save() + response = client.get(url) + assert response.status_code == 403 + + +def test_owner_can_access_map_with_share_status_private(client, map): + url = reverse('map', args=(map.slug, map.pk)) + map.share_status = map.PRIVATE + map.save() + client.login(username=map.owner.username, password="123123") + response = client.get(url) + assert response.status_code == 200 + + +def test_editors_can_access_map_with_share_status_private(client, map, user): + url = reverse('map', args=(map.slug, map.pk)) + map.share_status = map.PRIVATE + map.editors.add(user) + map.save() + client.login(username=user.username, password="123123") + response = client.get(url) + assert response.status_code == 200 + + +def test_non_editor_cannot_access_map_if_share_status_private(client, map, user): # noqa + url = reverse('map', args=(map.slug, map.pk)) + map.share_status = map.PRIVATE + map.save() + client.login(username=user.username, password="123123") + response = client.get(url) + assert response.status_code == 403 + + +def test_map_geojson_view(client, map): + url = reverse('map_geojson', args=(map.pk, )) + response = client.get(url) + j = json.loads(response.content.decode()) + assert 'type' in j + + +def test_only_owner_can_delete(client, map, user): + map.editors.add(user) + url = reverse('map_delete', kwargs={'map_id': map.pk}) + client.login(username=user.username, password="123123") + response = client.post(url, {}, follow=True) + assert response.status_code == 403 + + +def test_map_editors_do_not_see_owner_change_input(client, map, user): + map.editors.add(user) + map.edit_status = map.EDITORS + map.save() + url = reverse('map_update_permissions', kwargs={'map_id': map.pk}) + client.login(username=user.username, password="123123") + response = client.get(url) + assert 'id_owner' not in response + + +def test_logged_in_user_can_edit_map_editable_by_anonymous(client, map, user): + map.owner = None + map.edit_status = map.ANONYMOUS + map.save() + client.login(username=user.username, password="123123") + url = reverse('map_update', kwargs={'map_id': map.pk}) + new_name = 'this is my new name' + data = { + 'center': '{"type":"Point","coordinates":[13.447265624999998,48.94415123418794]}', # noqa + 'name': new_name + } + response = client.post(url, data) + assert response.status_code == 200 + assert Map.objects.get(pk=map.pk).name == new_name + + +@pytest.mark.usefixtures('allow_anonymous') +def test_anonymous_create(cookieclient, post_data): + url = reverse('map_create') + # POST only mendatory fields + name = 'test-map-with-new-name' + post_data['name'] = name + response = cookieclient.post(url, post_data) + assert response.status_code == 200 + j = json.loads(response.content.decode()) + created_map = Map.objects.latest('pk') + assert j['id'] == created_map.pk + assert created_map.name == name + key, value = created_map.signed_cookie_elements + assert key in cookieclient.cookies + + +@pytest.mark.usefixtures('allow_anonymous') +def test_anonymous_update_without_cookie_fails(client, anonymap, post_data): # noqa + url = reverse('map_update', kwargs={'map_id': anonymap.pk}) + response = client.post(url, post_data) + assert response.status_code == 403 + + +@pytest.mark.usefixtures('allow_anonymous') +def test_anonymous_update_with_cookie_should_work(cookieclient, anonymap, post_data): # noqa + url = reverse('map_update', kwargs={'map_id': anonymap.pk}) + # POST only mendatory fields + name = 'new map name' + post_data['name'] = name + response = cookieclient.post(url, post_data) + assert response.status_code == 200 + j = json.loads(response.content.decode()) + updated_map = Map.objects.get(pk=anonymap.pk) + assert j['id'] == updated_map.pk + + +@pytest.mark.usefixtures('allow_anonymous') +def test_anonymous_delete(cookieclient, anonymap): + url = reverse('map_delete', args=(anonymap.pk, )) + response = cookieclient.post(url, {}, follow=True) + assert response.status_code == 200 + assert not Map.objects.filter(pk=anonymap.pk).count() + # Test response is a json + j = json.loads(response.content.decode()) + assert 'redirect' in j + + +@pytest.mark.usefixtures('allow_anonymous') +def test_no_cookie_cant_delete(client, anonymap): + url = reverse('map_delete', args=(anonymap.pk, )) + response = client.post(url, {}, follow=True) + assert response.status_code == 403 + + +@pytest.mark.usefixtures('allow_anonymous') +def test_anonymous_edit_url(cookieclient, anonymap): + url = anonymap.get_anonymous_edit_url() + canonical = reverse('map', kwargs={'pk': anonymap.pk, + 'slug': anonymap.slug}) + response = cookieclient.get(url) + assert response.status_code == 302 + assert response['Location'] == canonical + key, value = anonymap.signed_cookie_elements + assert key in cookieclient.cookies + + +@pytest.mark.usefixtures('allow_anonymous') +def test_bad_anonymous_edit_url_should_return_403(cookieclient, anonymap): + url = anonymap.get_anonymous_edit_url() + url = reverse( + 'map_anonymous_edit_url', + kwargs={'signature': "%s:badsignature" % anonymap.pk} + ) + response = cookieclient.get(url) + assert response.status_code == 403 + + +@pytest.mark.usefixtures('allow_anonymous') +def test_authenticated_user_with_cookie_is_attached_as_owner(cookieclient, anonymap, post_data, user): # noqa + url = reverse('map_update', kwargs={'map_id': anonymap.pk}) + cookieclient.login(username=user.username, password="123123") + assert anonymap.owner is None + # POST only mendatory filds + name = 'new map name for authenticat_anonymoused user' + post_data['name'] = name + response = cookieclient.post(url, post_data) + assert response.status_code == 200 + j = json.loads(response.content.decode()) + updated_map = Map.objects.get(pk=anonymap.pk) + assert j['id'] == updated_map.pk + assert updated_map.owner.pk, user.pk + + +@pytest.mark.usefixtures('allow_anonymous') +def test_clone_anonymous_map_should_not_be_possible_if_user_is_not_allowed(client, anonymap, user): # noqa + assert Map.objects.count() == 1 + url = reverse('map_clone', kwargs={'map_id': anonymap.pk}) + anonymap.edit_status = anonymap.OWNER + anonymap.save() + response = client.post(url) + assert response.status_code == 403 + client.login(username=user.username, password="123123") + response = client.post(url) + assert response.status_code == 403 + assert Map.objects.count() == 1 + + +@pytest.mark.usefixtures('allow_anonymous') +def test_clone_map_should_be_possible_if_edit_status_is_anonymous(client, anonymap): # noqa + assert Map.objects.count() == 1 + url = reverse('map_clone', kwargs={'map_id': anonymap.pk}) + anonymap.edit_status = anonymap.ANONYMOUS + anonymap.save() + response = client.post(url) + assert response.status_code == 200 + assert Map.objects.count() == 2 + clone = Map.objects.latest('pk') + assert clone.pk != anonymap.pk + assert clone.name == 'Clone of ' + anonymap.name + assert clone.owner is None + + +@pytest.mark.usefixtures('allow_anonymous') +def test_anyone_can_access_anonymous_map(cookieclient, anonymap): + url = reverse('map', args=(anonymap.slug, anonymap.pk)) + anonymap.share_status = anonymap.PUBLIC + response = cookieclient.get(url) + assert response.status_code == 200 + anonymap.share_status = anonymap.OPEN + response = cookieclient.get(url) + assert response.status_code == 200 + anonymap.share_status = anonymap.PRIVATE + response = cookieclient.get(url) + assert response.status_code == 200 diff --git a/umap/tests/test_tilelayer.py b/umap/tests/test_tilelayer.py new file mode 100644 index 00000000..11e81709 --- /dev/null +++ b/umap/tests/test_tilelayer.py @@ -0,0 +1,21 @@ +import pytest + +from .base import TileLayerFactory + +pytestmark = pytest.mark.django_db + + +def test_tilelayer_json(): + tilelayer = TileLayerFactory(attribution='Attribution', maxZoom=19, + minZoom=0, name='Name', rank=1, tms=True, + url_template='http://{s}.x.fr/{z}/{x}/{y}') + assert tilelayer.json == { + 'attribution': 'Attribution', + 'id': tilelayer.id, + 'maxZoom': 19, + 'minZoom': 0, + 'name': 'Name', + 'rank': 1, + 'tms': True, + 'url_template': 'http://{s}.x.fr/{z}/{x}/{y}' + } diff --git a/umap/tests/test_views.py b/umap/tests/test_views.py index 5c65844a..b53360f4 100644 --- a/umap/tests/test_views.py +++ b/umap/tests/test_views.py @@ -3,7 +3,7 @@ import socket import pytest from django.conf import settings from django.contrib.auth import get_user, get_user_model -from django.core.urlresolvers import reverse +from django.urls import reverse from django.test import RequestFactory from umap.views import validate_url @@ -105,4 +105,4 @@ def test_can_login_with_username_and_password_if_enabled(client, settings): user.save() client.post(reverse('login'), {'username': 'test', 'password': 'test'}) user = get_user(client) - assert user.is_authenticated() + assert user.is_authenticated diff --git a/umap/urls.py b/umap/urls.py index 5bcb6d85..ff515024 100644 --- a/umap/urls.py +++ b/umap/urls.py @@ -1,22 +1,28 @@ from django.conf import settings -from django.conf.urls.static import static +from django.conf.urls import include, url +from django.urls import path from django.conf.urls.i18n import i18n_patterns -from django.conf.urls import url, include -from django.contrib.staticfiles.urls import staticfiles_urlpatterns +from django.conf.urls.static import static from django.contrib import admin -from django.views.decorators.cache import cache_page from django.contrib.auth import views as auth_views - -from leaflet_storage.views import MapShortUrl +from django.contrib.auth.views import login +from django.contrib.staticfiles.urls import staticfiles_urlpatterns +from django.views.decorators.cache import (cache_control, cache_page, + never_cache) +from django.views.decorators.csrf import ensure_csrf_cookie from . import views +from .decorators import (jsonize_view, login_required_if_not_anonymous_allowed, + map_permissions_check) +from .utils import decorated_patterns admin.autodiscover() urlpatterns = [ - url(r'^admin/', include(admin.site.urls)), + url(r'^admin/', admin.site.urls), url('', include('social_django.urls', namespace='social')), - url(r'^m/(?P\d+)/$', MapShortUrl.as_view(), name='umap_short_url'), + url(r'^m/(?P\d+)/$', views.MapShortUrl.as_view(), + name='map_short_url'), url(r'^ajax-proxy/$', cache_page(180)(views.ajax_proxy), name='ajax-proxy'), url(r'^change-password/', auth_views.password_change, @@ -25,7 +31,52 @@ urlpatterns = [ url(r'^change-password-done/', auth_views.password_change_done, {'template_name': 'umap/password_change_done.html'}, name='password_change_done'), + url(r'^i18n/', include('django.conf.urls.i18n')), + url(r'^agnocomplete/', include('agnocomplete.urls')), ] + +i18n_urls = [ + url(r'^login/$', jsonize_view(login), name='login'), # noqa + url(r'^login/popup/end/$', views.LoginPopupEnd.as_view(), + name='login_popup_end'), + url(r'^logout/$', views.logout, name='logout'), + url(r'^map/(?P\d+)/geojson/$', views.MapViewGeoJSON.as_view(), + name='map_geojson'), + url(r'^map/anonymous-edit/(?P.+)$', + views.MapAnonymousEditUrl.as_view(), name='map_anonymous_edit_url'), + url(r'^pictogram/json/$', views.PictogramJSONList.as_view(), + name='pictogram_list_json'), +] +i18n_urls += decorated_patterns(cache_control(must_revalidate=True), + url(r'^datalayer/(?P[\d]+)/$', views.DataLayerView.as_view(), name='datalayer_view'), # noqa + url(r'^datalayer/(?P[\d]+)/versions/$', views.DataLayerVersions.as_view(), name='datalayer_versions'), # noqa + url(r'^datalayer/(?P[\d]+)/(?P[_\w]+.geojson)$', views.DataLayerVersion.as_view(), name='datalayer_version'), # noqa +) +i18n_urls += decorated_patterns([ensure_csrf_cookie], + url(r'^map/(?P[-_\w]+)_(?P\d+)$', views.MapView.as_view(), name='map'), # noqa + url(r'^map/new/$', views.MapNew.as_view(), name='map_new'), +) +i18n_urls += decorated_patterns( + [login_required_if_not_anonymous_allowed, never_cache], + url(r'^map/create/$', views.MapCreate.as_view(), name='map_create'), +) +i18n_urls += decorated_patterns( + [map_permissions_check, never_cache], + url(r'^map/(?P[\d]+)/update/settings/$', views.MapUpdate.as_view(), + name='map_update'), + url(r'^map/(?P[\d]+)/update/permissions/$', + views.UpdateMapPermissions.as_view(), name='map_update_permissions'), + url(r'^map/(?P[\d]+)/update/delete/$', + views.MapDelete.as_view(), name='map_delete'), + url(r'^map/(?P[\d]+)/update/clone/$', + views.MapClone.as_view(), name='map_clone'), + url(r'^map/(?P[\d]+)/datalayer/create/$', + views.DataLayerCreate.as_view(), name='datalayer_create'), + url(r'^map/(?P[\d]+)/datalayer/update/(?P\d+)/$', + views.DataLayerUpdate.as_view(), name='datalayer_update'), + url(r'^map/(?P[\d]+)/datalayer/delete/(?P\d+)/$', + views.DataLayerDelete.as_view(), name='datalayer_delete'), +) urlpatterns += i18n_patterns( url(r'^$', views.home, name="home"), url(r'^showcase/$', cache_page(24 * 60 * 60)(views.showcase), @@ -33,7 +84,7 @@ urlpatterns += i18n_patterns( url(r'^search/$', views.search, name="search"), url(r'^about/$', views.about, name="about"), url(r'^user/(?P[-_\w@]+)/$', views.user_maps, name='user_maps'), - url(r'', include('leaflet_storage.urls')), + url(r'', include(i18n_urls)), ) if settings.DEBUG and settings.MEDIA_ROOT: diff --git a/umap/utils.py b/umap/utils.py new file mode 100644 index 00000000..57d4ce30 --- /dev/null +++ b/umap/utils.py @@ -0,0 +1,111 @@ +import gzip + +from django.urls import get_resolver +from django.urls import URLPattern, URLResolver + + +def get_uri_template(urlname, args=None, prefix=""): + ''' + Utility function to return an URI Template from a named URL in django + Copied from django-digitalpaper. + + Restrictions: + - Only supports named urls! i.e. url(... name="toto") + - Only support one namespace level + - Only returns the first URL possibility. + - Supports multiple pattern possibilities (i.e., patterns with + non-capturing parenthesis in them) by trying to find a pattern + whose optional parameters match those you specified (a parameter + is considered optional if it doesn't appear in every pattern possibility) + ''' + def _convert(template, args=None): + """URI template converter""" + if not args: + args = [] + paths = template % dict([p, "{%s}" % p] for p in args) + return u'%s/%s' % (prefix, paths) + + resolver = get_resolver(None) + parts = urlname.split(':') + if len(parts) > 1 and parts[0] in resolver.namespace_dict: + namespace = parts[0] + urlname = parts[1] + nprefix, resolver = resolver.namespace_dict[namespace] + prefix = prefix + '/' + nprefix.rstrip('/') + possibilities = resolver.reverse_dict.getlist(urlname) + for tmp in possibilities: + possibility, pattern = tmp[:2] + if not args: + # If not args are specified, we only consider the first pattern + # django gives us + result, params = possibility[0] + return _convert(result, params) + else: + # If there are optionnal arguments passed, use them to try to find + # the correct pattern. + # First, we need to build a list with all the arguments + seen_params = [] + for result, params in possibility: + seen_params.append(params) + # Then build a set to find the common ones, and use it to build the + # list of all the expected params + common_params = reduce(lambda x, y: set(x) & set(y), seen_params) + expected_params = sorted(common_params.union(args)) + # Then loop again over the pattern possibilities and return + # the first one that strictly match expected params + for result, params in possibility: + if sorted(params) == expected_params: + return _convert(result, params) + return None + + +class DecoratedURLPattern(URLPattern): + + def resolve(self, *args, **kwargs): + result = URLPattern.resolve(self, *args, **kwargs) + if result: + for func in self._decorate_with: + result.func = func(result.func) + return result + + +def decorated_patterns(func, *urls): + """ + Utility function to decorate a group of url in urls.py + + Taken from http://djangosnippets.org/snippets/532/ + comments + See also http://friendpaste.com/6afByRiBB9CMwPft3a6lym + + Example: + urlpatterns = [ + url(r'^language/(?P[a-z]+)$', views.MyView, name='name'), + ] + decorated_patterns(login_required, url(r'^', include('cms.urls')), + """ + + def decorate(urls, func): + for url in urls: + if isinstance(url, URLPattern): + url.__class__ = DecoratedURLPattern + if not hasattr(url, "_decorate_with"): + setattr(url, "_decorate_with", []) + url._decorate_with.append(func) + elif isinstance(url, URLResolver): + for pp in url.url_patterns: + if isinstance(pp, URLPattern): + pp.__class__ = DecoratedURLPattern + if not hasattr(pp, "_decorate_with"): + setattr(pp, "_decorate_with", []) + pp._decorate_with.append(func) + if func: + if not isinstance(func, (list, tuple)): + func = [func] + for f in func: + decorate(urls, f) + + return urls + + +def gzip_file(from_path, to_path): + with open(from_path, 'rb') as f_in: + with gzip.open(to_path, 'wb') as f_out: + f_out.writelines(f_in) diff --git a/umap/views.py b/umap/views.py index bfc98ab0..849f9173 100644 --- a/umap/views.py +++ b/umap/views.py @@ -1,8 +1,42 @@ +import hashlib import json -import mimetypes +import os import re import socket +import mimetypes +from django.conf import settings +from django.contrib import messages +from django.contrib.auth import logout as do_logout +from django.contrib.auth import get_user_model +from django.contrib.gis.measure import D +from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator +from django.core.signing import BadSignature, Signer +from django.core.validators import URLValidator, ValidationError +from django.db.models import Q +from django.http import (HttpResponse, HttpResponseBadRequest, + HttpResponseForbidden, HttpResponsePermanentRedirect, + HttpResponseRedirect) +from django.middleware.gzip import re_accepts_gzip +from django.shortcuts import get_object_or_404 +from django.template.loader import render_to_string +from django.urls import reverse, reverse_lazy +from django.utils.encoding import force_bytes, smart_bytes +from django.utils.http import http_date +from django.utils.translation import ugettext as _ +from django.utils.translation import to_locale +from django.views.generic import DetailView, TemplateView, View +from django.views.generic.base import RedirectView +from django.views.generic.detail import BaseDetailView +from django.views.generic.edit import CreateView, DeleteView, UpdateView +from django.views.generic.list import ListView + +from .forms import (DEFAULT_LATITUDE, DEFAULT_LONGITUDE, DEFAULT_CENTER, + AnonymousMapPermissionsForm, DataLayerForm, FlatErrorList, + MapSettingsForm, UpdateMapPermissionsForm) +from .models import DataLayer, Licence, Map, Pictogram, TileLayer +from .utils import get_uri_template, gzip_file + try: # python3 from urllib.parse import urlparse @@ -12,21 +46,6 @@ except ImportError: from urlparse import urlparse from urllib2 import Request, HTTPError, build_opener -from django.views.generic import TemplateView -from django.contrib.auth import get_user_model -from django.views.generic import DetailView, View -from django.db.models import Q -from django.contrib.gis.measure import D -from django.conf import settings -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger -from django.http import HttpResponse, HttpResponseBadRequest -from django.utils.translation import ugettext as _ -from django.utils.encoding import smart_bytes -from django.core.urlresolvers import reverse -from django.core.validators import URLValidator, ValidationError - -from leaflet_storage.models import Map -from leaflet_storage.forms import DEFAULT_CENTER User = get_user_model() @@ -36,6 +55,7 @@ PRIVATE_IP = re.compile(r'((^127\.)|(^10\.)' r'|(^172\.2[0-9]\.)' r'|(^172\.3[0-1]\.)' r'|(^192\.168\.))') +ANONYMOUS_COOKIE_MAX_AGE = 60 * 60 * 24 * 30 # One month class PaginatorMixin(object): @@ -58,7 +78,7 @@ class PaginatorMixin(object): class Home(TemplateView, PaginatorMixin): template_name = "umap/home.html" - list_template_name = "leaflet_storage/map_list.html" + list_template_name = "umap/map_list.html" def get_context_data(self, **kwargs): qs = Map.public @@ -115,7 +135,7 @@ class UserMaps(DetailView, PaginatorMixin): model = User slug_url_kwarg = 'username' slug_field = 'username' - list_template_name = "leaflet_storage/map_list.html" + list_template_name = "umap/map_list.html" context_object_name = "current_user" def get_context_data(self, **kwargs): @@ -147,7 +167,7 @@ user_maps = UserMaps.as_view() class Search(TemplateView, PaginatorMixin): template_name = "umap/search.html" - list_template_name = "leaflet_storage/map_list.html" + list_template_name = "umap/map_list.html" def get_context_data(self, **kwargs): q = self.request.GET.get('q') @@ -268,3 +288,535 @@ class AjaxProxy(View): return HttpResponse(content, status=status_code, content_type=mimetype) ajax_proxy = AjaxProxy.as_view() + + +# ############## # +# Utils # +# ############## # + +def _urls_for_js(urls=None): + """ + Return templated URLs prepared for javascript. + """ + if urls is None: + # prevent circular import + from .urls import urlpatterns, i18n_urls + urls = [url.name for url in urlpatterns + i18n_urls + if getattr(url, 'name', None)] + urls = dict(zip(urls, [get_uri_template(url) for url in urls])) + urls.update(getattr(settings, 'UMAP_EXTRA_URLS', {})) + return urls + + +def render_to_json(templates, context, request): + """ + Generate a JSON HttpResponse with rendered template HTML. + """ + html = render_to_string( + templates, + context=context, + request=request + ) + _json = json.dumps({ + "html": html + }) + return HttpResponse(_json) + + +def simple_json_response(**kwargs): + return HttpResponse(json.dumps(kwargs)) + + +# ############## # +# Map # +# ############## # + + +class FormLessEditMixin(object): + http_method_names = [u'post', ] + + def form_invalid(self, form): + return simple_json_response(errors=form.errors, + error=str(form.errors)) + + def get_form(self, form_class=None): + kwargs = self.get_form_kwargs() + kwargs['error_class'] = FlatErrorList + return self.get_form_class()(**kwargs) + + +class MapDetailMixin(object): + + model = Map + + def get_context_data(self, **kwargs): + context = super(MapDetailMixin, self).get_context_data(**kwargs) + properties = { + 'urls': _urls_for_js(), + 'tilelayers': self.get_tilelayers(), + 'allowEdit': self.is_edit_allowed(), + 'default_iconUrl': "%sumap/img/marker.png" % settings.STATIC_URL, # noqa + 'umap_id': self.get_umap_id(), + 'licences': dict((l.name, l.json) for l in Licence.objects.all()), + 'edit_statuses': [(i, str(label)) for i, label in Map.EDIT_STATUS], + 'share_statuses': [(i, str(label)) + for i, label in Map.SHARE_STATUS], + 'anonymous_edit_statuses': [(i, str(label)) for i, label + in AnonymousMapPermissionsForm.STATUS], + } + if self.get_short_url(): + properties['shortUrl'] = self.get_short_url() + + if settings.USE_I18N: + locale = settings.LANGUAGE_CODE + # Check attr in case the middleware is not active + if hasattr(self.request, "LANGUAGE_CODE"): + locale = self.request.LANGUAGE_CODE + locale = to_locale(locale) + properties['locale'] = locale + context['locale'] = locale + map_settings = self.get_geojson() + if "properties" not in map_settings: + map_settings['properties'] = {} + map_settings['properties'].update(properties) + map_settings['properties']['datalayers'] = self.get_datalayers() + context['map_settings'] = json.dumps(map_settings, + indent=settings.DEBUG) + return context + + def get_tilelayers(self): + return TileLayer.get_list(selected=TileLayer.get_default()) + + def get_datalayers(self): + return [] + + def is_edit_allowed(self): + return True + + def get_umap_id(self): + return None + + def get_geojson(self): + return { + "geometry": { + "coordinates": [DEFAULT_LONGITUDE, DEFAULT_LATITUDE], + "type": "Point" + }, + "properties": { + "zoom": getattr(settings, 'LEAFLET_ZOOM', 6), + "datalayers": [], + } + } + + def get_short_url(self): + return None + + +class MapView(MapDetailMixin, DetailView): + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + canonical = self.get_canonical_url() + if not request.path == canonical: + if request.META.get('QUERY_STRING'): + canonical = "?".join([canonical, request.META['QUERY_STRING']]) + return HttpResponsePermanentRedirect(canonical) + if not self.object.can_view(request): + return HttpResponseForbidden('Forbidden') + return super(MapView, self).get(request, *args, **kwargs) + + def get_canonical_url(self): + return self.object.get_absolute_url() + + def get_datalayers(self): + datalayers = DataLayer.objects.filter(map=self.object) + return [l.metadata for l in datalayers] + + def get_tilelayers(self): + return TileLayer.get_list(selected=self.object.get_tilelayer()) + + def is_edit_allowed(self): + return self.object.can_edit(self.request.user, self.request) + + def get_umap_id(self): + return self.object.pk + + def get_short_url(self): + shortUrl = None + if hasattr(settings, 'SHORT_SITE_URL'): + short_path = reverse_lazy('map_short_url', + kwargs={'pk': self.object.pk}) + shortUrl = "%s%s" % (settings.SHORT_SITE_URL, short_path) + return shortUrl + + def get_geojson(self): + map_settings = self.object.settings + if "properties" not in map_settings: + map_settings['properties'] = {} + permissions = {} + permissions['edit_status'] = self.object.edit_status + permissions['share_status'] = self.object.share_status + if self.object.owner: + permissions['owner'] = { + 'id': self.object.owner.pk, + 'name': self.object.owner.get_username(), + 'url': reverse(settings.USER_MAPS_URL, + args=(self.object.owner.get_username(), )) + } + permissions['editors'] = [{ + 'id': editor.pk, + 'name': editor.get_username(), + } for editor in self.object.editors.all()] + map_settings['properties']['permissions'] = permissions + user = self.request.user + if not user.is_anonymous: + map_settings['properties']['user'] = { + 'id': user.pk, + 'name': user.get_username(), + 'url': reverse(settings.USER_MAPS_URL, + args=(user.get_username(), )) + } + if (not self.object.owner + and self.object.is_anonymous_owner(self.request)): + anonymous_url = "%s%s" % ( + settings.SITE_URL, + self.object.get_anonymous_edit_url() + ) + map_settings['properties']['anonymous_edit_url'] = anonymous_url + return map_settings + + +class MapViewGeoJSON(MapView): + + def get_canonical_url(self): + return reverse('map_geojson', args=(self.object.pk, )) + + def render_to_response(self, context, *args, **kwargs): + return HttpResponse(context['map_settings']) + + +class MapNew(MapDetailMixin, TemplateView): + template_name = "umap/map_detail.html" + + +class MapCreate(FormLessEditMixin, CreateView): + model = Map + form_class = MapSettingsForm + + def form_valid(self, form): + if self.request.user.is_authenticated: + form.instance.owner = self.request.user + self.object = form.save() + if not self.request.user.is_authenticated: + anonymous_url = "%s%s" % ( + settings.SITE_URL, + self.object.get_anonymous_edit_url() + ) + msg = _( + "Your map has been created! If you want to edit this map from " + "another computer, please use this link: %(anonymous_url)s" + % {"anonymous_url": anonymous_url} + ) + else: + msg = _("Congratulations, your map has been created!") + response = simple_json_response( + id=self.object.pk, + url=self.object.get_absolute_url(), + info=msg + ) + if not self.request.user.is_authenticated: + key, value = self.object.signed_cookie_elements + response.set_signed_cookie( + key=key, + value=value, + max_age=ANONYMOUS_COOKIE_MAX_AGE + ) + return response + + +class MapUpdate(FormLessEditMixin, UpdateView): + model = Map + form_class = MapSettingsForm + pk_url_kwarg = 'map_id' + + def form_valid(self, form): + self.object.settings = form.cleaned_data["settings"] + self.object.save() + return simple_json_response( + id=self.object.pk, + url=self.object.get_absolute_url(), + info=_("Map has been updated!") + ) + + +class UpdateMapPermissions(FormLessEditMixin, UpdateView): + model = Map + pk_url_kwarg = 'map_id' + + def get_form_class(self): + if self.object.owner: + return UpdateMapPermissionsForm + else: + return AnonymousMapPermissionsForm + + def get_form(self, form_class=None): + form = super().get_form(form_class) + user = self.request.user + if self.object.owner and not user == self.object.owner: + del form.fields['edit_status'] + del form.fields['share_status'] + del form.fields['owner'] + return form + + def form_valid(self, form): + self.object = form.save() + return simple_json_response( + info=_("Map editors updated with success!")) + + +class MapDelete(DeleteView): + model = Map + pk_url_kwarg = "map_id" + + def delete(self, *args, **kwargs): + self.object = self.get_object() + if self.object.owner and self.request.user != self.object.owner: + return HttpResponseForbidden( + _('Only its owner can delete the map.')) + if not self.object.owner\ + and not self.object.is_anonymous_owner(self.request): + return HttpResponseForbidden('Forbidden.') + self.object.delete() + return simple_json_response(redirect="/") + + +class MapClone(View): + + def post(self, *args, **kwargs): + if not getattr(settings, "UMAP_ALLOW_ANONYMOUS", False) \ + and not self.request.user.is_authenticated: + return HttpResponseForbidden('Forbidden') + owner = self.request.user if self.request.user.is_authenticated else None + self.object = kwargs['map_inst'].clone(owner=owner) + response = simple_json_response(redirect=self.object.get_absolute_url()) + if not self.request.user.is_authenticated: + key, value = self.object.signed_cookie_elements + response.set_signed_cookie( + key=key, + value=value, + max_age=ANONYMOUS_COOKIE_MAX_AGE + ) + anonymous_url = "%s%s" % ( + settings.SITE_URL, + self.object.get_anonymous_edit_url() + ) + msg = _( + "Your map has been cloned! If you want to edit this map from " + "another computer, please use this link: %(anonymous_url)s" + % {"anonymous_url": anonymous_url} + ) + else: + msg = _("Congratulations, your map has been cloned!") + messages.info(self.request, msg) + return response + + +class MapShortUrl(RedirectView): + query_string = True + permanent = True + + def get_redirect_url(self, **kwargs): + map_inst = get_object_or_404(Map, pk=kwargs['pk']) + url = map_inst.get_absolute_url() + if self.query_string: + args = self.request.META.get('QUERY_STRING', '') + if args: + url = "%s?%s" % (url, args) + return url + + +class MapAnonymousEditUrl(RedirectView): + + permanent = False + + def get(self, request, *args, **kwargs): + signer = Signer() + try: + pk = signer.unsign(self.kwargs['signature']) + except BadSignature: + return HttpResponseForbidden('Bad Signature') + else: + map_inst = get_object_or_404(Map, pk=pk) + url = map_inst.get_absolute_url() + response = HttpResponseRedirect(url) + if not map_inst.owner: + key, value = map_inst.signed_cookie_elements + response.set_signed_cookie( + key=key, + value=value, + max_age=ANONYMOUS_COOKIE_MAX_AGE + ) + return response + + +# ############## # +# DataLayer # +# ############## # + + +class GZipMixin(object): + + EXT = '.gz' + + def _path(self): + return self.object.geojson.path + + def path(self): + """ + Serve gzip file if client accept it. + Generate or update the gzip file if needed. + """ + path = self._path() + statobj = os.stat(path) + ae = self.request.META.get('HTTP_ACCEPT_ENCODING', '') + if re_accepts_gzip.search(ae) and getattr(settings, 'UMAP_GZIP', True): + gzip_path = "{path}{ext}".format(path=path, ext=self.EXT) + up_to_date = True + if not os.path.exists(gzip_path): + up_to_date = False + else: + gzip_statobj = os.stat(gzip_path) + if statobj.st_mtime > gzip_statobj.st_mtime: + up_to_date = False + if not up_to_date: + gzip_file(path, gzip_path) + path = gzip_path + return path + + def etag(self): + path = self.path() + with open(path, mode='rb') as f: + return hashlib.md5(f.read()).hexdigest() + + +class DataLayerView(GZipMixin, BaseDetailView): + model = DataLayer + + def render_to_response(self, context, **response_kwargs): + response = None + path = self.path() + + if getattr(settings, 'UMAP_XSENDFILE_HEADER', None): + response = HttpResponse() + path = path.replace(settings.MEDIA_ROOT, '/internal') + response[settings.UMAP_XSENDFILE_HEADER] = path + else: + # TODO IMS + statobj = os.stat(path) + with open(path, 'rb') as f: + response = HttpResponse( + f.read(), # should not be used in production! + content_type='application/json' + ) + response["Last-Modified"] = http_date(statobj.st_mtime) + response['ETag'] = '%s' % hashlib.md5(force_bytes(response.content)).hexdigest() # noqa + response['Content-Length'] = len(response.content) + if path.endswith(self.EXT): + response['Content-Encoding'] = 'gzip' + return response + + +class DataLayerVersion(DataLayerView): + + def _path(self): + return '{root}/{path}'.format( + root=settings.MEDIA_ROOT, + path=self.object.get_version_path(self.kwargs['name'])) + + +class DataLayerCreate(FormLessEditMixin, GZipMixin, CreateView): + model = DataLayer + form_class = DataLayerForm + + def form_valid(self, form): + form.instance.map = self.kwargs['map_inst'] + self.object = form.save() + response = simple_json_response(**self.object.metadata) + response['ETag'] = self.etag() + return response + + +class DataLayerUpdate(FormLessEditMixin, GZipMixin, UpdateView): + model = DataLayer + form_class = DataLayerForm + + def form_valid(self, form): + self.object = form.save() + response = simple_json_response(**self.object.metadata) + response['ETag'] = self.etag() + return response + + def if_match(self): + """Optimistic concurrency control.""" + match = True + if_match = self.request.META.get('HTTP_IF_MATCH') + if if_match: + etag = self.etag() + if etag != if_match: + match = False + return match + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + if self.object.map != self.kwargs['map_inst']: + return HttpResponseForbidden('Route to nowhere') + if not self.if_match(): + return HttpResponse(status=412) + return super(DataLayerUpdate, self).post(request, *args, **kwargs) + + +class DataLayerDelete(DeleteView): + model = DataLayer + + def delete(self, *args, **kwargs): + self.object = self.get_object() + if self.object.map != self.kwargs['map_inst']: + return HttpResponseForbidden('Route to nowhere') + self.object.delete() + return simple_json_response(info=_("Layer successfully deleted.")) + + +class DataLayerVersions(BaseDetailView): + model = DataLayer + + def render_to_response(self, context, **response_kwargs): + return simple_json_response(versions=self.object.versions) + + +# ############## # +# Picto # +# ############## # + +class PictogramJSONList(ListView): + model = Pictogram + + def render_to_response(self, context, **response_kwargs): + content = [p.json for p in Pictogram.objects.all()] + return simple_json_response(pictogram_list=content) + + +# ############## # +# Generic # +# ############## # + +def logout(request): + do_logout(request) + return simple_json_response(redirect="/") + + +class LoginPopupEnd(TemplateView): + """ + End of a loggin process in popup. + Basically close the popup. + """ + template_name = "umap/login_popup_end.html"