├── .gitignore ├── .gitmodules ├── .travis.yml ├── .tx └── config ├── CHANGELOG.md ├── LICENCE ├── MANIFEST.in ├── Makefile ├── README.md ├── leaflet_storage ├── __init__.py ├── admin.py ├── decorators.py ├── fields.py ├── forms.py ├── locale │ ├── am_ET │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── bg │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ca │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── cs_CZ │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── da │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── de │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── en │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── es │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── fi │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── fr │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── it │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ja │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── lt │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── nl │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── pl │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── pt │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ru │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── sk_SK │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── uk_UA │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── vi │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ └── zh_TW │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── management │ ├── __init__.py │ └── commands │ │ ├── __init__.py │ │ ├── anonymous_edit_url.py │ │ └── storagei18n.py ├── managers.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_auto_20160520_1114.py │ ├── 0003_auto_20160910_0624.py │ ├── 0004_tilelayer_tms.py │ └── __init__.py ├── models.py ├── templates │ ├── base.html │ ├── leaflet_storage │ │ ├── css.html │ │ ├── js.html │ │ ├── locale.js │ │ ├── login_popup_end.html │ │ ├── map_detail.html │ │ ├── map_fragment.html │ │ ├── map_init.html │ │ ├── map_messages.html │ │ ├── map_update_permissions.html │ │ └── success.html │ └── registration │ │ └── login.html ├── templatetags │ ├── __init__.py │ └── leaflet_storage_tags.py ├── urls.py ├── utils.py └── views.py ├── pytest.ini ├── requirements-dev.txt ├── setup.py └── tests ├── __init__.py ├── base.py ├── conftest.py ├── fixtures ├── test_upload_data.csv ├── test_upload_data.gpx ├── test_upload_data.json ├── test_upload_data.kml ├── test_upload_empty_coordinates.json ├── test_upload_missing_name.json └── test_upload_non_linear_ring.json ├── settings.py ├── test_datalayer.py ├── test_datalayer_views.py ├── test_fields.py ├── test_licence.py ├── test_map.py ├── test_map_views.py └── test_tilelayer.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.pyo 3 | *.swp 4 | *.lock 5 | *.pid 6 | *.DS_Store 7 | *.svn 8 | *.pdg 9 | *.orig 10 | *~ 11 | doc/_build/* 12 | dist/ 13 | build/ 14 | *.egg-info 15 | datalayer/ 16 | .cache/ 17 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "leaflet_storage/static/storage"] 2 | path = leaflet_storage/static/storage 3 | url = git://github.com/yohanboniface/Leaflet.Storage.git 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: python 3 | python: 4 | - "2.7" 5 | - "3.4" 6 | - "3.5" 7 | services: 8 | - postgresql 9 | install: "pip install -r requirements-dev.txt" 10 | before_script: 11 | - psql -c 'create database testdb;' -U postgres 12 | script: make test 13 | notifications: 14 | irc: 15 | channels: 16 | - "irc.freenode.net#umap" 17 | on_success: change 18 | on_failure: always 19 | email: false 20 | branches: 21 | only: 22 | - master 23 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | 4 | [umap.backend] 5 | file_filter = leaflet_storage/locale//LC_MESSAGES/django.po 6 | source_file = leaflet_storage/locale/en/LC_MESSAGES/django.po 7 | source_lang = en 8 | type = PO 9 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # django-leaflet-storage changelog 2 | 3 | ## 0.8.0 4 | - upgraded to Leaflet.Storage 0.8.0, which bumps to Leaflet 1.0.x 5 | - added am_ET, pl and sk_SK locales 6 | - fixed default licence being created in every available languages 7 | - switch to pytest for unit tests 8 | - Django 1.10 compatibility 9 | - add DataLayer.rank 10 | - Expose DataLayer versions 11 | - python3 support 12 | - add nofollow meta when map is not public 13 | 14 | ## 0.7.4 15 | - fix anonymous not able to edit map anymore 16 | 17 | ## 0.7.0 18 | - update Leaflet.Storage to 0.7.0 19 | - added Vietnamese 20 | - by default, allow_edit is now false 21 | - added Chinese (Taiwan) locale 22 | 23 | ## 0.6.x 24 | - upgrade to django 1.6 25 | - sesql replaced by django-pgindex 26 | - support for gzip for datalayer geojson 27 | - support for X-Senfile/Accel-Redirect 28 | - more translations 29 | - fix anonymous map owner not able to delete their map 30 | - fix missing vendors assets 31 | - reset South migrations (some were bugged); to be back again with django 1.7 32 | - added russian locale 33 | - http optimistic concurrency control 34 | - longer anonymous cookie max_age (one month instead of session only) 35 | - add possibility to override default zoom with LEAFLET_ZOOM setting 36 | - fix bug where anonymous map wasn't editable by logged in users even if 37 | edit status was ANONYMOUS 38 | 39 | ## 0.5.x 40 | - internal storage structure totally reviewed: datalayers are stored as geojson files, 41 | instead of being split in features stored in PostGIS 42 | - upload and download moved to client side (see Leaflet.Storage) 43 | - cloned map name is now prefixed by "Clone of " 44 | - added Transifex config 45 | - workaround for non asciiable map names 46 | - add a share_status fielf in Map model 47 | 48 | 49 | ## 0.4.0 50 | - renamed internally category in datalayer 51 | - add a rank column to tilelayer to control their order in the tilelayer edit box 52 | - fix description that was not exported in the GeoJSON export 53 | - return proper 403 if bad signature on anonymous_edit_url access 54 | - refactored tilelayer management 55 | - smarter encoding management at import 56 | - smarter errors management at import 57 | - handle other delimiters than just comma for CSV import 58 | - Spanish translation, thanks to @ikks 59 | - map clone possibility 60 | 61 | ## 0.3.0 62 | - handle anonymous map creation 63 | - Fix color no more displayed in map info box (cf #70) 64 | - portuguese translation (thanks @FranciscoDS) 65 | - fix bug when the map title was too long (making the slug too long, and so over the 66 | database limit for this field) 67 | - add a setting to display map caption on map load (cf Leaflet.Storage#50) 68 | - update to django 1.5 69 | - first version of a CSV import 70 | - add a Textarea in import form 71 | - first version of data export (GeoJSON only for now) 72 | 73 | ## 0.2.0 74 | 75 | - handle map settings management from front-end 76 | - handle path styling options (https://github.com/yohanboniface/Leaflet.Storage/issues/26) 77 | - remove Category.rank (https://github.com/yohanboniface/django-leaflet-storage/issues/46) 78 | - Marker has now icon_class and pictogram fields (https://github.com/yohanboniface/django-leaflet-storage/issues/21) 79 | - handle scale control 80 | - basic short URL management 81 | - fixed a bug where imports were failing if the category had a custom marker image 82 | 83 | ## 0.1.0 84 | 85 | - first packaged version 86 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2013 Yohan Boniface 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include README.md 2 | include requirements-dev.txt 3 | recursive-include leaflet_storage/static/storage/src * 4 | recursive-include leaflet_storage/static/storage/reqs * 5 | recursive-include leaflet_storage/static/storage/contrib * 6 | recursive-include leaflet_storage/templates * 7 | recursive-include leaflet_storage/locale * 8 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | test: 2 | py.test tests 3 | initassets: 4 | git submodule update --init 5 | assets: 6 | cd leaflet_storage/static/storage/ && git pull && make install && make vendors 7 | cleanassets: 8 | rm -rf leaflet_storage/static/storage/node_modules 9 | distfile: 10 | python setup.py sdist bdist_wheel 11 | test_publish: 12 | twine upload -r testpypi dist/* 13 | publish: 14 | twine upload dist/* 15 | make clean 16 | clean: 17 | rm -f dist/* 18 | rm -rf build/* 19 | tx_pull: 20 | tx pull 21 | tx_push: 22 | tx push -s 23 | compilemessages: 24 | cd leaflet_storage && django-admin.py compilemessages --settings tests.settings 25 | makemessages: 26 | cd leaflet_storage && django-admin.py makemessages -a 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://travis-ci.org/umap-project/django-leaflet-storage.svg)](https://travis-ci.org/umap-project/django-leaflet-storage) 2 | [![Requirements Status](https://requires.io/github/umap-project/django-leaflet-storage/requirements.svg?branch=master)](https://requires.io/github/umap-project/django-leaflet-storage/requirements/?branch=master) 3 | 4 | # Django-Leaflet-Storage 5 | 6 | Provide collaborative maps for your Django project. 7 | 8 | Django-Leaflet-Storage is a backend for [Leaflet.Storage](https://github.com/yohanboniface/Leaflet.Storage), built on top of [Geodjango](http://geodjango.org/) and [Leaflet](http://leafletjs.com). 9 | 10 | Check the demo [here](http://umap.fluv.io) 11 | 12 | 13 | ## Installation 14 | 15 | You will need a geo aware database. See [Geodjango doc](https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/) for backend installation. 16 | 17 | Then you can pip install the app: 18 | 19 | pip install django-leaflet-storage 20 | 21 | 22 | Add `leaflet_storage` to you apps: 23 | 24 | INSTALLED_APPS = ( 25 | ... 26 | "leaflet_storage", 27 | ) 28 | 29 | Include `leaflet_storage` urls: 30 | 31 | (r'', include('leaflet_storage.urls')), 32 | 33 | Create tables: 34 | 35 | python manage.py migrate 36 | 37 | 38 | ## Basic usage 39 | 40 | From the Django admin (for now), you need to create at least: 41 | 42 | - one TileLayer instance 43 | - one Licence instance 44 | 45 | Then, go to the map creation page (something like http://localhost:8017/map/new), and you will be able to add features (Marker, Polygon...). 46 | -------------------------------------------------------------------------------- /leaflet_storage/__init__.py: -------------------------------------------------------------------------------- 1 | "Create collaborative maps on top of Geodjango and Leaflet." 2 | VERSION = (0, 8, 2) 3 | 4 | __author__ = 'Yohan Boniface' 5 | __contact__ = "yb@enix.fr" 6 | __homepage__ = "https://github.com/umap-project/django-leaflet-storage" 7 | __version__ = ".".join(map(str, VERSION)) 8 | -------------------------------------------------------------------------------- /leaflet_storage/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib.gis import admin 2 | from .models import Map, DataLayer, Pictogram, TileLayer, Licence 3 | 4 | 5 | class TileLayerAdmin(admin.ModelAdmin): 6 | list_display = ('name', 'rank', ) 7 | list_editable = ('rank', ) 8 | 9 | admin.site.register(Map, admin.OSMGeoAdmin) 10 | admin.site.register(DataLayer) 11 | admin.site.register(Pictogram) 12 | admin.site.register(TileLayer, TileLayerAdmin) 13 | admin.site.register(Licence) 14 | -------------------------------------------------------------------------------- /leaflet_storage/decorators.py: -------------------------------------------------------------------------------- 1 | from functools import wraps 2 | 3 | from django.core.urlresolvers import reverse_lazy 4 | from django.shortcuts import get_object_or_404 5 | from django.http import HttpResponseForbidden 6 | from django.conf import settings 7 | 8 | from .views import simple_json_response 9 | from .models import Map 10 | 11 | 12 | LOGIN_URL = getattr(settings, "LOGIN_URL", "login") 13 | LOGIN_URL = reverse_lazy(LOGIN_URL) if not LOGIN_URL.startswith("/") else LOGIN_URL 14 | 15 | 16 | def login_required_if_not_anonymous_allowed(view_func): 17 | @wraps(view_func) 18 | def wrapper(request, *args, **kwargs): 19 | if (not getattr(settings, "LEAFLET_STORAGE_ALLOW_ANONYMOUS", False) 20 | and not request.user.is_authenticated()): 21 | return simple_json_response(login_required=str(LOGIN_URL)) 22 | return view_func(request, *args, **kwargs) 23 | return wrapper 24 | 25 | 26 | def map_permissions_check(view_func): 27 | """ 28 | Used for URLs dealing with the map. 29 | """ 30 | @wraps(view_func) 31 | def wrapper(request, *args, **kwargs): 32 | map_inst = get_object_or_404(Map, pk=kwargs['map_id']) 33 | user = request.user 34 | kwargs['map_inst'] = map_inst # Avoid rerequesting the map in the view 35 | if map_inst.edit_status >= map_inst.EDITORS: 36 | can_edit = map_inst.can_edit(user=user, request=request) 37 | if not can_edit: 38 | if map_inst.owner and not user.is_authenticated(): 39 | return simple_json_response(login_required=str(LOGIN_URL)) 40 | else: 41 | return HttpResponseForbidden('Action not allowed for user.') 42 | return view_func(request, *args, **kwargs) 43 | return wrapper 44 | 45 | 46 | def jsonize_view(view_func): 47 | @wraps(view_func) 48 | def wrapper(request, *args, **kwargs): 49 | response = view_func(request, *args, **kwargs) 50 | response_kwargs = {} 51 | if hasattr(response, 'rendered_content'): 52 | response_kwargs['html'] = response.rendered_content 53 | if response.has_header('location'): 54 | response_kwargs['redirect'] = response['location'] 55 | return simple_json_response(**response_kwargs) 56 | return wrapper 57 | -------------------------------------------------------------------------------- /leaflet_storage/fields.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | from django.utils import six 4 | from django.db import models 5 | from django.utils.encoding import smart_text 6 | 7 | 8 | class DictField(models.TextField): 9 | """ 10 | A very simple field to store JSON in db. 11 | """ 12 | 13 | def get_prep_value(self, value): 14 | if not value: 15 | value = {} 16 | if not isinstance(value, six.string_types): 17 | value = json.dumps(value) 18 | return value 19 | 20 | def from_db_value(self, value, expression, connection, context): 21 | return self.to_python(value) 22 | 23 | def to_python(self, value): 24 | if not value: 25 | value = {} 26 | if isinstance(value, six.string_types): 27 | return json.loads(value) 28 | else: 29 | return value 30 | 31 | def value_to_string(self, obj): 32 | """Return value from object converted to string properly""" 33 | return smart_text(self.get_prep_value(self._get_val_from_obj(obj))) 34 | -------------------------------------------------------------------------------- /leaflet_storage/forms.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from django import forms 4 | from django.contrib.gis.geos import Point 5 | from django.contrib.auth import get_user_model 6 | from django.utils.translation import ugettext_lazy as _ 7 | from django.template.defaultfilters import slugify 8 | from django.conf import settings 9 | from django.forms.utils import ErrorList 10 | 11 | from .models import Map, DataLayer 12 | 13 | DEFAULT_LATITUDE = settings.LEAFLET_LATITUDE if hasattr(settings, "LEAFLET_LATITUDE") else 51 14 | DEFAULT_LONGITUDE = settings.LEAFLET_LONGITUDE if hasattr(settings, "LEAFLET_LONGITUDE") else 2 15 | DEFAULT_CENTER = Point(DEFAULT_LONGITUDE, DEFAULT_LATITUDE) 16 | 17 | User = get_user_model() 18 | 19 | 20 | class FlatErrorList(ErrorList): 21 | def __unicode__(self): 22 | return self.flat() 23 | 24 | def flat(self): 25 | if not self: 26 | return u'' 27 | return u' — '.join([e for e in self]) 28 | 29 | 30 | class UpdateMapPermissionsForm(forms.ModelForm): 31 | owner = forms.ModelChoiceField(User.objects, required=True) 32 | 33 | class Meta: 34 | model = Map 35 | fields = ('edit_status', 'editors', 'share_status', 'owner') 36 | 37 | 38 | class AnonymousMapPermissionsForm(forms.ModelForm): 39 | 40 | def __init__(self, *args, **kwargs): 41 | super(AnonymousMapPermissionsForm, self).__init__(*args, **kwargs) 42 | full_secret_link = "%s%s" % (settings.SITE_URL, self.instance.get_anonymous_edit_url()) 43 | help_text = _('Secret edit link is %s') % full_secret_link 44 | self.fields['edit_status'].help_text = _(help_text) 45 | 46 | STATUS = ( 47 | (Map.ANONYMOUS, _('Everyone can edit')), 48 | (Map.OWNER, _('Only editable with secret edit link')) 49 | ) 50 | 51 | edit_status = forms.ChoiceField(STATUS) 52 | 53 | class Meta: 54 | model = Map 55 | fields = ('edit_status', ) 56 | 57 | 58 | class DataLayerForm(forms.ModelForm): 59 | 60 | class Meta: 61 | model = DataLayer 62 | fields = ('geojson', 'name', 'display_on_load', 'rank') 63 | 64 | 65 | class MapSettingsForm(forms.ModelForm): 66 | 67 | def __init__(self, *args, **kwargs): 68 | super(MapSettingsForm, self).__init__(*args, **kwargs) 69 | self.fields["slug"].required = False 70 | 71 | def clean_slug(self): 72 | slug = self.cleaned_data.get('slug', None) 73 | name = self.cleaned_data.get('name', None) 74 | if not slug and name: 75 | # If name is empty, don't do nothing, validation will raise 76 | # later on the process because name is required 77 | self.cleaned_data['slug'] = slugify(name) or "map" 78 | return self.cleaned_data['slug'][:50] 79 | else: 80 | return "" 81 | 82 | def clean_center(self): 83 | if not self.cleaned_data['center']: 84 | point = DEFAULT_CENTER 85 | self.cleaned_data['center'] = point 86 | return self.cleaned_data['center'] 87 | 88 | class Meta: 89 | fields = ('settings', 'name', 'center', 'slug') 90 | model = Map 91 | -------------------------------------------------------------------------------- /leaflet_storage/locale/am_ET/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/am_ET/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/am_ET/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Alazar Tekle , 2015 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: uMap\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: 2015-11-15 14:21+0000\n" 13 | "Last-Translator: Alazar Tekle \n" 14 | "Language-Team: Amharic (Ethiopia) (http://www.transifex.com/yohanboniface/" 15 | "umap/language/am_ET/)\n" 16 | "Language: am_ET\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: forms.py:43 23 | #, python-format 24 | msgid "Secret edit link is %s" 25 | msgstr "የሚስጥር የማረሚያ መስመሩ %s" 26 | 27 | #: forms.py:47 models.py:113 28 | msgid "Everyone can edit" 29 | msgstr "ሁሉም ማረም ይችላል" 30 | 31 | #: forms.py:48 32 | msgid "Only editable with secret edit link" 33 | msgstr "በሚስጥር የመረሚያ መስመሩ ብቻ የሚታረም" 34 | 35 | #: models.py:20 36 | msgid "name" 37 | msgstr "ስም" 38 | 39 | #: models.py:42 40 | msgid "No licence set" 41 | msgstr "ምንም ፈቃድ አልተሰጠም" 42 | 43 | #: models.py:51 44 | msgid "details" 45 | msgstr "ዝርዝሮች" 46 | 47 | #: models.py:52 48 | msgid "Link to a page where the licence is detailed." 49 | msgstr "ፈቃዱ በዝርዝር ከተቀመጠ ገፅ ጛር አገናኝ" 50 | 51 | #: models.py:66 52 | msgid "URL template using OSM tile format" 53 | msgstr "የድረ-ገፅ አድራሻ ተምሳሌ በኦ.ኤስ.ኤም. የታይል ፎርማት" 54 | 55 | #: models.py:74 56 | msgid "Order of the tilelayers in the edit box" 57 | msgstr "በማረሚያ ሳጥኑ ውስጥ የታይል ሌየሮቹ ቅደም ተከተል" 58 | 59 | #: models.py:114 60 | msgid "Only editors can edit" 61 | msgstr "አራሚዎች ብቻ ማረም ይችላሉ" 62 | 63 | #: models.py:115 64 | msgid "Only owner can edit" 65 | msgstr "ባለቤት ብቻ ማረም ይችላል" 66 | 67 | #: models.py:118 68 | msgid "everyone (public)" 69 | msgstr "ሁሉም (የህዝብ)" 70 | 71 | #: models.py:119 72 | msgid "anyone with link" 73 | msgstr "አድራሻው ያለው ሁሉ" 74 | 75 | #: models.py:120 76 | msgid "editors only" 77 | msgstr "አራሚዎች ብቻ" 78 | 79 | #: models.py:123 models.py:257 80 | msgid "description" 81 | msgstr "መገለጫ" 82 | 83 | #: models.py:124 84 | msgid "center" 85 | msgstr "መሀከል" 86 | 87 | #: models.py:125 88 | msgid "zoom" 89 | msgstr "ዙም" 90 | 91 | #: models.py:126 92 | msgid "locate" 93 | msgstr "ጠቁም" 94 | 95 | #: models.py:126 96 | msgid "Locate user on load?" 97 | msgstr "በመጫን ላይ ያለውን ተጠቃሚ ጠቁም?" 98 | 99 | #: models.py:129 100 | msgid "Choose the map licence." 101 | msgstr "የካርታውን ፈቃድ ከልስ" 102 | 103 | #: models.py:130 104 | msgid "licence" 105 | msgstr "ፈቃድ" 106 | 107 | #: models.py:135 108 | msgid "background" 109 | msgstr "ጀርባ" 110 | 111 | #: models.py:136 112 | msgid "owner" 113 | msgstr "ባለቤት" 114 | 115 | #: models.py:137 116 | msgid "editors" 117 | msgstr "አራሚዎች" 118 | 119 | #: models.py:138 120 | msgid "edit status" 121 | msgstr "ያለበትን ሁኔታ አርም" 122 | 123 | #: models.py:139 124 | msgid "share status" 125 | msgstr "ያለበትን ሁኔታ አጋራ" 126 | 127 | #: models.py:140 128 | msgid "settings" 129 | msgstr "ሁኔታዎች" 130 | 131 | #: models.py:178 132 | #, python-format 133 | msgid "Your anonymous map has been attached to your account %s" 134 | msgstr "በግልፅ ያልተቀመጠው ካርታዎ ከ %s አካውንትዎ ጋር ተያይዟል" 135 | 136 | #: models.py:211 137 | msgid "Clone of" 138 | msgstr "ድቃይ" 139 | 140 | #: models.py:262 141 | msgid "display on load" 142 | msgstr "በመጫን ላይ አሳይ" 143 | 144 | #: models.py:263 145 | msgid "Display this layer on load." 146 | msgstr "ሌየሩ በመጫን ላይ አሳይ" 147 | 148 | #: templates/leaflet_storage/login_popup_end.html:2 149 | msgid "You are logged in. Continuing..." 150 | msgstr "ገብተዋል። በመቀጠል ላይ ..." 151 | 152 | #: templates/leaflet_storage/map_update_permissions.html:2 153 | msgid "Map permissions" 154 | msgstr "የካርታ ፍቃዶች" 155 | 156 | #: templates/registration/login.html:2 157 | msgid "Please log in to proceed" 158 | msgstr "እባክዎ ለመቀጠል ይግቡ" 159 | 160 | #: templates/registration/login.html:4 161 | msgid "Your username and password didn't match. Please try again." 162 | msgstr "የተገልጋይ ስምዎ እና የይለፍ ቃልዎ አልተዛመደም። እባክዎ እንደገና ይሞክሩ።" 163 | 164 | #: views.py:232 165 | #, python-format 166 | msgid "" 167 | "Your map has been created! If you want to edit this map from another " 168 | "computer, please use this link: %(anonymous_url)s" 169 | msgstr "" 170 | "ካርታዎ ተፈጥሯል! ይህንን ካርታ ከሌላ ኮምፒውተር ላይ ሆነው ለማረም ከፈለጉ የሚከተለውን አድራሻ ይጠቀሙ " 171 | "%(anonymous_url)s" 172 | 173 | #: views.py:237 174 | msgid "Congratulations, your map has been created!" 175 | msgstr "እንኳን ደስ አለዎ ካርታዎ ተፈጥሯል!" 176 | 177 | #: views.py:264 178 | msgid "Map has been updated!" 179 | msgstr "ካርታው ታድሷል!" 180 | 181 | #: views.py:291 182 | msgid "Map editors updated with success!" 183 | msgstr "የካርታ አራሚዎች በትክክል ታድሰዋል!" 184 | 185 | #: views.py:306 186 | msgid "Only its owner can delete the map." 187 | msgstr "ካርታውን የሚሰርዘው ባለቤቱ ብቻ ነው።" 188 | 189 | #: views.py:335 190 | #, python-format 191 | msgid "" 192 | "Your map has been cloned! If you want to edit this map from another " 193 | "computer, please use this link: %(anonymous_url)s" 194 | msgstr "" 195 | "ካርታዎ ተዳቅሏል! ይህንን ካርታ ከሌላ ኮምፒውተር ላይ ሆነው ለማረም ከፈለጉ የሚከተለውን አድራሻ ይጠቀሙ " 196 | "%(anonymous_url)s" 197 | 198 | #: views.py:340 199 | msgid "Congratulations, your map has been cloned!" 200 | msgstr "እንኳን ደስ አለዎ ካርታዎ ተዳቅሏል!" 201 | 202 | #: views.py:526 203 | msgid "Layer successfully deleted." 204 | msgstr "ሌየሩ በትክክል ተሰርዟ" 205 | -------------------------------------------------------------------------------- /leaflet_storage/locale/bg/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/bg/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/bg/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # lillyvip , 2013-2014 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: uMap\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: 2014-02-28 05:57+0000\n" 13 | "Last-Translator: lillyvip \n" 14 | "Language-Team: Bulgarian (http://www.transifex.com/projects/p/umap/language/" 15 | "bg/)\n" 16 | "Language: bg\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: forms.py:43 23 | #, python-format 24 | msgid "Secret edit link is %s" 25 | msgstr "Тайно редактиране на линк е %s" 26 | 27 | #: forms.py:47 models.py:113 28 | msgid "Everyone can edit" 29 | msgstr "Всеки може да редактира" 30 | 31 | #: forms.py:48 32 | msgid "Only editable with secret edit link" 33 | msgstr "Само може да се редактира с тайно редактиран линк" 34 | 35 | #: models.py:20 36 | msgid "name" 37 | msgstr "име" 38 | 39 | #: models.py:42 40 | msgid "No licence set" 41 | msgstr "Няма избран лиценз" 42 | 43 | #: models.py:51 44 | msgid "details" 45 | msgstr "детайли" 46 | 47 | #: models.py:52 48 | msgid "Link to a page where the licence is detailed." 49 | msgstr "Линк към страницата с подробно описание за лиценза." 50 | 51 | #: models.py:66 52 | msgid "URL template using OSM tile format" 53 | msgstr "URL шаблон, използван формат OSM плочи" 54 | 55 | #: models.py:74 56 | msgid "Order of the tilelayers in the edit box" 57 | msgstr "Поръчка на tilelayers в полето за редактиране" 58 | 59 | #: models.py:114 60 | msgid "Only editors can edit" 61 | msgstr "Само редактори могат да редактират" 62 | 63 | #: models.py:115 64 | msgid "Only owner can edit" 65 | msgstr "Само притежателят може да редактира" 66 | 67 | #: models.py:118 68 | msgid "everyone (public)" 69 | msgstr "всеки (публично)" 70 | 71 | #: models.py:119 72 | msgid "anyone with link" 73 | msgstr "всеки които има линк" 74 | 75 | #: models.py:120 76 | msgid "editors only" 77 | msgstr "само редакторите" 78 | 79 | #: models.py:123 models.py:257 80 | msgid "description" 81 | msgstr "описание" 82 | 83 | #: models.py:124 84 | msgid "center" 85 | msgstr "център" 86 | 87 | #: models.py:125 88 | msgid "zoom" 89 | msgstr "мащаб" 90 | 91 | #: models.py:126 92 | msgid "locate" 93 | msgstr "локализирай" 94 | 95 | #: models.py:126 96 | msgid "Locate user on load?" 97 | msgstr "Локализирай потребител при зареждане?" 98 | 99 | #: models.py:129 100 | msgid "Choose the map licence." 101 | msgstr "Избери лиценз за картата." 102 | 103 | #: models.py:130 104 | msgid "licence" 105 | msgstr "лиценз" 106 | 107 | #: models.py:135 108 | msgid "background" 109 | msgstr "фон" 110 | 111 | #: models.py:136 112 | msgid "owner" 113 | msgstr "притежател" 114 | 115 | #: models.py:137 116 | msgid "editors" 117 | msgstr "редактори" 118 | 119 | #: models.py:138 120 | msgid "edit status" 121 | msgstr "статус на редактиране" 122 | 123 | #: models.py:139 124 | msgid "share status" 125 | msgstr "сподели статус" 126 | 127 | #: models.py:140 128 | msgid "settings" 129 | msgstr "настройки" 130 | 131 | #: models.py:178 132 | #, python-format 133 | msgid "Your anonymous map has been attached to your account %s" 134 | msgstr "Вашата анонимна карта е прикрепена към вашия акаунт %s" 135 | 136 | #: models.py:211 137 | msgid "Clone of" 138 | msgstr "Клониране на" 139 | 140 | #: models.py:262 141 | msgid "display on load" 142 | msgstr "покажи при зареждане" 143 | 144 | #: models.py:263 145 | msgid "Display this layer on load." 146 | msgstr "Покажи този слой при зареждане" 147 | 148 | #: templates/leaflet_storage/login_popup_end.html:2 149 | msgid "You are logged in. Continuing..." 150 | msgstr "В процес на включване. Продължение..." 151 | 152 | #: templates/leaflet_storage/map_update_permissions.html:2 153 | msgid "Map permissions" 154 | msgstr "Разрешения за картата" 155 | 156 | #: templates/registration/login.html:2 157 | msgid "Please log in to proceed" 158 | msgstr "Моля, включете се за да осъществите тази процедура" 159 | 160 | #: templates/registration/login.html:4 161 | msgid "Your username and password didn't match. Please try again." 162 | msgstr "Вашето потребителско име и парола не съвпадат. Моля, опитайте отново." 163 | 164 | #: views.py:232 165 | #, python-format 166 | msgid "" 167 | "Your map has been created! If you want to edit this map from another " 168 | "computer, please use this link: %(anonymous_url)s" 169 | msgstr "" 170 | "Вашата карта е създадена! Ако искате да редактирате тази карта от друг " 171 | "компютър, моля използвайте този линк : %(anonymous_url)s" 172 | 173 | #: views.py:237 174 | msgid "Congratulations, your map has been created!" 175 | msgstr "Поздравления, вашата карта е създадена!" 176 | 177 | #: views.py:264 178 | msgid "Map has been updated!" 179 | msgstr "Карта е актуализирана!" 180 | 181 | #: views.py:291 182 | msgid "Map editors updated with success!" 183 | msgstr "Редакторите на картата актуализират с успех!" 184 | 185 | #: views.py:306 186 | msgid "Only its owner can delete the map." 187 | msgstr "Само собственикът може да изтрие картата." 188 | 189 | #: views.py:335 190 | #, python-format 191 | msgid "" 192 | "Your map has been cloned! If you want to edit this map from another " 193 | "computer, please use this link: %(anonymous_url)s" 194 | msgstr "" 195 | "Вашата карта е клонирана! Ако искате да редактирате тази карта от друг " 196 | "компютър, моля използвайте този линк: %(anonymous_url)s" 197 | 198 | #: views.py:340 199 | msgid "Congratulations, your map has been cloned!" 200 | msgstr "Поздравления, вашата карта е клонирана!" 201 | 202 | #: views.py:526 203 | msgid "Layer successfully deleted." 204 | msgstr "Слоят е изтрит успешно." 205 | -------------------------------------------------------------------------------- /leaflet_storage/locale/ca/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/ca/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/ca/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # jmontane , 2014 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: uMap\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: 2014-04-23 18:51+0000\n" 13 | "Last-Translator: jmontane \n" 14 | "Language-Team: Catalan (http://www.transifex.com/projects/p/umap/language/" 15 | "ca/)\n" 16 | "Language: ca\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: forms.py:43 23 | #, python-format 24 | msgid "Secret edit link is %s" 25 | msgstr "L'enllaç d'edició secret és %s" 26 | 27 | #: forms.py:47 models.py:113 28 | msgid "Everyone can edit" 29 | msgstr "Tothom pot editar" 30 | 31 | #: forms.py:48 32 | msgid "Only editable with secret edit link" 33 | msgstr "Només es pot editar amb l'enllaç d'edició secret" 34 | 35 | #: models.py:20 36 | msgid "name" 37 | msgstr "nom" 38 | 39 | #: models.py:42 40 | msgid "No licence set" 41 | msgstr "No s'ha indicat llicència" 42 | 43 | #: models.py:51 44 | msgid "details" 45 | msgstr "detalls" 46 | 47 | #: models.py:52 48 | msgid "Link to a page where the licence is detailed." 49 | msgstr "Enllaç a una pàgina on es detalla la llicència." 50 | 51 | #: models.py:66 52 | msgid "URL template using OSM tile format" 53 | msgstr "La plantilla de l'URL usa el format de tesel·les de l'OSM" 54 | 55 | #: models.py:74 56 | msgid "Order of the tilelayers in the edit box" 57 | msgstr "Ordre de les capes de tessel·les al quadre d'edició" 58 | 59 | #: models.py:114 60 | msgid "Only editors can edit" 61 | msgstr "Només els editors poden editar" 62 | 63 | #: models.py:115 64 | msgid "Only owner can edit" 65 | msgstr "Només el propietari pot editar" 66 | 67 | #: models.py:118 68 | msgid "everyone (public)" 69 | msgstr "tothom (públic)" 70 | 71 | #: models.py:119 72 | msgid "anyone with link" 73 | msgstr "qualsevol amb l'enllaç" 74 | 75 | #: models.py:120 76 | msgid "editors only" 77 | msgstr "només els editors" 78 | 79 | #: models.py:123 models.py:257 80 | msgid "description" 81 | msgstr "descripció" 82 | 83 | #: models.py:124 84 | msgid "center" 85 | msgstr "centre" 86 | 87 | #: models.py:125 88 | msgid "zoom" 89 | msgstr "escala" 90 | 91 | #: models.py:126 92 | msgid "locate" 93 | msgstr "ubica" 94 | 95 | #: models.py:126 96 | msgid "Locate user on load?" 97 | msgstr "Voleu ubicar l'usuari en carregar?" 98 | 99 | #: models.py:129 100 | msgid "Choose the map licence." 101 | msgstr "Trieu la llicència del mapa." 102 | 103 | #: models.py:130 104 | msgid "licence" 105 | msgstr "llicència" 106 | 107 | #: models.py:135 108 | msgid "background" 109 | msgstr "fons" 110 | 111 | #: models.py:136 112 | msgid "owner" 113 | msgstr "propietari" 114 | 115 | #: models.py:137 116 | msgid "editors" 117 | msgstr "editors" 118 | 119 | #: models.py:138 120 | msgid "edit status" 121 | msgstr "edita l'estat" 122 | 123 | #: models.py:139 124 | msgid "share status" 125 | msgstr "comparteix l'estat" 126 | 127 | #: models.py:140 128 | msgid "settings" 129 | msgstr "paràmetres" 130 | 131 | #: models.py:178 132 | #, python-format 133 | msgid "Your anonymous map has been attached to your account %s" 134 | msgstr "El vostre mapa anònim s'ha enllaçat al compte %s" 135 | 136 | #: models.py:211 137 | msgid "Clone of" 138 | msgstr "Clon de" 139 | 140 | #: models.py:262 141 | msgid "display on load" 142 | msgstr "mostra en carregar" 143 | 144 | #: models.py:263 145 | msgid "Display this layer on load." 146 | msgstr "Mostra aquesta capa en carregar." 147 | 148 | #: templates/leaflet_storage/login_popup_end.html:2 149 | msgid "You are logged in. Continuing..." 150 | msgstr "Heu iniciat sessió. S'està continuant..." 151 | 152 | #: templates/leaflet_storage/map_update_permissions.html:2 153 | msgid "Map permissions" 154 | msgstr "Permisos del mapa" 155 | 156 | #: templates/registration/login.html:2 157 | msgid "Please log in to proceed" 158 | msgstr "Inicieu sessió per a procedir" 159 | 160 | #: templates/registration/login.html:4 161 | msgid "Your username and password didn't match. Please try again." 162 | msgstr "L'usuari i contrasenya no coincideixen. Torneu-ho a intentar." 163 | 164 | #: views.py:232 165 | #, python-format 166 | msgid "" 167 | "Your map has been created! If you want to edit this map from another " 168 | "computer, please use this link: %(anonymous_url)s" 169 | msgstr "" 170 | "S'ha creat el vostre mapa! Si voleu editar aquest mapa en un altre " 171 | "ordinador, useu aquest enllaç: %(anonymous_url)s" 172 | 173 | #: views.py:237 174 | msgid "Congratulations, your map has been created!" 175 | msgstr "Enhorabona, s'ha creat el vostre mapa!" 176 | 177 | #: views.py:264 178 | msgid "Map has been updated!" 179 | msgstr "S'ha actualitzat el mapa!" 180 | 181 | #: views.py:291 182 | msgid "Map editors updated with success!" 183 | msgstr "S'han actualitzat els editors del mapa correctament!" 184 | 185 | #: views.py:306 186 | msgid "Only its owner can delete the map." 187 | msgstr "Només el propietari pot suprimir el mapa." 188 | 189 | #: views.py:335 190 | #, python-format 191 | msgid "" 192 | "Your map has been cloned! If you want to edit this map from another " 193 | "computer, please use this link: %(anonymous_url)s" 194 | msgstr "" 195 | "S'ha clonat el vostre mapa! Si voleu editar aquest mapa en un altre " 196 | "ordinador, useu aquest enllaç: %(anonymous_url)s" 197 | 198 | #: views.py:340 199 | msgid "Congratulations, your map has been cloned!" 200 | msgstr "Enhorabona, s'ha clonat el vostre mapa!" 201 | 202 | #: views.py:526 203 | msgid "Layer successfully deleted." 204 | msgstr "S'ha suprimit la capa correctament." 205 | -------------------------------------------------------------------------------- /leaflet_storage/locale/cs_CZ/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/cs_CZ/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/cs_CZ/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # gorn, 2014 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: uMap\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: 2014-04-13 23:24+0000\n" 13 | "Last-Translator: gorn\n" 14 | "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/" 15 | "umap/language/cs_CZ/)\n" 16 | "Language: cs_CZ\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 21 | 22 | #: forms.py:43 23 | #, python-format 24 | msgid "Secret edit link is %s" 25 | msgstr "Tajný odkaz umožňující úpravu mapy je %s" 26 | 27 | #: forms.py:47 models.py:113 28 | msgid "Everyone can edit" 29 | msgstr "Kdokoli může editovat" 30 | 31 | #: forms.py:48 32 | msgid "Only editable with secret edit link" 33 | msgstr "Lze upravovat jen pomocí tajného odkazu" 34 | 35 | #: models.py:20 36 | msgid "name" 37 | msgstr "název" 38 | 39 | #: models.py:42 40 | msgid "No licence set" 41 | msgstr "Licence nenastavena." 42 | 43 | #: models.py:51 44 | msgid "details" 45 | msgstr "podrobnosti" 46 | 47 | #: models.py:52 48 | msgid "Link to a page where the licence is detailed." 49 | msgstr "Odkaz na stránku s podrobnějším popisem licence." 50 | 51 | #: models.py:66 52 | msgid "URL template using OSM tile format" 53 | msgstr "Vzor URL ve formátu pro dlaždice OSM " 54 | 55 | #: models.py:74 56 | msgid "Order of the tilelayers in the edit box" 57 | msgstr "Pořadí vrstev při editaci" 58 | 59 | #: models.py:114 60 | msgid "Only editors can edit" 61 | msgstr "Jen přispěvovatelé mohou editovat" 62 | 63 | #: models.py:115 64 | msgid "Only owner can edit" 65 | msgstr "Jen vlastník může editovat" 66 | 67 | #: models.py:118 68 | msgid "everyone (public)" 69 | msgstr "kdokoli (veřejná)" 70 | 71 | #: models.py:119 72 | msgid "anyone with link" 73 | msgstr "kdokoli kdo má odkaz" 74 | 75 | #: models.py:120 76 | msgid "editors only" 77 | msgstr "jen připěvovatelé" 78 | 79 | #: models.py:123 models.py:257 80 | msgid "description" 81 | msgstr "popis" 82 | 83 | #: models.py:124 84 | msgid "center" 85 | msgstr "střed" 86 | 87 | #: models.py:125 88 | msgid "zoom" 89 | msgstr "přiblížení" 90 | 91 | #: models.py:126 92 | msgid "locate" 93 | msgstr "lokalizuj" 94 | 95 | #: models.py:126 96 | msgid "Locate user on load?" 97 | msgstr "Najdi poluhu uživatele na startu?" 98 | 99 | #: models.py:129 100 | msgid "Choose the map licence." 101 | msgstr "Vyberte si licenci mapy." 102 | 103 | #: models.py:130 104 | msgid "licence" 105 | msgstr "licence" 106 | 107 | #: models.py:135 108 | msgid "background" 109 | msgstr "pozadí" 110 | 111 | #: models.py:136 112 | msgid "owner" 113 | msgstr "vlastník" 114 | 115 | #: models.py:137 116 | msgid "editors" 117 | msgstr "přispěvovatelé" 118 | 119 | #: models.py:138 120 | msgid "edit status" 121 | msgstr "kdo může provádět úpravy" 122 | 123 | #: models.py:139 124 | msgid "share status" 125 | msgstr "nastavení sdílení" 126 | 127 | #: models.py:140 128 | msgid "settings" 129 | msgstr "nastavení" 130 | 131 | #: models.py:178 132 | #, python-format 133 | msgid "Your anonymous map has been attached to your account %s" 134 | msgstr "Vaše anonymní mapa byla připojena k vašemů účtu %s" 135 | 136 | #: models.py:211 137 | msgid "Clone of" 138 | msgstr "Kopie" 139 | 140 | #: models.py:262 141 | msgid "display on load" 142 | msgstr "zbraz na startu" 143 | 144 | #: models.py:263 145 | msgid "Display this layer on load." 146 | msgstr "Zobrazit tuto vrstvu na startu." 147 | 148 | #: templates/leaflet_storage/login_popup_end.html:2 149 | msgid "You are logged in. Continuing..." 150 | msgstr "Jste přihlášeni. Jedeme dál ..." 151 | 152 | #: templates/leaflet_storage/map_update_permissions.html:2 153 | msgid "Map permissions" 154 | msgstr "Přístupová oprávnění" 155 | 156 | #: templates/registration/login.html:2 157 | msgid "Please log in to proceed" 158 | msgstr "Pro pokračování se musíte přihlásit" 159 | 160 | #: templates/registration/login.html:4 161 | msgid "Your username and password didn't match. Please try again." 162 | msgstr "Jméno či heslo nesouhlasí. Zkuste to prosím znovu." 163 | 164 | #: views.py:232 165 | #, python-format 166 | msgid "" 167 | "Your map has been created! If you want to edit this map from another " 168 | "computer, please use this link: %(anonymous_url)s" 169 | msgstr "" 170 | "Vaše mapa byla vytvořena! Pokud chcete upravovat tuto mapu z jiného " 171 | "počítače, použijte tento odkaz: %(anonymous_url)s" 172 | 173 | #: views.py:237 174 | msgid "Congratulations, your map has been created!" 175 | msgstr "Gratulujeme, vaše mapa byla vytvořena!" 176 | 177 | #: views.py:264 178 | msgid "Map has been updated!" 179 | msgstr "Mapa byla aktualizována!" 180 | 181 | #: views.py:291 182 | msgid "Map editors updated with success!" 183 | msgstr "Seznam přispěvovatelů byl úspěšně upraven!" 184 | 185 | #: views.py:306 186 | msgid "Only its owner can delete the map." 187 | msgstr "Jen vlastník může vymzat tuto mapu." 188 | 189 | #: views.py:335 190 | #, python-format 191 | msgid "" 192 | "Your map has been cloned! If you want to edit this map from another " 193 | "computer, please use this link: %(anonymous_url)s" 194 | msgstr "" 195 | "Byla vytvořena kopie mapy! Pokud chcete upravovat tuto mapu z jiného " 196 | "počítače, použijte tento odkaz: %(anonymous_url)s" 197 | 198 | #: views.py:340 199 | msgid "Congratulations, your map has been cloned!" 200 | msgstr "Gratulujeme, byla vytvořena kopie mapy!" 201 | 202 | #: views.py:526 203 | msgid "Layer successfully deleted." 204 | msgstr "Vrstva úspěšně vymazána." 205 | -------------------------------------------------------------------------------- /leaflet_storage/locale/da/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/da/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/da/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Neogeografen , 2013-2014 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: uMap\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: 2014-06-02 15:14+0000\n" 13 | "Last-Translator: Neogeografen \n" 14 | "Language-Team: Danish (http://www.transifex.com/projects/p/umap/language/" 15 | "da/)\n" 16 | "Language: da\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: forms.py:43 23 | #, python-format 24 | msgid "Secret edit link is %s" 25 | msgstr "Hemmeligt redigeringslink er %s" 26 | 27 | #: forms.py:47 models.py:113 28 | msgid "Everyone can edit" 29 | msgstr "Alle kan redigere" 30 | 31 | #: forms.py:48 32 | msgid "Only editable with secret edit link" 33 | msgstr "Er kun redigerbart med et hemmeligt link" 34 | 35 | #: models.py:20 36 | msgid "name" 37 | msgstr "navn" 38 | 39 | #: models.py:42 40 | msgid "No licence set" 41 | msgstr "Ingen licens angivet" 42 | 43 | #: models.py:51 44 | msgid "details" 45 | msgstr "detaljer" 46 | 47 | #: models.py:52 48 | msgid "Link to a page where the licence is detailed." 49 | msgstr "Link til siden hvor der er flere detaljer om licensen." 50 | 51 | #: models.py:66 52 | msgid "URL template using OSM tile format" 53 | msgstr "URL skabelon bruger OSMs tile format" 54 | 55 | #: models.py:74 56 | msgid "Order of the tilelayers in the edit box" 57 | msgstr "Rækkefølge af tile-lag i redigeringsboksen" 58 | 59 | #: models.py:114 60 | msgid "Only editors can edit" 61 | msgstr "Kun redaktører kan redigere" 62 | 63 | #: models.py:115 64 | msgid "Only owner can edit" 65 | msgstr "Kun ejeren kan redigere" 66 | 67 | #: models.py:118 68 | msgid "everyone (public)" 69 | msgstr "alle (fuldt offentlig)" 70 | 71 | #: models.py:119 72 | msgid "anyone with link" 73 | msgstr "alle med et link" 74 | 75 | #: models.py:120 76 | msgid "editors only" 77 | msgstr "kun redaktører " 78 | 79 | #: models.py:123 models.py:257 80 | msgid "description" 81 | msgstr "beskrivelse" 82 | 83 | #: models.py:124 84 | msgid "center" 85 | msgstr "center" 86 | 87 | #: models.py:125 88 | msgid "zoom" 89 | msgstr "zoom" 90 | 91 | #: models.py:126 92 | msgid "locate" 93 | msgstr "lokalisere" 94 | 95 | #: models.py:126 96 | msgid "Locate user on load?" 97 | msgstr "Lokaliserer brugeren ved indlæsning?" 98 | 99 | #: models.py:129 100 | msgid "Choose the map licence." 101 | msgstr "Vælg kortlicensen." 102 | 103 | #: models.py:130 104 | msgid "licence" 105 | msgstr "licens" 106 | 107 | #: models.py:135 108 | msgid "background" 109 | msgstr "baggrund" 110 | 111 | #: models.py:136 112 | msgid "owner" 113 | msgstr "ejer" 114 | 115 | #: models.py:137 116 | msgid "editors" 117 | msgstr "redaktører" 118 | 119 | #: models.py:138 120 | msgid "edit status" 121 | msgstr "ret status" 122 | 123 | #: models.py:139 124 | msgid "share status" 125 | msgstr "Delestatus" 126 | 127 | #: models.py:140 128 | msgid "settings" 129 | msgstr "indstillinger" 130 | 131 | #: models.py:178 132 | #, python-format 133 | msgid "Your anonymous map has been attached to your account %s" 134 | msgstr "Dit anonyme kort er blevet tilføjet til din konto %s" 135 | 136 | #: models.py:211 137 | msgid "Clone of" 138 | msgstr "Klonet kopi af" 139 | 140 | #: models.py:262 141 | msgid "display on load" 142 | msgstr "vis ved indlæsning" 143 | 144 | #: models.py:263 145 | msgid "Display this layer on load." 146 | msgstr "Vis dette lag ved indlæsning" 147 | 148 | #: templates/leaflet_storage/login_popup_end.html:2 149 | msgid "You are logged in. Continuing..." 150 | msgstr "Du er logget ind. Fortsætter..." 151 | 152 | #: templates/leaflet_storage/map_update_permissions.html:2 153 | msgid "Map permissions" 154 | msgstr "Kortindstillinger" 155 | 156 | #: templates/registration/login.html:2 157 | msgid "Please log in to proceed" 158 | msgstr "Login ind for at fortsætte" 159 | 160 | #: templates/registration/login.html:4 161 | msgid "Your username and password didn't match. Please try again." 162 | msgstr "Dit brugernavn og adgangskode passer ikke. Prøv igen." 163 | 164 | #: views.py:232 165 | #, python-format 166 | msgid "" 167 | "Your map has been created! If you want to edit this map from another " 168 | "computer, please use this link: %(anonymous_url)s" 169 | msgstr "" 170 | "Dit kort er blevet lavet! Hvis du ønsker at rette dette kort fra en anden " 171 | "computer, så brug dette link: %(anonymous_url)s" 172 | 173 | #: views.py:237 174 | msgid "Congratulations, your map has been created!" 175 | msgstr "Tillykke dit kort er nu blevet lavet!" 176 | 177 | #: views.py:264 178 | msgid "Map has been updated!" 179 | msgstr "Kortet er blevet opdateret!" 180 | 181 | #: views.py:291 182 | msgid "Map editors updated with success!" 183 | msgstr "Kortredaktører blev opdateret med succes!" 184 | 185 | #: views.py:306 186 | msgid "Only its owner can delete the map." 187 | msgstr "Kun ejer kan slettet kortet." 188 | 189 | #: views.py:335 190 | #, python-format 191 | msgid "" 192 | "Your map has been cloned! If you want to edit this map from another " 193 | "computer, please use this link: %(anonymous_url)s" 194 | msgstr "" 195 | "Dit kort er blevet klonet! Hvis du ønsker at rette dette kort fra en anden " 196 | "computer, så brug dette link: %(anonymous_url)s" 197 | 198 | #: views.py:340 199 | msgid "Congratulations, your map has been cloned!" 200 | msgstr "Tillykke dit kort er blevet klonet!" 201 | 202 | #: views.py:526 203 | msgid "Layer successfully deleted." 204 | msgstr "Lag blev slettet med succes." 205 | -------------------------------------------------------------------------------- /leaflet_storage/locale/de/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/de/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/de/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # hno2 , 2013-2014 7 | # Klumbumbus, 2013-2014 8 | # YOHAN BONIFACE , 2012 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: uMap\n" 12 | "Report-Msgid-Bugs-To: \n" 13 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 14 | "PO-Revision-Date: 2014-08-04 14:25+0000\n" 15 | "Last-Translator: Klumbumbus\n" 16 | "Language-Team: German (http://www.transifex.com/projects/p/umap/language/" 17 | "de/)\n" 18 | "Language: de\n" 19 | "MIME-Version: 1.0\n" 20 | "Content-Type: text/plain; charset=UTF-8\n" 21 | "Content-Transfer-Encoding: 8bit\n" 22 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 23 | 24 | #: forms.py:43 25 | #, python-format 26 | msgid "Secret edit link is %s" 27 | msgstr "Geheimer Bearbeitungslink ist %s" 28 | 29 | #: forms.py:47 models.py:113 30 | msgid "Everyone can edit" 31 | msgstr "Jeder kann bearbeiten" 32 | 33 | #: forms.py:48 34 | msgid "Only editable with secret edit link" 35 | msgstr "Nur mit geheimen Bearbeitungslink zu bearbeiten" 36 | 37 | #: models.py:20 38 | msgid "name" 39 | msgstr "Name" 40 | 41 | #: models.py:42 42 | msgid "No licence set" 43 | msgstr "Keine Lizenz ausgewählt" 44 | 45 | #: models.py:51 46 | msgid "details" 47 | msgstr "Details" 48 | 49 | #: models.py:52 50 | msgid "Link to a page where the licence is detailed." 51 | msgstr "Verlinke auf eine Seite mit der Lizenz." 52 | 53 | #: models.py:66 54 | msgid "URL template using OSM tile format" 55 | msgstr "Das URL-Template nutzt das OSM Tile Format" 56 | 57 | #: models.py:74 58 | msgid "Order of the tilelayers in the edit box" 59 | msgstr "Reihenfolge der Karten-Ebenen in der Bearbeiten-Box" 60 | 61 | #: models.py:114 62 | msgid "Only editors can edit" 63 | msgstr "Nur Bearbeiter können bearbeiten" 64 | 65 | #: models.py:115 66 | msgid "Only owner can edit" 67 | msgstr "Nur der Ersteller kann bearbeiten" 68 | 69 | #: models.py:118 70 | msgid "everyone (public)" 71 | msgstr "Jeder (Öffentlich)" 72 | 73 | #: models.py:119 74 | msgid "anyone with link" 75 | msgstr "Jeder mit Link" 76 | 77 | #: models.py:120 78 | msgid "editors only" 79 | msgstr "Nur Bearbeiter " 80 | 81 | #: models.py:123 models.py:257 82 | msgid "description" 83 | msgstr "Beschreibung" 84 | 85 | #: models.py:124 86 | msgid "center" 87 | msgstr "Mittelpunkt" 88 | 89 | #: models.py:125 90 | msgid "zoom" 91 | msgstr "Zoom" 92 | 93 | #: models.py:126 94 | msgid "locate" 95 | msgstr "lokalisiere" 96 | 97 | #: models.py:126 98 | msgid "Locate user on load?" 99 | msgstr "Standort des Benutzers beim Seitenaufruf bestimmen?" 100 | 101 | #: models.py:129 102 | msgid "Choose the map licence." 103 | msgstr "Kartenlizenz auswählen" 104 | 105 | #: models.py:130 106 | msgid "licence" 107 | msgstr "Lizenz" 108 | 109 | #: models.py:135 110 | msgid "background" 111 | msgstr "Hintergrund" 112 | 113 | #: models.py:136 114 | msgid "owner" 115 | msgstr "Ersteller" 116 | 117 | #: models.py:137 118 | msgid "editors" 119 | msgstr "Bearbeiter" 120 | 121 | #: models.py:138 122 | msgid "edit status" 123 | msgstr "Bearbeitungsstatus" 124 | 125 | #: models.py:139 126 | msgid "share status" 127 | msgstr "Teilen-Status" 128 | 129 | #: models.py:140 130 | msgid "settings" 131 | msgstr "Einstellungen" 132 | 133 | #: models.py:178 134 | #, python-format 135 | msgid "Your anonymous map has been attached to your account %s" 136 | msgstr "Deine anonyme Karte wurde deinem Account %s zugeordnet." 137 | 138 | #: models.py:211 139 | msgid "Clone of" 140 | msgstr "Duplicat von" 141 | 142 | #: models.py:262 143 | msgid "display on load" 144 | msgstr "Beim Seitenaufruf einblenden" 145 | 146 | #: models.py:263 147 | msgid "Display this layer on load." 148 | msgstr "Diese Ebene beim Seitenaufruf einblenden." 149 | 150 | #: templates/leaflet_storage/login_popup_end.html:2 151 | msgid "You are logged in. Continuing..." 152 | msgstr "Du bist eingeloggt. Weiterleitung..." 153 | 154 | #: templates/leaflet_storage/map_update_permissions.html:2 155 | msgid "Map permissions" 156 | msgstr "Kartenberechtigungen" 157 | 158 | #: templates/registration/login.html:2 159 | msgid "Please log in to proceed" 160 | msgstr "Bitte logge dich ein um fortzufahren." 161 | 162 | #: templates/registration/login.html:4 163 | msgid "Your username and password didn't match. Please try again." 164 | msgstr "" 165 | "Dein Benutzername und Password stimmen nicht überein. Bitte versuche es noch " 166 | "einmal." 167 | 168 | #: views.py:232 169 | #, python-format 170 | msgid "" 171 | "Your map has been created! If you want to edit this map from another " 172 | "computer, please use this link: %(anonymous_url)s" 173 | msgstr "" 174 | "Deine Karte wurde erstellt! Wenn du diese Karte von einem anderen Computer " 175 | "aus bearbeiten möchtest, benutze bitte diesen Link: %(anonymous_url)s" 176 | 177 | #: views.py:237 178 | msgid "Congratulations, your map has been created!" 179 | msgstr "Glückwunsch, deine Karte wurde erstellt!" 180 | 181 | #: views.py:264 182 | msgid "Map has been updated!" 183 | msgstr "Karte wurde aktualisiert!" 184 | 185 | #: views.py:291 186 | msgid "Map editors updated with success!" 187 | msgstr "Bearbeiter erfolgreich geändert" 188 | 189 | #: views.py:306 190 | msgid "Only its owner can delete the map." 191 | msgstr "Nur der Ersteller kann die Karte löschen." 192 | 193 | #: views.py:335 194 | #, python-format 195 | msgid "" 196 | "Your map has been cloned! If you want to edit this map from another " 197 | "computer, please use this link: %(anonymous_url)s" 198 | msgstr "" 199 | "Deine Karte wurde kopiert! Wenn du diese Karte von einem anderen Computer " 200 | "aus bearbeiten möchtest, benutze bitte diesen Link: %(anonymous_url)s" 201 | 202 | #: views.py:340 203 | msgid "Congratulations, your map has been cloned!" 204 | msgstr "Glückwunsch, deine Karte wurde kopiert!" 205 | 206 | #: views.py:526 207 | msgid "Layer successfully deleted." 208 | msgstr "Ebene erfolgreich gelöscht." 209 | -------------------------------------------------------------------------------- /leaflet_storage/locale/en/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/en/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/en/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: forms.py:43 21 | #, python-format 22 | msgid "Secret edit link is %s" 23 | msgstr "" 24 | 25 | #: forms.py:47 models.py:113 26 | msgid "Everyone can edit" 27 | msgstr "" 28 | 29 | #: forms.py:48 30 | msgid "Only editable with secret edit link" 31 | msgstr "" 32 | 33 | #: models.py:20 34 | msgid "name" 35 | msgstr "" 36 | 37 | #: models.py:42 38 | msgid "No licence set" 39 | msgstr "" 40 | 41 | #: models.py:51 42 | msgid "details" 43 | msgstr "" 44 | 45 | #: models.py:52 46 | msgid "Link to a page where the licence is detailed." 47 | msgstr "" 48 | 49 | #: models.py:66 50 | msgid "URL template using OSM tile format" 51 | msgstr "" 52 | 53 | #: models.py:74 54 | msgid "Order of the tilelayers in the edit box" 55 | msgstr "" 56 | 57 | #: models.py:114 58 | msgid "Only editors can edit" 59 | msgstr "" 60 | 61 | #: models.py:115 62 | msgid "Only owner can edit" 63 | msgstr "" 64 | 65 | #: models.py:118 66 | msgid "everyone (public)" 67 | msgstr "" 68 | 69 | #: models.py:119 70 | msgid "anyone with link" 71 | msgstr "" 72 | 73 | #: models.py:120 74 | msgid "editors only" 75 | msgstr "" 76 | 77 | #: models.py:123 models.py:257 78 | msgid "description" 79 | msgstr "" 80 | 81 | #: models.py:124 82 | msgid "center" 83 | msgstr "" 84 | 85 | #: models.py:125 86 | msgid "zoom" 87 | msgstr "" 88 | 89 | #: models.py:126 90 | msgid "locate" 91 | msgstr "" 92 | 93 | #: models.py:126 94 | msgid "Locate user on load?" 95 | msgstr "" 96 | 97 | #: models.py:129 98 | msgid "Choose the map licence." 99 | msgstr "" 100 | 101 | #: models.py:130 102 | msgid "licence" 103 | msgstr "" 104 | 105 | #: models.py:135 106 | msgid "background" 107 | msgstr "" 108 | 109 | #: models.py:136 110 | msgid "owner" 111 | msgstr "" 112 | 113 | #: models.py:137 114 | msgid "editors" 115 | msgstr "" 116 | 117 | #: models.py:138 118 | msgid "edit status" 119 | msgstr "" 120 | 121 | #: models.py:139 122 | msgid "share status" 123 | msgstr "" 124 | 125 | #: models.py:140 126 | msgid "settings" 127 | msgstr "" 128 | 129 | #: models.py:178 130 | #, python-format 131 | msgid "Your anonymous map has been attached to your account %s" 132 | msgstr "" 133 | 134 | #: models.py:211 135 | msgid "Clone of" 136 | msgstr "" 137 | 138 | #: models.py:262 139 | msgid "display on load" 140 | msgstr "" 141 | 142 | #: models.py:263 143 | msgid "Display this layer on load." 144 | msgstr "" 145 | 146 | #: templates/leaflet_storage/login_popup_end.html:2 147 | msgid "You are logged in. Continuing..." 148 | msgstr "" 149 | 150 | #: templates/leaflet_storage/map_update_permissions.html:2 151 | msgid "Map permissions" 152 | msgstr "" 153 | 154 | #: templates/registration/login.html:2 155 | msgid "Please log in to proceed" 156 | msgstr "" 157 | 158 | #: templates/registration/login.html:4 159 | msgid "Your username and password didn't match. Please try again." 160 | msgstr "" 161 | 162 | #: views.py:232 163 | #, python-format 164 | msgid "" 165 | "Your map has been created! If you want to edit this map from another " 166 | "computer, please use this link: %(anonymous_url)s" 167 | msgstr "" 168 | 169 | #: views.py:237 170 | msgid "Congratulations, your map has been created!" 171 | msgstr "" 172 | 173 | #: views.py:264 174 | msgid "Map has been updated!" 175 | msgstr "" 176 | 177 | #: views.py:291 178 | msgid "Map editors updated with success!" 179 | msgstr "" 180 | 181 | #: views.py:306 182 | msgid "Only its owner can delete the map." 183 | msgstr "" 184 | 185 | #: views.py:335 186 | #, python-format 187 | msgid "" 188 | "Your map has been cloned! If you want to edit this map from another " 189 | "computer, please use this link: %(anonymous_url)s" 190 | msgstr "" 191 | 192 | #: views.py:340 193 | msgid "Congratulations, your map has been cloned!" 194 | msgstr "" 195 | 196 | #: views.py:526 197 | msgid "Layer successfully deleted." 198 | msgstr "" 199 | -------------------------------------------------------------------------------- /leaflet_storage/locale/es/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/es/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/es/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Igor Támara , 2013 7 | # Marco Antonio , 2014 8 | # Marco Antonio , 2016 9 | # Rafael Ávila Coya , 2014 10 | msgid "" 11 | msgstr "" 12 | "Project-Id-Version: uMap\n" 13 | "Report-Msgid-Bugs-To: \n" 14 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 15 | "PO-Revision-Date: 2016-09-17 19:57+0000\n" 16 | "Last-Translator: Marco Antonio \n" 17 | "Language-Team: Spanish (http://www.transifex.com/yohanboniface/umap/language/es/)\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=UTF-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Language: es\n" 22 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 23 | 24 | #: forms.py:43 25 | #, python-format 26 | msgid "Secret edit link is %s" 27 | msgstr "El enlace secreto de edición es %s" 28 | 29 | #: forms.py:47 models.py:113 30 | msgid "Everyone can edit" 31 | msgstr "Todos pueden editar" 32 | 33 | #: forms.py:48 34 | msgid "Only editable with secret edit link" 35 | msgstr "Sólo puede editarse con el enlace secreto de edición" 36 | 37 | #: models.py:20 38 | msgid "name" 39 | msgstr "nombre" 40 | 41 | #: models.py:42 42 | msgid "No licence set" 43 | msgstr "Sin conjunto de licencias" 44 | 45 | #: models.py:51 46 | msgid "details" 47 | msgstr "detalles" 48 | 49 | #: models.py:52 50 | msgid "Link to a page where the licence is detailed." 51 | msgstr "Enlace a una página donde se detalla la licencia." 52 | 53 | #: models.py:66 54 | msgid "URL template using OSM tile format" 55 | msgstr "Plantilla URL usando el formato de teselas OSM" 56 | 57 | #: models.py:74 58 | msgid "Order of the tilelayers in the edit box" 59 | msgstr "Orden de las capas de teselas en la caja de edición" 60 | 61 | #: models.py:114 62 | msgid "Only editors can edit" 63 | msgstr "Solo los editores pueden editar" 64 | 65 | #: models.py:115 66 | msgid "Only owner can edit" 67 | msgstr "Solo el propietario puede editar" 68 | 69 | #: models.py:118 70 | msgid "everyone (public)" 71 | msgstr "todo el mundo (público)" 72 | 73 | #: models.py:119 74 | msgid "anyone with link" 75 | msgstr "cualquiera que tenga el enlace" 76 | 77 | #: models.py:120 78 | msgid "editors only" 79 | msgstr "sólo editores" 80 | 81 | #: models.py:123 models.py:257 82 | msgid "description" 83 | msgstr "descripción" 84 | 85 | #: models.py:124 86 | msgid "center" 87 | msgstr "centrar" 88 | 89 | #: models.py:125 90 | msgid "zoom" 91 | msgstr "acercar/alejar" 92 | 93 | #: models.py:126 94 | msgid "locate" 95 | msgstr "localizar" 96 | 97 | #: models.py:126 98 | msgid "Locate user on load?" 99 | msgstr "¿Al cargar localizar el usuario?" 100 | 101 | #: models.py:129 102 | msgid "Choose the map licence." 103 | msgstr "Elija la licencia del mapa." 104 | 105 | #: models.py:130 106 | msgid "licence" 107 | msgstr "licencia" 108 | 109 | #: models.py:135 110 | msgid "background" 111 | msgstr "fondo" 112 | 113 | #: models.py:136 114 | msgid "owner" 115 | msgstr "propietario" 116 | 117 | #: models.py:137 118 | msgid "editors" 119 | msgstr "editores" 120 | 121 | #: models.py:138 122 | msgid "edit status" 123 | msgstr "estado de la edición" 124 | 125 | #: models.py:139 126 | msgid "share status" 127 | msgstr "compartir estado" 128 | 129 | #: models.py:140 130 | msgid "settings" 131 | msgstr "ajustes" 132 | 133 | #: models.py:178 134 | #, python-format 135 | msgid "Your anonymous map has been attached to your account %s" 136 | msgstr "Tu mapa anónimo se ha adjuntado a tu cuenta %s" 137 | 138 | #: models.py:211 139 | msgid "Clone of" 140 | msgstr "Clon de" 141 | 142 | #: models.py:262 143 | msgid "display on load" 144 | msgstr "mostrar al cargar" 145 | 146 | #: models.py:263 147 | msgid "Display this layer on load." 148 | msgstr "Mostrar esta capa al cargar." 149 | 150 | #: templates/leaflet_storage/login_popup_end.html:2 151 | msgid "You are logged in. Continuing..." 152 | msgstr "Has iniciado sesión. Continuando..." 153 | 154 | #: templates/leaflet_storage/map_update_permissions.html:2 155 | msgid "Map permissions" 156 | msgstr "Permisos del mapa" 157 | 158 | #: templates/registration/login.html:2 159 | msgid "Please log in to proceed" 160 | msgstr "Por favor, inicia sesión para poder continuar" 161 | 162 | #: templates/registration/login.html:4 163 | msgid "Your username and password didn't match. Please try again." 164 | msgstr "Tu nombre de usuario y contraseña no coinciden. Inténtalo de nuevo." 165 | 166 | #: views.py:232 167 | #, python-format 168 | msgid "" 169 | "Your map has been created! If you want to edit this map from another " 170 | "computer, please use this link: %(anonymous_url)s" 171 | msgstr "¡Tu mapa ha sido creado! Si deseas editarlo desde otro ordenador, por favor usa este enlace: %(anonymous_url)s" 172 | 173 | #: views.py:237 174 | msgid "Congratulations, your map has been created!" 175 | msgstr "¡Enhorabuena! ¡Tu mapa ha sido creado!" 176 | 177 | #: views.py:264 178 | msgid "Map has been updated!" 179 | msgstr "¡El mapa ha sido actualizado!" 180 | 181 | #: views.py:291 182 | msgid "Map editors updated with success!" 183 | msgstr "¡Los editores del mapas han sido actualizados con éxito!" 184 | 185 | #: views.py:306 186 | msgid "Only its owner can delete the map." 187 | msgstr "Sólo el propietario puede borrar el mapa." 188 | 189 | #: views.py:335 190 | #, python-format 191 | msgid "" 192 | "Your map has been cloned! If you want to edit this map from another " 193 | "computer, please use this link: %(anonymous_url)s" 194 | msgstr "¡Tu mapa ha sido clonado! Si quieres editar este mapa desde otro ordenador, usa este enlace: %(anonymous_url)s" 195 | 196 | #: views.py:340 197 | msgid "Congratulations, your map has been cloned!" 198 | msgstr "¡Enhorabuena! ¡Tu mapa ha sido clonado!" 199 | 200 | #: views.py:526 201 | msgid "Layer successfully deleted." 202 | msgstr "Se eliminó la capa con éxito." 203 | -------------------------------------------------------------------------------- /leaflet_storage/locale/fi/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/fi/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/fi/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # acastren, 2013-2014 7 | # jaakkoh , 2013 8 | # jaakkoh , 2013 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: uMap\n" 12 | "Report-Msgid-Bugs-To: \n" 13 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 14 | "PO-Revision-Date: 2014-03-04 21:48+0000\n" 15 | "Last-Translator: acastren\n" 16 | "Language-Team: Finnish (http://www.transifex.com/projects/p/umap/language/" 17 | "fi/)\n" 18 | "Language: fi\n" 19 | "MIME-Version: 1.0\n" 20 | "Content-Type: text/plain; charset=UTF-8\n" 21 | "Content-Transfer-Encoding: 8bit\n" 22 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 23 | 24 | #: forms.py:43 25 | #, python-format 26 | msgid "Secret edit link is %s" 27 | msgstr "Salainen muokkauslinkki on %s" 28 | 29 | #: forms.py:47 models.py:113 30 | msgid "Everyone can edit" 31 | msgstr "Kuka tahansa saa muokata" 32 | 33 | #: forms.py:48 34 | msgid "Only editable with secret edit link" 35 | msgstr "Muokattavissa vain salaisella muokkauslinkillä" 36 | 37 | #: models.py:20 38 | msgid "name" 39 | msgstr "nimi" 40 | 41 | #: models.py:42 42 | msgid "No licence set" 43 | msgstr "Määrittämätön lisenssi" 44 | 45 | #: models.py:51 46 | msgid "details" 47 | msgstr "tarkemmat tiedot" 48 | 49 | #: models.py:52 50 | msgid "Link to a page where the licence is detailed." 51 | msgstr "Linkki sivulle, jossa lisenssi on määritetty yksityiskohtaisesti." 52 | 53 | #: models.py:66 54 | msgid "URL template using OSM tile format" 55 | msgstr "OSM-karttatiiliformaattia mukaileva URL-sapluuna" 56 | 57 | #: models.py:74 58 | msgid "Order of the tilelayers in the edit box" 59 | msgstr "Taustakarttojen järjestys muokkauslaatikossa" 60 | 61 | #: models.py:114 62 | msgid "Only editors can edit" 63 | msgstr "Vain julkaisijat saavat muokata" 64 | 65 | #: models.py:115 66 | msgid "Only owner can edit" 67 | msgstr "Vain omistaja saa muokata" 68 | 69 | #: models.py:118 70 | msgid "everyone (public)" 71 | msgstr "kaikille (julkinen)" 72 | 73 | #: models.py:119 74 | msgid "anyone with link" 75 | msgstr "linkinhaltijoille" 76 | 77 | #: models.py:120 78 | msgid "editors only" 79 | msgstr "vain muokkaajille" 80 | 81 | #: models.py:123 models.py:257 82 | msgid "description" 83 | msgstr "kuvaus" 84 | 85 | #: models.py:124 86 | msgid "center" 87 | msgstr "keskitä" 88 | 89 | #: models.py:125 90 | msgid "zoom" 91 | msgstr "zoomaa" 92 | 93 | #: models.py:126 94 | msgid "locate" 95 | msgstr "paikanna" 96 | 97 | #: models.py:126 98 | msgid "Locate user on load?" 99 | msgstr "Paikanna käyttäjä sivua ladattaessa?" 100 | 101 | #: models.py:129 102 | msgid "Choose the map licence." 103 | msgstr "Valitse kartan lisenssi" 104 | 105 | #: models.py:130 106 | msgid "licence" 107 | msgstr "lisenssi" 108 | 109 | #: models.py:135 110 | msgid "background" 111 | msgstr "tausta" 112 | 113 | #: models.py:136 114 | msgid "owner" 115 | msgstr "omistaja" 116 | 117 | #: models.py:137 118 | msgid "editors" 119 | msgstr "julkaisija" 120 | 121 | #: models.py:138 122 | msgid "edit status" 123 | msgstr "muokkaa tilaa" 124 | 125 | #: models.py:139 126 | msgid "share status" 127 | msgstr "jaa status" 128 | 129 | #: models.py:140 130 | msgid "settings" 131 | msgstr "asetukset" 132 | 133 | #: models.py:178 134 | #, python-format 135 | msgid "Your anonymous map has been attached to your account %s" 136 | msgstr "Anonyymi karttasi on liitetty tiliisi %s" 137 | 138 | #: models.py:211 139 | msgid "Clone of" 140 | msgstr "Kloonattu kartasta" 141 | 142 | #: models.py:262 143 | msgid "display on load" 144 | msgstr "näytä ladattaessa" 145 | 146 | #: models.py:263 147 | msgid "Display this layer on load." 148 | msgstr "Näytä tämä kerros ladattaessa." 149 | 150 | #: templates/leaflet_storage/login_popup_end.html:2 151 | msgid "You are logged in. Continuing..." 152 | msgstr "Sisäänkirjautumisesi onnistui. Jatketahan..." 153 | 154 | #: templates/leaflet_storage/map_update_permissions.html:2 155 | msgid "Map permissions" 156 | msgstr "Kartan oikeudet" 157 | 158 | #: templates/registration/login.html:2 159 | msgid "Please log in to proceed" 160 | msgstr "Rekisteröidythän jatkaaksesi, jooko?" 161 | 162 | #: templates/registration/login.html:4 163 | msgid "Your username and password didn't match. Please try again." 164 | msgstr "" 165 | "Käyttäjätunnuksesi ja salasanasi eivät täsmänneet. Yritä uudestaan ole hyvä." 166 | 167 | #: views.py:232 168 | #, python-format 169 | msgid "" 170 | "Your map has been created! If you want to edit this map from another " 171 | "computer, please use this link: %(anonymous_url)s" 172 | msgstr "" 173 | "Karttasi on luotu! Jos haluat muokata tätä karttaa joltain muulta " 174 | "tietokoneelta, käytä tätä linkkiä: %(anonymous_url)s" 175 | 176 | #: views.py:237 177 | msgid "Congratulations, your map has been created!" 178 | msgstr "Onneksi olkoon! Uusi karttasi on luotu!" 179 | 180 | #: views.py:264 181 | msgid "Map has been updated!" 182 | msgstr "Kartta on päivitetty!" 183 | 184 | #: views.py:291 185 | msgid "Map editors updated with success!" 186 | msgstr "Kartan toimittajat päivitetty onnistuneesti!" 187 | 188 | #: views.py:306 189 | msgid "Only its owner can delete the map." 190 | msgstr "Vain kartan omistaja voi poistaa kartan." 191 | 192 | #: views.py:335 193 | #, python-format 194 | msgid "" 195 | "Your map has been cloned! If you want to edit this map from another " 196 | "computer, please use this link: %(anonymous_url)s" 197 | msgstr "" 198 | "Karttasi on kloonattu! Jos haluat muokata tätä karttaa joltain muulta " 199 | "tietokoneelta, käytä tätä linkkiä: %(anonymous_url)s" 200 | 201 | #: views.py:340 202 | msgid "Congratulations, your map has been cloned!" 203 | msgstr "Onneksi olkoon! Karttasi on kloonattu!" 204 | 205 | #: views.py:526 206 | msgid "Layer successfully deleted." 207 | msgstr "Kerros onnistuneesti poistettu. Pysyvästi." 208 | -------------------------------------------------------------------------------- /leaflet_storage/locale/fr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/fr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/fr/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Buggi , 2013 7 | # Buggi , 2013 8 | # severin.menard , 2014 9 | # yohanboniface , 2013-2014 10 | # YOHAN BONIFACE , 2012 11 | msgid "" 12 | msgstr "" 13 | "Project-Id-Version: uMap\n" 14 | "Report-Msgid-Bugs-To: \n" 15 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 16 | "PO-Revision-Date: 2014-07-11 23:22+0000\n" 17 | "Last-Translator: severin.menard \n" 18 | "Language-Team: French (http://www.transifex.com/projects/p/umap/language/" 19 | "fr/)\n" 20 | "Language: fr\n" 21 | "MIME-Version: 1.0\n" 22 | "Content-Type: text/plain; charset=UTF-8\n" 23 | "Content-Transfer-Encoding: 8bit\n" 24 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 25 | 26 | #: forms.py:43 27 | #, python-format 28 | msgid "Secret edit link is %s" 29 | msgstr "Lien d'édition secret: %s" 30 | 31 | #: forms.py:47 models.py:113 32 | msgid "Everyone can edit" 33 | msgstr "Tout le monde peut éditer" 34 | 35 | #: forms.py:48 36 | msgid "Only editable with secret edit link" 37 | msgstr "Editable seulement avec le lien d'édition secret" 38 | 39 | #: models.py:20 40 | msgid "name" 41 | msgstr "nom" 42 | 43 | #: models.py:42 44 | msgid "No licence set" 45 | msgstr "Aucune licence" 46 | 47 | #: models.py:51 48 | msgid "details" 49 | msgstr "détails" 50 | 51 | #: models.py:52 52 | msgid "Link to a page where the licence is detailed." 53 | msgstr "Lien vers une page détaillant la licence." 54 | 55 | #: models.py:66 56 | msgid "URL template using OSM tile format" 57 | msgstr "Modèle d'URL au format OSM" 58 | 59 | #: models.py:74 60 | msgid "Order of the tilelayers in the edit box" 61 | msgstr "Ordre des calques de tuile dans la zone d'édition" 62 | 63 | #: models.py:114 64 | msgid "Only editors can edit" 65 | msgstr "Seuls les éditeurs peuvent éditer" 66 | 67 | #: models.py:115 68 | msgid "Only owner can edit" 69 | msgstr "Seul le créateur peut modifier" 70 | 71 | #: models.py:118 72 | msgid "everyone (public)" 73 | msgstr "tout le monde (public)" 74 | 75 | #: models.py:119 76 | msgid "anyone with link" 77 | msgstr "quiconque a le lien" 78 | 79 | #: models.py:120 80 | msgid "editors only" 81 | msgstr "seulement les éditeurs" 82 | 83 | #: models.py:123 models.py:257 84 | msgid "description" 85 | msgstr "description" 86 | 87 | #: models.py:124 88 | msgid "center" 89 | msgstr "centre" 90 | 91 | #: models.py:125 92 | msgid "zoom" 93 | msgstr "zoom" 94 | 95 | #: models.py:126 96 | msgid "locate" 97 | msgstr "géolocaliser" 98 | 99 | #: models.py:126 100 | msgid "Locate user on load?" 101 | msgstr "Géolocaliser l'utilisateur au chargement?" 102 | 103 | #: models.py:129 104 | msgid "Choose the map licence." 105 | msgstr "Chosir une licence pour la carte" 106 | 107 | #: models.py:130 108 | msgid "licence" 109 | msgstr "licence" 110 | 111 | #: models.py:135 112 | msgid "background" 113 | msgstr "fond de carte" 114 | 115 | #: models.py:136 116 | msgid "owner" 117 | msgstr "créateur" 118 | 119 | #: models.py:137 120 | msgid "editors" 121 | msgstr "éditeurs" 122 | 123 | #: models.py:138 124 | msgid "edit status" 125 | msgstr "statut d'édition" 126 | 127 | #: models.py:139 128 | msgid "share status" 129 | msgstr "qui a accès" 130 | 131 | #: models.py:140 132 | msgid "settings" 133 | msgstr "réglages" 134 | 135 | #: models.py:178 136 | #, python-format 137 | msgid "Your anonymous map has been attached to your account %s" 138 | msgstr "La carte a été associée à votre compte %s" 139 | 140 | #: models.py:211 141 | msgid "Clone of" 142 | msgstr "Clone de" 143 | 144 | #: models.py:262 145 | msgid "display on load" 146 | msgstr "afficher au chargement." 147 | 148 | #: models.py:263 149 | msgid "Display this layer on load." 150 | msgstr "Afficher ce calque au chargement." 151 | 152 | #: templates/leaflet_storage/login_popup_end.html:2 153 | msgid "You are logged in. Continuing..." 154 | msgstr "Vous êtes maintenant identifiés. Merci de patienter..." 155 | 156 | #: templates/leaflet_storage/map_update_permissions.html:2 157 | msgid "Map permissions" 158 | msgstr "Permissions de la carte" 159 | 160 | #: templates/registration/login.html:2 161 | msgid "Please log in to proceed" 162 | msgstr "Merci de vous identifier pour continuer" 163 | 164 | #: templates/registration/login.html:4 165 | msgid "Your username and password didn't match. Please try again." 166 | msgstr "Nom d'utilisateur ou mot de passe incorrect. Merci de corriger." 167 | 168 | #: views.py:232 169 | #, python-format 170 | msgid "" 171 | "Your map has been created! If you want to edit this map from another " 172 | "computer, please use this link: %(anonymous_url)s" 173 | msgstr "" 174 | "Votre carte a été créée ! Si vous souhaitez l'éditer depuis un autre " 175 | "ordinateur, veuillez utiliser ce lien: %(anonymous_url)s" 176 | 177 | #: views.py:237 178 | msgid "Congratulations, your map has been created!" 179 | msgstr "Félicitations, votre carte a bien été créée !" 180 | 181 | #: views.py:264 182 | msgid "Map has been updated!" 183 | msgstr "La carte a été mise à jour !" 184 | 185 | #: views.py:291 186 | msgid "Map editors updated with success!" 187 | msgstr "Éditeurs de la carte mis à jour !" 188 | 189 | #: views.py:306 190 | msgid "Only its owner can delete the map." 191 | msgstr "Seul le créateur de la carte peut la supprimer." 192 | 193 | #: views.py:335 194 | #, python-format 195 | msgid "" 196 | "Your map has been cloned! If you want to edit this map from another " 197 | "computer, please use this link: %(anonymous_url)s" 198 | msgstr "" 199 | "Votre carte a été dupliquée ! Si vous souhaitez l'éditer depuis un autre " 200 | "ordinateur, veuillez utiliser ce lien: %(anonymous_url)s" 201 | 202 | #: views.py:340 203 | msgid "Congratulations, your map has been cloned!" 204 | msgstr "Votre carte a été dupliquée !" 205 | 206 | #: views.py:526 207 | msgid "Layer successfully deleted." 208 | msgstr "Calque supprimé." 209 | -------------------------------------------------------------------------------- /leaflet_storage/locale/it/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/it/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/it/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # lucacorsato , 2014 7 | # Maurizio Napolitano , 2013 8 | # claudiamocci , 2013 9 | # Simone Cortesi , 2014 10 | # YOHAN BONIFACE , 2012 11 | msgid "" 12 | msgstr "" 13 | "Project-Id-Version: uMap\n" 14 | "Report-Msgid-Bugs-To: \n" 15 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 16 | "PO-Revision-Date: 2015-11-02 09:10+0000\n" 17 | "Last-Translator: Maurizio Napolitano \n" 18 | "Language-Team: Italian (http://www.transifex.com/yohanboniface/umap/language/" 19 | "it/)\n" 20 | "Language: it\n" 21 | "MIME-Version: 1.0\n" 22 | "Content-Type: text/plain; charset=UTF-8\n" 23 | "Content-Transfer-Encoding: 8bit\n" 24 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 25 | 26 | #: forms.py:43 27 | #, python-format 28 | msgid "Secret edit link is %s" 29 | msgstr "Il link segreto per la modifica %s" 30 | 31 | #: forms.py:47 models.py:113 32 | msgid "Everyone can edit" 33 | msgstr "Chiunque può modificare" 34 | 35 | #: forms.py:48 36 | msgid "Only editable with secret edit link" 37 | msgstr "Modificabile solo con il link segreto di modifica" 38 | 39 | #: models.py:20 40 | msgid "name" 41 | msgstr "nome" 42 | 43 | #: models.py:42 44 | msgid "No licence set" 45 | msgstr "Nessuna licenza definita" 46 | 47 | #: models.py:51 48 | msgid "details" 49 | msgstr "dettagli" 50 | 51 | #: models.py:52 52 | msgid "Link to a page where the licence is detailed." 53 | msgstr "Link alla pagina con i dettagli della licenza" 54 | 55 | #: models.py:66 56 | msgid "URL template using OSM tile format" 57 | msgstr "Modello dell'URL usando il formato delle tile OSM" 58 | 59 | #: models.py:74 60 | msgid "Order of the tilelayers in the edit box" 61 | msgstr "Ordine degli sfondi (tilelayers) nel box di modifica" 62 | 63 | #: models.py:114 64 | msgid "Only editors can edit" 65 | msgstr "Solo gli editor possono fare modifiche" 66 | 67 | #: models.py:115 68 | msgid "Only owner can edit" 69 | msgstr "Solo il proprietario può effettuare modifiche" 70 | 71 | #: models.py:118 72 | msgid "everyone (public)" 73 | msgstr "chiunque (pubblico)" 74 | 75 | #: models.py:119 76 | msgid "anyone with link" 77 | msgstr "chiunque abbia il ilnk" 78 | 79 | #: models.py:120 80 | msgid "editors only" 81 | msgstr "solo autori" 82 | 83 | #: models.py:123 models.py:257 84 | msgid "description" 85 | msgstr "descrizione" 86 | 87 | #: models.py:124 88 | msgid "center" 89 | msgstr "centra" 90 | 91 | #: models.py:125 92 | msgid "zoom" 93 | msgstr "zoom" 94 | 95 | #: models.py:126 96 | msgid "locate" 97 | msgstr "localizza" 98 | 99 | #: models.py:126 100 | msgid "Locate user on load?" 101 | msgstr "Geolocalizzare l'utente al caricamento?" 102 | 103 | #: models.py:129 104 | msgid "Choose the map licence." 105 | msgstr "Scegliere una licenza per la mappa." 106 | 107 | #: models.py:130 108 | msgid "licence" 109 | msgstr "licenza" 110 | 111 | #: models.py:135 112 | msgid "background" 113 | msgstr "sfondo" 114 | 115 | #: models.py:136 116 | msgid "owner" 117 | msgstr "proprietario" 118 | 119 | #: models.py:137 120 | msgid "editors" 121 | msgstr "editor" 122 | 123 | #: models.py:138 124 | msgid "edit status" 125 | msgstr "stato della modifica" 126 | 127 | #: models.py:139 128 | msgid "share status" 129 | msgstr "stato condivisione" 130 | 131 | #: models.py:140 132 | msgid "settings" 133 | msgstr "impostazioni" 134 | 135 | #: models.py:178 136 | #, python-format 137 | msgid "Your anonymous map has been attached to your account %s" 138 | msgstr "La mappa anonima è stata associata all'account %s" 139 | 140 | #: models.py:211 141 | msgid "Clone of" 142 | msgstr "Duplicata da " 143 | 144 | #: models.py:262 145 | msgid "display on load" 146 | msgstr "mostra al caricamento" 147 | 148 | #: models.py:263 149 | msgid "Display this layer on load." 150 | msgstr "Visualizza questo layer al caricamento." 151 | 152 | #: templates/leaflet_storage/login_popup_end.html:2 153 | msgid "You are logged in. Continuing..." 154 | msgstr "Utente loggato. Continuare..." 155 | 156 | #: templates/leaflet_storage/map_update_permissions.html:2 157 | msgid "Map permissions" 158 | msgstr "Permessi della mappa" 159 | 160 | #: templates/registration/login.html:2 161 | msgid "Please log in to proceed" 162 | msgstr "Effettuare il login per continuare" 163 | 164 | #: templates/registration/login.html:4 165 | msgid "Your username and password didn't match. Please try again." 166 | msgstr "Username e password non corrispondono. Riprovare." 167 | 168 | #: views.py:232 169 | #, python-format 170 | msgid "" 171 | "Your map has been created! If you want to edit this map from another " 172 | "computer, please use this link: %(anonymous_url)s" 173 | msgstr "" 174 | "La mappa è stata creata! Per modificarla da un altro computer, si deve " 175 | "utilizzare questo link: %(anonymous_url)s" 176 | 177 | #: views.py:237 178 | msgid "Congratulations, your map has been created!" 179 | msgstr "Congratulazioni, la mappa è stata creata!" 180 | 181 | #: views.py:264 182 | msgid "Map has been updated!" 183 | msgstr "La mappa è stata aggiornata!" 184 | 185 | #: views.py:291 186 | msgid "Map editors updated with success!" 187 | msgstr "Aggiornato l'elenco degli editor abilitati alla modifica della mappa!" 188 | 189 | #: views.py:306 190 | msgid "Only its owner can delete the map." 191 | msgstr "Solo il proprietario può eliminare la mappa." 192 | 193 | #: views.py:335 194 | #, python-format 195 | msgid "" 196 | "Your map has been cloned! If you want to edit this map from another " 197 | "computer, please use this link: %(anonymous_url)s" 198 | msgstr "" 199 | "La mappa è stata clonata! Per modificarla usando un altro computer, si deve " 200 | "utilizzare questo link: %(anonymous_url)s" 201 | 202 | #: views.py:340 203 | msgid "Congratulations, your map has been cloned!" 204 | msgstr "Ottimo, la mappa è stata clonata!" 205 | 206 | #: views.py:526 207 | msgid "Layer successfully deleted." 208 | msgstr "Layer eliminato correttamente" 209 | -------------------------------------------------------------------------------- /leaflet_storage/locale/ja/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/ja/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/ja/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # nyampire , 2013-2014 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: uMap\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: 2014-02-10 13:32+0000\n" 13 | "Last-Translator: yohanboniface \n" 14 | "Language-Team: Japanese (http://www.transifex.com/projects/p/umap/language/" 15 | "ja/)\n" 16 | "Language: ja\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | #: forms.py:43 23 | #, python-format 24 | msgid "Secret edit link is %s" 25 | msgstr "非公開の編集用リンク %s" 26 | 27 | #: forms.py:47 models.py:113 28 | msgid "Everyone can edit" 29 | msgstr "だれでも編集可能" 30 | 31 | #: forms.py:48 32 | msgid "Only editable with secret edit link" 33 | msgstr "非公開の編集リンクからのみ編集可能" 34 | 35 | #: models.py:20 36 | msgid "name" 37 | msgstr "名称" 38 | 39 | #: models.py:42 40 | msgid "No licence set" 41 | msgstr "ライセンス未設定" 42 | 43 | #: models.py:51 44 | msgid "details" 45 | msgstr "詳細" 46 | 47 | #: models.py:52 48 | msgid "Link to a page where the licence is detailed." 49 | msgstr "ライセンス詳細ページへのリンク" 50 | 51 | #: models.py:66 52 | msgid "URL template using OSM tile format" 53 | msgstr "OSMタイルフォーマットを利用したURLテンプレート" 54 | 55 | #: models.py:74 56 | msgid "Order of the tilelayers in the edit box" 57 | msgstr "編集ボックス内のタイルレイヤ並び順" 58 | 59 | #: models.py:114 60 | msgid "Only editors can edit" 61 | msgstr "指定ユーザのみ編集可能" 62 | 63 | #: models.py:115 64 | msgid "Only owner can edit" 65 | msgstr "所有者のみ編集可能" 66 | 67 | #: models.py:118 68 | msgid "everyone (public)" 69 | msgstr "制限なし (公開)" 70 | 71 | #: models.py:119 72 | msgid "anyone with link" 73 | msgstr "リンクを知っている人全員" 74 | 75 | #: models.py:120 76 | msgid "editors only" 77 | msgstr "編集者のみ" 78 | 79 | #: models.py:123 models.py:257 80 | msgid "description" 81 | msgstr "概要" 82 | 83 | #: models.py:124 84 | msgid "center" 85 | msgstr "中心点" 86 | 87 | #: models.py:125 88 | msgid "zoom" 89 | msgstr "ズーム" 90 | 91 | #: models.py:126 92 | msgid "locate" 93 | msgstr "現在地" 94 | 95 | #: models.py:126 96 | msgid "Locate user on load?" 97 | msgstr "読み込み時に現在地を表示?" 98 | 99 | #: models.py:129 100 | msgid "Choose the map licence." 101 | msgstr "マップのライセンスを選択" 102 | 103 | #: models.py:130 104 | msgid "licence" 105 | msgstr "ライセンス" 106 | 107 | #: models.py:135 108 | msgid "background" 109 | msgstr "背景地図" 110 | 111 | #: models.py:136 112 | msgid "owner" 113 | msgstr "所有者" 114 | 115 | #: models.py:137 116 | msgid "editors" 117 | msgstr "編集者" 118 | 119 | #: models.py:138 120 | msgid "edit status" 121 | msgstr "編集ステータス" 122 | 123 | #: models.py:139 124 | msgid "share status" 125 | msgstr "共有状況" 126 | 127 | #: models.py:140 128 | msgid "settings" 129 | msgstr "設定" 130 | 131 | #: models.py:178 132 | #, python-format 133 | msgid "Your anonymous map has been attached to your account %s" 134 | msgstr "所有者不明のマップがアカウント %s と関連付けられました" 135 | 136 | #: models.py:211 137 | msgid "Clone of" 138 | msgstr "複製元" 139 | 140 | #: models.py:262 141 | msgid "display on load" 142 | msgstr "読み込み時に表示" 143 | 144 | #: models.py:263 145 | msgid "Display this layer on load." 146 | msgstr "読み込み時にこのレイヤを表示" 147 | 148 | #: templates/leaflet_storage/login_popup_end.html:2 149 | msgid "You are logged in. Continuing..." 150 | msgstr "ログインしました" 151 | 152 | #: templates/leaflet_storage/map_update_permissions.html:2 153 | msgid "Map permissions" 154 | msgstr "マップ編集許可" 155 | 156 | #: templates/registration/login.html:2 157 | msgid "Please log in to proceed" 158 | msgstr "ログインが必要です" 159 | 160 | #: templates/registration/login.html:4 161 | msgid "Your username and password didn't match. Please try again." 162 | msgstr "ユーザ名とパスワードが不一致です。もう一度入力してください。" 163 | 164 | #: views.py:232 165 | #, python-format 166 | msgid "" 167 | "Your map has been created! If you want to edit this map from another " 168 | "computer, please use this link: %(anonymous_url)s" 169 | msgstr "" 170 | "マップの作成が完了しました! このマップを他の端末から編集する場合、いかのリン" 171 | "クを使用してください: %(anonymous_url)s" 172 | 173 | #: views.py:237 174 | msgid "Congratulations, your map has been created!" 175 | msgstr "マップ作成完了です!" 176 | 177 | #: views.py:264 178 | msgid "Map has been updated!" 179 | msgstr "マップが更新されました!" 180 | 181 | #: views.py:291 182 | msgid "Map editors updated with success!" 183 | msgstr "マップ編集者の更新が完了しました!" 184 | 185 | #: views.py:306 186 | msgid "Only its owner can delete the map." 187 | msgstr "マップを削除できるのは所有者だけです" 188 | 189 | #: views.py:335 190 | #, python-format 191 | msgid "" 192 | "Your map has been cloned! If you want to edit this map from another " 193 | "computer, please use this link: %(anonymous_url)s" 194 | msgstr "" 195 | "マップの複製が完了しました! このマップを他の端末から編集する場合、以下のリン" 196 | "クを使用してください: %(anonymous_url)s" 197 | 198 | #: views.py:340 199 | msgid "Congratulations, your map has been cloned!" 200 | msgstr "マップの複製が完了しました!" 201 | 202 | #: views.py:526 203 | msgid "Layer successfully deleted." 204 | msgstr "レイヤ削除完了" 205 | -------------------------------------------------------------------------------- /leaflet_storage/locale/lt/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/lt/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/lt/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # ramunasd , 2014 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: uMap\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: 2014-02-10 13:32+0000\n" 13 | "Last-Translator: yohanboniface \n" 14 | "Language-Team: Lithuanian (http://www.transifex.com/projects/p/umap/language/" 15 | "lt/)\n" 16 | "Language: lt\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" 21 | "%100<10 || n%100>=20) ? 1 : 2);\n" 22 | 23 | #: forms.py:43 24 | #, python-format 25 | msgid "Secret edit link is %s" 26 | msgstr "Slapta redagavimo nuoroda %s" 27 | 28 | #: forms.py:47 models.py:113 29 | msgid "Everyone can edit" 30 | msgstr "Visi gali redaguoti" 31 | 32 | #: forms.py:48 33 | msgid "Only editable with secret edit link" 34 | msgstr "Redaguojamas tik su slapta nuoroda" 35 | 36 | #: models.py:20 37 | msgid "name" 38 | msgstr "vardas" 39 | 40 | #: models.py:42 41 | msgid "No licence set" 42 | msgstr "Nenustatyta licenzija" 43 | 44 | #: models.py:51 45 | msgid "details" 46 | msgstr "išsamiau" 47 | 48 | #: models.py:52 49 | msgid "Link to a page where the licence is detailed." 50 | msgstr "Licenzijos aprašymo nuoroda." 51 | 52 | #: models.py:66 53 | msgid "URL template using OSM tile format" 54 | msgstr "URL šablonas OSM kaladėlių formatui" 55 | 56 | #: models.py:74 57 | msgid "Order of the tilelayers in the edit box" 58 | msgstr "Žemėlapio sluoksnių tvarka redagavimo lange" 59 | 60 | #: models.py:114 61 | msgid "Only editors can edit" 62 | msgstr "Tik redaktoriai gali keisti" 63 | 64 | #: models.py:115 65 | msgid "Only owner can edit" 66 | msgstr "Tik savininkas gali keisti" 67 | 68 | #: models.py:118 69 | msgid "everyone (public)" 70 | msgstr "visi (viešai)" 71 | 72 | #: models.py:119 73 | msgid "anyone with link" 74 | msgstr "visi su nuoroda" 75 | 76 | #: models.py:120 77 | msgid "editors only" 78 | msgstr "tik keitėjai" 79 | 80 | #: models.py:123 models.py:257 81 | msgid "description" 82 | msgstr "aprašymas" 83 | 84 | #: models.py:124 85 | msgid "center" 86 | msgstr "centras" 87 | 88 | #: models.py:125 89 | msgid "zoom" 90 | msgstr "mastelis" 91 | 92 | #: models.py:126 93 | msgid "locate" 94 | msgstr "nustatyti padėtį" 95 | 96 | #: models.py:126 97 | msgid "Locate user on load?" 98 | msgstr "Nustatyti padėti užsikrovus?" 99 | 100 | #: models.py:129 101 | msgid "Choose the map licence." 102 | msgstr "Pasirinkite žemėlapio licenziją." 103 | 104 | #: models.py:130 105 | msgid "licence" 106 | msgstr "licenzija" 107 | 108 | #: models.py:135 109 | msgid "background" 110 | msgstr "fonas" 111 | 112 | #: models.py:136 113 | msgid "owner" 114 | msgstr "savininkas" 115 | 116 | #: models.py:137 117 | msgid "editors" 118 | msgstr "redaktoriai" 119 | 120 | #: models.py:138 121 | msgid "edit status" 122 | msgstr "keisti būseną" 123 | 124 | #: models.py:139 125 | msgid "share status" 126 | msgstr "pasidalinti būsena" 127 | 128 | #: models.py:140 129 | msgid "settings" 130 | msgstr "nustatymai" 131 | 132 | #: models.py:178 133 | #, python-format 134 | msgid "Your anonymous map has been attached to your account %s" 135 | msgstr "Jūsų anoniminis žemėlapis prijungtas prie Jūsų paskyros %s" 136 | 137 | #: models.py:211 138 | msgid "Clone of" 139 | msgstr "Kopija" 140 | 141 | #: models.py:262 142 | msgid "display on load" 143 | msgstr "rodyti pasikrovus" 144 | 145 | #: models.py:263 146 | msgid "Display this layer on load." 147 | msgstr "Rodyti šį sluoksnį pasrikrovus." 148 | 149 | #: templates/leaflet_storage/login_popup_end.html:2 150 | msgid "You are logged in. Continuing..." 151 | msgstr "Sėkmingai prisijungėte. Kraunasi..." 152 | 153 | #: templates/leaflet_storage/map_update_permissions.html:2 154 | msgid "Map permissions" 155 | msgstr "Žemėlapio leidimai" 156 | 157 | #: templates/registration/login.html:2 158 | msgid "Please log in to proceed" 159 | msgstr "Prisijunkite, kad tęsti" 160 | 161 | #: templates/registration/login.html:4 162 | msgid "Your username and password didn't match. Please try again." 163 | msgstr "Jūsų vardas ir slaptažodis yra neteisingi. Prašom pabandyti iš naujo." 164 | 165 | #: views.py:232 166 | #, python-format 167 | msgid "" 168 | "Your map has been created! If you want to edit this map from another " 169 | "computer, please use this link: %(anonymous_url)s" 170 | msgstr "" 171 | "Jūsų žemėlapis sėkmingai sukurtas! Jei norite redaguoti jį iš kito " 172 | "kompiuterio, pasinaudokite šia nuoroda: %(anonymous_url)s" 173 | 174 | #: views.py:237 175 | msgid "Congratulations, your map has been created!" 176 | msgstr "Sveikinam, Jūsų žemėlapis sukurtas!" 177 | 178 | #: views.py:264 179 | msgid "Map has been updated!" 180 | msgstr "Žemėlapis atnaujintas!" 181 | 182 | #: views.py:291 183 | msgid "Map editors updated with success!" 184 | msgstr "Žemėlapio keitėjai atnaujinti!" 185 | 186 | #: views.py:306 187 | msgid "Only its owner can delete the map." 188 | msgstr "Tik savininkas gali ištrinti žemėlapį." 189 | 190 | #: views.py:335 191 | #, python-format 192 | msgid "" 193 | "Your map has been cloned! If you want to edit this map from another " 194 | "computer, please use this link: %(anonymous_url)s" 195 | msgstr "" 196 | "Jūsų žemėlapis nukopijuotas! Jei norite redaguoti jį iš kito kompiuterio, " 197 | "pasinaudokite šia nuoroda: %(anonymous_url)s" 198 | 199 | #: views.py:340 200 | msgid "Congratulations, your map has been cloned!" 201 | msgstr "Sveikinam, Jūsų žemėlapis buvo nukopijuotas!" 202 | 203 | #: views.py:526 204 | msgid "Layer successfully deleted." 205 | msgstr "Sluoksnis sėkmingai ištrintas." 206 | -------------------------------------------------------------------------------- /leaflet_storage/locale/nl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/nl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/nl/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: uMap\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 11 | "PO-Revision-Date: 2014-02-10 13:32+0000\n" 12 | "Last-Translator: yohanboniface \n" 13 | "Language-Team: Dutch (http://www.transifex.com/projects/p/umap/language/" 14 | "nl/)\n" 15 | "Language: nl\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | 21 | #: forms.py:43 22 | #, python-format 23 | msgid "Secret edit link is %s" 24 | msgstr "" 25 | 26 | #: forms.py:47 models.py:113 27 | msgid "Everyone can edit" 28 | msgstr "" 29 | 30 | #: forms.py:48 31 | msgid "Only editable with secret edit link" 32 | msgstr "" 33 | 34 | #: models.py:20 35 | msgid "name" 36 | msgstr "naam" 37 | 38 | #: models.py:42 39 | msgid "No licence set" 40 | msgstr "" 41 | 42 | #: models.py:51 43 | msgid "details" 44 | msgstr "" 45 | 46 | #: models.py:52 47 | msgid "Link to a page where the licence is detailed." 48 | msgstr "" 49 | 50 | #: models.py:66 51 | msgid "URL template using OSM tile format" 52 | msgstr "" 53 | 54 | #: models.py:74 55 | msgid "Order of the tilelayers in the edit box" 56 | msgstr "" 57 | 58 | #: models.py:114 59 | msgid "Only editors can edit" 60 | msgstr "" 61 | 62 | #: models.py:115 63 | msgid "Only owner can edit" 64 | msgstr "" 65 | 66 | #: models.py:118 67 | msgid "everyone (public)" 68 | msgstr "" 69 | 70 | #: models.py:119 71 | msgid "anyone with link" 72 | msgstr "" 73 | 74 | #: models.py:120 75 | msgid "editors only" 76 | msgstr "" 77 | 78 | #: models.py:123 models.py:257 79 | msgid "description" 80 | msgstr "" 81 | 82 | #: models.py:124 83 | msgid "center" 84 | msgstr "" 85 | 86 | #: models.py:125 87 | msgid "zoom" 88 | msgstr "" 89 | 90 | #: models.py:126 91 | msgid "locate" 92 | msgstr "" 93 | 94 | #: models.py:126 95 | msgid "Locate user on load?" 96 | msgstr "" 97 | 98 | #: models.py:129 99 | msgid "Choose the map licence." 100 | msgstr "" 101 | 102 | #: models.py:130 103 | msgid "licence" 104 | msgstr "" 105 | 106 | #: models.py:135 107 | msgid "background" 108 | msgstr "" 109 | 110 | #: models.py:136 111 | msgid "owner" 112 | msgstr "" 113 | 114 | #: models.py:137 115 | msgid "editors" 116 | msgstr "" 117 | 118 | #: models.py:138 119 | msgid "edit status" 120 | msgstr "" 121 | 122 | #: models.py:139 123 | msgid "share status" 124 | msgstr "" 125 | 126 | #: models.py:140 127 | msgid "settings" 128 | msgstr "" 129 | 130 | #: models.py:178 131 | #, python-format 132 | msgid "Your anonymous map has been attached to your account %s" 133 | msgstr "" 134 | 135 | #: models.py:211 136 | msgid "Clone of" 137 | msgstr "" 138 | 139 | #: models.py:262 140 | msgid "display on load" 141 | msgstr "" 142 | 143 | #: models.py:263 144 | msgid "Display this layer on load." 145 | msgstr "" 146 | 147 | #: templates/leaflet_storage/login_popup_end.html:2 148 | msgid "You are logged in. Continuing..." 149 | msgstr "" 150 | 151 | #: templates/leaflet_storage/map_update_permissions.html:2 152 | msgid "Map permissions" 153 | msgstr "" 154 | 155 | #: templates/registration/login.html:2 156 | msgid "Please log in to proceed" 157 | msgstr "" 158 | 159 | #: templates/registration/login.html:4 160 | msgid "Your username and password didn't match. Please try again." 161 | msgstr "" 162 | 163 | #: views.py:232 164 | #, python-format 165 | msgid "" 166 | "Your map has been created! If you want to edit this map from another " 167 | "computer, please use this link: %(anonymous_url)s" 168 | msgstr "" 169 | 170 | #: views.py:237 171 | msgid "Congratulations, your map has been created!" 172 | msgstr "" 173 | 174 | #: views.py:264 175 | msgid "Map has been updated!" 176 | msgstr "" 177 | 178 | #: views.py:291 179 | msgid "Map editors updated with success!" 180 | msgstr "" 181 | 182 | #: views.py:306 183 | msgid "Only its owner can delete the map." 184 | msgstr "" 185 | 186 | #: views.py:335 187 | #, python-format 188 | msgid "" 189 | "Your map has been cloned! If you want to edit this map from another " 190 | "computer, please use this link: %(anonymous_url)s" 191 | msgstr "" 192 | 193 | #: views.py:340 194 | msgid "Congratulations, your map has been cloned!" 195 | msgstr "" 196 | 197 | #: views.py:526 198 | msgid "Layer successfully deleted." 199 | msgstr "" 200 | -------------------------------------------------------------------------------- /leaflet_storage/locale/pl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/pl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/pl/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # endro, 2016 7 | # Maciej Kowalik , 2016 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: uMap\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 13 | "PO-Revision-Date: 2016-02-15 08:17+0000\n" 14 | "Last-Translator: Maciej Kowalik \n" 15 | "Language-Team: Polish (http://www.transifex.com/yohanboniface/umap/language/pl/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: pl\n" 20 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 21 | 22 | #: forms.py:43 23 | #, python-format 24 | msgid "Secret edit link is %s" 25 | msgstr "Sekretnym odnośnikiem do edycji jest %s" 26 | 27 | #: forms.py:47 models.py:113 28 | msgid "Everyone can edit" 29 | msgstr "Wszyscy mogą edytować" 30 | 31 | #: forms.py:48 32 | msgid "Only editable with secret edit link" 33 | msgstr "Edycja możliwa tylko z sekretnym odnośnikiem" 34 | 35 | #: models.py:20 36 | msgid "name" 37 | msgstr "nazwa" 38 | 39 | #: models.py:42 40 | msgid "No licence set" 41 | msgstr "Brak ustawionej licencji" 42 | 43 | #: models.py:51 44 | msgid "details" 45 | msgstr "szczegóły" 46 | 47 | #: models.py:52 48 | msgid "Link to a page where the licence is detailed." 49 | msgstr "Odnośnik do strony ze szczegółowym opisem licencji." 50 | 51 | #: models.py:66 52 | msgid "URL template using OSM tile format" 53 | msgstr "Szablon URL używający formatu kafelków OSM" 54 | 55 | #: models.py:74 56 | msgid "Order of the tilelayers in the edit box" 57 | msgstr "Kolejność podkładów w oknie edycji" 58 | 59 | #: models.py:114 60 | msgid "Only editors can edit" 61 | msgstr "Tylko edytorzy mogą edytować" 62 | 63 | #: models.py:115 64 | msgid "Only owner can edit" 65 | msgstr "Tylko właściciel może edytować" 66 | 67 | #: models.py:118 68 | msgid "everyone (public)" 69 | msgstr "wszyscy (publiczne)" 70 | 71 | #: models.py:119 72 | msgid "anyone with link" 73 | msgstr "każdy z linkiem" 74 | 75 | #: models.py:120 76 | msgid "editors only" 77 | msgstr "tylko edytorzy" 78 | 79 | #: models.py:123 models.py:257 80 | msgid "description" 81 | msgstr "opis" 82 | 83 | #: models.py:124 84 | msgid "center" 85 | msgstr "środek" 86 | 87 | #: models.py:125 88 | msgid "zoom" 89 | msgstr "przybliżenie" 90 | 91 | #: models.py:126 92 | msgid "locate" 93 | msgstr "lokalizuj" 94 | 95 | #: models.py:126 96 | msgid "Locate user on load?" 97 | msgstr "Lokalizować użytkownika po załadowaniu?" 98 | 99 | #: models.py:129 100 | msgid "Choose the map licence." 101 | msgstr "Wybierz licencję mapy." 102 | 103 | #: models.py:130 104 | msgid "licence" 105 | msgstr "licencja" 106 | 107 | #: models.py:135 108 | msgid "background" 109 | msgstr "tło" 110 | 111 | #: models.py:136 112 | msgid "owner" 113 | msgstr "właściciel" 114 | 115 | #: models.py:137 116 | msgid "editors" 117 | msgstr "edytorzy" 118 | 119 | #: models.py:138 120 | msgid "edit status" 121 | msgstr "status edycji" 122 | 123 | #: models.py:139 124 | msgid "share status" 125 | msgstr "udostępnij status" 126 | 127 | #: models.py:140 128 | msgid "settings" 129 | msgstr "ustawienia" 130 | 131 | #: models.py:178 132 | #, python-format 133 | msgid "Your anonymous map has been attached to your account %s" 134 | msgstr "Twoja anonimowa mapa została dołączona do twojego konta %s" 135 | 136 | #: models.py:211 137 | msgid "Clone of" 138 | msgstr "Kopia" 139 | 140 | #: models.py:262 141 | msgid "display on load" 142 | msgstr "wyświetl po załadowaniu" 143 | 144 | #: models.py:263 145 | msgid "Display this layer on load." 146 | msgstr "Wyświetl tę warstwę po załadowaniu." 147 | 148 | #: templates/leaflet_storage/login_popup_end.html:2 149 | msgid "You are logged in. Continuing..." 150 | msgstr "Jesteś zalogowany. Kontynuowanie..." 151 | 152 | #: templates/leaflet_storage/map_update_permissions.html:2 153 | msgid "Map permissions" 154 | msgstr "Uprawnienia mapy" 155 | 156 | #: templates/registration/login.html:2 157 | msgid "Please log in to proceed" 158 | msgstr "Proszę się zalogować by kontynuować" 159 | 160 | #: templates/registration/login.html:4 161 | msgid "Your username and password didn't match. Please try again." 162 | msgstr "Twoja nazwa użytkownika i hasło nie pasują. Proszę spróbować ponownie." 163 | 164 | #: views.py:232 165 | #, python-format 166 | msgid "" 167 | "Your map has been created! If you want to edit this map from another " 168 | "computer, please use this link: %(anonymous_url)s" 169 | msgstr "Twoja mapa została utworzona! Jeśli chcesz edytować ją z innego komputera, użyj odnośnika: %(anonymous_url)s" 170 | 171 | #: views.py:237 172 | msgid "Congratulations, your map has been created!" 173 | msgstr "Gratulacje, twoja mapa została utworzona!" 174 | 175 | #: views.py:264 176 | msgid "Map has been updated!" 177 | msgstr "Mapa została zaktualizowana!" 178 | 179 | #: views.py:291 180 | msgid "Map editors updated with success!" 181 | msgstr "Edytorzy mapy zaktualizowani pomyślnie!" 182 | 183 | #: views.py:306 184 | msgid "Only its owner can delete the map." 185 | msgstr "Tylko właściciel może usunąć mapę." 186 | 187 | #: views.py:335 188 | #, python-format 189 | msgid "" 190 | "Your map has been cloned! If you want to edit this map from another " 191 | "computer, please use this link: %(anonymous_url)s" 192 | msgstr "Twoja mapa została skopiowana! Jeśli chcesz edytować ją z innego komputera, użyj odnośnika: %(anonymous_url)s" 193 | 194 | #: views.py:340 195 | msgid "Congratulations, your map has been cloned!" 196 | msgstr "Gratulacje, twoja mapa została skopiowana!" 197 | 198 | #: views.py:526 199 | msgid "Layer successfully deleted." 200 | msgstr "Warstwa usunięta pomyślnie." 201 | -------------------------------------------------------------------------------- /leaflet_storage/locale/pt/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/pt/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/pt/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Joao Ponce de Leao Paulouro , 2014 7 | # Rui , 2016 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: uMap\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 13 | "PO-Revision-Date: 2016-12-22 03:19+0000\n" 14 | "Last-Translator: Rui \n" 15 | "Language-Team: Portuguese (http://www.transifex.com/yohanboniface/umap/language/pt/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: pt\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: forms.py:43 23 | #, python-format 24 | msgid "Secret edit link is %s" 25 | msgstr "Link secreto para edição é %s" 26 | 27 | #: forms.py:47 models.py:113 28 | msgid "Everyone can edit" 29 | msgstr "Todos podem editar" 30 | 31 | #: forms.py:48 32 | msgid "Only editable with secret edit link" 33 | msgstr "Unicamente editável através de link secreto" 34 | 35 | #: models.py:20 36 | msgid "name" 37 | msgstr "nome" 38 | 39 | #: models.py:42 40 | msgid "No licence set" 41 | msgstr "Nenhuma licença definida" 42 | 43 | #: models.py:51 44 | msgid "details" 45 | msgstr "detalhes" 46 | 47 | #: models.py:52 48 | msgid "Link to a page where the licence is detailed." 49 | msgstr "Link para uma página detalhando a licença." 50 | 51 | #: models.py:66 52 | msgid "URL template using OSM tile format" 53 | msgstr "Modelo de URL no formato de telas OSM" 54 | 55 | #: models.py:74 56 | msgid "Order of the tilelayers in the edit box" 57 | msgstr "Ordem das camadas na caixa de edição" 58 | 59 | #: models.py:114 60 | msgid "Only editors can edit" 61 | msgstr "Só editores podem editar" 62 | 63 | #: models.py:115 64 | msgid "Only owner can edit" 65 | msgstr "Só o proprietário pode editar" 66 | 67 | #: models.py:118 68 | msgid "everyone (public)" 69 | msgstr "todos (público)" 70 | 71 | #: models.py:119 72 | msgid "anyone with link" 73 | msgstr "qualquer um com o link" 74 | 75 | #: models.py:120 76 | msgid "editors only" 77 | msgstr "só editores" 78 | 79 | #: models.py:123 models.py:257 80 | msgid "description" 81 | msgstr "descrição" 82 | 83 | #: models.py:124 84 | msgid "center" 85 | msgstr "centro" 86 | 87 | #: models.py:125 88 | msgid "zoom" 89 | msgstr "zoom" 90 | 91 | #: models.py:126 92 | msgid "locate" 93 | msgstr "localizar" 94 | 95 | #: models.py:126 96 | msgid "Locate user on load?" 97 | msgstr "Localizar usuário no início?" 98 | 99 | #: models.py:129 100 | msgid "Choose the map licence." 101 | msgstr "Escolha uma licença para o mapa." 102 | 103 | #: models.py:130 104 | msgid "licence" 105 | msgstr "licença" 106 | 107 | #: models.py:135 108 | msgid "background" 109 | msgstr "fundo" 110 | 111 | #: models.py:136 112 | msgid "owner" 113 | msgstr "proprietário" 114 | 115 | #: models.py:137 116 | msgid "editors" 117 | msgstr "editores" 118 | 119 | #: models.py:138 120 | msgid "edit status" 121 | msgstr "editar estado" 122 | 123 | #: models.py:139 124 | msgid "share status" 125 | msgstr "partilhar estado" 126 | 127 | #: models.py:140 128 | msgid "settings" 129 | msgstr "parâmetros" 130 | 131 | #: models.py:178 132 | #, python-format 133 | msgid "Your anonymous map has been attached to your account %s" 134 | msgstr "O seu mapa anónimo foi anexado à sua conta %s" 135 | 136 | #: models.py:211 137 | msgid "Clone of" 138 | msgstr "Clone de" 139 | 140 | #: models.py:262 141 | msgid "display on load" 142 | msgstr "mostrar no início" 143 | 144 | #: models.py:263 145 | msgid "Display this layer on load." 146 | msgstr "Apresentar esta camada ao carregar." 147 | 148 | #: templates/leaflet_storage/login_popup_end.html:2 149 | msgid "You are logged in. Continuing..." 150 | msgstr "Sucesso na identificação. Continuando..." 151 | 152 | #: templates/leaflet_storage/map_update_permissions.html:2 153 | msgid "Map permissions" 154 | msgstr "Permissões do mapa" 155 | 156 | #: templates/registration/login.html:2 157 | msgid "Please log in to proceed" 158 | msgstr "Por favor entre na sua conta para continuar" 159 | 160 | #: templates/registration/login.html:4 161 | msgid "Your username and password didn't match. Please try again." 162 | msgstr "O nome de usuário e senha não correspondem. Tente novamente." 163 | 164 | #: views.py:232 165 | #, python-format 166 | msgid "" 167 | "Your map has been created! If you want to edit this map from another " 168 | "computer, please use this link: %(anonymous_url)s" 169 | msgstr "O seu mapa foi criado! Se quiser editar este mapa noutro computador, por favor utilize este link: %(anonymous_url)s" 170 | 171 | #: views.py:237 172 | msgid "Congratulations, your map has been created!" 173 | msgstr "Parabéns, o seu mapa foi criado!" 174 | 175 | #: views.py:264 176 | msgid "Map has been updated!" 177 | msgstr "O mapa foi atualizado!" 178 | 179 | #: views.py:291 180 | msgid "Map editors updated with success!" 181 | msgstr "Os editores do mapa foram atualizados com sucesso!" 182 | 183 | #: views.py:306 184 | msgid "Only its owner can delete the map." 185 | msgstr "Só o proprietário pode eliminar o mapa." 186 | 187 | #: views.py:335 188 | #, python-format 189 | msgid "" 190 | "Your map has been cloned! If you want to edit this map from another " 191 | "computer, please use this link: %(anonymous_url)s" 192 | msgstr "O seu mapa foi clonado! Se quiser editar este mapa noutro computador, por favor utilize este link: %(anonymous_url)s" 193 | 194 | #: views.py:340 195 | msgid "Congratulations, your map has been cloned!" 196 | msgstr "Parabéns, o seu mapa foi clonado!" 197 | 198 | #: views.py:526 199 | msgid "Layer successfully deleted." 200 | msgstr "Camada eliminada com sucesso." 201 | -------------------------------------------------------------------------------- /leaflet_storage/locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/ru/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # ilis_krou , 2014 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: uMap\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: 2014-07-10 11:02+0000\n" 13 | "Last-Translator: ilis_krou \n" 14 | "Language-Team: Russian (http://www.transifex.com/projects/p/umap/language/" 15 | "ru/)\n" 16 | "Language: ru\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" 21 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 22 | 23 | #: forms.py:43 24 | #, python-format 25 | msgid "Secret edit link is %s" 26 | msgstr "Секретная ссылка для редактирования: %s" 27 | 28 | #: forms.py:47 models.py:113 29 | msgid "Everyone can edit" 30 | msgstr "Все могут редактировать" 31 | 32 | #: forms.py:48 33 | msgid "Only editable with secret edit link" 34 | msgstr "Редактирование возможно только при наличии секретной ссылки" 35 | 36 | #: models.py:20 37 | msgid "name" 38 | msgstr "название" 39 | 40 | #: models.py:42 41 | msgid "No licence set" 42 | msgstr "Лицензия не задана" 43 | 44 | #: models.py:51 45 | msgid "details" 46 | msgstr "подробности" 47 | 48 | #: models.py:52 49 | msgid "Link to a page where the licence is detailed." 50 | msgstr "Ссылка на страницу с описанием лицензии" 51 | 52 | #: models.py:66 53 | msgid "URL template using OSM tile format" 54 | msgstr "шаблон ссылки использует формат слоя OSM" 55 | 56 | #: models.py:74 57 | msgid "Order of the tilelayers in the edit box" 58 | msgstr "Расположите слои карт в окне редактирования" 59 | 60 | #: models.py:114 61 | msgid "Only editors can edit" 62 | msgstr "Только редакторы могут редактировать" 63 | 64 | #: models.py:115 65 | msgid "Only owner can edit" 66 | msgstr "Только владелец может редактировать" 67 | 68 | #: models.py:118 69 | msgid "everyone (public)" 70 | msgstr "все (без ограничений)" 71 | 72 | #: models.py:119 73 | msgid "anyone with link" 74 | msgstr "все, у кого есть ссылка" 75 | 76 | #: models.py:120 77 | msgid "editors only" 78 | msgstr "только редакторы" 79 | 80 | #: models.py:123 models.py:257 81 | msgid "description" 82 | msgstr "описание" 83 | 84 | #: models.py:124 85 | msgid "center" 86 | msgstr "центр" 87 | 88 | #: models.py:125 89 | msgid "zoom" 90 | msgstr "масштаб" 91 | 92 | #: models.py:126 93 | msgid "locate" 94 | msgstr "геолокация" 95 | 96 | #: models.py:126 97 | msgid "Locate user on load?" 98 | msgstr "Использовать геолокацию при загрузке?" 99 | 100 | #: models.py:129 101 | msgid "Choose the map licence." 102 | msgstr "Выберите лицензию для карты." 103 | 104 | #: models.py:130 105 | msgid "licence" 106 | msgstr "лицензия" 107 | 108 | #: models.py:135 109 | msgid "background" 110 | msgstr "фоновый слой" 111 | 112 | #: models.py:136 113 | msgid "owner" 114 | msgstr "владелец" 115 | 116 | #: models.py:137 117 | msgid "editors" 118 | msgstr "редакторы" 119 | 120 | #: models.py:138 121 | msgid "edit status" 122 | msgstr "статус редактирования" 123 | 124 | #: models.py:139 125 | msgid "share status" 126 | msgstr "статус совместного использования" 127 | 128 | #: models.py:140 129 | msgid "settings" 130 | msgstr "настройки" 131 | 132 | #: models.py:178 133 | #, python-format 134 | msgid "Your anonymous map has been attached to your account %s" 135 | msgstr "Ваша анонимная карта была присоединена к вашей учётной записи %s" 136 | 137 | #: models.py:211 138 | msgid "Clone of" 139 | msgstr "Копия" 140 | 141 | #: models.py:262 142 | msgid "display on load" 143 | msgstr "показывать при загрузке" 144 | 145 | #: models.py:263 146 | msgid "Display this layer on load." 147 | msgstr "Показать этот слой при загрузке." 148 | 149 | #: templates/leaflet_storage/login_popup_end.html:2 150 | msgid "You are logged in. Continuing..." 151 | msgstr "Вы вошли. Продолжим..." 152 | 153 | #: templates/leaflet_storage/map_update_permissions.html:2 154 | msgid "Map permissions" 155 | msgstr "Разрешения для карты" 156 | 157 | #: templates/registration/login.html:2 158 | msgid "Please log in to proceed" 159 | msgstr "Чтобы продолжить, выполните вход" 160 | 161 | #: templates/registration/login.html:4 162 | msgid "Your username and password didn't match. Please try again." 163 | msgstr "Имя пользователя или пароль неверные. Попробуйте ещё раз." 164 | 165 | #: views.py:232 166 | #, python-format 167 | msgid "" 168 | "Your map has been created! If you want to edit this map from another " 169 | "computer, please use this link: %(anonymous_url)s" 170 | msgstr "" 171 | "Ваша карта готова! Если вы хотите редактировать её на другом компьютере, " 172 | "используйте эту ссылку:: %(anonymous_url)s" 173 | 174 | #: views.py:237 175 | msgid "Congratulations, your map has been created!" 176 | msgstr "Поздравляем, ваша карта готова!" 177 | 178 | #: views.py:264 179 | msgid "Map has been updated!" 180 | msgstr "Карта обновлена!" 181 | 182 | #: views.py:291 183 | msgid "Map editors updated with success!" 184 | msgstr "Редакторы карты успешно обновлены!" 185 | 186 | #: views.py:306 187 | msgid "Only its owner can delete the map." 188 | msgstr "Только владелец карты может удалить её." 189 | 190 | #: views.py:335 191 | #, python-format 192 | msgid "" 193 | "Your map has been cloned! If you want to edit this map from another " 194 | "computer, please use this link: %(anonymous_url)s" 195 | msgstr "" 196 | "Карта была скопирована. Если вы хотите редактировать её на другом " 197 | "компьютере, используйте эту ссылку: %(anonymous_url)s" 198 | 199 | #: views.py:340 200 | msgid "Congratulations, your map has been cloned!" 201 | msgstr "Поздравляем, ваша карта скопирована!" 202 | 203 | #: views.py:526 204 | msgid "Layer successfully deleted." 205 | msgstr "Слой удалён." 206 | -------------------------------------------------------------------------------- /leaflet_storage/locale/sk_SK/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/sk_SK/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/sk_SK/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Martin , 2016 7 | # Martin Ždila , 2014 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: uMap\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 13 | "PO-Revision-Date: 2016-10-09 11:19+0000\n" 14 | "Last-Translator: Martin \n" 15 | "Language-Team: Slovak (Slovakia) (http://www.transifex.com/yohanboniface/umap/language/sk_SK/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: sk_SK\n" 20 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 21 | 22 | #: forms.py:43 23 | #, python-format 24 | msgid "Secret edit link is %s" 25 | msgstr "Tajný odkaz umožňujúci úpravu mapy je %s" 26 | 27 | #: forms.py:47 models.py:113 28 | msgid "Everyone can edit" 29 | msgstr "Hocikto môže upravovať" 30 | 31 | #: forms.py:48 32 | msgid "Only editable with secret edit link" 33 | msgstr "Možné upravovať iba pomocou tajného odkazu" 34 | 35 | #: models.py:20 36 | msgid "name" 37 | msgstr "názov" 38 | 39 | #: models.py:42 40 | msgid "No licence set" 41 | msgstr "Žiadná licencia nie je nastavená" 42 | 43 | #: models.py:51 44 | msgid "details" 45 | msgstr "podrobnosti" 46 | 47 | #: models.py:52 48 | msgid "Link to a page where the licence is detailed." 49 | msgstr "Odkaz na stránku s podrobnejším popisom licencie." 50 | 51 | #: models.py:66 52 | msgid "URL template using OSM tile format" 53 | msgstr "Vzor URL vo formáte pre dlaždice OSM" 54 | 55 | #: models.py:74 56 | msgid "Order of the tilelayers in the edit box" 57 | msgstr "Poradie vrstiev pri úprave" 58 | 59 | #: models.py:114 60 | msgid "Only editors can edit" 61 | msgstr "Upravovať môžu iba prispievatelia" 62 | 63 | #: models.py:115 64 | msgid "Only owner can edit" 65 | msgstr "Upravovať môže iba vlastník" 66 | 67 | #: models.py:118 68 | msgid "everyone (public)" 69 | msgstr "hocikto (verejná)" 70 | 71 | #: models.py:119 72 | msgid "anyone with link" 73 | msgstr "hocikto pomocou odkazu" 74 | 75 | #: models.py:120 76 | msgid "editors only" 77 | msgstr "iba prispievatelia" 78 | 79 | #: models.py:123 models.py:257 80 | msgid "description" 81 | msgstr "popis" 82 | 83 | #: models.py:124 84 | msgid "center" 85 | msgstr "stred" 86 | 87 | #: models.py:125 88 | msgid "zoom" 89 | msgstr "priblíženie" 90 | 91 | #: models.py:126 92 | msgid "locate" 93 | msgstr "lokalizovať" 94 | 95 | #: models.py:126 96 | msgid "Locate user on load?" 97 | msgstr "Nájsť polohu používateľa pri štarte?" 98 | 99 | #: models.py:129 100 | msgid "Choose the map licence." 101 | msgstr "Vyberte si licenciu mapy." 102 | 103 | #: models.py:130 104 | msgid "licence" 105 | msgstr "licencia" 106 | 107 | #: models.py:135 108 | msgid "background" 109 | msgstr "pozadie" 110 | 111 | #: models.py:136 112 | msgid "owner" 113 | msgstr "vlastník" 114 | 115 | #: models.py:137 116 | msgid "editors" 117 | msgstr "prispievatelia" 118 | 119 | #: models.py:138 120 | msgid "edit status" 121 | msgstr "kto môže vykonávať úpravy" 122 | 123 | #: models.py:139 124 | msgid "share status" 125 | msgstr "nastavenie zdieľania" 126 | 127 | #: models.py:140 128 | msgid "settings" 129 | msgstr "nastavenia" 130 | 131 | #: models.py:178 132 | #, python-format 133 | msgid "Your anonymous map has been attached to your account %s" 134 | msgstr "Vaša anonymná mapa bola pripojená k vašemu účtu %s" 135 | 136 | #: models.py:211 137 | msgid "Clone of" 138 | msgstr "Kópia" 139 | 140 | #: models.py:262 141 | msgid "display on load" 142 | msgstr "zobraziť pri štarte" 143 | 144 | #: models.py:263 145 | msgid "Display this layer on load." 146 | msgstr "Zobraziť túto vrstvu pri štarte." 147 | 148 | #: templates/leaflet_storage/login_popup_end.html:2 149 | msgid "You are logged in. Continuing..." 150 | msgstr "Ste prihláseni. Pokračujeme ďalej…" 151 | 152 | #: templates/leaflet_storage/map_update_permissions.html:2 153 | msgid "Map permissions" 154 | msgstr "Prístupové práva" 155 | 156 | #: templates/registration/login.html:2 157 | msgid "Please log in to proceed" 158 | msgstr "Pre pokračovanie sa musíte prihlásiť" 159 | 160 | #: templates/registration/login.html:4 161 | msgid "Your username and password didn't match. Please try again." 162 | msgstr "Používateľské meno a heslo sa nezhodujú. Prosím, skúste to znova." 163 | 164 | #: views.py:232 165 | #, python-format 166 | msgid "" 167 | "Your map has been created! If you want to edit this map from another " 168 | "computer, please use this link: %(anonymous_url)s" 169 | 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" 170 | 171 | #: views.py:237 172 | msgid "Congratulations, your map has been created!" 173 | msgstr "Gratulujeme, vaša mapa bola vytvorená!" 174 | 175 | #: views.py:264 176 | msgid "Map has been updated!" 177 | msgstr "Mapa bola aktualizována!" 178 | 179 | #: views.py:291 180 | msgid "Map editors updated with success!" 181 | msgstr "Zoznam prispievovateľov bol úspešne upravený!" 182 | 183 | #: views.py:306 184 | msgid "Only its owner can delete the map." 185 | msgstr "Iba vlastník môže vymazať túto mapu." 186 | 187 | #: views.py:335 188 | #, python-format 189 | msgid "" 190 | "Your map has been cloned! If you want to edit this map from another " 191 | "computer, please use this link: %(anonymous_url)s" 192 | 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" 193 | 194 | #: views.py:340 195 | msgid "Congratulations, your map has been cloned!" 196 | msgstr "Gratulujeme, bola vytvorená kópia mapy!" 197 | 198 | #: views.py:526 199 | msgid "Layer successfully deleted." 200 | msgstr "Vrstva bola úspešne vymazaná." 201 | -------------------------------------------------------------------------------- /leaflet_storage/locale/uk_UA/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/uk_UA/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/uk_UA/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Сергій Дубик , 2014 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: uMap\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 12 | "PO-Revision-Date: 2014-09-17 06:06+0000\n" 13 | "Last-Translator: Сергій Дубик \n" 14 | "Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/projects/p/umap/" 15 | "language/uk_UA/)\n" 16 | "Language: uk_UA\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" 21 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 22 | 23 | #: forms.py:43 24 | #, python-format 25 | msgid "Secret edit link is %s" 26 | msgstr "Секретне посилання для редагування: %s" 27 | 28 | #: forms.py:47 models.py:113 29 | msgid "Everyone can edit" 30 | msgstr "Кожен може редагувати" 31 | 32 | #: forms.py:48 33 | msgid "Only editable with secret edit link" 34 | msgstr "Редагування можливе лише за наявності секретного посилання" 35 | 36 | #: models.py:20 37 | msgid "name" 38 | msgstr "назва" 39 | 40 | #: models.py:42 41 | msgid "No licence set" 42 | msgstr "Ліцензія не задана" 43 | 44 | #: models.py:51 45 | msgid "details" 46 | msgstr "подробиці" 47 | 48 | #: models.py:52 49 | msgid "Link to a page where the licence is detailed." 50 | msgstr "Посилання на сторінку з описом ліцензії" 51 | 52 | #: models.py:66 53 | msgid "URL template using OSM tile format" 54 | msgstr "шаблон посилання використовує формат шару OSM" 55 | 56 | #: models.py:74 57 | msgid "Order of the tilelayers in the edit box" 58 | msgstr "Розташуйте шари мап у вікні редагування" 59 | 60 | #: models.py:114 61 | msgid "Only editors can edit" 62 | msgstr "Лише редактори можуть редагувати" 63 | 64 | #: models.py:115 65 | msgid "Only owner can edit" 66 | msgstr "Лише власник може редагувати" 67 | 68 | #: models.py:118 69 | msgid "everyone (public)" 70 | msgstr "усі (відкритий доступ)" 71 | 72 | #: models.py:119 73 | msgid "anyone with link" 74 | msgstr "усі, у кого є посилання" 75 | 76 | #: models.py:120 77 | msgid "editors only" 78 | msgstr "лише редактори" 79 | 80 | #: models.py:123 models.py:257 81 | msgid "description" 82 | msgstr "опис" 83 | 84 | #: models.py:124 85 | msgid "center" 86 | msgstr "центр" 87 | 88 | #: models.py:125 89 | msgid "zoom" 90 | msgstr "масштаб" 91 | 92 | #: models.py:126 93 | msgid "locate" 94 | msgstr "геолокація" 95 | 96 | #: models.py:126 97 | msgid "Locate user on load?" 98 | msgstr "Використовувати геолокацію при завантаженні?" 99 | 100 | #: models.py:129 101 | msgid "Choose the map licence." 102 | msgstr "Виберіть ліцензію для мапи." 103 | 104 | #: models.py:130 105 | msgid "licence" 106 | msgstr "ліцензія" 107 | 108 | #: models.py:135 109 | msgid "background" 110 | msgstr "фоновий шар" 111 | 112 | #: models.py:136 113 | msgid "owner" 114 | msgstr "власник" 115 | 116 | #: models.py:137 117 | msgid "editors" 118 | msgstr "редактори" 119 | 120 | #: models.py:138 121 | msgid "edit status" 122 | msgstr "статус редагування" 123 | 124 | #: models.py:139 125 | msgid "share status" 126 | msgstr "статус спільного використання" 127 | 128 | #: models.py:140 129 | msgid "settings" 130 | msgstr "налаштування" 131 | 132 | #: models.py:178 133 | #, python-format 134 | msgid "Your anonymous map has been attached to your account %s" 135 | msgstr "Ваша анонімна мапа була приєднана до Вашого облікового запису %s" 136 | 137 | #: models.py:211 138 | msgid "Clone of" 139 | msgstr "Копія " 140 | 141 | #: models.py:262 142 | msgid "display on load" 143 | msgstr "показувати при завантаженні" 144 | 145 | #: models.py:263 146 | msgid "Display this layer on load." 147 | msgstr "Показати цей шар при завантаженні." 148 | 149 | #: templates/leaflet_storage/login_popup_end.html:2 150 | msgid "You are logged in. Continuing..." 151 | msgstr "Ви увійшли. Продовжимо …" 152 | 153 | #: templates/leaflet_storage/map_update_permissions.html:2 154 | msgid "Map permissions" 155 | msgstr "Дозволи для мапи" 156 | 157 | #: templates/registration/login.html:2 158 | msgid "Please log in to proceed" 159 | msgstr "Щоб продовжити, виконайте вхід" 160 | 161 | #: templates/registration/login.html:4 162 | msgid "Your username and password didn't match. Please try again." 163 | msgstr "Ім’я користувача або пароль невірні. Спробуйте ще раз." 164 | 165 | #: views.py:232 166 | #, python-format 167 | msgid "" 168 | "Your map has been created! If you want to edit this map from another " 169 | "computer, please use this link: %(anonymous_url)s" 170 | msgstr "" 171 | "Ваша мапа готова! Якщо Ви хочете редагувати її на іншому комп’ютері, " 172 | "використовуйте це посилання: %(anonymous_url)s" 173 | 174 | #: views.py:237 175 | msgid "Congratulations, your map has been created!" 176 | msgstr "Вітаємо, Ваша мапа готова!" 177 | 178 | #: views.py:264 179 | msgid "Map has been updated!" 180 | msgstr "Мапа оновлена!" 181 | 182 | #: views.py:291 183 | msgid "Map editors updated with success!" 184 | msgstr "Редактори мапи успішно оновлені!" 185 | 186 | #: views.py:306 187 | msgid "Only its owner can delete the map." 188 | msgstr "Лише власник мапи може вилучити її." 189 | 190 | #: views.py:335 191 | #, python-format 192 | msgid "" 193 | "Your map has been cloned! If you want to edit this map from another " 194 | "computer, please use this link: %(anonymous_url)s" 195 | msgstr "" 196 | "Карта була скопійована. Якщо Ви хочете редагувати її на іншому комп’ютері, " 197 | "використовуйте це посилання: %(anonymous_url)s" 198 | 199 | #: views.py:340 200 | msgid "Congratulations, your map has been cloned!" 201 | msgstr "Вітаємо, Ваша мапа скопійована!" 202 | 203 | #: views.py:526 204 | msgid "Layer successfully deleted." 205 | msgstr "Шар вилучено." 206 | -------------------------------------------------------------------------------- /leaflet_storage/locale/vi/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/vi/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/vi/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2014 2 | # This file is distributed under the same license as the PACKAGE package. 3 | # Thanh Le Viet , 2014. 4 | #, fuzzy 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: 1.0\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: Thanh Le Viet \n" 12 | "Language-Team: Vietnamese\n" 13 | "Language: Vietnamese\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | 17 | #: forms.py:43 18 | #, python-format 19 | msgid "Secret edit link is %s" 20 | msgstr "Link chỉnh sửa bí mật là %s" 21 | 22 | #: forms.py:47 models.py:113 23 | msgid "Everyone can edit" 24 | msgstr "Ai cũng có thể chỉnh sửa" 25 | 26 | #: forms.py:48 27 | msgid "Only editable with secret edit link" 28 | msgstr "Chỉ có thể sửa với liên kết chỉnh sửa bí mật" 29 | 30 | #: models.py:20 31 | msgid "name" 32 | msgstr "tên" 33 | 34 | #: models.py:42 35 | msgid "No licence set" 36 | msgstr "Bản quyền không được đặt" 37 | 38 | #: models.py:51 39 | msgid "details" 40 | msgstr "chi tiết" 41 | 42 | #: models.py:52 43 | msgid "Link to a page where the licence is detailed." 44 | msgstr "Liên kết đến trang có chi tiết về bản quyền" 45 | 46 | #: models.py:66 47 | msgid "URL template using OSM tile format" 48 | msgstr "Mẫu URL sử dụng định dạng tile của OSM" 49 | 50 | #: models.py:74 51 | msgid "Order of the tilelayers in the edit box" 52 | msgstr "Thứ tự các titlelayer trong hộp chỉnh sửa" 53 | 54 | #: models.py:114 55 | msgid "Only editors can edit" 56 | msgstr "Chỉ chỉnh sửa bởi người có quyền" 57 | 58 | #: models.py:115 59 | msgid "Only owner can edit" 60 | msgstr "Chỉ người sở hữu có thể chỉnh sửa" 61 | 62 | #: models.py:118 63 | msgid "everyone (public)" 64 | msgstr "mọi người" 65 | 66 | #: models.py:119 67 | msgid "anyone with link" 68 | msgstr "bất kì ai với liên kết" 69 | 70 | #: models.py:120 71 | msgid "editors only" 72 | msgstr "chỉ người có quyền" 73 | 74 | #: models.py:123 models.py:257 75 | msgid "description" 76 | msgstr "mô tả" 77 | 78 | #: models.py:124 79 | msgid "center" 80 | msgstr "trung tâm" 81 | 82 | #: models.py:125 83 | msgid "zoom" 84 | msgstr "thu phóng" 85 | 86 | #: models.py:126 87 | msgid "locate" 88 | msgstr "xác định" 89 | 90 | #: models.py:126 91 | msgid "Locate user on load?" 92 | msgstr "Xác định người dùng khi tải trang?" 93 | 94 | #: models.py:129 95 | msgid "Choose the map licence." 96 | msgstr "Chọn bản quyền cho bản đồ" 97 | 98 | #: models.py:130 99 | msgid "licence" 100 | msgstr "bản quyền" 101 | 102 | #: models.py:135 103 | msgid "background" 104 | msgstr "nền" 105 | 106 | #: models.py:136 107 | msgid "owner" 108 | msgstr "chủ nhân" 109 | 110 | #: models.py:137 111 | msgid "editors" 112 | msgstr "người chỉnh sửa" 113 | 114 | #: models.py:138 115 | msgid "edit status" 116 | msgstr "trạng thái chỉnh sửa" 117 | 118 | #: models.py:139 119 | msgid "share status" 120 | msgstr "chia sẻ trạng thái" 121 | 122 | #: models.py:140 123 | msgid "settings" 124 | msgstr "thiết lập" 125 | 126 | #: models.py:178 127 | #, python-format 128 | msgid "Your anonymous map has been attached to your account %s" 129 | 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" 130 | 131 | #: models.py:211 132 | msgid "Clone of" 133 | msgstr "Sao chép của" 134 | 135 | #: models.py:262 136 | msgid "display on load" 137 | msgstr "hiển thị khi tải trang" 138 | 139 | #: models.py:263 140 | msgid "Display this layer on load." 141 | msgstr "Hiển thị layer này khi tải trang" 142 | 143 | #: templates/leaflet_storage/login_popup_end.html:2 144 | msgid "You are logged in. Continuing..." 145 | msgstr "Bạn đã đăng nhập, Đang tiếp tục..." 146 | 147 | #: templates/leaflet_storage/map_update_permissions.html:2 148 | msgid "Map permissions" 149 | msgstr "Quyền hạn" 150 | 151 | #: templates/registration/login.html:2 152 | msgid "Please log in to proceed" 153 | msgstr "Vui lòng đăng nhập để thực thi" 154 | 155 | #: templates/registration/login.html:4 156 | msgid "Your username and password didn't match. Please try again." 157 | msgstr "Tên truy cập hoặc mật khẩu không đúng. Vui lòng thử lại." 158 | 159 | #: views.py:232 160 | #, python-format 161 | msgid "" 162 | "Your map has been created! If you want to edit this map from another " 163 | "computer, please use this link: %(anonymous_url)s" 164 | msgstr "" 165 | "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, " 166 | "vui lòng sử dụng liên kết này %(anonymous_url)s" 167 | 168 | #: views.py:237 169 | msgid "Congratulations, your map has been created!" 170 | msgstr "Chúc mừng, bản đồ của bạn đã được tạo!" 171 | 172 | #: views.py:264 173 | msgid "Map has been updated!" 174 | msgstr "Bản đồ đã được cập nhật!" 175 | 176 | #: views.py:291 177 | msgid "Map editors updated with success!" 178 | msgstr "Bản đồ được cập nhật thành công!" 179 | 180 | #: views.py:306 181 | msgid "Only its owner can delete the map." 182 | msgstr "Chỉ chủ nhân của bản đồ mới có quyền xóa." 183 | 184 | #: views.py:335 185 | #, python-format 186 | msgid "" 187 | "Your map has been cloned! If you want to edit this map from another " 188 | "computer, please use this link: %(anonymous_url)s" 189 | msgstr "" 190 | "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 " 191 | "khác, vui lòng sử dụng liên kết này %(anonymous_url)s" 192 | 193 | #: views.py:340 194 | msgid "Congratulations, your map has been cloned!" 195 | msgstr "Chúc mừng, bản đồ của bạn đã được sao chép!" 196 | 197 | #: views.py:526 198 | msgid "Layer successfully deleted." 199 | msgstr "Đã xóa layer" 200 | -------------------------------------------------------------------------------- /leaflet_storage/locale/zh_TW/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/locale/zh_TW/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /leaflet_storage/locale/zh_TW/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Chia-liang Kao , 2014 7 | # coop.shen , 2014 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: uMap\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2016-09-09 21:36+0200\n" 13 | "PO-Revision-Date: 2014-08-22 17:33+0000\n" 14 | "Last-Translator: coop.shen \n" 15 | "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/umap/" 16 | "language/zh_TW/)\n" 17 | "Language: zh_TW\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=UTF-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Plural-Forms: nplurals=1; plural=0;\n" 22 | 23 | #: forms.py:43 24 | #, python-format 25 | msgid "Secret edit link is %s" 26 | msgstr "" 27 | 28 | #: forms.py:47 models.py:113 29 | msgid "Everyone can edit" 30 | msgstr "所有人皆可編輯" 31 | 32 | #: forms.py:48 33 | msgid "Only editable with secret edit link" 34 | msgstr "僅能由私密連結編輯" 35 | 36 | #: models.py:20 37 | msgid "name" 38 | msgstr "名稱" 39 | 40 | #: models.py:42 41 | msgid "No licence set" 42 | msgstr "未指定授權條款" 43 | 44 | #: models.py:51 45 | msgid "details" 46 | msgstr "詳情" 47 | 48 | #: models.py:52 49 | msgid "Link to a page where the licence is detailed." 50 | msgstr "連結至授權條款說明網址" 51 | 52 | #: models.py:66 53 | msgid "URL template using OSM tile format" 54 | msgstr "" 55 | 56 | #: models.py:74 57 | msgid "Order of the tilelayers in the edit box" 58 | msgstr "" 59 | 60 | #: models.py:114 61 | msgid "Only editors can edit" 62 | msgstr "僅編輯群可編輯" 63 | 64 | #: models.py:115 65 | msgid "Only owner can edit" 66 | msgstr "僅擁有者可編輯" 67 | 68 | #: models.py:118 69 | msgid "everyone (public)" 70 | msgstr "所有人(公開)" 71 | 72 | #: models.py:119 73 | msgid "anyone with link" 74 | msgstr "任何有連結的人" 75 | 76 | #: models.py:120 77 | msgid "editors only" 78 | msgstr "只有編輯者允許" 79 | 80 | #: models.py:123 models.py:257 81 | msgid "description" 82 | msgstr "描述" 83 | 84 | #: models.py:124 85 | msgid "center" 86 | msgstr "中心" 87 | 88 | #: models.py:125 89 | msgid "zoom" 90 | msgstr "縮放" 91 | 92 | #: models.py:126 93 | msgid "locate" 94 | msgstr "" 95 | 96 | #: models.py:126 97 | msgid "Locate user on load?" 98 | msgstr "" 99 | 100 | #: models.py:129 101 | msgid "Choose the map licence." 102 | msgstr "選擇地圖授權" 103 | 104 | #: models.py:130 105 | msgid "licence" 106 | msgstr "授權" 107 | 108 | #: models.py:135 109 | msgid "background" 110 | msgstr "地圖背景" 111 | 112 | #: models.py:136 113 | msgid "owner" 114 | msgstr "擁有者" 115 | 116 | #: models.py:137 117 | msgid "editors" 118 | msgstr "編輯者" 119 | 120 | #: models.py:138 121 | msgid "edit status" 122 | msgstr "編輯狀態" 123 | 124 | #: models.py:139 125 | msgid "share status" 126 | msgstr "分享狀態" 127 | 128 | #: models.py:140 129 | msgid "settings" 130 | msgstr "設定" 131 | 132 | #: models.py:178 133 | #, python-format 134 | msgid "Your anonymous map has been attached to your account %s" 135 | msgstr "你的匿名地圖已經加入你的帳號 %s " 136 | 137 | #: models.py:211 138 | msgid "Clone of" 139 | msgstr "複製" 140 | 141 | #: models.py:262 142 | msgid "display on load" 143 | msgstr "載入時顯示" 144 | 145 | #: models.py:263 146 | msgid "Display this layer on load." 147 | msgstr "載入此圖層時顯示" 148 | 149 | #: templates/leaflet_storage/login_popup_end.html:2 150 | msgid "You are logged in. Continuing..." 151 | msgstr "您已登入,繼續中..." 152 | 153 | #: templates/leaflet_storage/map_update_permissions.html:2 154 | msgid "Map permissions" 155 | msgstr "地圖權限" 156 | 157 | #: templates/registration/login.html:2 158 | msgid "Please log in to proceed" 159 | msgstr "請先登入" 160 | 161 | #: templates/registration/login.html:4 162 | msgid "Your username and password didn't match. Please try again." 163 | msgstr "" 164 | 165 | #: views.py:232 166 | #, python-format 167 | msgid "" 168 | "Your map has been created! If you want to edit this map from another " 169 | "computer, please use this link: %(anonymous_url)s" 170 | msgstr "" 171 | 172 | #: views.py:237 173 | msgid "Congratulations, your map has been created!" 174 | msgstr "恭喜您的地圖已經新增完成" 175 | 176 | #: views.py:264 177 | msgid "Map has been updated!" 178 | msgstr "地圖已經更新" 179 | 180 | #: views.py:291 181 | msgid "Map editors updated with success!" 182 | msgstr "地圖編輯者更新完成" 183 | 184 | #: views.py:306 185 | msgid "Only its owner can delete the map." 186 | msgstr "只有擁有者可以刪除此地圖" 187 | 188 | #: views.py:335 189 | #, python-format 190 | msgid "" 191 | "Your map has been cloned! If you want to edit this map from another " 192 | "computer, please use this link: %(anonymous_url)s" 193 | msgstr "" 194 | 195 | #: views.py:340 196 | msgid "Congratulations, your map has been cloned!" 197 | msgstr "" 198 | 199 | #: views.py:526 200 | msgid "Layer successfully deleted." 201 | msgstr "圖層已刪除" 202 | -------------------------------------------------------------------------------- /leaflet_storage/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/management/__init__.py -------------------------------------------------------------------------------- /leaflet_storage/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/management/commands/__init__.py -------------------------------------------------------------------------------- /leaflet_storage/management/commands/anonymous_edit_url.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | from django.core.management.base import BaseCommand 4 | from django.conf import settings 5 | 6 | from leaflet_storage.models import Map 7 | 8 | 9 | class Command(BaseCommand): 10 | help = ('Retrieve anonymous edit url of a map. ' 11 | 'Eg.: python manage.py anonymous_edit_url 1234') 12 | 13 | def add_arguments(self, parser): 14 | parser.add_argument('pk', help='PK of the map to retrieve.') 15 | 16 | def abort(self, msg): 17 | self.stderr.write(msg) 18 | sys.exit(1) 19 | 20 | def handle(self, *args, **options): 21 | pk = options['pk'] 22 | try: 23 | map_ = Map.objects.get(pk=pk) 24 | except Map.DoesNotExist: 25 | self.abort('Map with pk {} not found'.format(pk)) 26 | if map_.owner: 27 | self.abort('Map is not anonymous (owner: {})'.format(map_.owner)) 28 | print(settings.SITE_URL + map_.get_anonymous_edit_url()) 29 | -------------------------------------------------------------------------------- /leaflet_storage/management/commands/storagei18n.py: -------------------------------------------------------------------------------- 1 | import io 2 | import os 3 | 4 | from django.core.management.base import BaseCommand 5 | from django.conf import settings 6 | from django.contrib.staticfiles import finders 7 | from django.template.loader import render_to_string 8 | from django.utils.translation import to_locale 9 | 10 | 11 | class Command(BaseCommand): 12 | 13 | def handle(self, *args, **options): 14 | self.verbosity = options['verbosity'] 15 | for code, name in settings.LANGUAGES: 16 | code = to_locale(code) 17 | if self.verbosity > 0: 18 | print("Processing", name) 19 | path = finders.find('storage/src/locale/{code}.json'.format( 20 | code=code)) 21 | if not path: 22 | print("No file for", code, "Skipping") 23 | else: 24 | with io.open(path, "r", encoding="utf-8") as f: 25 | if self.verbosity > 1: 26 | print("Found file", path) 27 | self.render(code, f.read()) 28 | 29 | def render(self, code, json): 30 | path = os.path.join( 31 | settings.STATIC_ROOT, 32 | "storage/src/locale/", 33 | "{code}.js".format(code=code) 34 | ) 35 | with io.open(path, "w", encoding="utf-8") as f: 36 | content = render_to_string('leaflet_storage/locale.js', { 37 | "locale": json, 38 | "locale_code": code 39 | }) 40 | if self.verbosity > 1: 41 | print("Exporting to", path) 42 | f.write(content) 43 | -------------------------------------------------------------------------------- /leaflet_storage/managers.py: -------------------------------------------------------------------------------- 1 | from django.contrib.gis.db import models 2 | 3 | 4 | class PublicManager(models.GeoManager): 5 | 6 | def get_queryset(self): 7 | return super(PublicManager, self).get_queryset().filter( 8 | share_status=self.model.PUBLIC) 9 | -------------------------------------------------------------------------------- /leaflet_storage/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | import django.contrib.gis.db.models.fields 6 | import leaflet_storage.models 7 | import django.db.models.deletion 8 | from django.conf import settings 9 | import leaflet_storage.fields 10 | 11 | 12 | class Migration(migrations.Migration): 13 | 14 | dependencies = [ 15 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 16 | ] 17 | 18 | operations = [ 19 | migrations.CreateModel( 20 | name='DataLayer', 21 | fields=[ 22 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 23 | ('name', models.CharField(max_length=200, verbose_name='name')), 24 | ('description', models.TextField(null=True, verbose_name='description', blank=True)), 25 | ('geojson', models.FileField(null=True, upload_to=leaflet_storage.models.upload_to, blank=True)), 26 | ('display_on_load', models.BooleanField(default=False, help_text='Display this layer on load.', verbose_name='display on load')), 27 | ], 28 | options={ 29 | 'ordering': ('name',), 30 | 'abstract': False, 31 | }, 32 | ), 33 | migrations.CreateModel( 34 | name='Licence', 35 | fields=[ 36 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 37 | ('name', models.CharField(max_length=200, verbose_name='name')), 38 | ('details', models.URLField(help_text='Link to a page where the licence is detailed.', verbose_name='details')), 39 | ], 40 | options={ 41 | 'ordering': ('name',), 42 | 'abstract': False, 43 | }, 44 | ), 45 | migrations.CreateModel( 46 | name='Map', 47 | fields=[ 48 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 49 | ('name', models.CharField(max_length=200, verbose_name='name')), 50 | ('slug', models.SlugField()), 51 | ('description', models.TextField(null=True, verbose_name='description', blank=True)), 52 | ('center', django.contrib.gis.db.models.fields.PointField(srid=4326, verbose_name='center', geography=True)), 53 | ('zoom', models.IntegerField(default=7, verbose_name='zoom')), 54 | ('locate', models.BooleanField(default=False, help_text='Locate user on load?', verbose_name='locate')), 55 | ('modified_at', models.DateTimeField(auto_now=True)), 56 | ('edit_status', models.SmallIntegerField(default=3, verbose_name='edit status', choices=[(1, 'Everyone can edit'), (2, 'Only editors can edit'), (3, 'Only owner can edit')])), 57 | ('share_status', models.SmallIntegerField(default=1, verbose_name='share status', choices=[(1, 'everyone (public)'), (2, 'anyone with link'), (3, 'editors only')])), 58 | ('settings', leaflet_storage.fields.DictField(null=True, verbose_name='settings', blank=True)), 59 | ('editors', models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='editors', blank=True)), 60 | ('licence', models.ForeignKey(on_delete=django.db.models.deletion.SET_DEFAULT, default=leaflet_storage.models.get_default_licence, verbose_name='licence', to='leaflet_storage.Licence', help_text='Choose the map licence.')), 61 | ('owner', models.ForeignKey(related_name='owned_maps', verbose_name='owner', blank=True, to=settings.AUTH_USER_MODEL, null=True)), 62 | ], 63 | options={ 64 | 'ordering': ('name',), 65 | 'abstract': False, 66 | }, 67 | ), 68 | migrations.CreateModel( 69 | name='Pictogram', 70 | fields=[ 71 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 72 | ('name', models.CharField(max_length=200, verbose_name='name')), 73 | ('attribution', models.CharField(max_length=300)), 74 | ('pictogram', models.ImageField(upload_to=b'pictogram')), 75 | ], 76 | options={ 77 | 'ordering': ('name',), 78 | 'abstract': False, 79 | }, 80 | ), 81 | migrations.CreateModel( 82 | name='TileLayer', 83 | fields=[ 84 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 85 | ('name', models.CharField(max_length=200, verbose_name='name')), 86 | ('url_template', models.CharField(help_text='URL template using OSM tile format', max_length=200)), 87 | ('minZoom', models.IntegerField(default=0)), 88 | ('maxZoom', models.IntegerField(default=18)), 89 | ('attribution', models.CharField(max_length=300)), 90 | ('rank', models.SmallIntegerField(help_text='Order of the tilelayers in the edit box', null=True, blank=True)), 91 | ], 92 | options={ 93 | 'ordering': ('rank', 'name'), 94 | }, 95 | ), 96 | migrations.AddField( 97 | model_name='map', 98 | name='tilelayer', 99 | field=models.ForeignKey(related_name='maps', verbose_name='background', blank=True, to='leaflet_storage.TileLayer', null=True), 100 | ), 101 | migrations.AddField( 102 | model_name='datalayer', 103 | name='map', 104 | field=models.ForeignKey(to='leaflet_storage.Map'), 105 | ), 106 | ] 107 | -------------------------------------------------------------------------------- /leaflet_storage/migrations/0002_auto_20160520_1114.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.5 on 2016-05-20 11:14 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('leaflet_storage', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='datalayer', 17 | name='rank', 18 | field=models.SmallIntegerField(default=0), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /leaflet_storage/migrations/0003_auto_20160910_0624.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.1 on 2016-09-10 06:24 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('leaflet_storage', '0002_auto_20160520_1114'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterModelOptions( 16 | name='datalayer', 17 | options={'ordering': ('rank',)}, 18 | ), 19 | migrations.AlterField( 20 | model_name='pictogram', 21 | name='pictogram', 22 | field=models.ImageField(upload_to='pictogram'), 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /leaflet_storage/migrations/0004_tilelayer_tms.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11 on 2017-04-26 12:58 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('leaflet_storage', '0003_auto_20160910_0624'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='tilelayer', 17 | name='tms', 18 | field=models.BooleanField(default=False), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /leaflet_storage/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/migrations/__init__.py -------------------------------------------------------------------------------- /leaflet_storage/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% block title %}Leaflet Storage Map{% endblock %} 5 | {% block extra_head %} 6 | {% endblock %} 7 | 8 | 9 | {% block extrabody %} 10 | {% endblock %} 11 | {% block body %} 12 | 16 | 20 |
21 | {% block content %} 22 | {% endblock %} 23 |
24 | 28 | {% endblock %} 29 | 30 | 31 | -------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/css.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/js.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | {% if locale %} 24 | 25 | {% endif %} 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/locale.js: -------------------------------------------------------------------------------- 1 | var locale = {{ locale|safe }}; 2 | L.registerLocale("{{ locale_code }}", locale); 3 | L.setLocale("{{ locale_code }}"); -------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/login_popup_end.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 |

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

3 | 4 | -------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/map_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load leaflet_storage_tags %} 3 | {% block title %}{{ map.name }}{% endblock %} 4 | {% block body_class %}map_detail{% endblock %} 5 | 6 | {% block extra_head %} 7 | {{ block.super }} 8 | {% leaflet_storage_css %} 9 | {% leaflet_storage_js locale=locale %} 10 | {% if object.share_status != object.PUBLIC %} 11 | 12 | {% endif %} 13 | {% endblock %} 14 | 15 | {% block content %} 16 | {% block map_init %} 17 | {% include "leaflet_storage/map_init.html" %} 18 | {% endblock %} 19 | {% include "leaflet_storage/map_messages.html" %} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/map_fragment.html: -------------------------------------------------------------------------------- 1 | {% load leaflet_storage_tags %} 2 |
3 | 6 | -------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/map_init.html: -------------------------------------------------------------------------------- 1 | {% load leaflet_storage_tags %} 2 |
3 | 6 | -------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/map_messages.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/map_update_permissions.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 |

{% trans "Map permissions" %}

3 |
4 | {% csrf_token %} 5 | {{ form }} 6 | 7 |
-------------------------------------------------------------------------------- /leaflet_storage/templates/leaflet_storage/success.html: -------------------------------------------------------------------------------- 1 | ok -------------------------------------------------------------------------------- /leaflet_storage/templates/registration/login.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 |
{% trans "Please log in to proceed" %}
3 | {% if form.errors %} 4 |

{% trans "Your username and password didn't match. Please try again." %}

5 | {% endif %} 6 | 7 |
8 | {% csrf_token %} 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
{{ form.username.label_tag }}{{ form.username }}
{{ form.password.label_tag }}{{ form.password }}
19 | 20 | 21 | 22 |
-------------------------------------------------------------------------------- /leaflet_storage/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/leaflet_storage/templatetags/__init__.py -------------------------------------------------------------------------------- /leaflet_storage/templatetags/leaflet_storage_tags.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | from django import template 4 | from django.conf import settings 5 | 6 | from ..models import DataLayer, TileLayer 7 | from ..views import _urls_for_js 8 | 9 | register = template.Library() 10 | 11 | 12 | @register.inclusion_tag('leaflet_storage/css.html') 13 | def leaflet_storage_css(): 14 | return { 15 | "STATIC_URL": settings.STATIC_URL 16 | } 17 | 18 | 19 | @register.inclusion_tag('leaflet_storage/js.html') 20 | def leaflet_storage_js(locale=None): 21 | return { 22 | "STATIC_URL": settings.STATIC_URL, 23 | "locale": locale 24 | } 25 | 26 | 27 | @register.inclusion_tag('leaflet_storage/map_fragment.html') 28 | def map_fragment(map_instance, **kwargs): 29 | layers = DataLayer.objects.filter(map=map_instance) 30 | datalayer_data = [c.metadata for c in layers] 31 | tilelayers = TileLayer.get_list() # TODO: no need to all 32 | map_settings = map_instance.settings 33 | if "properties" not in map_settings: 34 | map_settings['properties'] = {} 35 | map_settings['properties'].update({ 36 | 'tilelayers': tilelayers, 37 | 'datalayers': datalayer_data, 38 | 'urls': _urls_for_js(), 39 | 'STATIC_URL': settings.STATIC_URL, 40 | "allowEdit": False, 41 | 'hash': False, 42 | 'attributionControl': False, 43 | 'scrollWheelZoom': False, 44 | 'storageAttributionControl': False, 45 | 'noControl': True, 46 | 'storage_id': map_instance.pk, 47 | 'onLoadPanel': "none", 48 | 'captionBar': False, 49 | 'default_iconUrl': "%sstorage/src/img/marker.png" % settings.STATIC_URL, 50 | 'slideshow': {} 51 | }) 52 | map_settings['properties'].update(kwargs) 53 | prefix = kwargs.pop('prefix', None) or 'map_' 54 | return { 55 | "map_settings": json.dumps(map_settings), 56 | "map": map_instance, 57 | "prefix": prefix 58 | } 59 | 60 | 61 | @register.simple_tag 62 | def tilelayer_preview(tilelayer): 63 | """ 64 | Return an tag with a tile of the tilelayer. 65 | """ 66 | output = '{alt}' 67 | url = tilelayer.url_template.format(s="a", z=9, x=265, y=181) 68 | output = output.format(src=url, alt=tilelayer.name, title=tilelayer.name) 69 | return output 70 | 71 | 72 | @register.filter 73 | def notag(s): 74 | return s.replace('<', '<') 75 | -------------------------------------------------------------------------------- /leaflet_storage/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url 2 | from django.contrib.auth.views import login 3 | from django.views.decorators.csrf import ensure_csrf_cookie 4 | from django.views.decorators.cache import never_cache, cache_control 5 | 6 | from . import views 7 | from .decorators import jsonize_view, map_permissions_check,\ 8 | login_required_if_not_anonymous_allowed 9 | from .utils import decorated_patterns 10 | 11 | urlpatterns = [ 12 | url(r'^login/$', jsonize_view(login), name='login'), # noqa 13 | url(r'^login/popup/end/$', views.LoginPopupEnd.as_view(), 14 | name='login_popup_end'), 15 | url(r'^logout/$', views.logout, name='logout'), 16 | url(r'^map/(?P\d+)/geojson/$', views.MapViewGeoJSON.as_view(), 17 | name='map_geojson'), 18 | url(r'^map/(?P[-_\w]+)/(?P[-_\w]+)/$', 19 | views.MapOldUrl.as_view(), name='map_old_url'), 20 | url(r'^map/anonymous-edit/(?P.+)$', 21 | views.MapAnonymousEditUrl.as_view(), name='map_anonymous_edit_url'), 22 | url(r'^m/(?P\d+)/$', views.MapShortUrl.as_view(), 23 | name='map_short_url'), 24 | url(r'^pictogram/json/$', views.PictogramJSONList.as_view(), 25 | name='pictogram_list_json'), 26 | ] 27 | urlpatterns += decorated_patterns(cache_control(must_revalidate=True), 28 | url(r'^datalayer/(?P[\d]+)/$', views.DataLayerView.as_view(), name='datalayer_view'), # noqa 29 | url(r'^datalayer/(?P[\d]+)/versions/$', views.DataLayerVersions.as_view(), name='datalayer_versions'), # noqa 30 | url(r'^datalayer/(?P[\d]+)/(?P[_\w]+.geojson)$', views.DataLayerVersion.as_view(), name='datalayer_version'), # noqa 31 | ) 32 | urlpatterns += decorated_patterns([ensure_csrf_cookie], 33 | url(r'^map/(?P[-_\w]+)_(?P\d+)$', views.MapView.as_view(), name='map'), # noqa 34 | url(r'^map/new/$', views.MapNew.as_view(), name='map_new'), 35 | ) 36 | urlpatterns += decorated_patterns( 37 | [login_required_if_not_anonymous_allowed, never_cache], 38 | url(r'^map/create/$', views.MapCreate.as_view(), name='map_create'), 39 | ) 40 | urlpatterns += decorated_patterns( 41 | [map_permissions_check, never_cache], 42 | url(r'^map/(?P[\d]+)/update/settings/$', views.MapUpdate.as_view(), 43 | name='map_update'), 44 | url(r'^map/(?P[\d]+)/update/permissions/$', 45 | views.UpdateMapPermissions.as_view(), name='map_update_permissions'), 46 | url(r'^map/(?P[\d]+)/update/delete/$', 47 | views.MapDelete.as_view(), name='map_delete'), 48 | url(r'^map/(?P[\d]+)/update/clone/$', 49 | views.MapClone.as_view(), name='map_clone'), 50 | url(r'^map/(?P[\d]+)/datalayer/create/$', 51 | views.DataLayerCreate.as_view(), name='datalayer_create'), 52 | url(r'^map/(?P[\d]+)/datalayer/update/(?P\d+)/$', 53 | views.DataLayerUpdate.as_view(), name='datalayer_update'), 54 | url(r'^map/(?P[\d]+)/datalayer/delete/(?P\d+)/$', 55 | views.DataLayerDelete.as_view(), name='datalayer_delete'), 56 | ) 57 | -------------------------------------------------------------------------------- /leaflet_storage/utils.py: -------------------------------------------------------------------------------- 1 | import gzip 2 | 3 | from django.core.urlresolvers import get_resolver 4 | from django.core.urlresolvers import RegexURLPattern, RegexURLResolver 5 | 6 | 7 | def get_uri_template(urlname, args=None, prefix=""): 8 | ''' 9 | Utility function to return an URI Template from a named URL in django 10 | Copied from django-digitalpaper. 11 | 12 | Restrictions: 13 | - Only supports named urls! i.e. url(... name="toto") 14 | - Only support one namespace level 15 | - Only returns the first URL possibility. 16 | - Supports multiple pattern possibilities (i.e., patterns with 17 | non-capturing parenthesis in them) by trying to find a pattern 18 | whose optional parameters match those you specified (a parameter 19 | is considered optional if it doesn't appear in every pattern possibility) 20 | ''' 21 | def _convert(template, args=None): 22 | """URI template converter""" 23 | if not args: 24 | args = [] 25 | paths = template % dict([p, "{%s}" % p] for p in args) 26 | return u'%s/%s' % (prefix, paths) 27 | 28 | resolver = get_resolver(None) 29 | parts = urlname.split(':') 30 | if len(parts) > 1 and parts[0] in resolver.namespace_dict: 31 | namespace = parts[0] 32 | urlname = parts[1] 33 | nprefix, resolver = resolver.namespace_dict[namespace] 34 | prefix = prefix + '/' + nprefix.rstrip('/') 35 | possibilities = resolver.reverse_dict.getlist(urlname) 36 | for tmp in possibilities: 37 | possibility, pattern = tmp[:2] 38 | if not args: 39 | # If not args are specified, we only consider the first pattern 40 | # django gives us 41 | result, params = possibility[0] 42 | return _convert(result, params) 43 | else: 44 | # If there are optionnal arguments passed, use them to try to find 45 | # the correct pattern. 46 | # First, we need to build a list with all the arguments 47 | seen_params = [] 48 | for result, params in possibility: 49 | seen_params.append(params) 50 | # Then build a set to find the common ones, and use it to build the 51 | # list of all the expected params 52 | common_params = reduce(lambda x, y: set(x) & set(y), seen_params) 53 | expected_params = sorted(common_params.union(args)) 54 | # Then loop again over the pattern possibilities and return 55 | # the first one that strictly match expected params 56 | for result, params in possibility: 57 | if sorted(params) == expected_params: 58 | return _convert(result, params) 59 | return None 60 | 61 | 62 | class DecoratedURLPattern(RegexURLPattern): 63 | 64 | def resolve(self, *args, **kwargs): 65 | result = RegexURLPattern.resolve(self, *args, **kwargs) 66 | if result: 67 | for func in self._decorate_with: 68 | result.func = func(result.func) 69 | return result 70 | 71 | 72 | def decorated_patterns(func, *urls): 73 | """ 74 | Utility function to decorate a group of url in urls.py 75 | 76 | Taken from http://djangosnippets.org/snippets/532/ + comments 77 | See also http://friendpaste.com/6afByRiBB9CMwPft3a6lym 78 | 79 | Example: 80 | urlpatterns = [ 81 | url(r'^language/(?P[a-z]+)$', views.MyView, name='name'), 82 | ] + decorated_patterns(login_required, url(r'^', include('cms.urls')), 83 | """ 84 | 85 | def decorate(urls, func): 86 | for url in urls: 87 | if isinstance(url, RegexURLPattern): 88 | url.__class__ = DecoratedURLPattern 89 | if not hasattr(url, "_decorate_with"): 90 | setattr(url, "_decorate_with", []) 91 | url._decorate_with.append(func) 92 | elif isinstance(url, RegexURLResolver): 93 | for pp in url.url_patterns: 94 | if isinstance(pp, RegexURLPattern): 95 | pp.__class__ = DecoratedURLPattern 96 | if not hasattr(pp, "_decorate_with"): 97 | setattr(pp, "_decorate_with", []) 98 | pp._decorate_with.append(func) 99 | if func: 100 | if not isinstance(func, (list, tuple)): 101 | func = [func] 102 | for f in func: 103 | decorate(urls, f) 104 | 105 | return urls 106 | 107 | 108 | def gzip_file(from_path, to_path): 109 | with open(from_path, 'rb') as f_in: 110 | with gzip.open(to_path, 'wb') as f_out: 111 | f_out.writelines(f_in) 112 | -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | DJANGO_SETTINGS_MODULE=tests.settings 3 | -------------------------------------------------------------------------------- /requirements-dev.txt: -------------------------------------------------------------------------------- 1 | -e . 2 | Django==1.11 3 | psycopg2==2.7.1 4 | Pillow==4.1.0 5 | factory-boy==2.8.1 6 | pytest==3.0.7 7 | pytest-django==3.1.2 8 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import codecs 5 | 6 | from setuptools import setup, find_packages 7 | 8 | import leaflet_storage 9 | 10 | long_description = codecs.open('README.md', "r", "utf-8").read() 11 | 12 | setup( 13 | name="django-leaflet-storage", 14 | version=leaflet_storage.__version__, 15 | author=leaflet_storage.__author__, 16 | author_email=leaflet_storage.__contact__, 17 | description=leaflet_storage.__doc__, 18 | keywords="django leaflet geodjango", 19 | url=leaflet_storage.__homepage__, 20 | download_url="https://github.com/yohanboniface/django-leaflet-storage/downloads", 21 | packages=find_packages(), 22 | include_package_data=True, 23 | platforms=["any"], 24 | zip_safe=False, 25 | long_description=long_description, 26 | 27 | classifiers=[ 28 | "Development Status :: 3 - Alpha", 29 | "Environment :: Web Environment", 30 | "Intended Audience :: Developers", 31 | #"License :: OSI Approved :: MIT License", 32 | "Operating System :: OS Independent", 33 | "Topic :: Software Development :: Libraries :: Python Modules", 34 | "Programming Language :: Python", 35 | ], 36 | ) 37 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/umap-project/django-leaflet-storage/c81972e524b1e09ffca355bfb7edfdede42dcc59/tests/__init__.py -------------------------------------------------------------------------------- /tests/base.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | import factory 4 | from django.contrib.auth import get_user_model 5 | from django.core.urlresolvers import reverse 6 | 7 | from leaflet_storage.forms import DEFAULT_CENTER 8 | from leaflet_storage.models import DataLayer, Licence, Map, TileLayer 9 | 10 | User = get_user_model() 11 | 12 | 13 | class LicenceFactory(factory.DjangoModelFactory): 14 | name = "WTFPL" 15 | 16 | class Meta: 17 | model = Licence 18 | 19 | 20 | class TileLayerFactory(factory.DjangoModelFactory): 21 | name = "Test zoom layer" 22 | url_template = "http://{s}.test.org/{z}/{x}/{y}.png" 23 | attribution = "Test layer attribution" 24 | 25 | class Meta: 26 | model = TileLayer 27 | 28 | 29 | class UserFactory(factory.DjangoModelFactory): 30 | username = 'Joe' 31 | email = factory.LazyAttribute( 32 | lambda a: '{0}@example.com'.format(a.username).lower()) 33 | 34 | @classmethod 35 | def _prepare(cls, create, **kwargs): 36 | password = kwargs.pop('password', None) 37 | user = super(UserFactory, cls)._prepare(create, **kwargs) 38 | if password: 39 | user.set_password(password) 40 | if create: 41 | user.save() 42 | return user 43 | 44 | class Meta: 45 | model = User 46 | 47 | 48 | class MapFactory(factory.DjangoModelFactory): 49 | name = "test map" 50 | slug = "test-map" 51 | center = DEFAULT_CENTER 52 | settings = { 53 | 'geometry': { 54 | 'coordinates': [13.447265624999998, 48.94415123418794], 55 | 'type': 'Point' 56 | }, 57 | 'properties': { 58 | 'datalayersControl': True, 59 | 'description': 'Which is just the Danube, at the end', 60 | 'displayCaptionOnLoad': False, 61 | 'displayDataBrowserOnLoad': False, 62 | 'displayPopupFooter': False, 63 | 'licence': '', 64 | 'miniMap': False, 65 | 'moreControl': True, 66 | 'name': 'Cruising on the Donau', 67 | 'scaleControl': True, 68 | 'tilelayer': { 69 | 'attribution': u'\xa9 OSM Contributors', 70 | 'maxZoom': 18, 71 | 'minZoom': 0, 72 | 'url_template': 'http://{s}.osm.fr/{z}/{x}/{y}.png' 73 | }, 74 | 'tilelayersControl': True, 75 | 'zoom': 7, 76 | 'zoomControl': True 77 | }, 78 | 'type': 'Feature' 79 | } 80 | 81 | licence = factory.SubFactory(LicenceFactory) 82 | owner = factory.SubFactory(UserFactory) 83 | 84 | class Meta: 85 | model = Map 86 | 87 | 88 | class DataLayerFactory(factory.DjangoModelFactory): 89 | map = factory.SubFactory(MapFactory) 90 | name = "test datalayer" 91 | description = "test description" 92 | display_on_load = True 93 | geojson = factory.django.FileField(data="""{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[13.68896484375,48.55297816440071]},"properties":{"_storage_options":{"color":"DarkCyan","iconClass":"Ball"},"name":"Here","description":"Da place anonymous again 755"}}],"_storage":{"displayOnLoad":true,"name":"Donau","id":926}}""") # noqa 94 | 95 | class Meta: 96 | model = DataLayer 97 | 98 | 99 | def login_required(response): 100 | assert response.status_code == 200 101 | j = json.loads(response.content.decode()) 102 | assert 'login_required' in j 103 | redirect_url = reverse('login') 104 | assert j['login_required'] == redirect_url 105 | return True 106 | -------------------------------------------------------------------------------- /tests/conftest.py: -------------------------------------------------------------------------------- 1 | import shutil 2 | import tempfile 3 | 4 | import pytest 5 | from django.core.signing import get_cookie_signer 6 | 7 | from .base import (DataLayerFactory, LicenceFactory, MapFactory, 8 | TileLayerFactory, UserFactory) 9 | 10 | TMP_ROOT = tempfile.mkdtemp() 11 | 12 | 13 | def pytest_configure(config): 14 | from django.conf import settings 15 | settings.MEDIA_ROOT = TMP_ROOT 16 | 17 | 18 | def pytest_unconfigure(config): 19 | shutil.rmtree(TMP_ROOT, ignore_errors=True) 20 | 21 | 22 | @pytest.fixture 23 | def user(): 24 | return UserFactory(password="123123") 25 | 26 | 27 | @pytest.fixture 28 | def licence(): 29 | return LicenceFactory() 30 | 31 | 32 | @pytest.fixture 33 | def map(licence, tilelayer): 34 | user = UserFactory(username="Gabriel", password="123123") 35 | return MapFactory(owner=user, licence=licence) 36 | 37 | 38 | @pytest.fixture 39 | def anonymap(map): 40 | map.owner = None 41 | map.save() 42 | return map 43 | 44 | 45 | @pytest.fixture 46 | def cookieclient(client, anonymap): 47 | key, value = anonymap.signed_cookie_elements 48 | client.cookies[key] = get_cookie_signer(salt=key).sign(value) 49 | return client 50 | 51 | 52 | @pytest.fixture 53 | def allow_anonymous(settings): 54 | settings.LEAFLET_STORAGE_ALLOW_ANONYMOUS = True 55 | 56 | 57 | @pytest.fixture 58 | def datalayer(map): 59 | return DataLayerFactory(map=map, name="Default Datalayer") 60 | 61 | 62 | @pytest.fixture 63 | def tilelayer(): 64 | return TileLayerFactory() 65 | -------------------------------------------------------------------------------- /tests/fixtures/test_upload_data.csv: -------------------------------------------------------------------------------- 1 | Foo,Latitude,geo_Longitude,title,description 2 | bar,41.34,122.86,a point somewhere,the description of this point -------------------------------------------------------------------------------- /tests/fixtures/test_upload_data.gpx: -------------------------------------------------------------------------------- 1 | 7 | 1374Simple PointSimple description 8 | 9 | Simple path 10 | Simple description 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /tests/fixtures/test_upload_data.json: -------------------------------------------------------------------------------- 1 | { 2 | "crs": null, 3 | "type": "FeatureCollection", 4 | "features": [ 5 | { 6 | "geometry": { 7 | "type": "Point", 8 | "coordinates": [ 9 | -0.1318359375, 10 | 51.474540439419755 11 | ] 12 | }, 13 | "type": "Feature", 14 | "properties": { 15 | "name": "London", 16 | "description": "London description", 17 | "color": "Pink" 18 | } 19 | }, 20 | { 21 | "geometry": { 22 | "type": "Point", 23 | "coordinates": [ 24 | 4.350585937499999, 25 | 51.26878915771344 26 | ] 27 | }, 28 | "type": "Feature", 29 | "properties": { 30 | "name": "Antwerpen", 31 | "description": "" 32 | } 33 | }, 34 | { 35 | "geometry": { 36 | "type": "LineString", 37 | "coordinates": [ 38 | [ 39 | 2.4005126953125, 40 | 48.81228985866255 41 | ], 42 | [ 43 | 2.78228759765625, 44 | 48.89903236496008 45 | ], 46 | [ 47 | 2.845458984375, 48 | 48.89903236496008 49 | ], 50 | [ 51 | 2.86468505859375, 52 | 48.96218736991556 53 | ], 54 | [ 55 | 2.9278564453125, 56 | 48.93693495409401 57 | ], 58 | [ 59 | 2.93060302734375, 60 | 48.99283383694349 61 | ], 62 | [ 63 | 3.04046630859375, 64 | 49.01085236926211 65 | ], 66 | [ 67 | 3.0157470703125, 68 | 48.96038404976431 69 | ], 70 | [ 71 | 3.12286376953125, 72 | 48.94415123418794 73 | ], 74 | [ 75 | 3.1805419921874996, 76 | 48.99824008113872 77 | ], 78 | [ 79 | 3.2684326171875, 80 | 48.95497369808868 81 | ], 82 | [ 83 | 3.53759765625, 84 | 49.0900564769189 85 | ], 86 | [ 87 | 3.57330322265625, 88 | 49.057670047140604 89 | ], 90 | [ 91 | 3.72161865234375, 92 | 49.095452162534826 93 | ], 94 | [ 95 | 3.9578247070312496, 96 | 49.06486885623368 97 | ] 98 | ] 99 | }, 100 | "type": "Feature", 101 | "properties": { 102 | "name": "2011" 103 | } 104 | }, 105 | { 106 | "geometry": { 107 | "type": "Polygon", 108 | "coordinates": [ 109 | [ 110 | [ 111 | 10.04150390625, 112 | 52.70967533219883 113 | ], 114 | [ 115 | 8.800048828125, 116 | 51.80182150078305 117 | ], 118 | [ 119 | 11.271972656249998, 120 | 51.12421275782688 121 | ], 122 | [ 123 | 12.689208984375, 124 | 52.214338608258196 125 | ], 126 | [ 127 | 10.04150390625, 128 | 52.70967533219883 129 | ] 130 | ] 131 | ] 132 | }, 133 | "type": "Feature", 134 | "properties": { 135 | "name": "test" 136 | } 137 | }, 138 | { 139 | "geometry": { 140 | "type": "Polygon", 141 | "coordinates": [ 142 | [ 143 | [ 144 | 7.327880859374999, 145 | 50.52041218671901 146 | ], 147 | [ 148 | 6.064453125, 149 | 49.6462914122132 150 | ], 151 | [ 152 | 7.503662109375, 153 | 49.54659778073743 154 | ], 155 | [ 156 | 6.8115234375, 157 | 49.167338606291075 158 | ], 159 | [ 160 | 9.635009765625, 161 | 48.99463598353408 162 | ], 163 | [ 164 | 10.557861328125, 165 | 49.937079756975294 166 | ], 167 | [ 168 | 8.4814453125, 169 | 49.688954878870305 170 | ], 171 | [ 172 | 9.173583984375, 173 | 51.04830113331224 174 | ], 175 | [ 176 | 7.327880859374999, 177 | 50.52041218671901 178 | ] 179 | ] 180 | ] 181 | }, 182 | "type": "Feature", 183 | "properties": { 184 | "name": "test polygon 2" 185 | } 186 | } 187 | ] 188 | } -------------------------------------------------------------------------------- /tests/fixtures/test_upload_data.kml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Simple point 5 | Here is a simple description. 6 | 7 | -122.0822035425683,37.42228990140251,0 8 | 9 | 10 | 11 | Simple path 12 | Simple description 13 | 14 | -112.2550785337791,36.07954952145647,2357 -112.2549277039738,36.08117083492122,2357 -112.2552505069063,36.08260761307279,2357 15 | 16 | 17 | 18 | Simple polygon 19 | A description. 20 | 21 | 22 | 23 | 24 | -77.05788457660967,38.87253259892824,100 25 | -77.05465973756702,38.87291016281703,100 26 | -77.05315536854791,38.87053267794386,100 27 | -77.05788457660967,38.87253259892824,100 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /tests/fixtures/test_upload_empty_coordinates.json: -------------------------------------------------------------------------------- 1 | { 2 | "crs": null, 3 | "type": "FeatureCollection", 4 | "features": [ 5 | { 6 | "geometry": { 7 | "type": "Point", 8 | "coordinates": [] 9 | }, 10 | "type": "Feature", 11 | "properties": { 12 | "name": "London" 13 | } 14 | }, 15 | { 16 | "geometry": { 17 | "type": "LineString", 18 | "coordinates": [] 19 | }, 20 | "type": "Feature", 21 | "properties": { 22 | "name": "2011" 23 | } 24 | }, 25 | { 26 | "geometry": { 27 | "type": "Polygon", 28 | "coordinates": [[]] 29 | }, 30 | "type": "Feature", 31 | "properties": { 32 | "name": "test" 33 | } 34 | } 35 | ] 36 | } -------------------------------------------------------------------------------- /tests/fixtures/test_upload_missing_name.json: -------------------------------------------------------------------------------- 1 | { 2 | "crs": null, 3 | "type": "FeatureCollection", 4 | "features": [ 5 | { 6 | "geometry": { 7 | "type": "Point", 8 | "coordinates": [ 9 | -0.1318359375, 10 | 51.474540439419755 11 | ] 12 | }, 13 | "type": "Feature", 14 | "properties": { 15 | "name": "London" 16 | } 17 | }, 18 | { 19 | "geometry": { 20 | "type": "Point", 21 | "coordinates": [ 22 | 4.350585937499999, 23 | 51.26878915771344 24 | ] 25 | }, 26 | "type": "Feature", 27 | "properties": { 28 | "noname": "this feature is missing a name", 29 | "name": null 30 | } 31 | }, 32 | { 33 | "geometry": { 34 | "type": "LineString", 35 | "coordinates": [ 36 | [ 37 | 2.4005126953125, 38 | 48.81228985866255 39 | ], 40 | [ 41 | 2.78228759765625, 42 | 48.89903236496008 43 | ], 44 | [ 45 | 2.845458984375, 46 | 48.89903236496008 47 | ], 48 | [ 49 | 2.86468505859375, 50 | 48.96218736991556 51 | ], 52 | [ 53 | 2.9278564453125, 54 | 48.93693495409401 55 | ], 56 | [ 57 | 2.93060302734375, 58 | 48.99283383694349 59 | ], 60 | [ 61 | 3.04046630859375, 62 | 49.01085236926211 63 | ], 64 | [ 65 | 3.0157470703125, 66 | 48.96038404976431 67 | ], 68 | [ 69 | 3.12286376953125, 70 | 48.94415123418794 71 | ], 72 | [ 73 | 3.1805419921874996, 74 | 48.99824008113872 75 | ], 76 | [ 77 | 3.2684326171875, 78 | 48.95497369808868 79 | ], 80 | [ 81 | 3.53759765625, 82 | 49.0900564769189 83 | ], 84 | [ 85 | 3.57330322265625, 86 | 49.057670047140604 87 | ], 88 | [ 89 | 3.72161865234375, 90 | 49.095452162534826 91 | ], 92 | [ 93 | 3.9578247070312496, 94 | 49.06486885623368 95 | ] 96 | ] 97 | }, 98 | "type": "Feature", 99 | "properties": { 100 | "name": "2011" 101 | } 102 | }, 103 | { 104 | "geometry": { 105 | "type": "Polygon", 106 | "coordinates": [ 107 | [ 108 | [ 109 | 7.327880859374999, 110 | 50.52041218671901 111 | ], 112 | [ 113 | 6.064453125, 114 | 49.6462914122132 115 | ], 116 | [ 117 | 7.503662109375, 118 | 49.54659778073743 119 | ], 120 | [ 121 | 6.8115234375, 122 | 49.167338606291075 123 | ], 124 | [ 125 | 9.635009765625, 126 | 48.99463598353408 127 | ], 128 | [ 129 | 10.557861328125, 130 | 49.937079756975294 131 | ], 132 | [ 133 | 8.4814453125, 134 | 49.688954878870305 135 | ], 136 | [ 137 | 9.173583984375, 138 | 51.04830113331224 139 | ], 140 | [ 141 | 7.327880859374999, 142 | 50.52041218671901 143 | ] 144 | ] 145 | ] 146 | }, 147 | "type": "Feature", 148 | "properties": { 149 | "name": "test polygon 2" 150 | } 151 | } 152 | ] 153 | } -------------------------------------------------------------------------------- /tests/fixtures/test_upload_non_linear_ring.json: -------------------------------------------------------------------------------- 1 | { 2 | "crs": null, 3 | "type": "FeatureCollection", 4 | "features": [ 5 | { 6 | "geometry": { 7 | "type": "Polygon", 8 | "coordinates": [ 9 | [ 10 | [ 11 | 7.327880859374999, 12 | 50.52041218671901 13 | ], 14 | [ 15 | 6.064453125, 16 | 49.6462914122132 17 | ], 18 | [ 19 | 7.503662109375, 20 | 49.54659778073743 21 | ], 22 | [ 23 | 6.8115234375, 24 | 49.167338606291075 25 | ], 26 | [ 27 | 9.635009765625, 28 | 48.99463598353408 29 | ], 30 | [ 31 | 10.557861328125, 32 | 49.937079756975294 33 | ], 34 | [ 35 | 8.4814453125, 36 | 49.688954878870305 37 | ], 38 | [ 39 | 9.173583984375, 40 | 51.04830113331224 41 | ] 42 | ] 43 | ] 44 | }, 45 | "type": "Feature", 46 | "properties": { 47 | "name": "non linear ring" 48 | } 49 | } 50 | ] 51 | } -------------------------------------------------------------------------------- /tests/settings.py: -------------------------------------------------------------------------------- 1 | from django.conf.global_settings import * # noqa 2 | 3 | SECRET_KEY = 'fake-key' 4 | INSTALLED_APPS = [ 5 | "django.contrib.auth", 6 | "django.contrib.contenttypes", 7 | 'django.contrib.sessions', 8 | 'django.contrib.gis', 9 | "tests", 10 | "leaflet_storage", 11 | ] 12 | DATABASES = { 13 | 'default': { 14 | 'ENGINE': 'django.contrib.gis.db.backends.postgis', 15 | 'NAME': 'testdb', 16 | } 17 | } 18 | ROOT_URLCONF = 'leaflet_storage.urls' 19 | MIDDLEWARE_CLASSES = ( 20 | 'django.contrib.sessions.middleware.SessionMiddleware', 21 | 'django.middleware.locale.LocaleMiddleware', 22 | 'django.middleware.common.CommonMiddleware', 23 | 'django.middleware.csrf.CsrfViewMiddleware', 24 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 25 | 'django.contrib.messages.middleware.MessageMiddleware', 26 | 'django.middleware.http.ConditionalGetMiddleware', 27 | ) 28 | TEMPLATES = [ 29 | { 30 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 31 | 'APP_DIRS': True, 32 | 'DIRS': (), 33 | 'OPTIONS': { 34 | 'context_processors': [ 35 | 'django.contrib.auth.context_processors.auth', 36 | 'django.template.context_processors.debug', 37 | 'django.template.context_processors.i18n', 38 | 'django.template.context_processors.media', 39 | 'django.template.context_processors.static', 40 | 'django.template.context_processors.tz', 41 | 'django.contrib.messages.context_processors.messages' 42 | ] 43 | } 44 | }, 45 | ] 46 | LOGIN_URL = '/login/' 47 | SITE_URL = 'http://domain.org' 48 | TEST_RUNNER = 'leaflet_storage.runner.Runner' 49 | LEAFLET_STORAGE_KEEP_VERSIONS = 10 50 | -------------------------------------------------------------------------------- /tests/test_datalayer.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import pytest 4 | from django.core.files.base import ContentFile 5 | 6 | from .base import DataLayerFactory, MapFactory 7 | 8 | pytestmark = pytest.mark.django_db 9 | 10 | 11 | def test_datalayers_should_be_ordered_by_rank(map, datalayer): 12 | datalayer.rank = 5 13 | datalayer.save() 14 | c4 = DataLayerFactory(map=map, rank=4) 15 | c1 = DataLayerFactory(map=map, rank=1) 16 | c3 = DataLayerFactory(map=map, rank=3) 17 | c2 = DataLayerFactory(map=map, rank=2) 18 | assert list(map.datalayer_set.all()) == [c1, c2, c3, c4, datalayer] 19 | 20 | 21 | def test_upload_to(map, datalayer): 22 | map.pk = 302 23 | datalayer.pk = 17 24 | assert datalayer.upload_to().startswith('datalayer/2/0/302/17_') 25 | 26 | 27 | def test_save_should_use_pk_as_name(map, datalayer): 28 | assert "/{}_".format(datalayer.pk) in datalayer.geojson.name 29 | 30 | 31 | def test_same_geojson_file_name_will_be_suffixed(map, datalayer): 32 | before = datalayer.geojson.name 33 | datalayer.geojson.save(before, ContentFile("{}")) 34 | assert datalayer.geojson.name != before 35 | assert "/{}_".format(datalayer.pk) in datalayer.geojson.name 36 | 37 | 38 | def test_clone_should_return_new_instance(map, datalayer): 39 | clone = datalayer.clone() 40 | assert datalayer.pk != clone.pk 41 | assert datalayer.name == clone.name 42 | assert datalayer.map == clone.map 43 | 44 | 45 | def test_clone_should_update_map_if_passed(datalayer, user, licence): 46 | map = MapFactory(owner=user, licence=licence) 47 | clone = datalayer.clone(map_inst=map) 48 | assert datalayer.pk != clone.pk 49 | assert datalayer.name == clone.name 50 | assert datalayer.map != clone.map 51 | assert map == clone.map 52 | 53 | 54 | def test_clone_should_clone_geojson_too(datalayer): 55 | clone = datalayer.clone() 56 | assert datalayer.pk != clone.pk 57 | assert clone.geojson is not None 58 | assert clone.geojson.path != datalayer.geojson.path 59 | 60 | 61 | def test_should_remove_old_versions_on_save(datalayer, map, settings): 62 | settings.LEAFLET_STORAGE_KEEP_VERSIONS = 3 63 | root = datalayer.storage_root() 64 | before = len(datalayer.geojson.storage.listdir(root)[1]) 65 | newer = '%s/%s_1440924889.geojson' % (root, datalayer.pk) 66 | medium = '%s/%s_1440923687.geojson' % (root, datalayer.pk) 67 | older = '%s/%s_1440918637.geojson' % (root, datalayer.pk) 68 | for path in [medium, newer, older]: 69 | datalayer.geojson.storage.save(path, ContentFile("{}")) 70 | datalayer.geojson.storage.save(path + '.gz', ContentFile("{}")) 71 | assert len(datalayer.geojson.storage.listdir(root)[1]) == 6 + before 72 | datalayer.save() 73 | files = datalayer.geojson.storage.listdir(root)[1] 74 | assert len(files) == 5 75 | assert os.path.basename(newer) in files 76 | assert os.path.basename(newer + '.gz') in files 77 | assert os.path.basename(medium) in files 78 | assert os.path.basename(medium + '.gz') in files 79 | assert os.path.basename(datalayer.geojson.path) in files 80 | assert os.path.basename(older) not in files 81 | assert os.path.basename(older + '.gz') not in files 82 | -------------------------------------------------------------------------------- /tests/test_datalayer_views.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | import pytest 4 | from django.core.files.base import ContentFile 5 | from django.core.urlresolvers import reverse 6 | 7 | from leaflet_storage.models import DataLayer, Map 8 | 9 | from .base import MapFactory 10 | 11 | pytestmark = pytest.mark.django_db 12 | 13 | 14 | @pytest.fixture 15 | def post_data(): 16 | return { 17 | "name": 'name', 18 | "display_on_load": True, 19 | "rank": 0, 20 | "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":{"_storage_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":{"_storage_options":{},"name":"Light line"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[0.63720703125,51.15178610143037]},"properties":{"_storage_options":{},"name":"marker he"}}],"_storage":{"displayOnLoad":true,"name":"new name","id":1668,"remoteData":{},"color":"LightSeaGreen","description":"test"}}' # noqa 21 | } 22 | 23 | 24 | def test_get(client, settings, datalayer): 25 | url = reverse('datalayer_view', args=(datalayer.pk, )) 26 | response = client.get(url) 27 | if getattr(settings, 'LEAFLET_STORAGE_XSENDFILE_HEADER', None): 28 | assert response['ETag'] is not None 29 | assert response['Last-Modified'] is not None 30 | assert response['Cache-Control'] is not None 31 | assert 'Content-Encoding' not in response 32 | j = json.loads(response.content.decode()) 33 | assert '_storage' in j 34 | assert 'features' in j 35 | assert j['type'] == 'FeatureCollection' 36 | 37 | 38 | def test_update(client, datalayer, map, post_data): 39 | url = reverse('datalayer_update', args=(map.pk, datalayer.pk)) 40 | client.login(username=map.owner.username, password="123123") 41 | name = 'new name' 42 | rank = 2 43 | post_data['name'] = name 44 | post_data['rank'] = rank 45 | response = client.post(url, post_data, follow=True) 46 | assert response.status_code == 200 47 | modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) 48 | assert modified_datalayer.name == name 49 | assert modified_datalayer.rank == rank 50 | # Test response is a json 51 | j = json.loads(response.content.decode()) 52 | assert "id" in j 53 | assert datalayer.pk == j['id'] 54 | 55 | 56 | def test_should_not_be_possible_to_update_with_wrong_map_id_in_url(client, datalayer, map, post_data): # noqa 57 | other_map = MapFactory(owner=map.owner) 58 | url = reverse('datalayer_update', args=(other_map.pk, datalayer.pk)) 59 | client.login(username=map.owner.username, password="123123") 60 | name = 'new name' 61 | post_data['name'] = name 62 | response = client.post(url, post_data, follow=True) 63 | assert response.status_code == 403 64 | modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) 65 | assert modified_datalayer.name == datalayer.name 66 | 67 | 68 | def test_delete(client, datalayer, map): 69 | url = reverse('datalayer_delete', args=(map.pk, datalayer.pk)) 70 | client.login(username=map.owner.username, password='123123') 71 | response = client.post(url, {}, follow=True) 72 | assert response.status_code == 200 73 | assert not DataLayer.objects.filter(pk=datalayer.pk).count() 74 | # Check that map has not been impacted 75 | assert Map.objects.filter(pk=map.pk).exists() 76 | # Test response is a json 77 | j = json.loads(response.content.decode()) 78 | assert 'info' in j 79 | 80 | 81 | def test_should_not_be_possible_to_delete_with_wrong_map_id_in_url(client, datalayer, map): # noqa 82 | other_map = MapFactory(owner=map.owner) 83 | url = reverse('datalayer_delete', args=(other_map.pk, datalayer.pk)) 84 | client.login(username=map.owner.username, password='123123') 85 | response = client.post(url, {}, follow=True) 86 | assert response.status_code == 403 87 | assert DataLayer.objects.filter(pk=datalayer.pk).exists() 88 | 89 | 90 | def test_get_gzipped(client, datalayer, settings): 91 | url = reverse('datalayer_view', args=(datalayer.pk, )) 92 | response = client.get(url, HTTP_ACCEPT_ENCODING='gzip') 93 | if getattr(settings, 'LEAFLET_STORAGE_XSENDFILE_HEADER', None): 94 | assert response['ETag'] is not None 95 | assert response['Last-Modified'] is not None 96 | assert response['Cache-Control'] is not None 97 | assert response['Content-Encoding'] == 'gzip' 98 | 99 | 100 | def test_optimistic_concurrency_control_with_good_etag(client, datalayer, map, post_data): # noqa 101 | # Get Etag 102 | url = reverse('datalayer_view', args=(datalayer.pk, )) 103 | response = client.get(url) 104 | etag = response['ETag'] 105 | url = reverse('datalayer_update', 106 | args=(map.pk, datalayer.pk)) 107 | client.login(username=map.owner.username, password="123123") 108 | name = 'new name' 109 | post_data['name'] = 'new name' 110 | response = client.post(url, post_data, follow=True, HTTP_IF_MATCH=etag) 111 | assert response.status_code == 200 112 | modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) 113 | assert modified_datalayer.name == name 114 | 115 | 116 | def test_optimistic_concurrency_control_with_bad_etag(client, datalayer, map, post_data): # noqa 117 | url = reverse('datalayer_update', args=(map.pk, datalayer.pk)) 118 | client.login(username=map.owner.username, password='123123') 119 | name = 'new name' 120 | post_data['name'] = name 121 | response = client.post(url, post_data, follow=True, HTTP_IF_MATCH='xxx') 122 | assert response.status_code == 412 123 | modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) 124 | assert modified_datalayer.name != name 125 | 126 | 127 | def test_optimistic_concurrency_control_with_empty_etag(client, datalayer, map, post_data): # noqa 128 | url = reverse('datalayer_update', args=(map.pk, datalayer.pk)) 129 | client.login(username=map.owner.username, password='123123') 130 | name = 'new name' 131 | post_data['name'] = name 132 | response = client.post(url, post_data, follow=True, HTTP_IF_MATCH=None) 133 | assert response.status_code == 200 134 | modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) 135 | assert modified_datalayer.name == name 136 | 137 | 138 | def test_versions_should_return_versions(client, datalayer, map, settings): 139 | root = datalayer.storage_root() 140 | datalayer.geojson.storage.save( 141 | '%s/%s_1440924889.geojson' % (root, datalayer.pk), 142 | ContentFile("{}")) 143 | datalayer.geojson.storage.save( 144 | '%s/%s_1440923687.geojson' % (root, datalayer.pk), 145 | ContentFile("{}")) 146 | datalayer.geojson.storage.save( 147 | '%s/%s_1440918637.geojson' % (root, datalayer.pk), 148 | ContentFile("{}")) 149 | url = reverse('datalayer_versions', args=(datalayer.pk, )) 150 | versions = json.loads(client.get(url).content.decode()) 151 | assert len(versions['versions']) == 4 152 | version = {'name': '%s_1440918637.geojson' % datalayer.pk, 'size': 2, 153 | 'at': '1440918637'} 154 | assert version in versions['versions'] 155 | 156 | 157 | def test_version_should_return_one_version_geojson(client, datalayer, map): 158 | root = datalayer.storage_root() 159 | name = '%s_1440924889.geojson' % datalayer.pk 160 | datalayer.geojson.storage.save('%s/%s' % (root, name), ContentFile("{}")) 161 | url = reverse('datalayer_version', args=(datalayer.pk, name)) 162 | assert client.get(url).content.decode() == "{}" 163 | -------------------------------------------------------------------------------- /tests/test_fields.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | import pytest 4 | 5 | from leaflet_storage.models import Map 6 | 7 | pytestmark = pytest.mark.django_db 8 | 9 | 10 | def test_can_use_dict(map): 11 | d = {'locateControl': True} 12 | map.settings = d 13 | map.save() 14 | assert Map.objects.get(pk=map.pk).settings == d 15 | 16 | 17 | def test_can_set_item(map): 18 | d = {'locateControl': True} 19 | map.settings = d 20 | map.save() 21 | map_inst = Map.objects.get(pk=map.pk) 22 | map_inst.settings['color'] = 'DarkGreen' 23 | assert map_inst.settings['locateControl'] is True 24 | 25 | 26 | def test_should_return_a_dict_if_none(map): 27 | map.settings = None 28 | map.save() 29 | assert Map.objects.get(pk=map.pk).settings == {} 30 | 31 | 32 | def test_should_not_double_dumps(map): 33 | map.settings = '{"locate": true}' 34 | map.save() 35 | assert Map.objects.get(pk=map.pk).settings == {'locate': True} 36 | 37 | 38 | def test_value_to_string(map): 39 | d = {'locateControl': True} 40 | map.settings = d 41 | map.save() 42 | field = Map._meta.get_field('settings') 43 | assert json.loads(field.value_to_string(map)) == d 44 | -------------------------------------------------------------------------------- /tests/test_licence.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from leaflet_storage.models import DataLayer, Map 4 | 5 | pytestmark = pytest.mark.django_db 6 | 7 | 8 | def test_licence_delete_should_not_remove_linked_maps(map, licence, datalayer): 9 | assert map.licence == licence 10 | licence.delete() 11 | assert Map.objects.filter(pk=map.pk).exists() 12 | assert DataLayer.objects.filter(pk=datalayer.pk).exists() 13 | -------------------------------------------------------------------------------- /tests/test_map.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from django.contrib.auth.models import AnonymousUser 3 | from django.core.urlresolvers import reverse 4 | 5 | from leaflet_storage.models import Map 6 | 7 | from .base import MapFactory 8 | 9 | pytestmark = pytest.mark.django_db 10 | 11 | 12 | def test_anonymous_can_edit_if_status_anonymous(map): 13 | anonymous = AnonymousUser() 14 | map.edit_status = map.ANONYMOUS 15 | map.save() 16 | assert map.can_edit(anonymous) 17 | 18 | 19 | def test_anonymous_cannot_edit_if_not_status_anonymous(map): 20 | anonymous = AnonymousUser() 21 | map.edit_status = map.OWNER 22 | map.save() 23 | assert not map.can_edit(anonymous) 24 | 25 | 26 | def test_non_editors_can_edit_if_status_anonymous(map, user): 27 | assert map.owner != user 28 | map.edit_status = map.ANONYMOUS 29 | map.save() 30 | assert map.can_edit(user) 31 | 32 | 33 | def test_non_editors_cannot_edit_if_not_status_anonymous(map, user): 34 | map.edit_status = map.OWNER 35 | map.save() 36 | assert not map.can_edit(user) 37 | 38 | 39 | def test_editors_cannot_edit_if_status_owner(map, user): 40 | map.edit_status = map.OWNER 41 | map.editors.add(user) 42 | map.save() 43 | assert not map.can_edit(user) 44 | 45 | 46 | def test_editors_can_edit_if_status_editors(map, user): 47 | map.edit_status = map.EDITORS 48 | map.editors.add(user) 49 | map.save() 50 | assert map.can_edit(user) 51 | 52 | 53 | def test_logged_in_user_should_be_allowed_for_anonymous_map_with_anonymous_edit_status(map, user, rf): # noqa 54 | map.owner = None 55 | map.edit_status = map.ANONYMOUS 56 | map.save() 57 | url = reverse('map_update', kwargs={'map_id': map.pk}) 58 | request = rf.get(url) 59 | request.user = user 60 | assert map.can_edit(user, request) 61 | 62 | 63 | def test_clone_should_return_new_instance(map, user): 64 | clone = map.clone() 65 | assert map.pk != clone.pk 66 | assert u"Clone of " + map.name == clone.name 67 | assert map.settings == clone.settings 68 | assert map.center == clone.center 69 | assert map.zoom == clone.zoom 70 | assert map.licence == clone.licence 71 | assert map.tilelayer == clone.tilelayer 72 | 73 | 74 | def test_clone_should_keep_editors(map, user): 75 | map.editors.add(user) 76 | clone = map.clone() 77 | assert map.pk != clone.pk 78 | assert user in map.editors.all() 79 | assert user in clone.editors.all() 80 | 81 | 82 | def test_clone_should_update_owner_if_passed(map, user): 83 | clone = map.clone(owner=user) 84 | assert map.pk != clone.pk 85 | assert map.owner != clone.owner 86 | assert user == clone.owner 87 | 88 | 89 | def test_clone_should_clone_datalayers_and_features_too(map, user, datalayer): 90 | clone = map.clone() 91 | assert map.pk != clone.pk 92 | assert map.datalayer_set.count() == 1 93 | assert clone.datalayer_set.count() == 1 94 | other = clone.datalayer_set.all()[0] 95 | assert datalayer in map.datalayer_set.all() 96 | assert other.pk != datalayer.pk 97 | assert other.name == datalayer.name 98 | assert other.geojson is not None 99 | assert other.geojson.path != datalayer.geojson.path 100 | 101 | 102 | def test_publicmanager_should_get_only_public_maps(map, user, licence): 103 | map.share_status = map.PUBLIC 104 | open_map = MapFactory(owner=user, licence=licence, share_status=Map.OPEN) 105 | private_map = MapFactory(owner=user, licence=licence, 106 | share_status=Map.PRIVATE) 107 | assert map in Map.public.all() 108 | assert open_map not in Map.public.all() 109 | assert private_map not in Map.public.all() 110 | -------------------------------------------------------------------------------- /tests/test_tilelayer.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from .base import TileLayerFactory 4 | 5 | pytestmark = pytest.mark.django_db 6 | 7 | 8 | def test_tilelayer_json(): 9 | tilelayer = TileLayerFactory(attribution='Attribution', maxZoom=19, 10 | minZoom=0, name='Name', rank=1, tms=True, 11 | url_template='http://{s}.x.fr/{z}/{x}/{y}') 12 | assert tilelayer.json == { 13 | 'attribution': 'Attribution', 14 | 'id': tilelayer.id, 15 | 'maxZoom': 19, 16 | 'minZoom': 0, 17 | 'name': 'Name', 18 | 'rank': 1, 19 | 'tms': True, 20 | 'url_template': 'http://{s}.x.fr/{z}/{x}/{y}' 21 | } 22 | --------------------------------------------------------------------------------