[Git][debian-gis-team/qgis][upstream-ltr] New upstream version 2.18.18+dfsg

Bas Couwenberg gitlab at salsa.debian.org
Fri Mar 23 16:08:13 UTC 2018


Bas Couwenberg pushed to branch upstream-ltr at Debian GIS Project / qgis


Commits:
a84738fc by Bas Couwenberg at 2018-03-23T14:13:19+01:00
New upstream version 2.18.18+dfsg
- - - - -


27 changed files:

- CMakeLists.txt
- ChangeLog
- debian/changelog
- debian/compat.in
- debian/control.in
- debian/python-qgis.install.in
- debian/qgis-providers.install.in
- debian/rules
- doc/TRANSLATORS
- i18n/qgis_it.ts
- i18n/qgis_pl.ts
- python/plugins/processing/algs/r/RAlgorithm.py
- python/plugins/processing/gui/Postprocessing.py
- python/plugins/processing/script/ScriptAlgorithm.py
- src/providers/wfs/qgswfsprovider.cpp
- src/providers/wms/CMakeLists.txt
- src/server/qgsowsserver.cpp
- src/server/qgsserverprojectparser.cpp
- src/server/qgsserverprojectparser.h
- src/server/qgswfsprojectparser.cpp
- src/server/qgswfsserver.cpp
- src/server/qgswfsserver.h
- src/server/qgswmsprojectparser.cpp
- src/server/qgswmsserver.cpp
- tests/src/python/test_qgsserver.py
- tests/src/python/test_qgsserver_accesscontrol.py
- tests/testdata/control_images/qgis_server/WMS_GetMap_Selection/WMS_GetMap_Selection.png


Changes:

=====================================
CMakeLists.txt
=====================================
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
 SET(CPACK_PACKAGE_VERSION_MAJOR "2")
 SET(CPACK_PACKAGE_VERSION_MINOR "18")
-SET(CPACK_PACKAGE_VERSION_PATCH "17")
+SET(CPACK_PACKAGE_VERSION_PATCH "18")
 SET(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
 SET(RELEASE_NAME "Las Palmas")
 IF (POLICY CMP0048) # in CMake 3.0.0+


=====================================
ChangeLog
=====================================
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,130 @@
+Juergen E. Fischer <jef at norbit.de>	2018-03-23
+
+    update translation stats
+
+Borys Jurgiel <info at borysjurgiel.pl>	2018-03-22
+
+    [tr] Polish translation update
+
+rldhont <rldhont at gmail.com>	2018-03-22
+
+    [Processing] Display CSV OutputFile
+
+Borys Jurgiel <info at borysjurgiel.pl>	2018-03-21
+
+    [tr] Polish translation update
+
+rldhont <rldhont at gmail.com>	2018-03-20
+
+    [Bugfix][Processing] Py and R scripts parsing file param
+
+rldhont <rldhont at gmail.com>	2018-03-19
+
+    [Server] Fix tests: after enhancing WFS GeoJSON
+
+rldhont <rldhont at gmail.com>	2018-03-16
+
+    [Server] Fix tests: after enhancing WFS GeoJSON
+
+rldhont <rldhont at gmail.com>	2018-03-16
+
+    [BUGFIX][Server] WFS GeoJSON: QGIS Server 2.18 much slower than 2.14
+
+    Fixed #18249
+
+    The JsonExporter was generated for each feature exported to GeoJSON.
+
+rldhont <rldhont at gmail.com>	2018-03-16
+
+    [BUGFIX][Server] GetFeature: selecting attribute by clean propertyname
+
+rldhont <rldhont at gmail.com>	2018-03-16
+
+    [BUGFIX][Server] DescribeFeature does not clean attribute name
+
+    In GML, the attributes have to be cleaned to be used as an XML name.
+
+Marco Hugentobler <marco.hugentobler at sourcepole.ch>	2018-03-13
+
+    Fix requesting layer groups contained in embeded projects
+
+Juergen E. Fischer <jef at norbit.de>	2018-03-11
+
+    debian packaging: add buster
+
+Merge: 45f04b7c2f b0d354884d
+mhugent <marco.hugentobler at sourcepole.ch>	2018-03-09
+
+    Merge pull request #6522 from mhugent/fix_18247
+
+    Fallback to feature id if pk attribute is not there
+
+Marco Hugentobler <marco.hugentobler at sourcepole.ch>	2018-03-04
+
+    Fallback to feature id if pk attribute is not there
+
+Merge: e321acd696 c9bb21efbd
+Blottiere Paul <blottiere.paul at gmail.com>	2018-02-27
+
+    Merge pull request #6417 from tudorbarascu/fix_selection_test
+
+    improve server SELECTION test with multiple id's
+
+Marco Hugentobler <marco.hugentobler at sourcepole.ch>	2016-11-18
+
+    Add global scope in server
+
+Marco Hugentobler <marco.hugentobler at sourcepole.ch>	2016-11-18
+
+    Set scope directly to new context
+
+Marco Hugentobler <marco.hugentobler at sourcepole.ch>	2016-11-17
+
+    Set project expression variables in server
+
+Merge: 7827d92405 d1b5767b05
+Nyall Dawson <nyall.dawson at gmail.com>	2018-02-27
+
+    Merge pull request #6471 from sebastic/wms-provider-dependencies
+
+    Add dependency on qgis_gui target to fix parallel build.
+
+Tudor Bărăscu <tudor.barascu at qtibia.ro>	2018-02-26
+
+    show how to run the PyQgsServer test
+
+Tudor Bărăscu <tudor.barascu at qtibia.ro>	2018-02-22
+
+    improve server SELECTION test with multiple id's
+
+Bas Couwenberg <sebastic at xs4all.nl>	2018-02-26
+
+    Add dependency on qgis_gui target to fix parallel build.
+
+     In file included from /<<BUILDDIR>>/qgis-2.18.17+dfsg/src/providers/wms/qgswmssourceselect.cpp:26:0:
+     /<<BUILDDIR>>/qgis-2.18.17+dfsg/src/providers/wms/../../gui/qgsgenericprojectionselector.h:20:10: fatal error: ui_qgsgenericprojectionselectorbase.h: No such file or directory
+      #include <ui_qgsgenericprojectionselectorbase.h>
+               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Even Rouault <even.rouault at spatialys.com>	2018-02-26
+
+    WFS provider: handle gmgml:Point_MultiPointPropertyType (fixes #18169)
+
+Merge: 98e769f70e 3654ead72c
+Werner Macho <werner.macho at gmail.com>	2018-02-23
+
+    Merge pull request #6440 from ghtmtt/release-2_18
+
+    updated it translation for 2_18
+
+matteo <matteo.ghetta at gmail.com>	2018-02-23
+
+    updated it translation for 2_18
+
+Juergen E. Fischer <jef at norbit.de>	2018-02-23
+
+    Release of 2.18.17
+
 Merge: 9c2a0f8ae7 193e0a7e42
 Hugo Mercier <hugo.mercier at oslandia.com>	2018-02-22
 


=====================================
debian/changelog
=====================================
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,14 @@
-qgis (2.18.17) UNRELEASED; urgency=medium
+qgis (2.18.18) UNRELEASED; urgency=medium
+
+  * Release of 2.18.18
+
+ -- Jürgen E. Fischer <jef at norbit.de>  Fri, 23 Mar 2018 13:00:13 +0100
+
+qgis (2.18.17) unstable; urgency=medium
 
   * Release of 2.18.17
 
- -- Jürgen E. Fischer <jef at norbit.de>  Fri, 23 Feb 2018 13:02:21 +0100
+ -- Jürgen E. Fischer <jef at norbit.de>  Fri, 23 Mar 2018 13:00:13 +0100
 
 qgis (2.18.16) unstable; urgency=medium
 


=====================================
debian/compat.in
=====================================
--- a/debian/compat.in
+++ b/debian/compat.in
@@ -1,2 +1,2 @@
-#stretch sid jessie trusty xenial yakkety zesty artful bionic#9
+#sid buster stretch jessie trusty xenial yakkety zesty artful bionic#9
 #jessie#8


=====================================
debian/control.in
=====================================
--- a/debian/control.in
+++ b/debian/control.in
@@ -21,10 +21,10 @@ Build-Depends:
  libqt4-opengl-dev,
  libqca2-dev,
  libqtwebkit-dev,
-#    jessie         trusty                                   # libgsl0-dev, libqca2-plugin-ossl,
-#sid        stretch        xenial yakkety zesty artful bionic# libgsl-dev, libqca2-plugins,
-#    jessie stretch                                          # libqwt-dev,
-#sid                trusty xenial yakkety zesty artful bionic# libqwt5-qt4-dev,
+#           jessie         trusty                                   # libgsl0-dev, libqca2-plugin-ossl,
+#           jessie stretch                                          # libqwt-dev,
+#sid buster        stretch        xenial yakkety zesty artful bionic# libgsl-dev, libqca2-plugins,
+#sid buster                trusty xenial yakkety zesty artful bionic# libqwt5-qt4-dev,
  libqjson-dev,
  libspatialite-dev,
  libsqlite3-dev,
@@ -37,13 +37,13 @@ Build-Depends:
  python-qt4-sql,
  python-yaml, python-mock,
  python-all (>= 2.6.6-3~), python-all-dev (>= 2.6.6-3~), python-pyspatialite,
-#sid        stretch        xenial yakkety zesty artful bionic# python-future,
-#sid jessie stretch        xenial yakkety zesty artful bionic# pyqt4.qsci-dev, python-nose2,
+#sid buster        stretch        xenial yakkety zesty artful bionic# python-future,
+#sid buster jessie stretch        xenial yakkety zesty artful bionic# pyqt4.qsci-dev, python-nose2,
  python-sip (>= 4.5.0),
  python-sip-dev (>= 4.5.0),
  libosgearth-dev,
-#    jessie stretch trusty xenial yakkety zesty artful bionic# libqscintilla2-dev,
-#sid                                                         # libqscintilla2-qt4-dev,
+#           jessie stretch trusty xenial yakkety zesty artful bionic# libqscintilla2-dev,
+#sid buster                                                         # libqscintilla2-qt4-dev,
  git,
  doxygen,
  graphviz,
@@ -55,10 +55,10 @@ Build-Depends:
  qt4-dev-tools,
  libqt4-sql-sqlite, python-psycopg2, ca-certificates
 Build-Conflicts: libqgis-dev, qgis-dev
-#sid stretch xenial yakkety zesty artful bionic#Standards-Version: 3.9.7
+#sid buster stretch xenial yakkety zesty artful bionic#Standards-Version: 3.9.7
 #jessie#Standards-Version: 3.9.6
 #trusty#Standards-Version: 3.8.4
-#sid stretch jessie#X-Python-Version: >= 2.7, << 2.8
+#sid buster stretch jessie#X-Python-Version: >= 2.7, << 2.8
 #trusty xenial yakkety zesty artful bionic#XS-Python-Version: current
 Vcs-Browser: https://github.com/qgis/QGIS/
 Vcs-Git: https://github.com/qgis/QGIS.git
@@ -234,8 +234,8 @@ Depends:
  libexpat1-dev,
  libgdal-dev (>= 1.10.1-0~),
  libgeos-dev (>= 3.0.0),
-#    jessie         trusty                                   # libgsl0-dev,
-#sid        stretch        xenial yakkety zesty artful bionic# libgsl-dev,
+#           jessie         trusty                                   # libgsl0-dev,
+#sid buster        stretch        xenial yakkety zesty artful bionic# libgsl-dev,
  libpq-dev,
  libproj-dev,
  libqgis-app{QGIS_ABI} (= ${binary:Version}),


=====================================
debian/python-qgis.install.in
=====================================
--- a/debian/python-qgis.install.in
+++ b/debian/python-qgis.install.in
@@ -7,5 +7,5 @@ usr/lib/python*/*-packages/qgis/networkanalysis/*
 usr/lib/python*/*-packages/qgis/PyQt/*
 usr/lib/python*/*-packages/qgis/server/*
 usr/lib/python*/*-packages/qgis/testing/*
-#sid stretch yakkety zesty artful bionic#usr/lib/python*/*-packages/PyQt4/*.so
-#sid stretch yakkety zesty artful bionic#usr/lib/python*/*-packages/PyQt4/uic/widget-plugins/qtwebkit.py
+#sid buster stretch yakkety zesty artful bionic#usr/lib/python*/*-packages/PyQt4/*.so
+#sid buster stretch yakkety zesty artful bionic#usr/lib/python*/*-packages/PyQt4/uic/widget-plugins/qtwebkit.py


=====================================
debian/qgis-providers.install.in
=====================================
--- a/debian/qgis-providers.install.in
+++ b/debian/qgis-providers.install.in
@@ -17,6 +17,6 @@ usr/lib/qgis/plugins/libvirtuallayerprovider.so
 usr/lib/qgis/plugins/libwcsprovider.so
 usr/lib/qgis/plugins/libwfsprovider.so
 usr/lib/qgis/plugins/libwmsprovider.so
-#sid stretch jessie trusty xenial yakkety zesty artful bionic#usr/lib/qgis/plugins/libarcgismapserverprovider.so
-#sid stretch jessie trusty xenial yakkety zesty artful bionic#usr/lib/qgis/plugins/libarcgisfeatureserverprovider.so
+#sid buster stretch jessie trusty xenial yakkety zesty artful bionic#usr/lib/qgis/plugins/libarcgismapserverprovider.so
+#sid buster stretch jessie trusty xenial yakkety zesty artful bionic#usr/lib/qgis/plugins/libarcgisfeatureserverprovider.so
 {QT_PLUGIN_DIR}/sqldrivers/libqsqlspatialite.so


=====================================
debian/rules
=====================================
--- a/debian/rules
+++ b/debian/rules
@@ -34,7 +34,7 @@ ifneq (,$(findstring -oracle,$(DISTRIBUTION)))
 	WITH_ORACLE=1
 endif
 
-ifneq ($(DISTRIBUTION),$(findstring $(DISTRIBUTION),"jessie stretch trusty xenial yakkety zesty artful bionic"))
+ifneq ($(DISTRIBUTION),$(findstring $(DISTRIBUTION),"sid buster jessie stretch trusty xenial yakkety zesty artful bionic"))
 	DISTRIBUTION := sid
 endif
 
@@ -132,19 +132,19 @@ ifneq (,$(WITH_GLOBE))
 	CMAKE_OPTS += -DWITH_GLOBE=TRUE
 endif
 
-ifneq (,$(findstring $(DISTRIBUTION),"sid stretch"))
+ifneq (,$(findstring $(DISTRIBUTION),"sid buster stretch"))
 	CMAKE_OPTS += -DPOSTGRES_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libpq.so
 endif
 
-ifneq (,$(findstring $(DISTRIBUTION),"sid stretch yakkety zesty artful bionic"))
+ifneq (,$(findstring $(DISTRIBUTION),"sid buster stretch yakkety zesty artful bionic"))
 	CMAKE_OPTS += -DWITH_INTERNAL_WEBKIT_BINDINGS=TRUE
 endif
 
-ifneq (,$(findstring $(DISTRIBUTION),"sid"))
+ifneq (,$(findstring $(DISTRIBUTION),"sid buster"))
 	CMAKE_OPTS += -DGEOS_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libgeos_c.so
 endif
 
-ifneq (,$(findstring $(DISTRIBUTION),"jessie stretch trusty xenial yakkety zesty artful bionic sid"))
+ifneq (,$(findstring $(DISTRIBUTION),"sid buster stretch jessie trusty xenial yakkety zesty artful bionic"))
 	CMAKE_OPTS += -DPYTHON_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libpython2.7.so
 endif
 
@@ -164,11 +164,11 @@ endif
 		-DORACLE_INCLUDEDIR=$(ORACLE_INCLUDEDIR)
 endif
 
-ifneq (,$(findstring $(DISTRIBUTION),"sid stretch"))
+ifneq (,$(findstring $(DISTRIBUTION),"sid buster stretch"))
 	CMAKE_OPTS += -DFCGI_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libfcgi.so
 endif
 
-ifneq (,$(findstring $(DISTRIBUTION),"sid stretch jessie"))
+ifneq (,$(findstring $(DISTRIBUTION),"sid buster stretch jessie"))
 	CMAKE_OPTS += -DSPATIALINDEX_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libspatialindex.so
 endif
 
@@ -186,7 +186,7 @@ else
 	CMAKE_OPTS += -DENABLE_TESTS=TRUE
 endif
 
-ifneq (,$(findstring $(DISTRIBUTION),"jessie stretch trusty sid"))
+ifneq (,$(findstring $(DISTRIBUTION),"sid buster jessie stretch trusty"))
 CPPFLAGS := $(shell dpkg-buildflags --get CPPFLAGS)
 CFLAGS   := $(shell dpkg-buildflags --get CFLAGS) $(CPPFLAGS)
 CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) $(CPPFLAGS)


=====================================
doc/TRANSLATORS
=====================================
--- a/doc/TRANSLATORS
+++ b/doc/TRANSLATORS
@@ -8,6 +8,7 @@
 <tr><td><img src="qrc:/images/flags/ro.png"></td><td>Romanian</td><td><div title="finished:17797 unfinished:204 untranslated:367" class="bartodo"><div class="bardone" style="width:97px">97.4</div></div></td><td>Sorin Călinică, Tudor Bărăscu, Georgiana Ioanovici, Alex Bădescu, Lonut Losifescu-Enescu, Bogdan Pacurar</td></tr>
 <tr><td><img src="qrc:/images/flags/pt_BR.png"></td><td>Portuguese (Brazil)</td><td><div title="finished:17797 unfinished:203 untranslated:368" class="bartodo"><div class="bardone" style="width:97px">97.4</div></div></td><td>Sidney Schaberle Goveia, Arthur Nanni, Marcelo Soares Souza, Narcélio de Sá Pereira Filho, Leônidas Descovi Filho, Felipe Sodré Barros </td></tr>
 <tr><td><img src="qrc:/images/flags/fr.png"></td><td>French</td><td><div title="finished:17781 unfinished:211 untranslated:376" class="bartodo"><div class="bardone" style="width:97px">97.4</div></div></td><td>Arnaud Morvan, Augustin Roche, DelazJ, Didier Vanden Berghe, Dofabien, etrimaille, Jean-Roc Morreale, Jérémy Garniaux, Loïc Buscoz, Lsam, Marc-André Saia, Marie Silvestre, Mathieu Bossaert, Mathieu Lattes, Mayeul Kauffmann, Médéric Ribreux, Mehdi Semchaoui, Michael Douchin, Nicolas Boisteault, Nicolas Rochard, Pascal Obstetar, Robin Prest, Rod Bera, Stéphane Henriod, Stéphane Possamai, sylther, Sylvain Badey, Sylvain Maillard, Vincent Picavet, Xavier Tardieu, Yann Leveille-Menez, yoda89</td></tr>
+<tr><td><img src="qrc:/images/flags/it.png"></td><td>Italian</td><td><div title="finished:17797 unfinished:76 untranslated:495" class="bartodo"><div class="bardone" style="width:97px">97.1</div></div></td><td>Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon</td></tr>
 <tr><td><img src="qrc:/images/flags/es.png"></td><td>Spanish</td><td><div title="finished:17740 unfinished:131 untranslated:497" class="bartodo"><div class="bardone" style="width:96px">96.9</div></div></td><td>Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo</td></tr>
 <tr><td><img src="qrc:/images/flags/bs.png"></td><td>Bosnian</td><td><div title="finished:17652 unfinished:221 untranslated:495" class="bartodo"><div class="bardone" style="width:96px">96.7</div></div></td><td>Almir Karabegovic</td></tr>
 <tr><td><img src="qrc:/images/flags/da.png"></td><td>Danish</td><td><div title="finished:17493 unfinished:174 untranslated:701" class="bartodo"><div class="bardone" style="width:95px">95.7</div></div></td><td>Jacob Overgaard Madsen, Bo Victor Thomsen</td></tr>
@@ -17,12 +18,11 @@
 <tr><td><img src="qrc:/images/flags/zh.png"></td><td>Chinese simplified</td><td><div title="finished:15928 unfinished:112 untranslated:2328" class="bartodo"><div class="bardone" style="width:87px">87.0</div></div></td><td>Calvin Ngei, Lisashen</td></tr>
 <tr><td><img src="qrc:/images/flags/pt_PT.png"></td><td>Portuguese (Portugal)</td><td><div title="finished:15344 unfinished:100 untranslated:2924" class="bartodo"><div class="bardone" style="width:83px">83.8</div></div></td><td>Giovanni Manghi, Joana Simões, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva, Ricardo Sena, Leandro Infantini, João Gaspar</td></tr>
 <tr><td><img src="qrc:/images/flags/ru.png"></td><td>Russian</td><td><div title="finished:15299 unfinished:163 untranslated:2906" class="bartodo"><div class="bardone" style="width:83px">83.7</div></div></td><td>Alexander Bruy, Artem Popov</td></tr>
-<tr><td><img src="qrc:/images/flags/pl.png"></td><td>Polish</td><td><div title="finished:14743 unfinished:104 untranslated:3521" class="bartodo"><div class="bardone" style="width:80px">80.5</div></div></td><td>Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Łoskot, Tomasz Paul, Andrzej Świąder, Radosław Pasiok, Michał Kułach, Ewelina Krawczak, Michał Smoczyk, Jakub Bobrowski</td></tr>
+<tr><td><img src="qrc:/images/flags/pl.png"></td><td>Polish</td><td><div title="finished:14857 unfinished:104 untranslated:3407" class="bartodo"><div class="bardone" style="width:81px">81.2</div></div></td><td>Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Łoskot, Tomasz Paul, Andrzej Świąder, Radosław Pasiok, Michał Kułach, Ewelina Krawczak, Michał Smoczyk, Jakub Bobrowski</td></tr>
 <tr><td><img src="qrc:/images/flags/nb.png"></td><td>Norwegian Bokmal</td><td><div title="finished:14511 unfinished:142 untranslated:3715" class="bartodo"><div class="bardone" style="width:79px">79.4</div></div></td><td>James Stott, Maléne Peterson</td></tr>
 <tr><td><img src="qrc:/images/flags/cs.png"></td><td>Czech</td><td><div title="finished:14480 unfinished:141 untranslated:3747" class="bartodo"><div class="bardone" style="width:79px">79.2</div></div></td><td>Jan Helebrant, Martin Landa, Peter Antolik, Martin Dzurov, Stanislav Horáček</td></tr>
 <tr><td><img src="qrc:/images/flags/zh.png"></td><td>Chinese traditional</td><td><div title="finished:13962 unfinished:167 untranslated:4239" class="bartodo"><div class="bardone" style="width:76px">76.5</div></div></td><td>Calvin Ngei, Zhang Jun, Richard Xie</td></tr>
 <tr><td><img src="qrc:/images/flags/fi.png"></td><td>Finnish</td><td><div title="finished:13864 unfinished:356 untranslated:4148" class="bartodo"><div class="bardone" style="width:76px">76.4</div></div></td><td>Kari Mikkonen, Matti Mäntynen</td></tr>
-<tr><td><img src="qrc:/images/flags/it.png"></td><td>Italian</td><td><div title="finished:13950 unfinished:151 untranslated:4267" class="bartodo"><div class="bardone" style="width:76px">76.4</div></div></td><td>Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon</td></tr>
 <tr><td><img src="qrc:/images/flags/et.png"></td><td>Estonian</td><td><div title="finished:13120 unfinished:172 untranslated:5076" class="bartodo"><div class="bardone" style="width:71px">71.9</div></div></td><td>Veiko Viil</td></tr>
 <tr><td><img src="qrc:/images/flags/ca.png"></td><td>Catalan</td><td><div title="finished:12792 unfinished:152 untranslated:5424" class="bartodo"><div class="bardone" style="width:70px">70.1</div></div></td><td>Albert F, Pau Reguant Ridó, Xavier Roijals</td></tr>
 <tr><td><img src="qrc:/images/flags/hi.png"></td><td>Hindi</td><td><div title="finished:12425 unfinished:198 untranslated:5745" class="bartodo"><div class="bardone" style="width:68px">68.2</div></div></td><td>Harish Kumar Solanki</td></tr>


=====================================
i18n/qgis_it.ts
=====================================
The diff for this file was not included because it is too large.

=====================================
i18n/qgis_pl.ts
=====================================
--- a/i18n/qgis_pl.ts
+++ b/i18n/qgis_pl.ts
@@ -968,7 +968,7 @@ Przetwarzanie algorytmu %d/%d...</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="202"/>
         <source>An error occurred while reading your file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Wystąpił błąd podczas odczytu pliku.</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="203"/>
@@ -1314,7 +1314,7 @@ Przetwarzanie algorytmu %d/%d...</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="282"/>
         <source>Clip</source>
-        <translation>przytnij</translation>
+        <translation>Przytnij</translation>
     </message>
 </context>
 <context>
@@ -10964,7 +10964,7 @@ Proszę go zainstalować przed uruchomieniem algorytmów GRASS.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1214"/>
         <source>Create grid</source>
-        <translation type="unfinished"></translation>
+        <translation>Twórz siatkę</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1215"/>
@@ -10974,22 +10974,22 @@ Proszę go zainstalować przed uruchomieniem algorytmów GRASS.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1216"/>
         <source>Rectangle (line)</source>
-        <translation type="unfinished"></translation>
+        <translation>Prostokątna (linie)</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1217"/>
         <source>Rectangle (polygon)</source>
-        <translation type="unfinished"></translation>
+        <translation>Prostokątna (poligony)</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1218"/>
         <source>Diamond (polygon)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ukośna (poligony)</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1219"/>
         <source>Hexagon (polygon)</source>
-        <translation type="unfinished"></translation>
+        <translation>Sześciokątna (poligony)</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1220"/>
@@ -11546,7 +11546,7 @@ Proszę go zainstalować przed uruchomieniem algorytmów GRASS.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1353"/>
         <source>Snapped</source>
-        <translation type="unfinished"></translation>
+        <translation>Wynik</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1354"/>
@@ -11561,7 +11561,7 @@ Proszę go zainstalować przed uruchomieniem algorytmów GRASS.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1348"/>
         <source>Snap points to grid</source>
-        <translation type="unfinished"></translation>
+        <translation>Przyciągaj punkty do siatki</translation>
     </message>
 </context>
 <context>
@@ -12012,17 +12012,17 @@ Proszę go zainstalować przed uruchomieniem algorytmów GRASS.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1401"/>
         <source>Destination hubs layer</source>
-        <translation type="unfinished"></translation>
+        <translation>Warstwa hubów docelowych</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1402"/>
         <source>Hub layer name attribute</source>
-        <translation type="unfinished"></translation>
+        <translation>Atrybut z nazwą na warstwie hubów</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1403"/>
         <source>Output shape type</source>
-        <translation type="unfinished"></translation>
+        <translation>Rodzaj wyjściowej geometrii</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1404"/>
@@ -12032,7 +12032,7 @@ Proszę go zainstalować przed uruchomieniem algorytmów GRASS.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1405"/>
         <source>Hub distance</source>
-        <translation type="unfinished"></translation>
+        <translation>Wynik</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1406"/>
@@ -12042,7 +12042,7 @@ Proszę go zainstalować przed uruchomieniem algorytmów GRASS.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1393"/>
         <source>Distance to nearest hub</source>
-        <translation type="unfinished"></translation>
+        <translation>Odległość do najbliższego huba</translation>
     </message>
 </context>
 <context>
@@ -12391,7 +12391,7 @@ Proszę go zainstalować przed uruchomieniem algorytmów GRASS.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1487"/>
         <source>Join attributes table</source>
-        <translation type="unfinished"></translation>
+        <translation>Złącz tabelę atrybutów</translation>
     </message>
 </context>
 <context>
@@ -13177,7 +13177,7 @@ Proszę go skonfigurować przed uruchomieniem algorytmów LAStools.</translation
     <message>
         <location filename="../src/ui/qgisapp.ui" line="909"/>
         <source>Offset Point Symbol</source>
-        <translation type="unfinished"></translation>
+        <translation>Przesuń symbol punktowy</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="926"/>
@@ -13360,12 +13360,12 @@ Proszę go skonfigurować przed uruchomieniem algorytmów LAStools.</translation
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2440"/>
         <source>Add Circular String</source>
-        <translation type="unfinished"></translation>
+        <translation>Dodaj łuk</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2455"/>
         <source>Add Circular String by Radius</source>
-        <translation type="unfinished"></translation>
+        <translation>Dodaj łuk (z promienia)</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2487"/>
@@ -13385,27 +13385,27 @@ Proszę go skonfigurować przed uruchomieniem algorytmów LAStools.</translation
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2508"/>
         <source>Modify Attributes of Selected Features</source>
-        <translation type="unfinished"></translation>
+        <translation>Edytuj atrybuty zaznaczonych</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2511"/>
         <source>Modify the Attributes of all Selected Features Simultaneously</source>
-        <translation type="unfinished"></translation>
+        <translation>Zmień atrybuty wszystkich wybranych obiektów naraz</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2544"/>
         <source>Select Features by Value...</source>
-        <translation type="unfinished"></translation>
+        <translation>Zaznacz obiekty według wartości...</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2547"/>
         <source>Select Features By Value</source>
-        <translation type="unfinished"></translation>
+        <translation>Zaznacz obiekty według wartości</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2550"/>
         <source>F3</source>
-        <translation type="unfinished">F3</translation>
+        <translation>F3</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="1019"/>
@@ -13622,7 +13622,7 @@ Acts on currently active editable layer</source>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2225"/>
         <source>Select By Expression...</source>
-        <translation>Zaznacz wyrażeniem...</translation>
+        <translation>Zaznacz obiekty wyrażeniem...</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2233"/>
@@ -13642,7 +13642,7 @@ Acts on currently active editable layer</source>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2285"/>
         <source>Paste features in clipboard into a new temporary scratch layer.</source>
-        <translation type="unfinished"></translation>
+        <translation>Wklej obiekty ze schowka jako nową warstwę tymczasową.</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2310"/>
@@ -13737,12 +13737,12 @@ Acts on currently active editable layer</source>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2443"/>
         <source>Add circular string</source>
-        <translation type="unfinished"></translation>
+        <translation>Dodaj łuk</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2458"/>
         <source>Add circular string by radius</source>
-        <translation type="unfinished"></translation>
+        <translation>Dodaj łuk (z promienia)</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2463"/>
@@ -13863,12 +13863,12 @@ Acts on currently active editable layer</source>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="941"/>
         <source>Ctrl+Alt++</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Alt++</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="956"/>
         <source>Ctrl+Alt+-</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Alt+-</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="968"/>
@@ -14218,7 +14218,11 @@ Ctl (Cmd) obraca o 15 stopni.</translation>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2290"/>
         <source>DXF Export...</source>
-        <translation>Eksport DXF...</translation>
+        <translation>Eksportuj do DXF...</translation>
+    </message>
+    <message>
+        <source>DWG/DXF Import...</source>
+        <translation>Importuj DWG/DXF...</translation>
     </message>
     <message>
         <location filename="../src/ui/qgisapp.ui" line="2302"/>
@@ -14434,7 +14438,7 @@ Ctl (Cmd) obraca o 15 stopni.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1589"/>
         <source>Mean and standard deviation plot</source>
-        <translation type="unfinished"></translation>
+        <translation>Wykres średniej i odchylenia standardowego</translation>
     </message>
 </context>
 <context>
@@ -14541,7 +14545,7 @@ Ctl (Cmd) obraca o 15 stopni.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1626"/>
         <source>Problem executing algorithm</source>
-        <translation type="unfinished"></translation>
+        <translation>Błąd wykonania algorytmu</translation>
     </message>
 </context>
 <context>
@@ -14933,10 +14937,10 @@ Ctl (Cmd) obraca o 15 stopni.</translation>
     <message numerus="yes">
         <location filename="../python/plugins/MetaSearch/python-i18n.cpp" line="45"/>
         <source>Showing %d - %d of %n result(s)</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>Wyświetlanie %d - %d z %n wyniku</numerusform>
+            <numerusform>Wyświetlanie %d - %d z %n wyników</numerusform>
+            <numerusform>Wyświetlanie %d - %d z %n wyników</numerusform>
         </translation>
     </message>
     <message>
@@ -15844,7 +15848,7 @@ Więcej informacji znajduje się w dzienniku zdarzeń.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1826"/>
         <source>Convert format</source>
-        <translation type="unfinished"></translation>
+        <translation>Konwertuj format</translation>
     </message>
 </context>
 <context>
@@ -15867,7 +15871,7 @@ Więcej informacji znajduje się w dzienniku zdarzeń.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1839"/>
         <source>Buffer distance</source>
-        <translation>Stała wielkość &bufora</translation>
+        <translation>Stała wielkość bufora</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1840"/>
@@ -15897,7 +15901,7 @@ Więcej informacji znajduje się w dzienniku zdarzeń.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1835"/>
         <source>Buffer vectors</source>
-        <translation type="unfinished"></translation>
+        <translation>Buforuj wektory</translation>
     </message>
 </context>
 <context>
@@ -16031,7 +16035,7 @@ Więcej informacji znajduje się w dzienniku zdarzeń.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="1866"/>
         <source>Dissolve polygons</source>
-        <translation type="unfinished"></translation>
+        <translation>Agreguj poligony</translation>
     </message>
 </context>
 <context>
@@ -17151,7 +17155,7 @@ Proszę sprawdzić ustawienia geoprocesingu.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2134"/>
         <source>Generate points (pixel centroids) along line</source>
-        <translation type="unfinished"></translation>
+        <translation>Punkty wzdłuż linii (w centroidach pikseli)</translation>
     </message>
 </context>
 <context>
@@ -17179,7 +17183,7 @@ Proszę sprawdzić ustawienia geoprocesingu.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2142"/>
         <source>Generate points (pixel centroids) inside polygons</source>
-        <translation type="unfinished"></translation>
+        <translation>Punkty w poligonach (w centroidach pikseli)</translation>
     </message>
 </context>
 <context>
@@ -17212,7 +17216,7 @@ Proszę sprawdzić ustawienia geoprocesingu.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2150"/>
         <source>Count points in polygon</source>
-        <translation type="unfinished"></translation>
+        <translation>Zlicz punkty w poligonie</translation>
     </message>
 </context>
 <context>
@@ -17250,7 +17254,7 @@ Proszę sprawdzić ustawienia geoprocesingu.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2159"/>
         <source>Count unique points in polygon</source>
-        <translation type="unfinished"></translation>
+        <translation>Zlicz unikalne punkty w poligonie</translation>
     </message>
 </context>
 <context>
@@ -17289,7 +17293,7 @@ Pole do zapisu zliczeń</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2169"/>
         <source>Count points in polygon(weighted)</source>
-        <translation type="unfinished"></translation>
+        <translation>Zlicz punkty w poligonie (ważone)</translation>
     </message>
 </context>
 <context>
@@ -17327,7 +17331,7 @@ Pole do zapisu zliczeń</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2179"/>
         <source>Points layer from table</source>
-        <translation type="unfinished"></translation>
+        <translation>Warstwa punktowa z tabeli</translation>
     </message>
 </context>
 <context>
@@ -17370,7 +17374,7 @@ Pole do zapisu zliczeń</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2189"/>
         <source>Points to path</source>
-        <translation type="unfinished"></translation>
+        <translation>Linia z punktów</translation>
     </message>
 </context>
 <context>
@@ -17494,7 +17498,7 @@ Pole do zapisu zliczeń</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2219"/>
         <source>Polygonize</source>
-        <translation type="unfinished"></translation>
+        <translation>Poligonizuj</translation>
     </message>
 </context>
 <context>
@@ -17542,7 +17546,7 @@ Pole do zapisu zliczeń</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2239"/>
         <source>PostGIS execute SQL</source>
-        <translation type="unfinished"></translation>
+        <translation>Wykonaj zapytanie SQL w bazie PostGIS</translation>
     </message>
 </context>
 <context>
@@ -18833,7 +18837,7 @@ Błąd (%2): %3</translation>
         <source>Caught a coordinate system exception while trying to transform a point. Unable to calculate polygon area.</source>
         <translation>Przechwycono wyjątek układu współrzędnych podczas transformacji punktu. Nie można obliczyć powierzchni poligonu.</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/core/qgsdistancearea.cpp" line="984"/>
         <location filename="../src/core/qgsdistancearea.cpp" line="998"/>
         <location filename="../src/core/qgsdistancearea.cpp" line="1216"/>
@@ -18841,7 +18845,7 @@ Błąd (%2): %3</translation>
         <source> m²</source>
         <translation> m²</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/core/qgsdistancearea.cpp" line="988"/>
         <location filename="../src/core/qgsdistancearea.cpp" line="1220"/>
         <location filename="../src/core/qgsdistancearea.cpp" line="1237"/>
@@ -18962,13 +18966,13 @@ Błąd (%2): %3</translation>
         <source> yd</source>
         <translation type="unfinished"></translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/core/qgsdistancearea.cpp" line="1245"/>
         <location filename="../src/core/qgsdistancearea.cpp" line="1254"/>
         <source> ft²</source>
         <translation type="unfinished"></translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/core/qgsdistancearea.cpp" line="1249"/>
         <location filename="../src/core/qgsdistancearea.cpp" line="1267"/>
         <location filename="../src/core/qgsdistancearea.cpp" line="1279"/>
@@ -18976,7 +18980,7 @@ Błąd (%2): %3</translation>
         <source> mi²</source>
         <translation type="unfinished"></translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/core/qgsdistancearea.cpp" line="1263"/>
         <location filename="../src/core/qgsdistancearea.cpp" line="1272"/>
         <source> yd²</source>
@@ -18988,7 +18992,7 @@ Błąd (%2): %3</translation>
         <source> ac</source>
         <translation type="unfinished"></translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/core/qgsdistancearea.cpp" line="1321"/>
         <source> nm²</source>
         <translation type="unfinished"></translation>
@@ -21906,7 +21910,7 @@ SQL: %1</translation>
     <message>
         <location filename="../src/core/qgsexpressioncontext.cpp" line="471"/>
         <source>Global</source>
-        <translation type="unfinished"></translation>
+        <translation>Globalne</translation>
     </message>
     <message>
         <location filename="../src/core/qgsexpressioncontext.cpp" line="600"/>
@@ -21922,7 +21926,7 @@ SQL: %1</translation>
     <message>
         <location filename="../src/core/qgsexpressioncontext.cpp" line="743"/>
         <source>Map Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Ustawienia mapy</translation>
     </message>
     <message>
         <location filename="../src/core/qgsexpressioncontext.cpp" line="778"/>
@@ -23127,7 +23131,7 @@ Operation can NOT be undone!
         <source>Expression Sorter</source>
         <translation type="unfinished"></translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/core/qgsunittypes.cpp" line="1052"/>
         <source>°</source>
         <translation>°</translation>
@@ -23142,12 +23146,12 @@ Operation can NOT be undone!
         <source> gon</source>
         <translation type="unfinished"></translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/core/qgsunittypes.cpp" line="1061"/>
         <source>′</source>
         <translation>′</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/core/qgsunittypes.cpp" line="1064"/>
         <source>″</source>
         <translation>″</translation>
@@ -25453,7 +25457,7 @@ Czas modyfikacji dokonanej poza tą sesją QGIS: %2</translation>
         <source>Size</source>
         <translation>Rozmiar</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/qgs25drendererwidgetbase.ui" line="120"/>
         <source>°</source>
         <translation>°</translation>
@@ -27707,10 +27711,10 @@ Błąd:
         <location filename="../src/app/qgsattributetabledialog.cpp" line="201"/>
         <source>%1 (%n Feature(s))</source>
         <comment>feature count</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 (%n obiekt)</numerusform>
+            <numerusform>%1 (%n obiekty)</numerusform>
+            <numerusform>%1 (%n obiektów)</numerusform>
         </translation>
     </message>
     <message>
@@ -30413,12 +30417,12 @@ Baza danych: %2</translation>
     <message>
         <location filename="../src/app/qgsbrowserdockwidget.cpp" line="401"/>
         <source>Hide from Browser</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie pokazuj w przeglądarce</translation>
     </message>
     <message>
         <location filename="../src/app/qgsbrowserdockwidget.cpp" line="402"/>
         <source>Fast Scan this Directory</source>
-        <translation type="unfinished"></translation>
+        <translation>Szybkie skanowanie tego katalogu</translation>
     </message>
     <message>
         <location filename="../src/app/qgsbrowserdockwidget.cpp" line="415"/>
@@ -30433,7 +30437,7 @@ Baza danych: %2</translation>
     <message>
         <location filename="../src/app/qgsbrowserdockwidget.cpp" line="283"/>
         <source>Type here to filter visible items...</source>
-        <translation type="unfinished"></translation>
+        <translation>pisz tutaj, aby filtrować widoczne elementy...</translation>
     </message>
     <message>
         <location filename="../src/app/qgsbrowserdockwidget.cpp" line="410"/>
@@ -34164,7 +34168,7 @@ Zmniejsz rozdzielczość lub rozmiar papieru.</translation>
         <source>Rotation</source>
         <translation>Obrót</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/composer/qgscomposeritemwidgetbase.ui" line="375"/>
         <source> °</source>
         <translation> °</translation>
@@ -35826,7 +35830,7 @@ Zmniejsz rozdzielczość lub rozmiar papieru.</translation>
         <source>X </source>
         <translation>X </translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/composer/qgscomposermapwidgetbase.ui" line="145"/>
         <source> °</source>
         <translation> °</translation>
@@ -36424,7 +36428,7 @@ Zmniejsz rozdzielczość lub rozmiar papieru.</translation>
         <source>Sync with map</source>
         <translation>Synchronizuj z mapą</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/composer/qgscomposerpicturewidgetbase.ui" line="479"/>
         <source> °</source>
         <translation> °</translation>
@@ -40263,7 +40267,7 @@ a aktualną wersją pliku jest [%3]</translation>
         <source>Vertical</source>
         <translation>Pionowo</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/qgsdecorationcopyrightdialog.ui" line="131"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -48436,7 +48440,7 @@ Zmień nazwę skryptu i zapisz go, co umożliwi QGISowi wczytanie go automatyczn
     <message>
         <location filename="../src/app/qgsfieldsproperties.cpp" line="117"/>
         <source>Cardinality</source>
-        <translation type="unfinished"></translation>
+        <translation>Liczność</translation>
     </message>
     <message>
         <location filename="../src/app/qgsfieldsproperties.cpp" line="123"/>
@@ -48446,7 +48450,7 @@ Zmień nazwę skryptu i zapisz go, co umożliwi QGISowi wczytanie go automatyczn
     <message>
         <location filename="../src/app/qgsfieldsproperties.cpp" line="124"/>
         <source>Provide code in this dialog</source>
-        <translation type="unfinished"></translation>
+        <translation>Wpisz kod w tym oknie</translation>
     </message>
     <message>
         <location filename="../src/app/qgsfieldsproperties.cpp" line="125"/>
@@ -56714,7 +56718,7 @@ Może to być spowodowane problemem w sieci lokalnej lub problemem serwera WMS.<
         <source>Angle (deg)</source>
         <translation>Kąt</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/qgslabeldialogbase.ui" line="399"/>
         <source>°</source>
         <translation>°</translation>
@@ -57994,7 +57998,7 @@ Może to być spowodowane problemem w sieci lokalnej lub problemem serwera WMS.<
         <source>Use global shadow</source>
         <translation>Cienie globalne</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/qgslabelingguibase.ui" line="3307"/>
         <location filename="../src/ui/qgslabelingguibase.ui" line="4555"/>
         <source>˚</source>
@@ -58443,7 +58447,7 @@ Może to być spowodowane problemem w sieci lokalnej lub problemem serwera WMS.<
     <message>
         <location filename="../src/ui/qgsmapstylingwidgetbase.ui" line="39"/>
         <source>Not supported or no layer</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie wybrano warstwy lub warstwa nie podlega stylizacji</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsmapstylingwidgetbase.ui" line="70"/>
@@ -58464,7 +58468,7 @@ Może to być spowodowane problemem w sieci lokalnej lub problemem serwera WMS.<
     <message>
         <location filename="../src/ui/qgsmapstylingwidgetbase.ui" line="111"/>
         <source>If checked, the map canvas will automatically update whenever an option has been changed without the requirement to click Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Jeśli zaznaczone, mapa aktualizuje się automatycznie bez potrzeby wciskania "Zastosuj"</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsmapstylingwidgetbase.ui" line="114"/>
@@ -58482,22 +58486,22 @@ Może to być spowodowane problemem w sieci lokalnej lub problemem serwera WMS.<
     <message>
         <location filename="../src/ui/qgslayertreeembeddedconfigwidget.ui" line="20"/>
         <source>Available widgets</source>
-        <translation type="unfinished"></translation>
+        <translation>Dostępne</translation>
     </message>
     <message>
         <location filename="../src/ui/qgslayertreeembeddedconfigwidget.ui" line="27"/>
         <source>Used widgets</source>
-        <translation type="unfinished"></translation>
+        <translation>Użyte</translation>
     </message>
     <message>
         <location filename="../src/ui/qgslayertreeembeddedconfigwidget.ui" line="52"/>
         <source>-></source>
-        <translation type="unfinished"></translation>
+        <translation>-></translation>
     </message>
     <message>
         <location filename="../src/ui/qgslayertreeembeddedconfigwidget.ui" line="63"/>
         <source><-</source>
-        <translation type="unfinished"></translation>
+        <translation><-</translation>
     </message>
 </context>
 <context>
@@ -61644,12 +61648,12 @@ Uwaga: zapisywanie hasła nie jest obowiązkowe. Zostaniesz o nie poproszony w r
     <message>
         <location filename="../src/ui/qgsnewhttpconnectionbase.ui" line="248"/>
         <source>Max. number of features</source>
-        <translation type="unfinished"></translation>
+        <translation>Maks. liczba obiektów</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsnewhttpconnectionbase.ui" line="255"/>
         <source><html><head/><body><p>Enter a number to limit the maximum number of features retrieved in a single GetFeature request. If let to empty, server default will apply.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Wprowadź liczbę, aby ograniczyć maksymalną liczbę obiektów zwracanych w jednym żądaniu GetFeature. Jeśli to pole jest puste, zastosowane będą domyślne ustawienia serwera.</p></body></html></translation>
     </message>
     <message>
         <location filename="../src/ui/qgsnewhttpconnectionbase.ui" line="74"/>
@@ -69924,7 +69928,7 @@ Wybierz ignoruj, aby wczytać projekt bez brakujących warstw. Wybierz anuluj, a
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="151"/>
         <source>Layers are in edit mode. Stop edit mode on all layers to toggle transactional editing.</source>
-        <translation type="unfinished"></translation>
+        <translation>Warstwy są w trybie edycji. Zakończ tryb edycji wszystkich warstw,aby włączyć edycję transakcyjną.</translation>
     </message>
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="265"/>
@@ -69934,7 +69938,7 @@ Wybierz ignoruj, aby wczytać projekt bez brakujących warstw. Wybierz anuluj, a
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="339"/>
         <source>Custodian</source>
-        <translation type="unfinished"></translation>
+        <translation>Kustosz</translation>
     </message>
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="340"/>
@@ -69954,27 +69958,27 @@ Wybierz ignoruj, aby wczytać projekt bez brakujących warstw. Wybierz anuluj, a
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="343"/>
         <source>Originator</source>
-        <translation type="unfinished"></translation>
+        <translation>Twórca</translation>
     </message>
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="344"/>
         <source>Point of contact</source>
-        <translation>Punkt kontaktowy</translation>
+        <translation>Osoba kontaktowa</translation>
     </message>
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="345"/>
         <source>Principal investigator</source>
-        <translation type="unfinished"></translation>
+        <translation>Główny badacz</translation>
     </message>
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="346"/>
         <source>Processor</source>
-        <translation type="unfinished"></translation>
+        <translation>Edytor</translation>
     </message>
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="347"/>
         <source>Publisher</source>
-        <translation>Publikator</translation>
+        <translation>Wydawca</translation>
     </message>
     <message>
         <location filename="../src/app/qgsprojectproperties.cpp" line="348"/>
@@ -70362,7 +70366,7 @@ Kontynuować?</translation>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="1596"/>
         <source>Position</source>
-        <translation type="unfinished">Położenie</translation>
+        <translation>Stanowisko</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="1626"/>
@@ -70383,7 +70387,7 @@ Kontynuować?</translation>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="2346"/>
         <source>Launch</source>
-        <translation type="unfinished"></translation>
+        <translation>Uruchom</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="2495"/>
@@ -70393,7 +70397,7 @@ Kontynuować?</translation>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="2498"/>
         <source>Automatically create transaction groups where possible</source>
-        <translation type="unfinished"></translation>
+        <translation>Twórz grupy transakcji, gdy to możliwe</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="2505"/>
@@ -70403,7 +70407,7 @@ Kontynuować?</translation>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="2508"/>
         <source>Evaluate default values on provider side</source>
-        <translation type="unfinished"></translation>
+        <translation>Obliczaj wartości domyślne po stronie dostawcy</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="2519"/>
@@ -70728,7 +70732,7 @@ Kontynuować?</translation>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="775"/>
         <source>Enable 'on the fly' CRS transformation (OTF)</source>
-        <translation type="unfinished"></translation>
+        <translation>Włącz reprojekcję współrzędnych w locie (OTF)</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="865"/>
@@ -70738,12 +70742,12 @@ Kontynuować?</translation>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="1312"/>
         <source>Import colors</source>
-        <translation type="unfinished"></translation>
+        <translation>Importuj kolory</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="1326"/>
         <source>Export colors</source>
-        <translation type="unfinished"></translation>
+        <translation>Eksportuj kolory</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsprojectpropertiesbase.ui" line="1445"/>
@@ -72886,7 +72890,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/ui/qgsrasterlayerpropertiesbase.ui" line="2137"/>
         <source>Embedded widgets in legend</source>
-        <translation type="unfinished"></translation>
+        <translation>Widżety osadzone w legendzie</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsrasterlayerpropertiesbase.ui" line="1358"/>
@@ -73253,7 +73257,7 @@ danych o maksymalnej szerokości i wysokości podanej poniżej.</translation>
     <message>
         <location filename="../src/ui/qgsrasterlayersaveasdialogbase.ui" line="402"/>
         <source>Create Options</source>
-        <translation>Opcje kompresji</translation>
+        <translation>Opcje generowania</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsrasterlayersaveasdialogbase.ui" line="432"/>
@@ -73381,7 +73385,7 @@ count cut</source>
         <translation>Skumulowany
 poziom odcięcia</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/qgsrasterminmaxwidgetbase.ui" line="138"/>
         <source>Mean +/-
 standard deviation ×</source>
@@ -73442,7 +73446,7 @@ od średniej +/-</translation>
     <message>
         <location filename="../src/ui/qgsrasterpyramidsoptionswidgetbase.ui" line="74"/>
         <source>Create Options</source>
-        <translation>Opcje kompresji</translation>
+        <translation>Opcje generowania</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsrasterpyramidsoptionswidgetbase.ui" line="97"/>
@@ -74155,7 +74159,7 @@ od średniej +/-</translation>
     <message>
         <location filename="../src/ui/qgsrelationadddlgbase.ui" line="53"/>
         <source>Referencing Layer (Child)</source>
-        <translation>Wartwa powiązana</translation>
+        <translation type="unfinished">Warstwa powiązana</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsrelationadddlgbase.ui" line="60"/>
@@ -75618,7 +75622,7 @@ and only the geometry column of the main typename can be used as the geometry co
     <message>
         <location filename="../src/app/qgsselectbyformdialog.cpp" line="43"/>
         <source>Select features by value</source>
-        <translation type="unfinished"></translation>
+        <translation>Zaznacz obiekty według wartości</translation>
     </message>
 </context>
 <context>
@@ -79898,20 +79902,20 @@ Błąd:%2</translation>
         <location filename="../src/core/qgsvectorlayereditbuffer.cpp" line="390"/>
         <source>SUCCESS: %n attribute(s) renamed.</source>
         <comment>renamed attributes count</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>SUKCES: zmieniono nazwę %n atrybutu.</numerusform>
+            <numerusform>SUKCES: zmieniono nazwę %n atrybutów.</numerusform>
+            <numerusform>SUKCES: zmieniono nazwę %n atrybutów.</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <location filename="../src/core/qgsvectorlayereditbuffer.cpp" line="399"/>
         <source>ERROR: %n attribute(s) not renamed</source>
         <comment>not renamed attributes count</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>BŁĄD: nie zmieniono nazwy %n atrybutu</numerusform>
+            <numerusform>BŁĄD: nie zmieniono nazwy %n atrybutów</numerusform>
+            <numerusform>BŁĄD: nie zmieniono nazwy %n atrybutów</numerusform>
         </translation>
     </message>
     <message>
@@ -80501,7 +80505,7 @@ Błąd:%2</translation>
     <message>
         <location filename="../src/ui/qgsvectorlayerpropertiesbase.ui" line="863"/>
         <source>Simplify geometry</source>
-        <translation>Uprość geometrię</translation>
+        <translation>Upraszczaj geometrię</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsvectorlayerpropertiesbase.ui" line="872"/>
@@ -80526,7 +80530,7 @@ Błąd:%2</translation>
     <message>
         <location filename="../src/ui/qgsvectorlayerpropertiesbase.ui" line="937"/>
         <source>Simplification algorithm: </source>
-        <translation type="unfinished"></translation>
+        <translation>Algorytm upraszczania:</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsvectorlayerpropertiesbase.ui" line="934"/>
@@ -80724,7 +80728,7 @@ Błąd:%2</translation>
     <message>
         <location filename="../src/app/ogr/qgsvectorlayersaveasdialog.cpp" line="294"/>
         <source>Use %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Użyj %1</translation>
     </message>
     <message>
         <location filename="../src/app/ogr/qgsvectorlayersaveasdialog.cpp" line="495"/>
@@ -80750,6 +80754,14 @@ Błąd:%2</translation>
         <translation>Przeglądaj</translation>
     </message>
     <message>
+        <source>File name</source>
+        <translation>Nazwa pliku</translation>
+    </message>
+    <message>
+        <source>Layer name</source>
+        <translation>Nazwa warstwy</translation>
+    </message>
+    <message>
         <location filename="../src/ui/qgsvectorlayersaveasdialogbase.ui" line="103"/>
         <source>Encoding</source>
         <translation>Kodowanie</translation>
@@ -80762,7 +80774,7 @@ Błąd:%2</translation>
     <message>
         <location filename="../src/ui/qgsvectorlayersaveasdialogbase.ui" line="125"/>
         <source>Select fields to export and their export options</source>
-        <translation type="unfinished"></translation>
+        <translation>Wybór atrybutów do eksportu</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsvectorlayersaveasdialogbase.ui" line="180"/>
@@ -80777,7 +80789,7 @@ Błąd:%2</translation>
     <message>
         <location filename="../src/ui/qgsvectorlayersaveasdialogbase.ui" line="238"/>
         <source>Geometry</source>
-        <translation type="unfinished"></translation>
+        <translation>Geometria</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsvectorlayersaveasdialogbase.ui" line="246"/>
@@ -80832,7 +80844,7 @@ Błąd:%2</translation>
     <message>
         <location filename="../src/ui/qgsvectorlayersaveasdialogbase.ui" line="171"/>
         <source>Deselect All</source>
-        <translation type="unfinished"></translation>
+        <translation>Odznacz wszystko</translation>
     </message>
     <message>
         <location filename="../src/ui/qgsvectorlayersaveasdialogbase.ui" line="311"/>
@@ -84099,7 +84111,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2396"/>
         <source>Random points along line</source>
-        <translation type="unfinished"></translation>
+        <translation>Losowe punkty wzdłuż linii</translation>
     </message>
 </context>
 <context>
@@ -84137,7 +84149,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2406"/>
         <source>Random points in extent</source>
-        <translation type="unfinished"></translation>
+        <translation>Losowe punkty w podanym zasięgu</translation>
     </message>
 </context>
 <context>
@@ -84175,7 +84187,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2416"/>
         <source>Random points in layer bounds</source>
-        <translation type="unfinished"></translation>
+        <translation>Losowe punkty w zasięgu warstwy</translation>
     </message>
 </context>
 <context>
@@ -84228,7 +84240,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2426"/>
         <source>Random points inside polygons (fixed)</source>
-        <translation type="unfinished"></translation>
+        <translation>Losowe punkty w poligonach (stałe)</translation>
     </message>
 </context>
 <context>
@@ -84281,7 +84293,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2439"/>
         <source>Random points inside polygons (variable)</source>
-        <translation type="unfinished"></translation>
+        <translation>Losowe punkty w poligonach (zmienne)</translation>
     </message>
 </context>
 <context>
@@ -84468,7 +84480,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2490"/>
         <source>Raster layer histogram</source>
-        <translation type="unfinished"></translation>
+        <translation>Histogram warstwy rastrowej</translation>
     </message>
 </context>
 <context>
@@ -84526,7 +84538,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2499"/>
         <source>Raster layer statistics</source>
-        <translation type="unfinished"></translation>
+        <translation>Statystyki warstwy rastrowej</translation>
     </message>
 </context>
 <context>
@@ -84750,7 +84762,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2560"/>
         <source>Reproject layer</source>
-        <translation type="unfinished"></translation>
+        <translation>Przelicz układ współrzędnych warstwy</translation>
     </message>
 </context>
 <context>
@@ -84758,7 +84770,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2568"/>
         <source>Reverse line direction</source>
-        <translation type="unfinished"></translation>
+        <translation>Odwróć kierunek linii</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2569"/>
@@ -84773,7 +84785,7 @@ Proszę go skonfigurować przed uruchomieniem skryptów R.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2571"/>
         <source>Reversed</source>
-        <translation type="unfinished"></translation>
+        <translation>Wynik</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2572"/>
@@ -86509,7 +86521,7 @@ Warstwy wielopasmowe nie są obsługiwane przez SAGA.</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2604"/>
         <source>Save selected features</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapisz zaznaczone obiekty</translation>
     </message>
 </context>
 <context>
@@ -86802,7 +86814,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2660"/>
         <source>Select by expression</source>
-        <translation type="unfinished"></translation>
+        <translation>Zaznacz wyrażeniem</translation>
     </message>
 </context>
 <context>
@@ -86941,7 +86953,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2687"/>
         <source>Set style for raster layer</source>
-        <translation type="unfinished"></translation>
+        <translation>Przypisz styl do warstwy rastrowej</translation>
     </message>
 </context>
 <context>
@@ -86969,7 +86981,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2695"/>
         <source>Set style for vector layer</source>
-        <translation type="unfinished"></translation>
+        <translation>Przypisz styl do warstwy wektorowej</translation>
     </message>
 </context>
 <context>
@@ -87496,7 +87508,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2752"/>
         <source>Smooth geometry</source>
-        <translation type="unfinished"></translation>
+        <translation>Wygładź geometrię</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2753"/>
@@ -87511,7 +87523,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2755"/>
         <source>Iterations</source>
-        <translation type="unfinished"></translation>
+        <translation>Liczba iteracji</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2756"/>
@@ -87521,7 +87533,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2757"/>
         <source>Smoothed</source>
-        <translation type="unfinished"></translation>
+        <translation>Wynik</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2758"/>
@@ -87665,7 +87677,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2788"/>
         <source>Split lines with lines</source>
-        <translation type="unfinished"></translation>
+        <translation>Przetnij linie liniami</translation>
     </message>
 </context>
 <context>
@@ -87759,7 +87771,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2806"/>
         <source>Statistics by categories</source>
-        <translation type="unfinished"></translation>
+        <translation>Statystyki kategorii</translation>
     </message>
 </context>
 <context>
@@ -87874,7 +87886,7 @@ Problem w linii %d</translation>
         <source>Advanced</source>
         <translation>Zaawansowane</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_symbolslist.ui" line="324"/>
         <source> °</source>
         <translation> °</translation>
@@ -88256,17 +88268,17 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2864"/>
         <source>Text attribute to convert to float</source>
-        <translation type="unfinished"></translation>
+        <translation>Atrybut tekstowy do przekonwertowania na liczby zmiennoprzecinkowe</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2865"/>
         <source>Float from text</source>
-        <translation type="unfinished"></translation>
+        <translation>Warstwa wynikowa</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2861"/>
         <source>Text to float</source>
-        <translation type="unfinished"></translation>
+        <translation>Tekst na zmiennoprzecinkowe</translation>
     </message>
 </context>
 <context>
@@ -88463,7 +88475,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2905"/>
         <source>Variable distance buffer</source>
-        <translation type="unfinished"></translation>
+        <translation>Bufor o zmiennej szerokości</translation>
     </message>
 </context>
 <context>
@@ -88600,7 +88612,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2938"/>
         <source>Vector layer histogram</source>
-        <translation type="unfinished"></translation>
+        <translation>Histogram warstwy wektorowej</translation>
     </message>
 </context>
 <context>
@@ -88633,7 +88645,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2947"/>
         <source>Vector layer scatterplot</source>
-        <translation type="unfinished"></translation>
+        <translation>Wykres punktowy z warstwy wektorowej</translation>
     </message>
 </context>
 <context>
@@ -88679,7 +88691,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2964"/>
         <source>Voronoi polygons</source>
-        <translation>Poligon Woronoja</translation>
+        <translation>Poligony Woronoja</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="2965"/>
@@ -88931,7 +88943,7 @@ Problem w linii %d</translation>
         <source>Symbol height</source>
         <translation>Wysokość symbolu </translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_ellipse.ui" line="232"/>
         <source> °</source>
         <translation> °</translation>
@@ -88980,7 +88992,7 @@ Problem w linii %d</translation>
         <source>Rotation</source>
         <translation>Obrót</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_filledmarker.ui" line="83"/>
         <source> °</source>
         <translation> °</translation>
@@ -89127,7 +89139,7 @@ Problem w linii %d</translation>
         <source>Font family</source>
         <translation>Rodzaj czcionki</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_fontmarker.ui" line="403"/>
         <source> °</source>
         <translation> °</translation>
@@ -89290,7 +89302,7 @@ Problem w linii %d</translation>
         <source>Reference Point 2</source>
         <translation>Punkt odniesienia 2</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_gradientfill.ui" line="406"/>
         <source> °</source>
         <translation> °</translation>
@@ -89340,7 +89352,7 @@ Problem w linii %d</translation>
         <source>Offset</source>
         <translation>Przesunięcie</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_linepatternfill.ui" line="125"/>
         <source> °</source>
         <translation> °</translation>
@@ -89520,7 +89532,7 @@ Problem w linii %d</translation>
         <source>Offset X,Y</source>
         <translation>Przesunięcie X,Y</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_rasterfill.ui" line="81"/>
         <source> °</source>
         <translation> °</translation>
@@ -89584,7 +89596,7 @@ Problem w linii %d</translation>
         <source>...</source>
         <translation>...</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_svgfill.ui" line="22"/>
         <source> °</source>
         <translation> °</translation>
@@ -89627,7 +89639,7 @@ Problem w linii %d</translation>
         <source> %</source>
         <translation> %</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/effects/widget_shadoweffect.ui" line="232"/>
         <source>˚</source>
         <translation>˚</translation>
@@ -89915,7 +89927,7 @@ Problem w linii %d</translation>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_simplemarker.ui" line="125"/>
         <source> °</source>
         <translation> °</translation>
@@ -90052,7 +90064,7 @@ Problem w linii %d</translation>
         <source>...</source>
         <translation>...</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/symbollayer/widget_svgmarker.ui" line="95"/>
         <source> °</source>
         <translation> °</translation>
@@ -90108,7 +90120,7 @@ Problem w linii %d</translation>
         <source>Rotation</source>
         <translation>Obrót</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/ui/effects/widget_transform.ui" line="118"/>
         <source> °</source>
         <translation> °</translation>
@@ -90660,7 +90672,7 @@ Problem w linii %d</translation>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="3062"/>
         <source>Build Virtual Raster</source>
-        <translation type="unfinished"></translation>
+        <translation>Twórz wirtualny raster</translation>
     </message>
 </context>
 <context>
@@ -93200,7 +93212,7 @@ p, li { white-space: pre-wrap; }
         <source>Database Host</source>
         <translation>Host bazy danych</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/plugins/evis/ui/evisdatabaseconnectionguibase.ui" line="192"/>
         <source>Enter the database host. If the database resides on your desktop you should enter ¨localhost¨. If you selected ¨MSAccess¨ as the database type this option will not be available. </source>
         <translation>Wprowadź nazwę hosta bazy danych. Jeśli baza danych znajduje się na Twoim komputerze, będzie to "localhost". Jeśli wybrałeś "MSAccess" jako typ bazy danych, opcja ta nie będzie dostępna.</translation>
@@ -93441,7 +93453,7 @@ p, li { white-space: pre-wrap; }
         <source>Next</source>
         <translation>Następny</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/plugins/evis/ui/evisgenericeventbrowserguibase.ui" line="113"/>
         <source>All of the attribute information for the point associated with the photo being viewed is displayed here. If the file type being referenced in the displayed record is not an image but is of a file type defined in the “Configure External Applications” tab then when you double-click on the value of the field containing the path to the file the application to open the file will be launched to view or hear the contents of the file. If the file extension is recognized the attribute data will be displayed in green.</source>
         <translation>Wszystkie atrybuty punktu związanego z widocznym zdjęciem są wyświetlane tutaj. Jeśli typ pliku odniesienia nie jest obrazem, lecz jednym ze zdefiniowanych w zakładce "Konfiguruj zewnętrzne aplikacje", podwójne kliknięcie zawartości pola zawierającego ścieżkę do pliku spowoduje uruchomienie aplikacji ze wskazanym plikiem. Jeśli rozszerzenie pliku jest rozpoznawalne, dane atrybutów zostaną wyświetlone na zielono.</translation>
@@ -93481,7 +93493,7 @@ p, li { white-space: pre-wrap; }
         <source>Use the drop-down list to select the field containing a directory path to the image. This can be an absolute or relative path.</source>
         <translation>Użyj listy rozwijalnej do wyboru pola zawierającego ścieżkę dostępu do obrazu. Może to być ścieżka bezwzględną lub względna.</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/plugins/evis/ui/evisgenericeventbrowserguibase.ui" line="222"/>
         <source>If checked the path to the image will be defined appending the attribute in the field selected from the “Attribute Containing Path to Image” drop-down list to the “Base Path” defined below.</source>
         <translation>Przy sprawdzeniu, ścieżka dostępu do obrazu zostanie określona przez dodanie atrybutu wybranego pola z listy rozwijalnej "Atrybut zawierający ścieżkę do obrazu" do "Ścieżki bazowej" zdefiniowanej poniżej.</translation>
@@ -93612,7 +93624,7 @@ p, li { white-space: pre-wrap; }
         <source>Relative paths</source>
         <translation>Względne ścieżki dostępu</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/plugins/evis/ui/evisgenericeventbrowserguibase.ui" line="593"/>
         <source>The base path or url from which images and documents can be “relative”</source>
         <translation>Ścieżka bazowa lub URL, od której będą definiowane dla obrazów i dokumentów ścieżki "względne"</translation>
@@ -93633,7 +93645,7 @@ p, li { white-space: pre-wrap; }
         <source>If checked, the Base Path will be saved for the next session.</source>
         <translation>Jeśli zaznaczone, ścieżka bazowa zostanie zapamiętana do następnej sesji.</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/plugins/evis/ui/evisgenericeventbrowserguibase.ui" line="661"/>
         <source>Enters the default “Base Path” which is the path to the directory of the vector layer containing the image information.</source>
         <translation>Domyślna "Ścieżka bazowa", która jest ścieżką do katalogu warstwy wektorowej zawierającej obrazy.</translation>
@@ -93672,7 +93684,7 @@ Base Path (i.e. keep only filename from attribute)</source>
         <source>Apply Path to Image rules when loading docs in external applications</source>
         <translation>Zastosuj reguły ścieżki do obrazu podczas wczytywania dokumentów do aplikacji zewnętrznych</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../src/plugins/evis/ui/evisgenericeventbrowserguibase.ui" line="823"/>
         <source>Clicking on Save will save the settings without closing the Options pane. Clicking on Restore Defaults will reset all of the fields to their default settings. It has the same effect as clicking all of the “Reset to default” buttons. </source>
         <translation>Wybór przycisku "Zapisz" spowoduje zapisanie ustawień bez zamykania okna. Wybór "Przywróć domyślne" spowoduje powrót wszystkich ustawień do wartości domyślnych.</translation>
@@ -94218,7 +94230,7 @@ Base Path (i.e. keep only filename from attribute)</source>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="3184"/>
         <source>Tile Index</source>
-        <translation type="unfinished"></translation>
+        <translation>Indeks kafli</translation>
     </message>
 </context>
 <context>
@@ -99368,7 +99380,7 @@ Base Path (i.e. keep only filename from attribute)</source>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="3880"/>
         <source>Raster extent</source>
-        <translation type="unfinished"></translation>
+        <translation>Zasięg rastra</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="3881"/>
@@ -99428,7 +99440,7 @@ Base Path (i.e. keep only filename from attribute)</source>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="3873"/>
         <source>Rasterize (vector to raster)</source>
-        <translation type="unfinished"></translation>
+        <translation>Rasteryzuj (wektor na raster)</translation>
     </message>
 </context>
 <context>
@@ -99456,7 +99468,7 @@ Base Path (i.e. keep only filename from attribute)</source>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="3895"/>
         <source>Rasterize (write over existing raster)</source>
-        <translation type="unfinished"></translation>
+        <translation>Rasteryzuj (wypal na istniejącym rastrze)</translation>
     </message>
 </context>
 <context>
@@ -100092,7 +100104,7 @@ Base Path (i.e. keep only filename from attribute)</source>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="3978"/>
         <source>Translate (convert format)</source>
-        <translation type="unfinished"></translation>
+        <translation>Konwertuj raster</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="3979"/>
@@ -100537,7 +100549,7 @@ Base Path (i.e. keep only filename from attribute)</source>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="4035"/>
         <source>Warp (reproject)</source>
-        <translation type="unfinished"></translation>
+        <translation>Zmień odwzorowanie</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="4036"/>
@@ -100552,7 +100564,7 @@ Base Path (i.e. keep only filename from attribute)</source>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="4043"/>
         <source>Raster extent</source>
-        <translation type="unfinished"></translation>
+        <translation>Zasięg rastra</translation>
     </message>
     <message>
         <location filename="../python/plugins/processing/python-i18n.cpp" line="4044"/>


=====================================
python/plugins/processing/algs/r/RAlgorithm.py
=====================================
--- a/python/plugins/processing/algs/r/RAlgorithm.py
+++ b/python/plugins/processing/algs/r/RAlgorithm.py
@@ -254,9 +254,12 @@ class RAlgorithm(GeoAlgorithm):
             param = ParameterExtent(name, desc)
         elif token.lower().strip() == 'point':
             param = ParameterPoint(name, desc)
-        elif token.lower().strip() == 'file':
+        elif token.lower().strip().startswith('file'):
             param = ParameterFile(name, desc, False)
-        elif token.lower().strip() == 'folder':
+            ext = token.strip()[len('file') + 1:]
+            if ext:
+                param.ext = ext
+        elif token.lower().strip().startswith('folder'):
             param = ParameterFile(name, desc, True)
         elif token.lower().strip().startswith('string'):
             default = token.strip()[len('string') + 1:]
@@ -270,7 +273,7 @@ class RAlgorithm(GeoAlgorithm):
                 param = ParameterString(name, desc, default, multiline=True)
             else:
                 param = ParameterString(name, desc, multiline=True)
-        elif token.lower().strip() == 'crs':
+        elif token.lower().strip().startswith('crs'):
             default = token.strip()[len('crs') + 1:]
             if default:
                 param = ParameterCrs(name, desc, default)


=====================================
python/plugins/processing/gui/Postprocessing.py
=====================================
--- a/python/plugins/processing/gui/Postprocessing.py
+++ b/python/plugins/processing/gui/Postprocessing.py
@@ -43,6 +43,7 @@ from processing.gui.RenderingStyles import RenderingStyles
 from processing.core.outputs import OutputRaster
 from processing.core.outputs import OutputVector
 from processing.core.outputs import OutputTable
+from processing.core.outputs import OutputFile
 from processing.core.outputs import OutputHTML
 
 from processing.tools import dataobjects
@@ -79,6 +80,15 @@ def handleAlgorithmResults(alg, progress=None, showResults=True):
                 ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
                                        "Error loading result layer:\n" + traceback.format_exc())
                 wrongLayers.append(out.description)
+        elif isinstance(out, OutputFile) and out.ext == 'csv':
+            try:
+                dataobjects.load(out.value, name, alg.crs,
+                                 RenderingStyles.getStyle(alg.commandLineName(),
+                                                          out.name))
+            except Exception:
+                ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
+                                       "Error loading result layer:\n" + traceback.format_exc())
+                wrongLayers.append(out.description)
         elif isinstance(out, OutputHTML):
             ProcessingResults.addResult(out.description, out.value)
             htmlResults = True


=====================================
python/plugins/processing/script/ScriptAlgorithm.py
=====================================
--- a/python/plugins/processing/script/ScriptAlgorithm.py
+++ b/python/plugins/processing/script/ScriptAlgorithm.py
@@ -233,9 +233,12 @@ class ScriptAlgorithm(GeoAlgorithm):
             param = ParameterExtent(name, descName)
         elif token.lower().strip() == 'point':
             param = ParameterPoint(name, descName)
-        elif token.lower().strip() == 'file':
+        elif token.lower().strip().startswith('file'):
             param = ParameterFile(name, descName, False)
-        elif token.lower().strip() == 'folder':
+            ext = token.strip()[len('file') + 1:]
+            if ext:
+                param.ext = ext
+        elif token.lower().strip().startswith('folder'):
             param = ParameterFile(name, descName, True)
         elif token.lower().strip().startswith('number'):
             default = token.strip()[len('number') + 1:]


=====================================
src/providers/wfs/qgswfsprovider.cpp
=====================================
--- a/src/providers/wfs/qgswfsprovider.cpp
+++ b/src/providers/wfs/qgswfsprovider.cpp
@@ -1298,6 +1298,13 @@ bool QgsWFSProvider::readAttributesFromSchema( QDomDocument& schemaDoc,
       geometryAttribute = name;
       geomType = QGis::WKBMultiLineString;
     }
+    // such as http://go.geozug.ch/Zug_WFS_Baumkataster/service.svc/get
+    else if ( type == "gmgml:Point_MultiPointPropertyType" )
+    {
+      foundGeometryAttribute = true;
+      geometryAttribute = name;
+      geomType = QGis::WKBMultiPoint;
+    }
     //is it a geometry attribute?
     // the GeometryAssociationType has been seen in #11785
     else if ( type.indexOf( gmlPT ) == 0 || type == "gml:GeometryAssociationType" )


=====================================
src/providers/wms/CMakeLists.txt
=====================================
--- a/src/providers/wms/CMakeLists.txt
+++ b/src/providers/wms/CMakeLists.txt
@@ -46,6 +46,8 @@ INCLUDE_DIRECTORIES(SYSTEM
 ADD_LIBRARY(wmsprovider_a STATIC ${WMS_SRCS} ${WMS_MOC_SRCS})
 ADD_LIBRARY(wmsprovider MODULE ${WMS_SRCS} ${WMS_MOC_SRCS})
 
+ADD_DEPENDENCIES(wmsprovider qgis_gui)
+
 TARGET_LINK_LIBRARIES(wmsprovider
   qgis_core
   qgis_gui


=====================================
src/server/qgsowsserver.cpp
=====================================
--- a/src/server/qgsowsserver.cpp
+++ b/src/server/qgsowsserver.cpp
@@ -85,7 +85,13 @@ QString QgsOWSServer::featureGmlId( const QgsFeature* f, const QgsAttributeList&
     {
       pkId.append( pkSeparator() );
     }
-    pkId.append( f->attribute( *it ).toString() );
+
+    QVariant pkAttribute = f->attribute( *it );
+    if ( !pkAttribute.isValid() )
+    {
+      return QString::number( f->id() );
+    }
+    pkId.append( pkAttribute.toString() );
   }
   return pkId;
 }


=====================================
src/server/qgsserverprojectparser.cpp
=====================================
--- a/src/server/qgsserverprojectparser.cpp
+++ b/src/server/qgsserverprojectparser.cpp
@@ -80,6 +80,17 @@ QgsServerProjectParser::QgsServerProjectParser( QDomDocument* xmlDoc, const QStr
   {
     QgsProject::instance()->setFileName( mProjectPath );
   }
+
+  // Set the project scope variables
+  QStringList variableNames = readListEntry( "Variables", "variableNames" );
+  QStringList variableValues = readListEntry( "Variables", "variableValues" );
+
+  //read values
+
+  //append standard values
+
+  QgsProject::instance()->writeEntry( "Variables", "/variableNames", variableNames );
+  QgsProject::instance()->writeEntry( "Variables", "/variableValues", variableValues );
 }
 
 QgsServerProjectParser::QgsServerProjectParser()
@@ -1633,4 +1644,34 @@ void QgsServerProjectParser::addGetFeatureLayers( const QDomElement& layerElem )
   }
 }
 
+QStringList QgsServerProjectParser::readListEntry( const QString& scope, const QString& key ) const
+{
+  QStringList entryList;
+  QDomElement propertiesElement = propertiesElem();
+  if ( propertiesElement.isNull() )
+  {
+    return entryList;
+  }
+
+  QDomElement scopeElem = propertiesElement.firstChildElement( scope );
+  if ( scopeElem.isNull() )
+  {
+    return entryList;
+  }
+
+  QDomElement keyElem = scopeElem.firstChildElement( key );
+  if ( keyElem.isNull() )
+  {
+    return entryList;
+  }
+
+  QDomNodeList valueNodeList = keyElem.elementsByTagName( "value" );
+  for ( int i = 0; i < valueNodeList.size(); ++i )
+  {
+    entryList.append( valueNodeList.at( i ).toElement().text() );
+  }
+
+  return entryList;
+}
+
 


=====================================
src/server/qgsserverprojectparser.h
=====================================
--- a/src/server/qgsserverprojectparser.h
+++ b/src/server/qgsserverprojectparser.h
@@ -175,6 +175,9 @@ class SERVER_EXPORT QgsServerProjectParser
 
     /** Adds sublayers of an embedded group to layer set*/
     static void sublayersOfEmbeddedGroup( const QString& projectFilePath, const QString& groupName, QSet<QString>& layerSet );
+
+    /** Reads list entry from project properties*/
+    QStringList readListEntry( const QString& scope, const QString& key ) const;
 };
 
 #endif // QGSSERVERPROJECTPARSER_H


=====================================
src/server/qgswfsprojectparser.cpp
=====================================
--- a/src/server/qgswfsprojectparser.cpp
+++ b/src/server/qgswfsprojectparser.cpp
@@ -464,7 +464,7 @@ void QgsWFSProjectParser::describeFeatureType( const QString& aTypeName, QDomEle
 
           //xsd:element
           QDomElement attElem = doc.createElement( "element"/*xsd:element*/ );
-          attElem.setAttribute( "name", attributeName );
+          attElem.setAttribute( "name", attributeName.replace( " ", "_" ) );
           QVariant::Type attributeType = fields[idx].type();
           if ( attributeType == QVariant::Int )
             attElem.setAttribute( "type", "integer" );


=====================================
src/server/qgswfsserver.cpp
=====================================
--- a/src/server/qgswfsserver.cpp
+++ b/src/server/qgswfsserver.cpp
@@ -516,13 +516,19 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
 
         //Using pending attributes and pending fields
         QgsAttributeList attrIndexes = layer->pendingAllAttributesList();
+        QgsFields fields = layer->pendingFields();
 
         QDomNodeList queryChildNodes = queryElem.childNodes();
         if ( queryChildNodes.size() )
         {
           QStringList::const_iterator alstIt;
           QList<int> idxList;
-          QgsFields fields = layer->pendingFields();
+          // build corresponding propertyname
+          QList<QString> propertynames;
+          for ( int idx = 0; idx < fields.count(); ++idx )
+          {
+            propertynames.append( fields[idx].name().replace( " ", "_" ) );
+          }
           QString fieldName;
           QDomElement propertyElem;
           for ( int q = 0; q < queryChildNodes.size(); q++ )
@@ -535,7 +541,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
               {
                 fieldName = fieldName.section( ":", 1, 1 );
               }
-              int fieldNameIdx = fields.fieldNameIndex( fieldName );
+              int fieldNameIdx = propertynames.indexOf( fieldName );
               if ( fieldNameIdx > -1 )
               {
                 idxList.append( fieldNameIdx );
@@ -547,6 +553,17 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
             attrIndexes = idxList;
           }
         }
+        if ( !attrIndexes.isEmpty() && !layerExcludedAttributes.isEmpty() )
+        {
+          foreach ( const QString &excludedAttribute, layerExcludedAttributes )
+          {
+            int fieldNameIdx = fields.fieldNameIndex( excludedAttribute );
+            if ( fieldNameIdx > -1 && attrIndexes.contains( fieldNameIdx ) )
+            {
+              attrIndexes.removeOne( fieldNameIdx );
+            }
+          }
+        }
 
         //map extent
         searchRect = layer->extent();
@@ -603,7 +620,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
               if ( featureCounter == 0 )
                 startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
 
-              setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+              setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
 
               fid = "";
               ++featCounter;
@@ -642,7 +659,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
 
               if ( featureCounter >= startIndex )
               {
-                setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+                setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
                 ++featCounter;
               }
               ++featureCounter;
@@ -696,7 +713,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
 
                   if ( featureCounter >= startIndex )
                   {
-                    setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+                    setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
                     ++featCounter;
                   }
                   ++featureCounter;
@@ -714,7 +731,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
 
             if ( featureCounter >= startIndex )
             {
-              setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+              setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
               ++featCounter;
             }
             ++featureCounter;
@@ -927,6 +944,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
 
       //Using pending attributes and pending fields
       QgsAttributeList attrIndexes = layer->pendingAllAttributesList();
+      QgsFields fields = layer->pendingFields();
       if ( mPropertyName != "*" )
       {
         QStringList attrList = mPropertyName.split( "," );
@@ -934,20 +952,33 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
         {
           QStringList::const_iterator alstIt;
           QList<int> idxList;
-          QgsFields fields = layer->pendingFields();
+          // build corresponding propertyname
+          QList<QString> propertynames;
+          for ( int idx = 0; idx < fields.count(); ++idx )
+          {
+            propertynames.append( fields[idx].name().replace( " ", "_" ) );
+          }
           QString fieldName;
           for ( alstIt = attrList.begin(); alstIt != attrList.end(); ++alstIt )
           {
             fieldName = *alstIt;
-            int fieldNameIdx = fields.fieldNameIndex( fieldName );
+            int fieldNameIdx = propertynames.indexOf( fieldName );
             if ( fieldNameIdx > -1 )
             {
               idxList.append( fieldNameIdx );
             }
           }
-          if ( !idxList.isEmpty() )
+          attrIndexes = idxList;
+        }
+      }
+      if ( !attrIndexes.isEmpty() && !layerExcludedAttributes.isEmpty() )
+      {
+        foreach ( const QString &excludedAttribute, layerExcludedAttributes )
+        {
+          int fieldNameIdx = fields.fieldNameIndex( excludedAttribute );
+          if ( fieldNameIdx > -1 && attrIndexes.contains( fieldNameIdx ) )
           {
-            attrIndexes = idxList;
+            attrIndexes.removeOne( fieldNameIdx );
           }
         }
       }
@@ -977,7 +1008,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
           if ( featureCounter == 0 )
             startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
 
-          setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+          setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
           ++featCounter;
           ++featureCounter;
         }
@@ -1026,7 +1057,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
 
               if ( featureCounter >= startIndex )
               {
-                setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+                setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
                 ++featCounter;
               }
               ++featureCounter;
@@ -1063,7 +1094,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
             if ( featureCounter == 0 )
               startGetFeature( request, format, layerPrec, layerCrs, &searchRect );
 
-            setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+            setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
 
             fid = "";
             ++featCounter;
@@ -1102,7 +1133,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
 
             if ( featureCounter >= startIndex )
             {
-              setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+              setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
               ++featCounter;
             }
             ++featureCounter;
@@ -1151,7 +1182,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
 
                 if ( featureCounter >= startIndex )
                 {
-                  setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+                  setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
                   ++featCounter;
                 }
                 ++featureCounter;
@@ -1190,7 +1221,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format 
 
           if ( featureCounter >= startIndex )
           {
-            setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, layerExcludedAttributes, provider->pkAttributeIndexes() );
+            setGetFeature( request, format, &feature, featCounter, layerPrec, layerCrs, attrIndexes, provider->pkAttributeIndexes() );
             ++featCounter;
           }
           ++featureCounter;
@@ -1363,7 +1394,7 @@ void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& f
   fcString = "";
 }
 
-void QgsWFSServer::setGetFeature( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes, const QSet<QString>& excludedAttributes,
+void QgsWFSServer::setGetFeature( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes,
                                   const QgsAttributeList& pkAttributes ) /*const*/
 {
   if ( !feat->isValid() )
@@ -1377,7 +1408,11 @@ void QgsWFSServer::setGetFeature( QgsRequestHandler& request, const QString& for
       fcString += "  ";
     else
       fcString += " ,";
-    fcString += createFeatureGeoJSON( feat, prec, crs, attrIndexes, excludedAttributes, pkAttributes );
+    mJsonExporter.setSourceCrs( crs );
+    mJsonExporter.setIncludeGeometry( false );
+    mJsonExporter.setIncludeAttributes( !attrIndexes.isEmpty() );
+    mJsonExporter.setAttributes( attrIndexes );
+    fcString += createFeatureGeoJSON( feat, prec, crs, attrIndexes, pkAttributes );
     fcString += "\n";
 
     result = fcString.toUtf8();
@@ -1390,12 +1425,12 @@ void QgsWFSServer::setGetFeature( QgsRequestHandler& request, const QString& for
     QDomElement featureElement;
     if ( format == "GML3" )
     {
-      featureElement = createFeatureGML3( feat, gmlDoc, prec, crs, attrIndexes, excludedAttributes, pkAttributes );
+      featureElement = createFeatureGML3( feat, gmlDoc, prec, crs, attrIndexes, pkAttributes );
       gmlDoc.appendChild( featureElement );
     }
     else
     {
-      featureElement = createFeatureGML2( feat, gmlDoc, prec, crs, attrIndexes, excludedAttributes, pkAttributes );
+      featureElement = createFeatureGML2( feat, gmlDoc, prec, crs, attrIndexes, pkAttributes );
       gmlDoc.appendChild( featureElement );
     }
 
@@ -1940,13 +1975,14 @@ QgsFeatureIds QgsWFSServer::getFeatureIdsFromFilter( const QDomElement& filterEl
   return fids;
 }
 
-QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes, const QSet<QString>& excludedAttributes,
+QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes,
     const QgsAttributeList& pkAttributes ) /*const*/
 {
   QString id = QString( "%1.%2" ).arg( mTypeName, featureGmlId( feat, pkAttributes ) );
 
-  QgsJSONExporter exporter;
-  exporter.setSourceCrs( crs );
+  //QgsJSONExporter exporter;
+  //exporter.setSourceCrs( crs );
+  Q_UNUSED( crs );
   //QgsJSONExporter force transform geometry to ESPG:4326
   //and the RFC 7946 GeoJSON specification recommends limiting coordinate precision to 6
   Q_UNUSED( prec );
@@ -1955,10 +1991,11 @@ QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, int prec, QgsCoord
   //copy feature so we can modify its geometry as required
   QgsFeature f( *feat );
   const QgsGeometry* geom = feat->constGeometry();
-  exporter.setIncludeGeometry( false );
+  //exporter.setIncludeGeometry( false );
   if ( geom && mWithGeom && mGeometryName != "NONE" )
   {
-    exporter.setIncludeGeometry( true );
+    //exporter.setIncludeGeometry( true );
+    mJsonExporter.setIncludeGeometry( true );
     if ( mGeometryName == "EXTENT" )
     {
       QgsRectangle box = geom->boundingBox();
@@ -1972,7 +2009,7 @@ QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, int prec, QgsCoord
     }
   }
 
-  const QgsFields* fields = feat->fields();
+  /*const QgsFields* fields = feat->fields();
   QgsAttributeList attrsToExport;
   for ( int i = 0; i < attrIndexes.count(); ++i )
   {
@@ -1989,15 +2026,16 @@ QString QgsWFSServer::createFeatureGeoJSON( QgsFeature* feat, int prec, QgsCoord
     }
 
     attrsToExport << idx;
-  }
+  }*/
+  Q_UNUSED( attrIndexes );
 
-  exporter.setIncludeAttributes( !attrsToExport.isEmpty() );
-  exporter.setAttributes( attrsToExport );
+  //exporter.setIncludeAttributes( !attrsToExport.isEmpty() );
+  //exporter.setAttributes( attrsToExport );
 
-  return exporter.exportFeature( f, QVariantMap(), id );
+  return mJsonExporter.exportFeature( f, QVariantMap(), id );
 }
 
-QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes, const QSet<QString>& excludedAttributes,
+QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes,
     const QgsAttributeList& pkAttributes ) /*const*/
 {
   //gml:FeatureMember
@@ -2067,12 +2105,12 @@ QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc
     }
     QString attributeName = fields->at( idx ).name();
     //skip attribute if it is excluded from WFS publication
-    if ( excludedAttributes.contains( attributeName ) )
+    /*if ( excludedAttributes.contains( attributeName ) )
     {
       continue;
-    }
+    }*/
 
-    QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( QString( " " ), QString( "_" ) ) );
+    QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( " ", "_" ) );
     QDomText fieldText = doc.createTextNode( featureAttributes[idx].toString() );
     fieldElem.appendChild( fieldText );
     typeNameElement.appendChild( fieldElem );
@@ -2081,7 +2119,7 @@ QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc
   return featureElement;
 }
 
-QDomElement QgsWFSServer::createFeatureGML3( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes, const QSet<QString>& excludedAttributes,
+QDomElement QgsWFSServer::createFeatureGML3( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes,
     const QgsAttributeList& pkAttributes ) /*const*/
 {
   //gml:FeatureMember
@@ -2151,12 +2189,12 @@ QDomElement QgsWFSServer::createFeatureGML3( QgsFeature* feat, QDomDocument& doc
     }
     QString attributeName = fields->at( idx ).name();
     //skip attribute if it is excluded from WFS publication
-    if ( excludedAttributes.contains( attributeName ) )
+    /*if ( excludedAttributes.contains( attributeName ) )
     {
       continue;
-    }
+    }*/
 
-    QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( QString( " " ), QString( "_" ) ) );
+    QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( " ", "_" ) );
     QDomText fieldText = doc.createTextNode( featureAttributes[idx].toString() );
     fieldElem.appendChild( fieldText );
     typeNameElement.appendChild( fieldElem );


=====================================
src/server/qgswfsserver.h
=====================================
--- a/src/server/qgswfsserver.h
+++ b/src/server/qgswfsserver.h
@@ -26,6 +26,7 @@
 #include "qgsowsserver.h"
 #include "qgsvectorlayer.h"
 #include "qgswfsprojectparser.h"
+#include "qgsjsonutils.h"
 
 class QgsCoordinateReferenceSystem;
 class QgsComposerLayerItem;
@@ -45,6 +46,7 @@ class QgsRectangle;
 class QgsGeometry;
 class QgsSymbol;
 class QgsRequestHandler;
+class QgsJSONExporter;
 class QFile;
 class QFont;
 class QImage;
@@ -107,12 +109,15 @@ class QgsWFSServer: public QgsOWSServer
     /* Error messages */
     QStringList mErrors;
 
+    /* GeoJSON Exporter */
+    QgsJSONExporter mJsonExporter;
+    /* WFS configParser */
     QgsWFSProjectParser* mConfigParser;
 
   protected:
 
     void startGetFeature( QgsRequestHandler& request, const QString& format, int prec, QgsCoordinateReferenceSystem& crs, QgsRectangle* rect );
-    void setGetFeature( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes, const QSet<QString>& excludedAttributes,
+    void setGetFeature( QgsRequestHandler& request, const QString& format, QgsFeature* feat, int featIdx, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes,
                         const QgsAttributeList& pkAttributes = QgsAttributeList() );
     void endGetFeature( QgsRequestHandler& request, const QString& format );
 
@@ -120,15 +125,15 @@ class QgsWFSServer: public QgsOWSServer
     QgsFeatureIds getFeatureIdsFromFilter( const QDomElement& filter, QgsVectorLayer* layer );
 
     //methods to write GeoJSON
-    QString createFeatureGeoJSON( QgsFeature* feat, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes, const QSet<QString>& excludedAttributes,
+    QString createFeatureGeoJSON( QgsFeature* feat, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes,
                                   const QgsAttributeList& pkAttributes = QgsAttributeList() ) /*const*/;
 
     //methods to write GML2
-    QDomElement createFeatureGML2( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes, const QSet<QString>& excludedAttributes,
+    QDomElement createFeatureGML2( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes,
                                    const QgsAttributeList& pkAttributes = QgsAttributeList() ) /*const*/;
 
     //methods to write GML3
-    QDomElement createFeatureGML3( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes, const QSet<QString>& excludedAttributes,
+    QDomElement createFeatureGML3( QgsFeature* feat, QDomDocument& doc, int prec, QgsCoordinateReferenceSystem& crs, const QgsAttributeList& attrIndexes,
                                    const QgsAttributeList& pkAttributes = QgsAttributeList() ) /*const*/;
 
     void addTransactionResult( QDomDocument& responseDoc, QDomElement& responseElem, const QString& status, const QString& locator, const QString& message );


=====================================
src/server/qgswmsprojectparser.cpp
=====================================
--- a/src/server/qgswmsprojectparser.cpp
+++ b/src/server/qgswmsprojectparser.cpp
@@ -251,7 +251,7 @@ QList<QgsMapLayer*> QgsWMSProjectParser::mapLayerFromStyle( const QString& lName
         {
           if ( pLegendGroupIt->attribute( "name" ) == lName )
           {
-            addLayersFromGroup( *pLegendGroupIt, layers, useCache );
+            p->addLayersFromGroup( *pLegendGroupIt, layers, useCache );
             break;
           }
         }


=====================================
src/server/qgswmsserver.cpp
=====================================
--- a/src/server/qgswmsserver.cpp
+++ b/src/server/qgswmsserver.cpp
@@ -2193,6 +2193,16 @@ int QgsWMSServer::configureMapRender( const QPaintDevice* paintDevice ) const
     mMapRenderer->setOutputUnits( QgsMapRenderer::Pixels ); //SLD units are in pixels normally
   }
 
+  //Clear expression context and set project variables
+  QgsRenderContext* ctx = mMapRenderer->rendererContext();
+  if ( ctx )
+  {
+    QgsExpressionContext newContext;
+    newContext.appendScope( QgsExpressionContextUtils::globalScope() );
+    newContext.appendScope( QgsExpressionContextUtils::projectScope() );
+    ctx->setExpressionContext( newContext );
+  }
+
   return 0;
 }
 


=====================================
tests/src/python/test_qgsserver.py
=====================================
--- a/tests/src/python/test_qgsserver.py
+++ b/tests/src/python/test_qgsserver.py
@@ -6,6 +6,8 @@ it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 
+From build dir, run: ctest -R PyQgsServer -V
+
 """
 __author__ = 'Alessandro Pasotti'
 __date__ = '25/05/2015'
@@ -577,7 +579,7 @@ class TestQgsServer(unittest.TestCase):
             "HEIGHT": "500",
             "WIDTH": "500",
             "SRS": "EPSG:3857",
-            "SELECTION": "Country: 4"
+            "SELECTION": "Country: 4,1;Hello: 2,5"
         }.items())])
 
         r, h = self._result(self.server.handleRequest(qs))


=====================================
tests/src/python/test_qgsserver_accesscontrol.py
=====================================
--- a/tests/src/python/test_qgsserver_accesscontrol.py
+++ b/tests/src/python/test_qgsserver_accesscontrol.py
@@ -623,12 +623,12 @@ class TestQgsServerAccessControl(unittest.TestCase):
         response, headers = self._post_fullaccess(data)
         self.assertTrue(
             str(response).find("<qgs:pk>1</qgs:pk>") != -1,
-            "No result in GetFeatureInfo\n%s" % response)
+            "No result in GetFeature\n%s" % response)
 
         response, headers = self._post_restricted(data)
         self.assertFalse(
             str(response).find("<qgs:pk>1</qgs:pk>") != -1,
-            "Unexpeced result in GetFeatureInfo\n%s" % response)
+            "Unexpeced result in GetFeature\n%s" % response)
 
 
 # # WCS # # WCS # # WCS # #


=====================================
tests/testdata/control_images/qgis_server/WMS_GetMap_Selection/WMS_GetMap_Selection.png
=====================================
Binary files a/tests/testdata/control_images/qgis_server/WMS_GetMap_Selection/WMS_GetMap_Selection.png and b/tests/testdata/control_images/qgis_server/WMS_GetMap_Selection/WMS_GetMap_Selection.png differ



View it on GitLab: https://salsa.debian.org/debian-gis-team/qgis/commit/a84738fc0c6c230fb3e67f5bcb6156de434180c6

---
View it on GitLab: https://salsa.debian.org/debian-gis-team/qgis/commit/a84738fc0c6c230fb3e67f5bcb6156de434180c6
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/pkg-grass-devel/attachments/20180323/41aba1de/attachment-0001.html>


More information about the Pkg-grass-devel mailing list