[gpsprune] 01/05: Imported Upstream version 16.3

Mònica Ramírez Arceda monica at moszumanska.debian.org
Tue Aug 5 17:25:27 UTC 2014


This is an automated email from the git hooks/post-receive script.

monica pushed a commit to branch master
in repository gpsprune.

commit 38815e4495b9a81cab374e2703d2296695d60b9d
Author: Mònica Ramírez Arceda <monica at debian.org>
Date:   Tue Aug 5 18:34:33 2014 +0200

    Imported Upstream version 16.3
---
 build.sh                                           |  2 +-
 tim/prune/GpsPrune.java                            |  4 +-
 tim/prune/function/PhotoComparer.java              |  2 +-
 .../weather/GetWeatherForecastFunction.java        |  8 ++-
 tim/prune/gui/TerrainDefinitionPanel.java          |  2 +-
 tim/prune/lang/prune-texts_cz.properties           |  1 -
 tim/prune/lang/prune-texts_de.properties           |  1 -
 tim/prune/lang/prune-texts_de_CH.properties        |  1 -
 tim/prune/lang/prune-texts_en.properties           |  1 -
 tim/prune/lang/prune-texts_es.properties           | 49 ++++++++++++--
 tim/prune/lang/prune-texts_fr.properties           | 25 ++++++-
 tim/prune/lang/prune-texts_hu.properties           |  1 -
 tim/prune/lang/prune-texts_it.properties           |  9 ++-
 tim/prune/lang/prune-texts_ja.properties           |  1 -
 tim/prune/lang/prune-texts_ko.properties           |  1 -
 tim/prune/lang/prune-texts_nl.properties           |  1 -
 tim/prune/lang/prune-texts_pl.properties           |  1 -
 tim/prune/lang/prune-texts_pt.properties           |  1 -
 tim/prune/lang/prune-texts_ru.properties           | 78 +++++++++++++++++-----
 tim/prune/lang/prune-texts_sv.properties           | 74 +++++++++++++++-----
 tim/prune/lang/prune-texts_zh.properties           |  1 -
 tim/prune/readme.txt                               | 15 ++++-
 tim/prune/save/GpsSaver.java                       |  2 +-
 tim/prune/save/GpxExporter.java                    | 27 ++++----
 tim/prune/save/xml/GpxCacher.java                  | 18 +++--
 tim/prune/threedee/Java3DWindow.java               | 35 +++++++---
 26 files changed, 272 insertions(+), 89 deletions(-)

diff --git a/build.sh b/build.sh
index d6f0c68..15030ac 100644
--- a/build.sh
+++ b/build.sh
@@ -1,6 +1,6 @@
 # Build script using external exif library
 # Version number
-PRUNENAME=gpsprune_16.2
+PRUNENAME=gpsprune_16.3
 # remove compile directory
 rm -rf compile
 # remove dist directory
diff --git a/tim/prune/GpsPrune.java b/tim/prune/GpsPrune.java
index d8e9549..dd90765 100644
--- a/tim/prune/GpsPrune.java
+++ b/tim/prune/GpsPrune.java
@@ -35,9 +35,9 @@ import tim.prune.gui.profile.ProfileChart;
 public class GpsPrune
 {
 	/** Version number of application, used in about screen and for version check */
-	public static final String VERSION_NUMBER = "16.2";
+	public static final String VERSION_NUMBER = "16.3";
 	/** Build number, just used for about screen */
-	public static final String BUILD_NUMBER = "303b";
+	public static final String BUILD_NUMBER = "303c";
 	/** Static reference to App object */
 	private static App APP = null;
 
diff --git a/tim/prune/function/PhotoComparer.java b/tim/prune/function/PhotoComparer.java
index 86252d1..b15d57c 100644
--- a/tim/prune/function/PhotoComparer.java
+++ b/tim/prune/function/PhotoComparer.java
@@ -48,7 +48,7 @@ public class PhotoComparer implements Comparator<DataPoint>
 		if (result == 0) {
 			result = compareSizes(inP1, inP2);
 		}
-		return 0;
+		return result;
 	}
 
 	/**
diff --git a/tim/prune/function/weather/GetWeatherForecastFunction.java b/tim/prune/function/weather/GetWeatherForecastFunction.java
index 7b6f8c7..970d022 100644
--- a/tim/prune/function/weather/GetWeatherForecastFunction.java
+++ b/tim/prune/function/weather/GetWeatherForecastFunction.java
@@ -73,6 +73,8 @@ public class GetWeatherForecastFunction extends GenericFunction implements Runna
 
 	/** True to just simulate the calls and read files instead, false to call real API */
 	private static final boolean SIMULATE_WITH_FILES = false;
+	/** Unique API key for GpsPrune */
+	private static final String OPENWEATHERMAP_API_KEY = "d1c5d792362f5a5c2eacf70a3b72ecd6";
 
 
 	/**
@@ -365,7 +367,8 @@ public class GetWeatherForecastFunction extends GenericFunction implements Runna
 			+ (_locationId == null ? ("lat=" + NumberUtils.formatNumberUk(lat, 5) + "&lon=" + NumberUtils.formatNumberUk(lon, 5))
 				: ("id=" + _locationId))
 			+ "&lang=" + I18nManager.getText("openweathermap.lang")
-			+ "&mode=xml&units=" + (inUseCelsius ? "metric" : "imperial");
+			+ "&mode=xml&units=" + (inUseCelsius ? "metric" : "imperial")
+			+ "&APPID=" + OPENWEATHERMAP_API_KEY;
 		// System.out.println(urlString);
 
 		// Parse the returned XML with a special handler
@@ -431,7 +434,8 @@ public class GetWeatherForecastFunction extends GenericFunction implements Runna
 		final String forecastCount = inDaily ? "8" : "3";
 		final String urlString = "http://api.openweathermap.org/data/2.5/forecast"
 			+ (inDaily ? "/daily" : "") + "?id=" + _locationId + "&lang=" + I18nManager.getText("openweathermap.lang")
-			+ "&mode=xml&units=" + (inCelsius ? "metric" : "imperial") + "&cnt=" + forecastCount;
+			+ "&mode=xml&units=" + (inCelsius ? "metric" : "imperial") + "&cnt=" + forecastCount
+			+ "&APPID=" + OPENWEATHERMAP_API_KEY;
 		// System.out.println(urlString);
 
 		// Parse the returned XML with a special handler
diff --git a/tim/prune/gui/TerrainDefinitionPanel.java b/tim/prune/gui/TerrainDefinitionPanel.java
index 690c1ae..064aa11 100644
--- a/tim/prune/gui/TerrainDefinitionPanel.java
+++ b/tim/prune/gui/TerrainDefinitionPanel.java
@@ -44,7 +44,7 @@ public class TerrainDefinitionPanel extends JPanel
 		JLabel label = new JLabel(I18nManager.getText("dialog.3d.terraingridsize") + ": ");
 		add(label);
 		_gridSizeField = new WholeNumberField(4);
-		_gridSizeField.setValue(10);
+		_gridSizeField.setValue(50); // default grid size
 		_gridSizeField.setMaximumSize(new Dimension(100, 50));
 		_gridSizeField.setEnabled(false);
 		add(_gridSizeField);
diff --git a/tim/prune/lang/prune-texts_cz.properties b/tim/prune/lang/prune-texts_cz.properties
index 4d7a661..cab34c7 100644
--- a/tim/prune/lang/prune-texts_cz.properties
+++ b/tim/prune/lang/prune-texts_cz.properties
@@ -358,7 +358,6 @@ dialog.addmapsource.sourcename=N\u00e1zev zdroje
 dialog.addmapsource.layer1url=URL prvn\u00ed vrstvy
 dialog.addmapsource.layer2url=Voliteln\u011b URL druh\u00e9 vrstvy
 dialog.addmapsource.maxzoom=Maxim\u00e1ln\u00ed zv\u011bt\u0161en\u00ed
-dialog.addmapsource.cloudstyle=\u010c\u00edslo stylu
 dialog.addmapsource.noname=Bez n\u00e1zvu
 dialog.gpsies.column.name=N\u00e1zev stopy
 dialog.gpsies.column.length=D\u00e9lka
diff --git a/tim/prune/lang/prune-texts_de.properties b/tim/prune/lang/prune-texts_de.properties
index 021a5f0..19b6b02 100644
--- a/tim/prune/lang/prune-texts_de.properties
+++ b/tim/prune/lang/prune-texts_de.properties
@@ -358,7 +358,6 @@ dialog.addmapsource.sourcename=Name der Quelle
 dialog.addmapsource.layer1url=URL f\u00fcr erste Ebene
 dialog.addmapsource.layer2url=URL f\u00fcr obere Ebene (falls n\u00f6tig)
 dialog.addmapsource.maxzoom=Maximales Zoom
-dialog.addmapsource.cloudstyle=Stilnummer
 dialog.addmapsource.noname=Unbenannt
 dialog.gpsies.column.name=Name des Tracks
 dialog.gpsies.column.length=L\u00e4nge
diff --git a/tim/prune/lang/prune-texts_de_CH.properties b/tim/prune/lang/prune-texts_de_CH.properties
index 0c192e8..7e9b304 100644
--- a/tim/prune/lang/prune-texts_de_CH.properties
+++ b/tim/prune/lang/prune-texts_de_CH.properties
@@ -353,7 +353,6 @@ dialog.addmapsource.sourcename=Sourcename
 dialog.addmapsource.layer1url=URL f\u00fcr erschti Ebene
 dialog.addmapsource.layer2url=URL f\u00fcr oberi Ebene (falls n\u00f6tig)
 dialog.addmapsource.maxzoom=Maximali Zoom
-dialog.addmapsource.cloudstyle=Stilnummere
 dialog.addmapsource.noname=Unbenannt
 dialog.gpsies.column.name=Track Name
 dialog.gpsies.column.length=L\u00e4nge
diff --git a/tim/prune/lang/prune-texts_en.properties b/tim/prune/lang/prune-texts_en.properties
index 0e8976c..bfef0df 100644
--- a/tim/prune/lang/prune-texts_en.properties
+++ b/tim/prune/lang/prune-texts_en.properties
@@ -358,7 +358,6 @@ dialog.addmapsource.sourcename=Name of source
 dialog.addmapsource.layer1url=URL of first layer
 dialog.addmapsource.layer2url=Optional URL of second layer
 dialog.addmapsource.maxzoom=Maximum zoom level
-dialog.addmapsource.cloudstyle=Style number
 dialog.addmapsource.noname=Unnamed
 dialog.gpsies.column.name=Track name
 dialog.gpsies.column.length=Length
diff --git a/tim/prune/lang/prune-texts_es.properties b/tim/prune/lang/prune-texts_es.properties
index 491134d..b752c7c 100644
--- a/tim/prune/lang/prune-texts_es.properties
+++ b/tim/prune/lang/prune-texts_es.properties
@@ -105,6 +105,8 @@ function.fullrangedetails=Detalles adicionales de rango
 function.estimatetime=Estimar duraci\u00f3n
 function.setmapbg=Configurar fondo de mapa
 function.setpaths=Configurar rutas del programas
+function.splitsegments=Segmentar el track
+function.sewsegments=Ensamblar los segmentos
 function.getgpsies=Bajar ruta de Gpsies
 function.uploadgpsies=Subir recorrido a Gpsies
 function.lookupsrtm=Obtener altitudes de SRTM
@@ -193,7 +195,11 @@ dialog.gpsbabel.filter.discard.intro=Desechar puntos si
 dialog.gpsbabel.filter.discard.hdop=Hdop >
 dialog.gpsbabel.filter.discard.vdop=Vdop >
 dialog.gpsbabel.filter.discard.numsats=N\u00famero de sat\u00e9lites <
-dialog.gpsbabel.filter.simplify.maxpoints=Numero de puntos <
+dialog.gpsbabel.filter.discard.nofix=Posici\u00f3n no precisa
+dialog.gpsbabel.filter.discard.unknownfix=Precisi\u00f3n desconocida
+dialog.gpsbabel.filter.simplify.intro=Desechar puntos hasta
+dialog.gpsbabel.filter.simplify.maxpoints=N\u00famero de puntos <
+dialog.gpsbabel.filter.simplify.maxerror=o desviaci\u00f3n <
 dialog.gpsbabel.filter.distance.distance=Si distancia <
 dialog.gpsbabel.filter.distance.time=y differencia horaria <
 dialog.gpsbabel.filter.interpolate.distance=Si distancia >
@@ -226,6 +232,9 @@ dialog.exportgpx.encoding=Codificaci\u00f3n
 dialog.exportgpx.encoding.system=Sistema
 dialog.exportgpx.encoding.utf8=UTF-8
 dialog.3d.useterrain=Terreno
+dialog.3d.terraingridsize=Dimensi\u00f3n de la cuadr\u00edcula
+dialog.exportpov.cannotmakebaseimage=Fallo al guardar la imagen
+dialog.exportpov.baseimage=Imagen de mapa
 dialog.exportpov.text=Introduca los par\u00e1metros para exportar
 dialog.exportpov.font=Fuente
 dialog.exportpov.camerax=C\u00e1mara X
@@ -234,7 +243,7 @@ dialog.exportpov.cameraz=C\u00e1mara Z
 dialog.exportpov.modelstyle=Estilo
 dialog.exportpov.ballsandsticks=Balas en palos
 dialog.exportpov.tubesandwalls=Tubos y paredes
-dialog.3d.warningtracksize=Este track contiene un gran numero de puntos. Puede ser que Java3D no los pueda visualizar. Est\u00e1 seguro de que desea continuar?
+dialog.3d.warningtracksize=Este track contiene un gran n\u00famero de puntos. Puede ser que Java3D no los pueda visualizar. Est\u00e1 seguro de que desea continuar?
 dialog.baseimage.title=Imagen de mapa
 dialog.baseimage.mapsource=Proveedor de mapas
 dialog.baseimage.useimage=Usar imagen
@@ -248,6 +257,7 @@ dialog.exportsvg.theta=\u00c1ngulo de elevaci\u00f3n
 dialog.exportsvg.gradients=Usar degradado para sombras
 dialog.exportimage.drawtrack=Dibujar track
 dialog.exportimage.drawtrackpoints=Dibujar puntos del track
+dialog.exportimage.textscalepercent=Agrandamiento del texto (%)
 dialog.pointtype.desc=Salvar los siguientes tipos de puntos:
 dialog.pointtype.track=Puntos del track
 dialog.pointtype.waypoint=Waypoints
@@ -257,14 +267,15 @@ dialog.pointtype.selection=Solo selecci\u00f3n
 dialog.confirmreversetrack.title=Confirmar inversi\u00f3n
 dialog.confirmreversetrack.text=Este track contiene informaci\u00f3n sobre la fecha, que estar\u00e1 fuera de secuencia despu\u00e9s de la inversi\u00f3n. \u00bfEst\u00e1 seguro que desea invertir esta secci\u00f3n?
 dialog.confirmcutandmove.title=Confirmar accion cortar/pegar
-dialog.confirmcutandmove.text=Este track contiene informaci\u00f3n sobre la fecha, que estar\u00e1 fuera de secuencia despu\u00e9s de mover.\n\u00bfEsta seguro que desea mover esta secci\u00f3n?
+dialog.confirmcutandmove.text=Este track contiene informaci\u00f3n sobre la fecha, que estar\u00e1 fuera de secuencia despu\u00e9s de mover.\n\u00bfEst\u00e1 seguro que desea mover esta secci\u00f3n?
 dialog.interpolate.parameter.text=N\u00famero de los puntos a insertar entre los puntos elegidos
+dialog.interpolate.betweenwaypoints=Interpolar entre los waypoints?
 dialog.undo.title=Deshacer
 dialog.undo.pretext=Por favor, seleccione la operaci\u00f3n(es) a deshacer
 dialog.undo.none.title=No se puede deshacer
 dialog.undo.none.text=Ninguna operaci\u00f3n a deshacer
 dialog.clearundo.title=Despejar la lista de deshacer
-dialog.clearundo.text=\u00bfEsta seguro que desea despejar la lista de deshacer?, \u00a1se perder\u00e1 toda la informaci\u00f3n!
+dialog.clearundo.text=\u00bfEst\u00e1 seguro que desea despejar la lista de deshacer?, \u00a1se perder\u00e1 toda la informaci\u00f3n!
 dialog.pointedit.title=Editar punto
 dialog.pointedit.intro=Seleccione cada campo para modificar el valor
 dialog.pointedit.table.field=Campo
@@ -310,19 +321,27 @@ dialog.distances.currentpoint=Punto actual
 dialog.distances.toofewpoints=Esta funcion necesita "waypoints" para poder calcular las distancias entre ellos
 dialog.fullrangedetails.intro=Aqui estan los detalles para la selecci\u00f3n de rangos
 dialog.estimatetime.details=Detalles
+dialog.estimatetime.gentle=Inclinaci\u00f3n peque\u00f1a
+dialog.estimatetime.steep=Inclinaci\u00f3n grande
 dialog.estimatetime.climb=Ascenso
 dialog.estimatetime.descent=Descenso
 dialog.estimatetime.parameters=Par\u00e1metros
+dialog.estimatetime.parameters.timefor=Duraci\u00f3n para
 dialog.estimatetime.results=Resultados
 dialog.estimatetime.results.estimatedtime=Duraci\u00f3n estimada
 dialog.estimatetime.results.actualtime=Duraci\u00f3n real
+dialog.learnestimationparams.combinedresults=Resultados combinados
+dialog.learnestimationparams.weight.100pccurrent=Mantener datos actuales
+dialog.learnestimationparams.weight.current=actuales
+dialog.learnestimationparams.weight.calculated=calculados
+dialog.learnestimationparams.weight.50pc=La media entre actuales y calculados
+dialog.learnestimationparams.weight.100pccalculated=Nuevos datos calculados
 dialog.setmapbg.intro=Seleccione un proveedor de mapas o a\u00f1ada uno nuevo
 dialog.addmapsource.title=A\u00f1adir un proveedor de mapas
 dialog.addmapsource.sourcename=Nombre del proveedor
 dialog.addmapsource.layer1url=URL de la primera capa
 dialog.addmapsource.layer2url=URL opcional de la segunda capa
 dialog.addmapsource.maxzoom=M\u00e1ximo nivel de zoom
-dialog.addmapsource.cloudstyle=N\u00famero del estilo
 dialog.addmapsource.noname=Innominada
 dialog.gpsies.column.name=Nombre del track
 dialog.gpsies.column.length=Distancia
@@ -432,7 +451,7 @@ dialog.about.credits.devtools=Herramientas de desarrollo
 dialog.about.credits.othertools=Otras herramientas
 dialog.about.credits.thanks=Gracias a
 dialog.about.readme=Readme
-dialog.checkversion.error=El numero de versi\u00f3n no pudo ser verificada.\n Por favor verificar la conexi\u00f3n de Internet
+dialog.checkversion.error=El n\u00famero de versi\u00f3n no pudo ser verificada.\n Por favor verificar la conexi\u00f3n de Internet
 dialog.checkversion.uptodate=Esta usted utilizando la \u00faltima versi\u00f3n de GpsPrune
 dialog.checkversion.newversion1=\u00a1Una nueva versi\u00f3n de GpsPrune est\u00e1 disponible! La \u00faltima es ahora la versi\u00f3n
 dialog.checkversion.newversion2=.
@@ -506,6 +525,14 @@ dialog.deletefieldvalues.nofields=No hay campos a eliminar para el rango actual
 dialog.setlinewidth.text=Introduzca la anchura de las l\u00edneas a dibujar para los recorridos (1-4)
 dialog.downloadosm.desc=Confirmar la descarga de datos en bruto de OSM para el \u00e1rea especificada.
 dialog.searchwikipedianames.search=Buscar:
+dialog.weather.location=Localidad
+dialog.weather.update=Actualizado
+dialog.weather.sunrise=Salida del sol
+dialog.weather.sunset=Puesta de sol
+dialog.weather.temperatureunits=Temperaturas
+dialog.weather.currentforecast=El tiempo actual
+dialog.weather.dailyforecast=Pron\u00f3stico diariamente
+dialog.weather.3hourlyforecast=Pron\u00f3stico hora a hora
 dialog.weather.day.now=Tiempo actual
 dialog.weather.day.today=Hoy
 dialog.weather.day.tomorrow=Ma\u00f1ana
@@ -555,6 +582,8 @@ confirm.createpoint=punto creado
 confirm.rotatephoto=foto rotada
 confirm.running=Trabajando ...
 confirm.lookupsrtm=Encontrados %d valor de altitud para la funci\u00f3n de b\u00fasqueda SRTM
+confirm.downloadsrtm=Descargado %d archivos
+confirm.downloadsrtm.1=Descargado %d archivo
 confirm.deletefieldvalues=Valores del campo eliminados
 confirm.audioload=A\u00f1adidos archivos de audio
 confirm.correlateaudios.single=El audio fue correlacionado
@@ -579,6 +608,7 @@ button.close=Cerrar
 button.continue=Contin\u00fae
 button.yes=Si
 button.no=No
+button.always=Si, siempre
 button.yestoall=Si por todo
 button.notoall=No por todo
 button.select=Seleccionar
@@ -737,6 +767,8 @@ undo.deletemarked=eliminar puntos
 undo.insert=insertar puntos
 undo.reverse=invertir rango
 undo.mergetracksegments=unir los segmentos del track
+undo.splitsegments=segmentar el track
+undo.sewsegments=ensamblar los segmentos del track
 undo.addtimeoffset=a\u00f1adir margen de tiempo
 undo.addaltitudeoffset=a\u00f1adir margen de altitud
 undo.rearrangewaypoints=reordenar waypoints
@@ -790,7 +822,12 @@ error.lookupsrtm.nonefound=No se encontraron valores de altitud
 error.lookupsrtm.nonerequired=Todos los puntos tienen altitudes, as\u00ed que no hay nada que buscar.
 error.gpsies.uploadnotok=El servidor de gpsies ha devuelto el mensaje
 error.gpsies.uploadfailed=La carga ha fallado con el error
+error.showphoto.failed=Fallo al cargar la foto
 error.playaudiofailed=Fallo reproduciendo archivo de audio
 error.cache.notthere=No se encontr\u00f3 la carpeta del cache de recuadros
 error.cache.empty=La carpeta del cache de recuadros esta vac\u00edo
 error.cache.cannotdelete=No se pudieron borrar recuadros
+error.interpolate.invalidparameter=El n\u00famero de puntos necesita ser entre 1 y 1000
+error.tracksplit.nosplit=Imposible segmentar el track
+error.downloadsrtm.nocache=Imposible guardar los archivos.\nPor favor, compruebe el cache.
+error.sewsegments.nothingdone=Imposible ensamblar los segmentos.\nEl track tiene ahora %d segmentos.
diff --git a/tim/prune/lang/prune-texts_fr.properties b/tim/prune/lang/prune-texts_fr.properties
index 477b832..d271c27 100644
--- a/tim/prune/lang/prune-texts_fr.properties
+++ b/tim/prune/lang/prune-texts_fr.properties
@@ -195,6 +195,12 @@ dialog.gpsbabel.filter.interpolate=Interpoler
 dialog.gpsbabel.filter.discard.intro=Jeter les points si
 dialog.gpsbabel.filter.discard.hdop=Hdop >
 dialog.gpsbabel.filter.discard.vdop=Vdop >
+dialog.gpsbabel.filter.discard.numsats=Nombre de satellites <
+dialog.gpsbabel.filter.discard.nofix=Point n'a pas fix
+dialog.gpsbabel.filter.discard.unknownfix=Point a une fix inconnue
+dialog.gpsbabel.filter.simplify.intro=Effacer les points jusque
+dialog.gpsbabel.filter.simplify.maxpoints=Nombre de points <
+dialog.gpsbabel.filter.simplify.maxerror=ou erreur <
 dialog.gpsbabel.filter.distance=Distance
 dialog.gpsbabel.filter.distance.distance=Si la distance <
 dialog.gpsbabel.filter.distance.time=et difference de temps <
@@ -236,6 +242,9 @@ dialog.exportpov.modelstyle=Style du mod\u00e8le
 dialog.exportpov.ballsandsticks=Points et b\u00e2tons
 dialog.exportpov.tubesandwalls=Tubes et murs
 dialog.3d.warningtracksize=Cette trace poss\u00e8de un grand nombre de points, Java3D peut ne pas pouvoir l'afficher.\n\u00cates-vous s\u00fbr de vouloir continuer ?
+dialog.3d.useterrain=Montrer terrain
+dialog.3d.terraingridsize=Taille de la grille
+dialog.exportpov.baseimage=Image de la carte
 dialog.baseimage.title=Image de la carte
 dialog.baseimage.useimage=Utiliser image
 dialog.baseimage.mapsource=Source de cartes
@@ -247,6 +256,8 @@ dialog.exportsvg.text=S\u00e9lectionner les param\u00e8tres de l'export SVG
 dialog.exportsvg.phi=Angle d'azimuth \u03d5
 dialog.exportsvg.theta=Angle d'\u00e9l\u00e9vation \u03b8
 dialog.exportsvg.gradients=Utiliser des d\u00e9grad\u00e9s pour l'ombrage
+dialog.exportimage.drawtrack=Dessiner la trace sur la carte
+dialog.exportimage.drawtrackpoints=Dessiner les points de trace
 dialog.pointtype.desc=Sauvegarder ces types de points:
 dialog.pointtype.track=Points de la trace
 dialog.pointtype.waypoint=Waypoints
@@ -311,15 +322,23 @@ dialog.distances.toofewpoints=Cette fonction a besoin de waypoints pour calculer
 dialog.fullrangedetails.intro=Voici les d\u00e9tails pour l\u2019\u00e9tendue s\u00e9lectionn\u00e9e
 dialog.fullrangedetails.coltotal=Inclure les cellules vides
 dialog.fullrangedetails.colsegments=Exclure les cellules vides
+dialog.estimatetime.details=D\u00e9tails
+dialog.estimatetime.steep=Escarp\u00e9
 dialog.estimatetime.climb=Mont\u00e9e
 dialog.estimatetime.descent=Descente
+dialog.estimatetime.parameters=Param\u00e8tres
+dialog.estimatetime.parameters.timefor=Dur\u00e9e pour
+dialog.estimatetime.results=R\u00e9sultats
+dialog.estimatetime.results.estimatedtime=Dur\u00e9e estim\u00e9e
+dialog.estimatetime.results.actualtime=Dur\u00e9e en fait
+dialog.learnestimationparams.averageerror=Erreur en moyenne
+dialog.learnestimationparams.combinedresults=R\u00e9sultats combin\u00e9es
 dialog.setmapbg.intro=S\u00e9lectionnez une source de cartes, ou ajoutez-en une nouvelle
 dialog.addmapsource.title=Ajouter une nouvelle source de cartes
 dialog.addmapsource.sourcename=Nom de la source
 dialog.addmapsource.layer1url=URL de la premi\u00e8re couche
 dialog.addmapsource.layer2url=URL optionnelle de la deuxi\u00e8me couche
 dialog.addmapsource.maxzoom=Niveau de zoom maximum
-dialog.addmapsource.cloudstyle=Num\u00e9ro du style
 dialog.addmapsource.noname=Sans titre
 dialog.gpsies.column.name=Nom de la trace
 dialog.gpsies.column.length=Distance
@@ -718,6 +737,10 @@ units.degminsec=Deg-min-sec
 units.degmin=Deg-min
 units.deg=Degr\u00e9s
 units.iso8601=ISO 8601
+units.degreescelsius=Celsius
+units.degreescelsius.short=\u00b0C
+units.degreesfahrenheit=Fahrenheit
+units.degreesfahrenheit.short=\u00b0F
 
 # How to combine conditions, such as filters
 logic.and=et
diff --git a/tim/prune/lang/prune-texts_hu.properties b/tim/prune/lang/prune-texts_hu.properties
index 58359f8..a1bf2ec 100644
--- a/tim/prune/lang/prune-texts_hu.properties
+++ b/tim/prune/lang/prune-texts_hu.properties
@@ -358,7 +358,6 @@ dialog.addmapsource.sourcename=Forr\u00e1s neve
 dialog.addmapsource.layer1url=Els\u0151 r\u00e9teg URL-je
 dialog.addmapsource.layer2url=Opcion\u00e1lis m\u00e1sodik r\u00e9teg URL-je
 dialog.addmapsource.maxzoom=Maxim\u00e1lis nagy\u00edt\u00e1si szint
-dialog.addmapsource.cloudstyle=St\u00edlus sz\u00e1ma
 dialog.addmapsource.noname=N\u00e9vtelen
 dialog.gpsies.column.name=Nyomvonal neve
 dialog.gpsies.column.length=Hossz
diff --git a/tim/prune/lang/prune-texts_it.properties b/tim/prune/lang/prune-texts_it.properties
index 121e04d..14df816 100644
--- a/tim/prune/lang/prune-texts_it.properties
+++ b/tim/prune/lang/prune-texts_it.properties
@@ -108,7 +108,7 @@ function.setmapbg=Configura sfondo mappa
 function.setpaths=Configura percorsi programmi
 function.splitsegments=Dividi traccia in segmenti
 function.sewsegments=Riorganizza segmenti insieme
-function.getgpsies=Ottieni traccie da Gpsies
+function.getgpsies=Ottieni tracce da Gpsies
 function.uploadgpsies=Carica traccia su Gpsies
 function.lookupsrtm=Ottieni quote da SRTM
 function.downloadsrtm=Scarica file da SRTM
@@ -358,7 +358,6 @@ dialog.addmapsource.sourcename=Nome della fonte
 dialog.addmapsource.layer1url=URL del primo layer
 dialog.addmapsource.layer2url=URL opzionale del secondo layer
 dialog.addmapsource.maxzoom=Massimo livello di zoom
-dialog.addmapsource.cloudstyle=Stile numero
 dialog.addmapsource.noname=Senza nome
 dialog.gpsies.column.name=Nome traccia
 dialog.gpsies.column.length=Lunghezza
@@ -480,7 +479,7 @@ dialog.keys.keylist=<table><tr><td>Tasti freccia</td><td>Muovi mappa destra, sin
 dialog.keys.normalmodifier=Ctrl
 dialog.keys.macmodifier=Comando
 dialog.saveconfig.desc=Le configurazioni seguenti possono essere salvati in un file di configurazione:
-dialog.saveconfig.prune.trackdirectory=Cartella traccie
+dialog.saveconfig.prune.trackdirectory=Cartella tracce
 dialog.saveconfig.prune.photodirectory=Cartella foto
 dialog.saveconfig.prune.languagecode=Codice lingua (IT)
 dialog.saveconfig.prune.languagefile=File lingua
@@ -613,6 +612,10 @@ confirm.correlateaudios.multi=le riprese audio erano correlate
 
 # Tips
 tip.title=Consiglio
+tip.useamapcache=Usando una cache della mappa (Preferenze -> Salva mappe su disco)\npuoi accelerare la visualizzazione e ridurre il traffico.
+tip.learntimeparams=I risultati saranno pi\u00f9 precisi usando\nTraccia -> Apprendi parametri di stima\ncon le tue tracce.
+tip.downloadsrtm=Puoi accelerare questa funzione usando\nOnline -> Scarica file da SRTM\nper salvare i dati nella cache.
+tip.usesrtmfor3d=La traccia non include informazioni sull'altitudine.\nPuoi utilizzare la funzione SRTM per ottenere le altitudini\nper la visione 3D.
 tip.manuallycorrelateone=Con il collegamento manuale di almeno una foto, lo scarto di orario viene calcolato per te
 
 # Buttons
diff --git a/tim/prune/lang/prune-texts_ja.properties b/tim/prune/lang/prune-texts_ja.properties
index ad25d69..e581c18 100644
--- a/tim/prune/lang/prune-texts_ja.properties
+++ b/tim/prune/lang/prune-texts_ja.properties
@@ -269,7 +269,6 @@ dialog.fullrangedetails.intro=\u9078\u629e\u7bc4\u56f2\u306b\u306f\u8a73\u7d30\u
 dialog.addmapsource.title=\u65b0\u3057\u3044\u30de\u30c3\u30d7\u30fb\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
 dialog.addmapsource.sourcename=\u30bd\u30fc\u30b9\u306e\u540d\u524d
 dialog.addmapsource.maxzoom=\u6700\u5927\u30ba\u30fc\u30e0\u30ec\u30d9\u30eb
-dialog.addmapsource.cloudstyle=\u30b9\u30bf\u30a4\u30eb\u756a\u53f7
 dialog.addmapsource.noname=\u540d\u524d\u306a\u3057
 dialog.gpsies.column.name=\u30c8\u30e9\u30c3\u30af\u540d
 dialog.gpsies.column.length=\u9577\u3055
diff --git a/tim/prune/lang/prune-texts_ko.properties b/tim/prune/lang/prune-texts_ko.properties
index ec5de7d..b14b0a5 100644
--- a/tim/prune/lang/prune-texts_ko.properties
+++ b/tim/prune/lang/prune-texts_ko.properties
@@ -266,7 +266,6 @@ dialog.addmapsource.sourcename=\uc18c\uc2a4 \uc774\ub984
 dialog.addmapsource.layer1url=\uccab \ub808\uc774\uc5b4\uc758 URL
 dialog.addmapsource.layer2url=\ub450\ubc88\uc9f8 \ub808\uc774\uc5b4\uc758 URL
 dialog.addmapsource.maxzoom=\ucd5c\uace0 \ud655\ub300
-dialog.addmapsource.cloudstyle=\uc2a4\ud0c0\uc77c \uc218
 dialog.addmapsource.noname=\uc774\ub984 \uc5c6\uc74c
 dialog.gpsies.column.name=\ud2b8\ub809 \uc774\ub984
 dialog.gpsies.column.length=\uae38\uc774
diff --git a/tim/prune/lang/prune-texts_nl.properties b/tim/prune/lang/prune-texts_nl.properties
index ac4b797..a077bc9 100644
--- a/tim/prune/lang/prune-texts_nl.properties
+++ b/tim/prune/lang/prune-texts_nl.properties
@@ -358,7 +358,6 @@ dialog.addmapsource.sourcename=Naam van de bron
 dialog.addmapsource.layer1url=URL van de eerste laag
 dialog.addmapsource.layer2url=URL van de tweede laag (optioneel)
 dialog.addmapsource.maxzoom=Maximaal zoom-niveau
-dialog.addmapsource.cloudstyle=Stijl nummer
 dialog.addmapsource.noname=Onbenoemd
 dialog.gpsies.column.name=Routenaam
 dialog.gpsies.column.length=Lengte
diff --git a/tim/prune/lang/prune-texts_pl.properties b/tim/prune/lang/prune-texts_pl.properties
index 212eb69..80a67c1 100644
--- a/tim/prune/lang/prune-texts_pl.properties
+++ b/tim/prune/lang/prune-texts_pl.properties
@@ -352,7 +352,6 @@ dialog.addmapsource.sourcename=Nazwa dostawcy
 dialog.addmapsource.layer1url=URL pierwszej warstwy
 dialog.addmapsource.layer2url=Opcjonalny URL drugiej warstwy
 dialog.addmapsource.maxzoom=Maksymalny poziom zbli\u017cenia
-dialog.addmapsource.cloudstyle=Numer stylu
 dialog.addmapsource.noname=Nienazwane
 dialog.gpsies.column.name=Nazwa \u015bcie\u017cki
 dialog.gpsies.column.length=D\u0142ugo\u015b\u0107
diff --git a/tim/prune/lang/prune-texts_pt.properties b/tim/prune/lang/prune-texts_pt.properties
index 50c6844..85870ad 100644
--- a/tim/prune/lang/prune-texts_pt.properties
+++ b/tim/prune/lang/prune-texts_pt.properties
@@ -358,7 +358,6 @@ dialog.addmapsource.sourcename=Nome da fonte
 dialog.addmapsource.layer1url=URL da primeira camada
 dialog.addmapsource.layer2url=URL opcional da segunda camada
 dialog.addmapsource.maxzoom=N\u00edvel de amplia\u00e7\u00e3o m\u00e1ximo
-dialog.addmapsource.cloudstyle=N\u00famero do estilo
 dialog.addmapsource.noname=Sem nome
 dialog.gpsies.column.name=Nome da rota
 dialog.gpsies.column.length=Extens\u00e3o
diff --git a/tim/prune/lang/prune-texts_ru.properties b/tim/prune/lang/prune-texts_ru.properties
index a851289..3481dba 100644
--- a/tim/prune/lang/prune-texts_ru.properties
+++ b/tim/prune/lang/prune-texts_ru.properties
@@ -102,12 +102,16 @@ function.charts=\u0413\u0440\u0430\u0444\u0438\u043a\u0438
 function.show3d=3D-\u0432\u0438\u0434
 function.distances=\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f
 function.fullrangedetails=\u0414\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0443
+function.estimatetime=\u041f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f
+function.learnestimationparams=\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438
 function.setmapbg=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443-\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0443
 function.setpaths=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0443\u0442\u0438 \u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c
+function.splitsegments=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043a \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b
+function.sewsegments=\u0421\u043a\u043b\u0435\u0438\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0440\u0435\u043a\u0430 \u0432\u043e\u0435\u0434\u0438\u043d\u043e
 function.getgpsies=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u0440\u0435\u043a\u0438
 function.uploadgpsies=\u0412\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u0440\u0435\u043a \u043d\u0430 gpsies.com
 function.lookupsrtm=\u0412\u044b\u0441\u043e\u0442\u044b \u0432 SRTM
-function.downloadsrtm=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c SRTM \u0434\u0430\u043d\u043d\u044b\u0435
+function.downloadsrtm=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c STRM 
 function.getwikipedia=\u0421\u0442\u0430\u0442\u044c\u044f \u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0412\u0438\u043a\u0438
 function.searchwikipedianames=\u041f\u043e\u0438\u0441\u043a \u0441\u0442\u0430\u0442\u0435\u0439 \u0432 \u0412\u0438\u043a\u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438
 function.downloadosm=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c OSM \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u044e
@@ -136,7 +140,7 @@ function.checkversion=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0
 function.saveconfig=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438
 function.diskcache=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u0434\u0438\u0441\u043a
 function.managetilecache=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0435\u0448\u0435\u043c
-function.getweatherforecast=\u043f\u0440\u043e\u0433\u043d\u043e\u0301\u0437 \u043f\u043e\u0433\u043e\u0301\u0434\u044b
+function.getweatherforecast=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b
 
 # Dialogs
 dialog.exit.confirm.title=\u0412\u044b\u0445\u043e\u0434
@@ -162,7 +166,9 @@ dialog.delimiter.other=\u0414\u0440\u0443\u0433\u043e\u0435
 dialog.openoptions.deliminfo.records=\u0437\u0430\u043f\u0438\u0441\u044c, \u0441
 dialog.openoptions.deliminfo.fields=\u043f\u043e\u043b\u0435
 dialog.openoptions.deliminfo.norecords=\u041d\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0435\u0439
-dialog.openoptions.altitudeunits=\u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0432\u044b\u0441\u043e\u0442
+dialog.openoptions.altitudeunits=\u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0432\u044b\u0441\u043e\u0442\u044b
+dialog.openoptions.speedunits=\u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438
+dialog.openoptions.vertspeedunits=\u0415\u0434\u0438\u043d\u0438\u0446\u044b
 dialog.open.contentsdoubled=\u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0435,\n\u043e\u0434\u043d\u0430 \u043a\u0430\u043a \u043f\u0443\u0442\u0435\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0438 \u043e\u0434\u043d\u0430 \u043a\u0430\u043a \u0442\u043e\u0447\u043a\u0430 \u0442\u0440\u0 [...]
 dialog.selecttracks.intro=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0440\u0435\u043a(-\u0438) \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f
 dialog.selecttracks.noname=\u0411\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0439
@@ -182,6 +188,8 @@ dialog.gpssend.sendtracks=\u041f\u043e\u0441\u043b\u0430\u0442\u044c \u0442\u044
 dialog.gpssend.trackname=\u0418\u043c\u044f \u0442\u0440\u0435\u043a\u0430
 dialog.gpsbabel.filters=\u0424\u0438\u043b\u044c\u0442\u0440\u044b
 dialog.addfilter.title=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440
+dialog.gpsbabel.filter.distance=\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435
+dialog.gpsbabel.filter.interpolate=\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f
 dialog.gpsbabel.filter.discard.numsats=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432 <
 dialog.saveoptions.title=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b
 dialog.save.fieldstosave=\u041f\u043e\u043b\u044f \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435
@@ -217,15 +225,25 @@ dialog.exportpov.modelstyle=\u0421\u0442\u0438\u043b\u044c \u043c\u043e\u0434\u0
 dialog.exportpov.ballsandsticks=\u041c\u044f\u0447\u0438 \u0438 \u043f\u0430\u043b\u043e\u0447\u043a\u0438
 dialog.exportpov.tubesandwalls=\u0422\u0440\u0443\u0431\u044b \u0438 \u0441\u0442\u0435\u043d\u044b
 dialog.3d.warningtracksize=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0432 \u0442\u0440\u0435\u043a\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a - Java3D \u043c\u043e\u0436\u0435\u0442 \u0435\u0433\u043e \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c!\n\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\ [...]
+dialog.3d.useterrain=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0435\u043b\u044c\u0435\u0444
 dialog.3d.terraingridsize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u0442\u043a\u0438
-dialog.baseimage.mapsource=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430
-dialog.baseimage.zoom=\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442
+dialog.exportpov.baseimage=\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u044b(\u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438)
+dialog.exportpov.cannotmakebaseimage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043e\u0441\u043d\u043e\u0432\u044b
+dialog.baseimage.title=\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b
+dialog.baseimage.useimage=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435
+dialog.baseimage.mapsource=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a
+dialog.baseimage.zoom=\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+dialog.baseimage.incomplete=\u041d\u0435 \u0432\u0441\u0435 \u0442\u0430\u0439\u043b\u044b \u0431\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b
 dialog.baseimage.tiles=\u0422\u0430\u0439\u043b\u044b
 dialog.baseimage.size=\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
 dialog.exportsvg.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 SVG
 dialog.exportsvg.phi=\u0410\u0437\u0438\u043c\u0443\u0442 \u03d5
 dialog.exportsvg.theta=\u0423\u0433\u043e\u043b \u03b8
 dialog.exportsvg.gradients=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u044f
+dialog.exportimage.noimagepossible=\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043a\u0430\u0440\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u043d\u0430 \u0434\u0438\u0441\u043a \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430
+dialog.exportimage.drawtrack=\u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u043a \u043d\u0430 \u043a\u0430\u0440\u0442\u0435
+dialog.exportimage.drawtrackpoints=\u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0435\u043a\u0430
+dialog.exportimage.textscalepercent=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 %
 dialog.pointtype.desc=\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0438\u043f\u044b \u0442\u043e\u0447\u0435\u043a:
 dialog.pointtype.track=\u0422\u043e\u0447\u043a\u0438 \u0442\u0440\u0435\u043a\u043e\u0432
 dialog.pointtype.waypoint=\u041f\u0443\u0442\u0435\u0432\u044b\u0435 \u0442\u043e\u0447\u043a\u0438
@@ -245,9 +263,9 @@ dialog.undo.none.text=\u041d\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0
 dialog.clearundo.title=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f \u043e\u0442\u043c\u0435\u043d\u044b
 dialog.clearundo.text=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f \u043e\u0442\u043c\u0435\u043d\u044b?\n\u0421\u043f\u0438\u0441\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0438\u0449\u0435\ [...]
 dialog.pointedit.title=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443
-dialog.pointedit.intro=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f
+dialog.pointedit.intro=\u0412\u044b\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043b\u0435 \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435
 dialog.pointedit.table.field=\u041f\u043e\u043b\u0435
-dialog.pointedit.nofield=\u041f\u043e\u043b\u0435 \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u0430
+dialog.pointedit.nofield=\u041f\u043e\u043b\u0435 \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043e
 dialog.pointedit.table.value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435
 dialog.pointnameedit.name=\u0418\u043c\u044f \u043f\u0443\u0442\u0435\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438
 dialog.pointnameedit.uppercase=\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440
@@ -291,17 +309,27 @@ dialog.fullrangedetails.intro=\u0414\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u
 dialog.fullrangedetails.coltotal=\u0412\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438
 dialog.fullrangedetails.colsegments=\u0411\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u043e\u0432
 dialog.estimatetime.details=\u0414\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f
+dialog.estimatetime.gentle=\u041f\u043b\u0430\u0432\u043d\u043e
+dialog.estimatetime.steep=\u0420\u0435\u0437\u043a\u043e
 dialog.estimatetime.climb=\u041f\u043e\u0434\u044a\u0435\u043c
 dialog.estimatetime.descent=\u0421\u043f\u0443\u0441\u043a
 dialog.estimatetime.parameters=\u041f\u0430\u0440\u0430\u0301\u043c\u0435\u0442\u0440\u044b
 dialog.estimatetime.parameters.timefor=\u0412\u0440\u0435\u043c\u044f \u0434\u043b\u044f
+dialog.estimatetime.results=\u0412\u043e\u0442:
+dialog.estimatetime.results.estimatedtime=\u041f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f
+dialog.estimatetime.results.actualtime=\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f
+dialog.estimatetime.error.noaltitudes=\u0412\u044b\u0431\u043e\u0440\u043a\u0430 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0432\u044b\u0441\u043e\u0442\u0435
+dialog.learnestimationparams.averageerror=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043e\u0448\u0438\u0431\u043a\u0430 (%)
+dialog.learnestimationparams.weight.current=\u0442\u0435\u043a\u0443\u0449\u0435\u0435
+dialog.learnestimationparams.weight.calculated=\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435
+dialog.learnestimationparams.weight.50pc=\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e
+dialog.learnestimationparams.weight.100pccalculated=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435
 dialog.setmapbg.intro=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0444\u043e\u043d\u0430 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043d\u043e\u0432\u044b\u0439
 dialog.addmapsource.title=\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0444\u043e\u043d\u0430
 dialog.addmapsource.sourcename=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430
 dialog.addmapsource.layer1url=URL \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u044f
 dialog.addmapsource.layer2url=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 URL \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043b\u043e\u044f
 dialog.addmapsource.maxzoom=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f
-dialog.addmapsource.cloudstyle=\u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0438\u043b\u044f
 dialog.addmapsource.noname=\u0411\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0439
 dialog.gpsies.column.name=\u0418\u043c\u044f \u0442\u0440\u0435\u043a\u0430
 dialog.gpsies.column.length=\u0414\u043b\u0438\u043d\u0430
@@ -486,8 +514,14 @@ dialog.deletefieldvalues.nofields=\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u0
 dialog.setlinewidth.text=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u043e\u043b\u0449\u0438\u043d\u0443 \u043b\u0438\u043d\u0438\u0439 \u0434\u043b\u044f \u0442\u0440\u0435\u043a\u043e\u0432 (1-4)
 dialog.downloadosm.desc=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 OSM \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438:
 dialog.searchwikipedianames.search=\u041f\u043e\u0438\u0441\u043a \u0434\u043b\u044f:
-dialog.weather.location=\u043c\u0435\u0301\u0441\u0442\u043e
-dialog.weather.temperatureunits=\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0301\u0440\u0430
+dialog.weather.location=\u041c\u0435\u0441\u0442\u043e
+dialog.weather.update=\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d
+dialog.weather.sunrise=\u0412\u043e\u0441\u0445\u043e\u0434
+dialog.weather.sunset=\u0417\u0430\u043a\u0430\u0442
+dialog.weather.temperatureunits=\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b
+dialog.weather.currentforecast=\u041f\u043e\u0433\u043e\u0434\u0430 \u0441\u0435\u0439\u0447\u0430\u0441
+dialog.weather.dailyforecast=\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043d\u0430 \u0434\u0435\u043d\u044c
+dialog.weather.3hourlyforecast=\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043d\u0430 3 \u0447\u0430\u0441\u0430
 dialog.weather.day.now=\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0433\u043e\u0434\u0430
 dialog.weather.day.today=\u0421\u0435\u0433\u043e\u0434\u043d\u044f
 dialog.weather.day.tomorrow=\u0417\u0430\u0432\u0442\u0440\u0430
@@ -498,9 +532,10 @@ dialog.weather.day.thursday=\u0427\u0435\u0442\u0432\u0435\u0440\u0433
 dialog.weather.day.friday=\u041f\u044f\u0442\u043d\u0438\u0446\u0430
 dialog.weather.day.saturday=\u0421\u0443\u0431\u0431\u043e\u0442\u0430
 dialog.weather.day.sunday=\u0412\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435
-dialog.weather.wind=\u0432\u0435\u0301\u0442\u0435\u0440
-dialog.weather.temp=\u0442\u0435\u043c\u043f
-dialog.weather.humidity=\u0432\u043b\u0430\u0301\u0433\u0430
+dialog.weather.wind=\u0412\u0435\u0442\u0435\u0440
+dialog.weather.temp=\u0422\u00b0
+dialog.weather.humidity=\u0412\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c
+dialog.weather.creditnotice=\u0414\u043B\u044F \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438 \u043E\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044C \u043F\u043E openweathermap.org.
 
 # 3d window
 dialog.3d.title=GpsPrune 3D-\u0432\u0438\u0434
@@ -519,6 +554,8 @@ confirm.addtimeoffset=\u041e\u0442\u043c\u0435\u0442\u043a\u0430 \u0432\u0440\u0
 confirm.addaltitudeoffset=\u041e\u0442\u043c\u0435\u0442\u043a\u0430 \u0432\u044b\u0441\u043e\u0442\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430
 confirm.rearrangewaypoints=\u041f\u0443\u0442\u0435\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043d\u0430
 confirm.rearrangephotos=\u0424\u043e\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043d\u043e
+confirm.splitsegments=\u0421\u0434\u0435\u043b\u0430\u043d\u043e %d \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b
+confirm.sewsegments=\u0421\u0434\u0435\u043b\u0430\u043d\u043e %d \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432
 confirm.cutandmove=\u041e\u0442\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u043e
 confirm.interpolate=\u0422\u043e\u0447\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b
 confirm.convertnamestotimes=\u0418\u043c\u044f \u043f\u0443\u0442\u0435\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043d\u043e
@@ -537,8 +574,9 @@ confirm.createpoint=\u0442\u043e\u0447\u043a\u0430 \u0441\u043e\u0437\u0434\u043
 confirm.rotatephoto=\u0444\u043e\u0442\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u043e
 confirm.running=\u0420\u0430\u0431\u043e\u0442\u0430\u044e...
 confirm.lookupsrtm=\u041d\u0430\u0439\u0434\u0435\u043d\u043e %d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b
-confirm.downloadsrtm=\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e %d \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043a\u0435\u0448
-confirm.downloadsrtm.1=\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e %d \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043a\u0435\u0448
+confirm.downloadsrtm=\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e %d \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043a\u044d\u0448
+confirm.downloadsrtm.1=\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e %d \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043a\u044d\u0448
+confirm.downloadsrtm.none=\u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0443\u0436\u0435 \u0432 \u043a\u044d\u0448\u0435
 confirm.deletefieldvalues=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u044b
 confirm.audioload=\u0424\u0430\u0439\u043b\u044b \u0437\u0432\u0443\u043a\u043e\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b
 confirm.correlateaudios.single=\u0417\u0432\u0443\u043a\u043e\u0437\u0430\u043f\u0438\u0441\u044c \u0431\u044b\u043b\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430
@@ -565,6 +603,7 @@ button.yes=\u0414\u0430
 button.no=\u041d\u0435\u0442
 button.yestoall=\u0414\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445
 button.notoall=\u041d\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445
+button.always=\u0412\u0441\u0435\u0433\u0434\u0430
 button.select=\u0412\u044b\u0431\u0440\u0430\u0442\u044c
 button.selectall=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435
 button.selectnone=\u041e\u0442\u043c\u0435\u043d\u0442\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443
@@ -579,6 +618,7 @@ button.browse=\u041e\u0431\u0437\u043e\u0440...
 button.addnew=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435
 button.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
 button.manage=\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c
+button.combine=\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c
 
 # File types
 filetype.txt=TXT \u0444\u0430\u0439\u043b\u044b
@@ -596,6 +636,7 @@ filetype.audio=MP3, OGG, WAV \u0444\u0430\u0439\u043b\u044b
 display.nodata=\u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b
 display.noaltitudes=\u0414\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0440\u0435\u043a\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0432\u044b\u0441\u043e\u0442\u043d\u044b\u0445 \u043e\u0442\u043c\u0435\u0442\u043e\u043a
 display.notimestamps=\u0414\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0440\u0435\u043a\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043e\u0442\u043c\u0435\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438
+display.novalues=\u0412 \u0442\u0440\u0435\u043a\u0435 \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f
 details.trackdetails=\u0414\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0440\u0435\u043a\u0430
 details.notrack=\u0422\u0440\u0435\u043a \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d
 details.track.points=\u0422\u043e\u0447\u043a\u0438(-\u0435\u043a)
@@ -685,6 +726,10 @@ units.degminsec=\u0413\u0440\u0430\u0434-\u043c\u0438\u043d-\u0441\u0435\u043a
 units.degmin=\u0413\u0440\u0430\u0434-\u043c\u0438\u043d
 units.deg=\u0413\u0440\u0430\u0434\u0443\u0441\u044b
 units.iso8601=ISO 8601
+units.degreescelsius=\u0426\u0435\u043b\u044c\u0441\u0438\u0439
+units.degreescelsius.short=\u00b0C
+units.degreesfahrenheit=\u0424\u0430\u0440\u0435\u043d\u0433\u0435\u0439\u0442
+units.degreesfahrenheit.short=\u00b0F
 
 # How to combine conditions, such as filters
 logic.and=\u0438
@@ -715,6 +760,8 @@ undo.deletemarked=\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u043e\u0447\
 undo.insert=\u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0438
 undo.reverse=\u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b
 undo.mergetracksegments=\u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0440\u0435\u043a\u0430
+undo.splitsegments=\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0440\u0435\u043a\u0430
+undo.sewsegments=\u0441\u043a\u043b\u0435\u0438\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0440\u0435\u043a\u0430
 undo.addtimeoffset=\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438
 undo.addaltitudeoffset=\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0432\u044b\u0441\u043e\u0442\u044b
 undo.rearrangewaypoints=\u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0443\u0442\u0435\u0432\u044b\u0435 \u0442\u043e\u0447\u043a\u0438
@@ -774,3 +821,4 @@ error.cache.notthere=\u041f\u0430\u043f\u043a\u0430 \u043a\u044d\u0448\u0430 \u0
 error.cache.empty=\u041f\u0430\u043f\u043a\u0430 \u043a\u044d\u0448\u0430 \u0441 \u0442\u0430\u0439\u043b\u0430\u043c\u0438 \u043f\u0443\u0441\u0442\u0430
 error.cache.cannotdelete=\u041d\u0435\u0442 \u0442\u0430\u0439\u043b\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f
 error.interpolate.invalidparameter=\u041d\u043e\u043c\u0435\u0440 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0442 1 \u0434\u043e 1000
+error.tracksplit.nosplit=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043a
diff --git a/tim/prune/lang/prune-texts_sv.properties b/tim/prune/lang/prune-texts_sv.properties
index eeffcd9..7f421c8 100644
--- a/tim/prune/lang/prune-texts_sv.properties
+++ b/tim/prune/lang/prune-texts_sv.properties
@@ -2,57 +2,101 @@
 # Swedish entries
 
 # Menu entries
-menu.file=Fil
+menu.file=Arkiv
 menu.file.addphotos=L\u00e4gg till foto
 menu.file.recentfiles=Senaste filer
 menu.file.save=Spara som text
 menu.file.exit=Avsluta
 menu.track=Sp\u00e5r
 menu.track.undo=\u00c5ngra
-menu.track.clearundo=Rensa \u00e5ngra
+menu.track.clearundo=Rensa \u00e5ngra-historik
 menu.track.markrectangle=Markera punkter i rektangel
 menu.track.deletemarked=Radera markerade punkter
-menu.track.rearrange=Arrangera om ruttpunkter
+menu.track.rearrange=Ordna waypoints
 menu.track.rearrange.start=Alla till b\u00f6rjan av fil
 menu.track.rearrange.end=Alla till slut av fil
 menu.track.rearrange.nearest=Varje till n\u00e4rmaste sp\u00e5rpunkt
-menu.range=Omr\u00e5de
+menu.range=Intervall
 menu.range.all=V\u00e4lj alla
 menu.range.none=V\u00e4lj ingen
-menu.range.start=St\u00e4ll in b\u00f6rjan p\u00e5 omr\u00e5de
-menu.range.end=St\u00e4ll in slut p\u00e5 omr\u00e5de
+menu.range.start=S\u00e4tt till b\u00f6rjan av intervall
+menu.range.end=S\u00e4tt till slutet av intervall
 menu.range.average=Medelv\u00e4rdesval
-menu.range.reverse=Backa omr\u00e5de
+menu.range.reverse=V\u00e4nd intervall
 menu.range.mergetracksegments=Sl\u00e5 ihop sp\u00e5rsegment
 menu.range.cutandmove=Klipp och flytta urval
 menu.point=Punkt
 menu.point.editpoint=Redigera punkt
 menu.point.deletepoint=Radera punkt
 menu.photo=Foto
-menu.photo.saveexif=Spara och avsluta
+menu.photo.saveexif=Spara till Exif
 menu.audio=Ljud
-menu.view=Vy
-menu.view.showsidebars=Visa sidolister
-menu.view.browser=Karta i ett l\u00e4sarf\u00f6nster
+menu.view=Visa
+menu.view.showsidebars=Visa sidopaneler
+menu.view.browser=Karta i webbl\u00e4sare
 menu.view.browser.google=Google Maps
 menu.view.browser.openstreetmap=Openstreetmap
 menu.view.browser.mapquest=Mapquest
 menu.view.browser.yahoo=Yahoo maps
 menu.view.browser.bing=Bing maps
 menu.settings=Inst\u00e4llningar
-menu.settings.onlinemode=Ladda karta fr\u00e5n Internet
+menu.settings.onlinemode=H\u00e4mta kartor fr\u00e5n Internet
 menu.settings.autosave=Autospara inst\u00e4llningar vid avslut
 menu.help=Hj\u00e4lp
+# Popup menu for map
+menu.map.zoomin=Zooma ut
+menu.map.zoomout=Zooma in
+menu.map.zoomfull=Zooma till passning
+menu.map.newpoint=Skapa ny punkt
+menu.map.drawpoints=Skapa en serie punkter
+menu.map.connect=F\u00f6rbind sp\u00e5rpunkter
+menu.map.autopan=Panorera automatiskt
+menu.map.showmap=Visa karta
+menu.map.showscalebar=Visa skala
+menu.map.editmode=Redigeringsl\u00e4ge
 
 # Alt keys for menus
-altkey.menu.file=F
+altkey.menu.file=A
 altkey.menu.track=S
-altkey.menu.range=O
+altkey.menu.range=I
 altkey.menu.point=P
 altkey.menu.view=V
-altkey.menu.photo=T
+altkey.menu.photo=F
 altkey.menu.audio=L
 altkey.menu.settings=I
 altkey.menu.help=H
 
+# Ctrl shortcuts for menu items
+shortcut.menu.file.open=O
+shortcut.menu.file.load=L
+shortcut.menu.file.save=S
+shortcut.menu.track.undo=Z
+shortcut.menu.range.all=A
+shortcut.menu.help.help=H
+
+# Functions
+function.open=\u00d6ppna fil
+function.importwithgpsbabel=Importera fil med GPSBabel
+function.loadfromgps=Ladda fr\u00e5n GPS
+function.sendtogps=Skicka till GPS
+function.exportkml=Exportera KML
+function.exportgpx=Exportera GPX
+function.exportpov=Exportera POV
+function.exportsvg=Exportera SVG
+function.exportimage=Exportera bildfil
+function.editwaypointname=Redigera namn p\u00e5 waypoint
+function.compress=Komprimera sp\u00e5r
+function.deleterange=Radera intervall
+function.croptrack=Besk\u00e4r sp\u00e5r till intervall
+function.interpolate=Interpolera punkter
+function.addtimeoffset=Infoga tidsoffset
+function.addaltitudeoffset=Infoga h\u00f6jdoffset
+function.convertnamestotimes=Omvandla waypointnamn till tidpunkter
+function.findwaypoint=S\u00f6k waypoint
+function.pastecoordinates=Infoga koordinater
+function.charts=Diagram
+function.show3d=3D-vy
+function.distances=Avst\u00e5nd
+function.estimatetime=Uppskatta tid
+
 openweathermap.lang=se
diff --git a/tim/prune/lang/prune-texts_zh.properties b/tim/prune/lang/prune-texts_zh.properties
index a7576e0..1fcca74 100644
--- a/tim/prune/lang/prune-texts_zh.properties
+++ b/tim/prune/lang/prune-texts_zh.properties
@@ -358,7 +358,6 @@ dialog.addmapsource.sourcename=\u5730\u56fe\u6765\u6e90\u540d\u79f0
 dialog.addmapsource.layer1url=\u7b2c\u4e00\u5c42URL
 dialog.addmapsource.layer2url=\u53ef\u9009\u7b2c\u4e8c\u5c42URL
 dialog.addmapsource.maxzoom=\u6700\u5927\u7f29\u653e\u7ea7\u6570
-dialog.addmapsource.cloudstyle=\u6837\u5f0f\u53f7
 dialog.addmapsource.noname=\u672a\u547d\u540d
 dialog.gpsies.column.name=\u8f68\u8ff9\u540d\u79f0
 dialog.gpsies.column.length=\u957f\u5ea6
diff --git a/tim/prune/readme.txt b/tim/prune/readme.txt
index d586911..b9dd6c0 100644
--- a/tim/prune/readme.txt
+++ b/tim/prune/readme.txt
@@ -1,4 +1,4 @@
-GpsPrune version 16.2
+GpsPrune version 16.3
 =====================
 
 GpsPrune is an application for viewing, editing and managing coordinate data from GPS systems,
@@ -17,7 +17,7 @@ Running
 =======
 
 To run GpsPrune from the jar file, simply call it from a command prompt or shell:
-   java -jar gpsprune_16.2.jar
+   java -jar gpsprune_16.3.jar
 
 If the jar file is saved in a different directory, you will need to include the path.
 Depending on your system settings, you may be able to click or double-click on the jar file
@@ -25,9 +25,18 @@ in a file manager window to execute it.  A shortcut, menu item, alias, desktop i
 or other link can of course be made should you wish.
 
 To specify a language other than the default, use an additional parameter, eg:
-   java -jar gpsprune_16.2.jar --lang=DE
+   java -jar gpsprune_16.3.jar --lang=DE
 
 
+New with version 16.3
+=====================
+The following fixes were added since version 16.2:
+  - Fix for gpx caching of points which failed to load
+  - Additional newlines / tabs in gpx export
+  - API key for openweathermap.org
+  - Improvements to 3d terrain reflections
+  - Additional translations
+
 New with version 16.2
 =====================
 The following fixes were added since version 16.1:
diff --git a/tim/prune/save/GpsSaver.java b/tim/prune/save/GpsSaver.java
index 5c74a7a..672234f 100644
--- a/tim/prune/save/GpsSaver.java
+++ b/tim/prune/save/GpsSaver.java
@@ -269,7 +269,7 @@ public class GpsSaver extends GenericFunction implements Runnable
 		Process process = Runtime.getRuntime().exec(commands);
 
 		String trackName = _trackNameField.getText();
-		if (trackName == null || trackName.equals("")) {trackName = "prune";}
+		if (trackName == null || trackName.equals("")) {trackName = "gpsprune";}
 		// Generate the GPX file and send to the GPS
 		OutputStreamWriter writer = new OutputStreamWriter(process.getOutputStream());
 		boolean[] saveFlags = {true, true, true, true, false, true}; // export everything
diff --git a/tim/prune/save/GpxExporter.java b/tim/prune/save/GpxExporter.java
index b0cb283..1b2263b 100644
--- a/tim/prune/save/GpxExporter.java
+++ b/tim/prune/save/GpxExporter.java
@@ -383,6 +383,7 @@ public class GpxExporter extends GenericFunction implements Runnable
 						if (!exportTimestamps) {
 							pointSource = stripTime(pointSource);
 						}
+						inWriter.write('\t');
 						inWriter.write(pointSource);
 						inWriter.write('\n');
 					}
@@ -401,10 +402,10 @@ public class GpxExporter extends GenericFunction implements Runnable
 				exportAudios, exportTimestamps, true, inGpxCachers, "<rtept", "\t<rte><number>1</number>\n",
 				null, "\t</rte>\n");
 			// Output all track points, if any
-			String trackStart = "\t<trk><name>" + trackName + "</name><number>1</number><trkseg>\n";
+			String trackStart = "\t<trk>\n\t\t<name>" + trackName + "</name>\n\t\t<number>1</number>\n\t\t<trkseg>\n";
 			numSaved += writeTrackPoints(inWriter, inInfo, exportSelection, exportTrackpoints, exportPhotos,
 				exportAudios, exportTimestamps, false, inGpxCachers, "<trkpt", trackStart,
-				"\t</trkseg>\n\t<trkseg>\n", "\t</trkseg></trk>\n");
+				"\t</trkseg>\n\t<trkseg>\n", "\t\t</trkseg>\n\t</trk>\n");
 		}
 
 		inWriter.write("</gpx>\n");
@@ -431,11 +432,13 @@ public class GpxExporter extends GenericFunction implements Runnable
 		}
 		if (inName != null && !inName.equals(""))
 		{
-			inWriter.write("\t\t<name>");
+			if (inIsVersion1_1) {inWriter.write('\t');}
+			inWriter.write("\t<name>");
 			inWriter.write(inName);
 			inWriter.write("</name>\n");
 		}
-		inWriter.write("\t\t<desc>");
+		if (inIsVersion1_1) {inWriter.write('\t');}
+		inWriter.write("\t<desc>");
 		inWriter.write(desc);
 		inWriter.write("</desc>\n");
 		if (inIsVersion1_1)
@@ -738,24 +741,24 @@ public class GpxExporter extends GenericFunction implements Runnable
 		boolean inExportPhoto, boolean inExportAudio)
 		throws IOException
 	{
-		inWriter.write("\t\t<trkpt lat=\"");
+		inWriter.write("\t\t\t<trkpt lat=\"");
 		inWriter.write(inPoint.getLatitude().output(Coordinate.FORMAT_DECIMAL_FORCE_POINT));
 		inWriter.write("\" lon=\"");
 		inWriter.write(inPoint.getLongitude().output(Coordinate.FORMAT_DECIMAL_FORCE_POINT));
-		inWriter.write("\">");
+		inWriter.write("\">\n");
 		// altitude
 		if (inPoint.hasAltitude())
 		{
-			inWriter.write("<ele>");
+			inWriter.write("\t\t\t\t<ele>");
 			inWriter.write("" + inPoint.getAltitude().getStringValue(UnitSetLibrary.UNITS_METRES));
-			inWriter.write("</ele>");
+			inWriter.write("</ele>\n");
 		}
 		// timestamp if available (and selected)
 		if (inPoint.hasTimestamp() && inTimestamps)
 		{
-			inWriter.write("<time>");
+			inWriter.write("\t\t\t\t<time>");
 			inWriter.write(inPoint.getTimestamp().getText(Timestamp.FORMAT_ISO_8601));
-			inWriter.write("</time>");
+			inWriter.write("</time>\n");
 		}
 		// photo, audio
 		if (inPoint.getPhoto() != null && inExportPhoto) {
@@ -764,7 +767,7 @@ public class GpxExporter extends GenericFunction implements Runnable
 		if (inPoint.getAudio() != null && inExportAudio) {
 			inWriter.write(makeMediaLink(inPoint.getAudio()));
 		}
-		inWriter.write("</trkpt>\n");
+		inWriter.write("\t\t\t</trkpt>\n");
 	}
 
 
@@ -815,6 +818,6 @@ public class GpxExporter extends GenericFunction implements Runnable
 	 */
 	private static String stripTime(String inPointSource)
 	{
-		return inPointSource.replaceAll("<time>.*?</time>", "");
+		return inPointSource.replaceAll("[ \t]*<time>.*?</time>", "");
 	}
 }
diff --git a/tim/prune/save/xml/GpxCacher.java b/tim/prune/save/xml/GpxCacher.java
index 2c3204d..9ab8552 100644
--- a/tim/prune/save/xml/GpxCacher.java
+++ b/tim/prune/save/xml/GpxCacher.java
@@ -72,9 +72,19 @@ public class GpxCacher implements TagReceiver
 		if (_headerString == null) {
 			_headerString = inTag;
 		}
-		else {
-			_strings[_pointNum] = inTag;
-			_pointNum++;
+		else if (_strings != null)
+		{
+			if (_pointNum < _strings.length)
+			{
+				_strings[_pointNum] = inTag;
+				_pointNum++;
+			}
+			else
+			{
+				// _pointNum has got too high for the strings array
+				// This means the cacher has failed, probably by invalid points - need to give up caching here
+				_strings = null;
+			}
 		}
 	}
 
@@ -95,7 +105,7 @@ public class GpxCacher implements TagReceiver
 	public String getSourceString(DataPoint inPoint)
 	{
 		int index = _sourceInfo.getIndex(inPoint);
-		if (index >= 0) {
+		if (_strings != null && index >= 0 && index < _strings.length) {
 			return _strings[index];
 		}
 		return null;
diff --git a/tim/prune/threedee/Java3DWindow.java b/tim/prune/threedee/Java3DWindow.java
index de52bd6..fdda0fc 100644
--- a/tim/prune/threedee/Java3DWindow.java
+++ b/tim/prune/threedee/Java3DWindow.java
@@ -27,9 +27,9 @@ import javax.media.j3d.QuadArray;
 import javax.media.j3d.Shape3D;
 import javax.media.j3d.Text3D;
 import javax.media.j3d.Texture;
+import javax.media.j3d.TextureAttributes;
 import javax.media.j3d.Transform3D;
 import javax.media.j3d.TransformGroup;
-import javax.media.j3d.TriangleStripArray;
 import javax.swing.JButton;
 import javax.swing.JFrame;
 import javax.swing.JOptionPane;
@@ -54,6 +54,8 @@ import tim.prune.save.MapGrouter;
 import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
 import com.sun.j3d.utils.geometry.Box;
 import com.sun.j3d.utils.geometry.Cylinder;
+import com.sun.j3d.utils.geometry.GeometryInfo;
+import com.sun.j3d.utils.geometry.NormalGenerator;
 import com.sun.j3d.utils.geometry.Sphere;
 import com.sun.j3d.utils.image.TextureLoader;
 import com.sun.j3d.utils.universe.SimpleUniverse;
@@ -358,14 +360,14 @@ public class Java3DWindow implements ThreeDWindow
 					}
 					catch (InterruptedException e) {}
 				}
-	
+
 				// Fix the voids
 				terrainHelper.fixVoids(terrainTrack);
 
 				// Store this back in the cache, maybe we'll need it again
 				TerrainCache.storeTerrainTrack(terrainTrack, _dataStatus, _terrainDefinition);
 			}
-			else System.out.println("Yay - reusing the cached track!");
+			// else System.out.println("Yay - reusing the cached track!");
 
 			// Give the terrain definition to the _model as well
 			_model.setTerrain(terrainTrack);
@@ -592,11 +594,8 @@ public class Java3DWindow implements ThreeDWindow
 	{
 		final int numNodes = inHelper.getGridSize();
 		final int RESULT_SIZE = numNodes * (numNodes * 2 - 2);
-		final int GEOMETRY_COLOURING_TYPE = (inBaseImage == null ? GeometryArray.COLOR_3 : GeometryArray.TEXTURE_COORDINATE_2);
-
 		int[] stripData = inHelper.getStripLengths();
-		TriangleStripArray tsa = new TriangleStripArray(RESULT_SIZE, GeometryArray.COORDINATES | GEOMETRY_COLOURING_TYPE,
-			stripData);
+
 		// Get the scaled terrainTrack coordinates (or just heights) from the model
 		final int nSquared = numNodes * numNodes;
 		Point3d[] rawPoints = new Point3d[nSquared];
@@ -607,23 +606,37 @@ public class Java3DWindow implements ThreeDWindow
 				Math.max(height, 0.05), // make sure it's above the box
 				-inModel.getScaledTerrainVertValue(i) * MODEL_SCALE_FACTOR);
 		}
-		tsa.setCoordinates(0, inHelper.getTerrainCoordinates(rawPoints));
+
+		GeometryInfo gi = new GeometryInfo(GeometryInfo.TRIANGLE_STRIP_ARRAY);
+		gi.setCoordinates(inHelper.getTerrainCoordinates(rawPoints));
+		gi.setStripCounts(stripData);
 
 		Appearance tAppearance = new Appearance();
 		if (inBaseImage != null)
 		{
-			tsa.setTextureCoordinates(0, 0, inHelper.getTextureCoordinates());
+			gi.setTextureCoordinateParams(1,  2); // one coord set of two dimensions
+			gi.setTextureCoordinates(0, inHelper.getTextureCoordinates());
 			Texture mapImage = new TextureLoader(inBaseImage.getImage()).getTexture();
 			tAppearance.setTexture(mapImage);
+			TextureAttributes texAttr = new TextureAttributes();
+			texAttr.setTextureMode(TextureAttributes.MODULATE);
+			tAppearance.setTextureAttributes(texAttr);
 		}
 		else
 		{
 			Color3f[] colours = new Color3f[RESULT_SIZE];
 			Color3f terrainColour = new Color3f(0.1f, 0.2f, 0.2f);
 			for (int i=0; i<RESULT_SIZE; i++) {colours[i] = terrainColour;}
-			tsa.setColors(0, colours);
+			gi.setColors(colours);
 		}
-		return new Shape3D(tsa, tAppearance);
+		new NormalGenerator().generateNormals(gi);
+		Material terrnMat = new Material(new Color3f(0.4f, 0.4f, 0.4f), // ambient colour
+			new Color3f(0f, 0f, 0f), // emissive (none)
+			new Color3f(0.8f, 0.8f, 0.8f), // diffuse
+			new Color3f(0.2f, 0.2f, 0.2f), //specular
+			30f); // shinyness
+		tAppearance.setMaterial(terrnMat);
+		return new Shape3D(gi.getGeometryArray(), tAppearance);
 	}
 
 	/**

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/gpsprune.git



More information about the Pkg-grass-devel mailing list