From 38a0c12649e9104d0d40ce93a932b9086011f8c8 Mon Sep 17 00:00:00 2001 From: activityworkshop Date: Thu, 31 Dec 2020 16:49:40 +0100 Subject: [PATCH] Version 20.1, December 2020 --- .gitignore | 1 + src/tim/prune/FunctionLibrary.java | 3 - src/tim/prune/GpsPrune.java | 4 +- src/tim/prune/config/Config.java | 6 +- src/tim/prune/data/Field.java | 4 +- src/tim/prune/function/AboutScreen.java | 2 +- src/tim/prune/function/DiskCacheConfig.java | 5 + src/tim/prune/function/ShowFullDetails.java | 2 + .../prune/function/settings/SaveConfig.java | 34 ++ .../function/settings/SetDisplaySettings.java | 46 ++- .../function/srtm/DownloadSrtmFunction.java | 222 ------------- .../function/srtm/LookupSrtmFunction.java | 108 +++++-- src/tim/prune/function/srtm/SrtmTile.java | 15 +- .../prune/function/srtm/TileDownloader.java | 107 +++++++ src/tim/prune/function/srtm/TileFinder.java | 52 ++-- src/tim/prune/gui/DisplayUtils.java | 3 +- src/tim/prune/gui/MenuManager.java | 6 +- src/tim/prune/gui/images/wpicon_ring_l.png | Bin 277 -> 511 bytes src/tim/prune/gui/images/wpicon_ring_m.png | Bin 257 -> 461 bytes src/tim/prune/gui/map/CacheFailure.java | 8 + src/tim/prune/gui/map/DiskTileCacher.java | 30 +- src/tim/prune/gui/map/MapCanvas.java | 87 +++++- src/tim/prune/gui/map/MapPosition.java | 14 + src/tim/prune/gui/map/MapTileManager.java | 3 + src/tim/prune/gui/map/TileConsumer.java | 3 + src/tim/prune/lang/prune-texts_af.properties | 2 - src/tim/prune/lang/prune-texts_cy.properties | 10 +- src/tim/prune/lang/prune-texts_cz.properties | 4 +- src/tim/prune/lang/prune-texts_de.properties | 4 +- .../prune/lang/prune-texts_de_CH.properties | 4 +- src/tim/prune/lang/prune-texts_en.properties | 5 +- src/tim/prune/lang/prune-texts_es.properties | 83 ++--- src/tim/prune/lang/prune-texts_fi.properties | 3 - src/tim/prune/lang/prune-texts_fr.properties | 11 +- src/tim/prune/lang/prune-texts_hu.properties | 26 ++ src/tim/prune/lang/prune-texts_it.properties | 4 +- src/tim/prune/lang/prune-texts_nl.properties | 4 +- src/tim/prune/lang/prune-texts_no.properties | 14 - src/tim/prune/lang/prune-texts_pl.properties | 6 +- src/tim/prune/lang/prune-texts_pt.properties | 3 - src/tim/prune/lang/prune-texts_ro.properties | 13 +- src/tim/prune/lang/prune-texts_ru.properties | 5 +- src/tim/prune/lang/prune-texts_sv.properties | 291 +++++++++++++++++- src/tim/prune/lang/prune-texts_uk.properties | 1 - src/tim/prune/lang/prune-texts_zh.properties | 3 - src/tim/prune/load/xml/GpxHandler.java | 11 +- src/tim/prune/readme.txt | 23 +- src/tim/prune/save/GpxExporter.java | 11 +- src/tim/prune/save/MapGrouter.java | 11 +- 49 files changed, 879 insertions(+), 438 deletions(-) delete mode 100644 src/tim/prune/function/srtm/DownloadSrtmFunction.java create mode 100644 src/tim/prune/function/srtm/TileDownloader.java create mode 100644 src/tim/prune/gui/map/CacheFailure.java diff --git a/.gitignore b/.gitignore index 8e9e794..a57e45f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.class *.jar +/bin/ diff --git a/src/tim/prune/FunctionLibrary.java b/src/tim/prune/FunctionLibrary.java index 68303ed..a1cb9ed 100644 --- a/src/tim/prune/FunctionLibrary.java +++ b/src/tim/prune/FunctionLibrary.java @@ -59,7 +59,6 @@ import tim.prune.function.settings.SetMapBgFunction; import tim.prune.function.settings.SetPathsFunction; import tim.prune.function.sew.SewTrackSegmentsFunction; import tim.prune.function.sew.SplitSegmentsFunction; -import tim.prune.function.srtm.DownloadSrtmFunction; import tim.prune.function.srtm.LookupSrtmFunction; import tim.prune.function.weather.GetWeatherForecastFunction; import tim.prune.load.AudioLoader; @@ -102,7 +101,6 @@ public abstract class FunctionLibrary public static GenericFunction FUNCTION_DELETE_BY_DATE = null; public static SingleNumericParameterFunction FUNCTION_INTERPOLATE = null; public static GenericFunction FUNCTION_LOOKUP_SRTM = null; - public static GenericFunction FUNCTION_DOWNLOAD_SRTM = null; public static GenericFunction FUNCTION_NEARBY_WIKIPEDIA = null; public static GenericFunction FUNCTION_SEARCH_WIKIPEDIA = null; public static GenericFunction FUNCTION_SEARCH_OSMPOIS = null; @@ -180,7 +178,6 @@ public abstract class FunctionLibrary FUNCTION_DELETE_BY_DATE = new DeleteByDateFunction(inApp); FUNCTION_INTERPOLATE = new InterpolateFunction(inApp); FUNCTION_LOOKUP_SRTM = new LookupSrtmFunction(inApp); - FUNCTION_DOWNLOAD_SRTM = new DownloadSrtmFunction(inApp); FUNCTION_NEARBY_WIKIPEDIA = new GetWikipediaFunction(inApp); FUNCTION_SEARCH_WIKIPEDIA = new SearchWikipediaNames(inApp); FUNCTION_SEARCH_OSMPOIS = new SearchOsmPoisFunction(inApp); diff --git a/src/tim/prune/GpsPrune.java b/src/tim/prune/GpsPrune.java index 874ece5..a7e0f49 100644 --- a/src/tim/prune/GpsPrune.java +++ b/src/tim/prune/GpsPrune.java @@ -38,9 +38,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 = "20"; + public static final String VERSION_NUMBER = "20.1"; /** Build number, just used for about screen */ - public static final String BUILD_NUMBER = "378"; + public static final String BUILD_NUMBER = "382"; /** Static reference to App object */ private static App APP = null; diff --git a/src/tim/prune/config/Config.java b/src/tim/prune/config/Config.java index 8c6eefe..a5226b3 100644 --- a/src/tim/prune/config/Config.java +++ b/src/tim/prune/config/Config.java @@ -109,6 +109,8 @@ public abstract class Config public static final String KEY_WAYPOINT_ICON_SIZE = "prune.waypointiconsize"; /** Id of selected timezone */ public static final String KEY_TIMEZONE_ID = "prune.timezoneid"; + /** Last used latlon range */ + public static final String KEY_LATLON_RANGE = "prune.latlonrange"; /** Initialise the default properties */ @@ -194,14 +196,14 @@ public abstract class Config props.put(KEY_GPS_DEVICE, "usb:"); props.put(KEY_GPS_FORMAT, "garmin"); props.put(KEY_POVRAY_FONT, "crystal.ttf"); // alternative: DejaVuSans-Bold.ttf - props.put(KEY_SHOW_MAP, "0"); // hide by default + props.put(KEY_SHOW_MAP, "1"); // show by default props.put(KEY_EXIFTOOL_PATH, "exiftool"); props.put(KEY_GNUPLOT_PATH, "gnuplot"); props.put(KEY_GPSBABEL_PATH, "gpsbabel"); props.put(KEY_IMPORT_FILE_FORMAT, "-1"); // no file format selected props.put(KEY_KMZ_IMAGE_SIZE, "240"); props.put(KEY_ANTIALIAS, "1"); // antialias on by default - props.put(KEY_AUTOSAVE_SETTINGS, "0"); // autosave false by default + props.put(KEY_AUTOSAVE_SETTINGS, "1"); // autosave by default props.put(KEY_UNITSET_KEY, "unitset.kilometres"); // metric by default props.put(KEY_COORD_DISPLAY_FORMAT, "0"); // original props.put(KEY_HEIGHT_EXAGGERATION, "100"); // 100%, no exaggeration diff --git a/src/tim/prune/data/Field.java b/src/tim/prune/data/Field.java index 7b9d779..399d931 100644 --- a/src/tim/prune/data/Field.java +++ b/src/tim/prune/data/Field.java @@ -18,6 +18,7 @@ public class Field public static final Field WAYPT_NAME = new Field("fieldname.waypointname", true); public static final Field WAYPT_TYPE = new Field("fieldname.waypointtype", true); public static final Field DESCRIPTION = new Field("fieldname.description", true); + public static final Field COMMENT = new Field("fieldname.comment", true); public static final Field NEW_SEGMENT = new Field("fieldname.newsegment", true); public static final Field SPEED = new Field("fieldname.speed", true); @@ -66,8 +67,9 @@ public class Field */ public String getName() { - if (_labelKey != null) + if (_labelKey != null) { return I18nManager.getText(_labelKey); + } return _customLabel; } diff --git a/src/tim/prune/function/AboutScreen.java b/src/tim/prune/function/AboutScreen.java index 518b10e..c8044b4 100644 --- a/src/tim/prune/function/AboutScreen.java +++ b/src/tim/prune/function/AboutScreen.java @@ -196,7 +196,7 @@ public class AboutScreen extends GenericFunction new JLabel(" Gy\u00F6rgy, HooAU, Sergey, P\u00E9ter, serhijdubyk, Peter, Cristian,"), 1, 6); addToGridBagPanel(creditsPanel, gridBag, constraints, - new JLabel(" Roman, Erkki"), + new JLabel(" Roman, Erkki, Carlos, Tche333"), 1, 7); addToGridBagPanel(creditsPanel, gridBag, constraints, new JLabel(I18nManager.getText("dialog.about.credits.translations") + " : "), diff --git a/src/tim/prune/function/DiskCacheConfig.java b/src/tim/prune/function/DiskCacheConfig.java index 915bed1..2e2fa06 100644 --- a/src/tim/prune/function/DiskCacheConfig.java +++ b/src/tim/prune/function/DiskCacheConfig.java @@ -9,6 +9,7 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; +import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; @@ -17,6 +18,7 @@ import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; +import javax.swing.border.EtchedBorder; import tim.prune.App; import tim.prune.DataSubscriber; @@ -62,6 +64,9 @@ public class DiskCacheConfig extends GenericFunction private Component makeContents() { JPanel dialogPanel = new JPanel(); + dialogPanel.setBorder(BorderFactory.createCompoundBorder( + BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), BorderFactory.createEmptyBorder(4, 4, 4, 4)) + ); dialogPanel.setLayout(new BorderLayout(0, 5)); // top panel JPanel topPanel = new JPanel(); diff --git a/src/tim/prune/function/ShowFullDetails.java b/src/tim/prune/function/ShowFullDetails.java index 8f8289e..8bba3d0 100644 --- a/src/tim/prune/function/ShowFullDetails.java +++ b/src/tim/prune/function/ShowFullDetails.java @@ -239,6 +239,8 @@ public class ShowFullDetails extends GenericFunction addTextPair(result, "fieldname.description", point.getFieldValue(Field.DESCRIPTION)); + addTextPair(result, "fieldname.comment", point.getFieldValue(Field.COMMENT)); + addTextPair(result, "fieldname.waypointtype", point.getFieldValue(Field.WAYPT_TYPE)); // Speed can come from either timestamps and distances, or speed values in data diff --git a/src/tim/prune/function/settings/SaveConfig.java b/src/tim/prune/function/settings/SaveConfig.java index b737bd2..ca88174 100644 --- a/src/tim/prune/function/settings/SaveConfig.java +++ b/src/tim/prune/function/settings/SaveConfig.java @@ -11,6 +11,8 @@ import tim.prune.App; import tim.prune.GenericFunction; import tim.prune.I18nManager; import tim.prune.config.Config; +import tim.prune.data.DoubleRange; +import tim.prune.data.Track; /** * Class to provide the function to save the config settings @@ -86,6 +88,12 @@ public class SaveConfig extends GenericFunction + currBounds.width + "x" + currBounds.height; Config.setConfigString(Config.KEY_WINDOW_BOUNDS, windowBounds); + final String latlonString = createLatLonStringForConfig(); + if (latlonString != null) + { + Config.setConfigString(Config.KEY_LATLON_RANGE, latlonString); + } + FileOutputStream outStream = null; try { @@ -103,4 +111,30 @@ public class SaveConfig extends GenericFunction // Remember where it was saved to Config.setConfigFile(inSaveFile); } + + /** + * @return semicolon-separated string containing the four values, or null + */ + private String createLatLonStringForConfig() + { + Track track = _app.getTrackInfo().getTrack(); + if (track.getNumPoints() >= 2) + { + final DoubleRange latRange = track.getLatRange(); + final DoubleRange lonRange = track.getLonRange(); + if (latRange.getRange() > 0.0 && lonRange.getRange() > 0.0) + { + StringBuffer buffer = new StringBuffer(); + buffer.append(Double.toString(latRange.getMinimum())); + buffer.append(';'); + buffer.append(Double.toString(latRange.getMaximum())); + buffer.append(';'); + buffer.append(Double.toString(lonRange.getMinimum())); + buffer.append(';'); + buffer.append(Double.toString(lonRange.getMaximum())); + return buffer.toString(); + } + } + return null; + } } diff --git a/src/tim/prune/function/settings/SetDisplaySettings.java b/src/tim/prune/function/settings/SetDisplaySettings.java index fd15a50..0a9efd9 100644 --- a/src/tim/prune/function/settings/SetDisplaySettings.java +++ b/src/tim/prune/function/settings/SetDisplaySettings.java @@ -97,6 +97,7 @@ public class SetDisplaySettings extends GenericFunction private JButton _okButton = null; private static final String STYLEKEY_NIMBUS = "javax.swing.plaf.nimbus.NimbusLookAndFeel"; + private static final String STYLEKEY_GTK = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"; /** @@ -188,14 +189,17 @@ public class SetDisplaySettings extends GenericFunction windowStylePanel.add(new JLabel(I18nManager.getText("dialog.displaysettings.windowstyle"))); windowStylePanel.add(Box.createHorizontalStrut(10)); ButtonGroup styleGroup = new ButtonGroup(); - final String[] styleKeys = {"default", "nimbus"}; - _windowStyleRadios = new JRadioButton[2]; - for (int i=0; i<2; i++) + final String[] styleKeys = {"default", "nimbus", "gtk"}; + _windowStyleRadios = new JRadioButton[3]; + for (int i=0; i<3; i++) { _windowStyleRadios[i] = new JRadioButton( I18nManager.getText("dialog.displaysettings.windowstyle." + styleKeys[i])); styleGroup.add(_windowStyleRadios[i]); - windowStylePanel.add(_windowStyleRadios[i]); + if (i != 2 || platformHasPlaf(STYLEKEY_GTK)) + { + windowStylePanel.add(_windowStyleRadios[i]); + } } midPanel.add(windowStylePanel); mainPanel.add(midPanel, BorderLayout.CENTER); @@ -223,6 +227,19 @@ public class SetDisplaySettings extends GenericFunction return mainPanel; } + /** + * @return true if the specified style name is available on this platform + */ + private static boolean platformHasPlaf(String styleName) + { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) + { + if (info.getClassName().equals(styleName)) { + return true; + } + } + return false; + } /** * Show window @@ -274,6 +291,10 @@ public class SetDisplaySettings extends GenericFunction { selectedRadio = 1; } + else if (inValue != null && inValue.equals(STYLEKEY_GTK) && _windowStyleRadios[2] != null) + { + selectedRadio = 2; + } _windowStyleRadios[selectedRadio].setSelected(true); } @@ -292,6 +313,20 @@ public class SetDisplaySettings extends GenericFunction return 1; // default is medium } + /** + * @return the style string according to the selected radio button + */ + private String getSelectedStyleString() + { + if (_windowStyleRadios[1].isSelected()) { + return STYLEKEY_NIMBUS; + } + if (_windowStyleRadios[2] != null && _windowStyleRadios[2].isSelected()) { + return STYLEKEY_GTK; + } + return null; + } + /** * Save settings and close */ @@ -304,8 +339,7 @@ public class SetDisplaySettings extends GenericFunction Config.setConfigBoolean(Config.KEY_ANTIALIAS, _antialiasCheckbox.isSelected()); Config.setConfigInt(Config.KEY_WAYPOINT_ICONS, _wpIconCombobox.getSelectedIndex()); Config.setConfigInt(Config.KEY_WAYPOINT_ICON_SIZE, getSelectedIconSize()); - final String styleString = (_windowStyleRadios[1].isSelected() ? STYLEKEY_NIMBUS : null); - Config.setConfigString(Config.KEY_WINDOW_STYLE, styleString); + Config.setConfigString(Config.KEY_WINDOW_STYLE, getSelectedStyleString()); // refresh display UpdateMessageBroker.informSubscribers(DataSubscriber.MAPSERVER_CHANGED); _dialog.dispose(); diff --git a/src/tim/prune/function/srtm/DownloadSrtmFunction.java b/src/tim/prune/function/srtm/DownloadSrtmFunction.java deleted file mode 100644 index 0350ce3..0000000 --- a/src/tim/prune/function/srtm/DownloadSrtmFunction.java +++ /dev/null @@ -1,222 +0,0 @@ -package tim.prune.function.srtm; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; - -import javax.swing.JOptionPane; - -import tim.prune.App; -import tim.prune.GenericFunction; -import tim.prune.GpsPrune; -import tim.prune.I18nManager; -import tim.prune.config.Config; -import tim.prune.data.DoubleRange; -import tim.prune.gui.ProgressDialog; - -/** - * Class to provide a download function for the Space Shuttle's SRTM data files. - * HGT files are downloaded into memory via HTTP and stored in the map cache. - */ -public class DownloadSrtmFunction extends GenericFunction implements Runnable -{ - /** Progress dialog */ - private ProgressDialog _progress = null; - /** Flag to check whether this function is currently running or not */ - private boolean _running = false; - - - /** - * Constructor - * @param inApp App object - */ - public DownloadSrtmFunction(App inApp) { - super(inApp); - } - - /** @return name key */ - public String getNameKey() { - return "function.downloadsrtm"; - } - - /** - * Begin the download - */ - public void begin() - { - _running = true; - if (_progress == null) { - _progress = new ProgressDialog(_parentFrame, getNameKey()); - } - _progress.show(); - // start new thread for time-consuming part - new Thread(this).start(); - } - - /** - * Run method using separate thread - */ - public void run() - { - // Compile list of tiles to get - ArrayList tileList = new ArrayList(); - - // First, loop to see which tiles are needed - DoubleRange lonRange = _app.getTrackInfo().getTrack().getLonRange(); - DoubleRange latRange = _app.getTrackInfo().getTrack().getLatRange(); - final int minLon = (int) Math.floor(lonRange.getMinimum()); - final int maxLon = (int) Math.floor(lonRange.getMaximum()); - final int minLat = (int) Math.floor(latRange.getMinimum()); - final int maxLat = (int) Math.floor(latRange.getMaximum()); - - for (int lon=minLon; lon<= maxLon; lon++) - { - for (int lat=minLat; lat <= maxLat; lat++) - { - SrtmTile tile = new SrtmTile(lat, lon); - boolean alreadyGot = false; - for (int t = 0; t < tileList.size(); t++) - { - if (tileList.get(t).equals(tile)) { - alreadyGot = true; - } - } - if (!alreadyGot) {tileList.add(tile);} - } - } - - downloadTiles(tileList); - // Finished - _running = false; - } - - - /** - * Download the tiles of SRTM data - * @param inTileList list of tiles to get - */ - private void downloadTiles(ArrayList inTileList) - { - // Update progress bar - if (_progress != null) - { - _progress.setMaximum(inTileList.size()); - _progress.setValue(0); - } - - String errorMessage = null; - - // Check the cache is ok - final String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE); - if (diskCachePath != null) - { - File srtmDir = new File(diskCachePath, "srtm"); - if (!srtmDir.exists() && !srtmDir.mkdir()) { - // can't create the srtm directory - errorMessage = I18nManager.getText("error.downloadsrtm.nocache"); - } - } - else { - // no cache set up - errorMessage = I18nManager.getText("error.downloadsrtm.nocache"); - } - - // Get urls for each tile - URL[] urls = TileFinder.getUrls(inTileList); - int numDownloaded = 0; - for (int t=0; t 1) - { - JOptionPane.showMessageDialog(_parentFrame, I18nManager.getTextWithNumber("confirm.downloadsrtm", numDownloaded), - I18nManager.getText(getNameKey()), JOptionPane.INFORMATION_MESSAGE); - } - else if (inTileList.size() > 0) { - _app.showErrorMessage(getNameKey(), "confirm.downloadsrtm.none"); - } - } - - /** - * See whether the SRTM file is already available locally - * @param inUrl URL for online resource - * @return file object to write to, or null if already there - */ - private static File getFileToWrite(URL inUrl) - { - String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE); - if (diskCachePath != null) - { - File srtmDir = new File(diskCachePath, "srtm"); - if (srtmDir.exists() && srtmDir.isDirectory() && srtmDir.canRead()) - { - File srtmFile = new File(srtmDir, new File(inUrl.getFile()).getName()); - if (!srtmFile.exists() || !srtmFile.canRead() || srtmFile.length() <= 400) { - return srtmFile; - } - } - } - return null; - } - - /** - * @return true if a thread is currently running - */ - public boolean isRunning() - { - return _running; - } -} diff --git a/src/tim/prune/function/srtm/LookupSrtmFunction.java b/src/tim/prune/function/srtm/LookupSrtmFunction.java index c48af01..c5986db 100644 --- a/src/tim/prune/function/srtm/LookupSrtmFunction.java +++ b/src/tim/prune/function/srtm/LookupSrtmFunction.java @@ -4,7 +4,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; -import java.util.ArrayList; +import java.util.HashSet; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -40,6 +40,8 @@ public class LookupSrtmFunction extends GenericFunction implements Runnable private boolean _normalTrack = true; /** Flag set when any tiles had to be downloaded (rather than just loaded locally) */ private boolean _hadToDownload = false; + /** Count the number of tiles downloaded and cached */ + private int _numCached = 0; /** Flag to check whether this function is currently running or not */ private boolean _running = false; @@ -100,8 +102,6 @@ public class LookupSrtmFunction extends GenericFunction implements Runnable */ public void run() { - // Compile list of tiles to get - ArrayList tileList = new ArrayList(); boolean hasZeroAltitudePoints = false; boolean hasNonZeroAltitudePoints = false; // First, loop to see what kind of points we have @@ -128,64 +128,63 @@ public class LookupSrtmFunction extends GenericFunction implements Runnable } // Now loop again to extract the required tiles + HashSet tileSet = new HashSet(); for (int i = 0; i < _track.getNumPoints(); i++) { // Consider points which don't have altitudes or have zero values if (!_track.getPoint(i).hasAltitude() || (overwriteZeros && _track.getPoint(i).getAltitude().getValue() == 0)) { - SrtmTile tile = new SrtmTile(_track.getPoint(i)); - boolean alreadyGot = false; - for (int t = 0; t < tileList.size(); t++) - { - if (tileList.get(t).equals(tile)) { - alreadyGot = true; - } - } - if (!alreadyGot) {tileList.add(tile);} + tileSet.add(new SrtmTile(_track.getPoint(i))); } } - lookupValues(tileList, overwriteZeros); + lookupValues(tileSet, overwriteZeros); // Finished _running = false; // Show tip if lots of online lookups were necessary if (_hadToDownload) { _app.showTip(TipManager.Tip_DownloadSrtm); } + else if (_numCached > 0) { + showConfirmMessage(_numCached); + } } /** * Lookup the values from SRTM data - * @param inTileList list of tiles to get + * @param inTileSet set of tiles to get * @param inOverwriteZeros true to overwrite zero altitude values */ - private void lookupValues(ArrayList inTileList, boolean inOverwriteZeros) + private void lookupValues(HashSet inTileSet, boolean inOverwriteZeros) { UndoLookupSrtm undo = new UndoLookupSrtm(_app.getTrackInfo()); int numAltitudesFound = 0; + TileFinder tileFinder = new TileFinder(); + String errorMessage = null; + final int numTiles = inTileSet.size(); + // Update progress bar if (_progress != null) { - _progress.setMaximum(inTileList.size()); + _progress.setMaximum(numTiles); _progress.setValue(0); } - String errorMessage = null; - // Get urls for each tile - URL[] urls = TileFinder.getUrls(inTileList); - for (int t=0; t 0) { + else if (numTiles > 0) { _app.showErrorMessage(getNameKey(), "error.lookupsrtm.nonefound"); } else { @@ -251,7 +250,45 @@ public class LookupSrtmFunction extends GenericFunction implements Runnable * @param inUrl URL for online resource * @return ZipInputStream either on the local file or on the downloaded zip file */ - private ZipInputStream getStreamToHgtFile(URL inUrl) + private ZipInputStream getStreamToSrtmData(URL inUrl) + throws IOException + { + ZipInputStream localData = null; + try { + localData = getStreamToLocalHgtFile(inUrl); + } + catch (IOException ioe) { + localData = null; + } + if (localData != null) + { + return localData; + } + // try to download to cache + TileDownloader cacher = new TileDownloader(); + TileDownloader.Result result = cacher.downloadTile(inUrl); + System.out.println("Result: " + result); + if (result == TileDownloader.Result.DOWNLOADED) + { + _numCached++; + return getStreamToLocalHgtFile(inUrl); + } + // If we don't have a cache, we may be able to download it temporarily + if (result != TileDownloader.Result.DOWNLOAD_FAILED) + { + _hadToDownload = true; + return new ZipInputStream(inUrl.openStream()); + } + // everything failed + return null; + } + + /** + * Get the SRTM file from the local cache, if available + * @param inUrl URL for online resource + * @return ZipInputStream on the local file or null if not there + */ + private ZipInputStream getStreamToLocalHgtFile(URL inUrl) throws IOException { String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE); @@ -270,10 +307,7 @@ public class LookupSrtmFunction extends GenericFunction implements Runnable } } } - // System.out.println("Lookup: Trying online: " + inUrl.toString()); - _hadToDownload = true; - // MAYBE: Only download if we're in online mode? - return new ZipInputStream(inUrl.openStream()); + return null; } /** @@ -399,4 +433,18 @@ public class LookupSrtmFunction extends GenericFunction implements Runnable { return _running; } + + private void showConfirmMessage(int numDownloaded) + { + if (numDownloaded == 1) + { + JOptionPane.showMessageDialog(_parentFrame, I18nManager.getTextWithNumber("confirm.downloadsrtm.1", numDownloaded), + I18nManager.getText(getNameKey()), JOptionPane.INFORMATION_MESSAGE); + } + else if (numDownloaded > 1) + { + JOptionPane.showMessageDialog(_parentFrame, I18nManager.getTextWithNumber("confirm.downloadsrtm", numDownloaded), + I18nManager.getText(getNameKey()), JOptionPane.INFORMATION_MESSAGE); + } + } } diff --git a/src/tim/prune/function/srtm/SrtmTile.java b/src/tim/prune/function/srtm/SrtmTile.java index 301bbaf..058132c 100644 --- a/src/tim/prune/function/srtm/SrtmTile.java +++ b/src/tim/prune/function/srtm/SrtmTile.java @@ -36,14 +36,25 @@ public class SrtmTile _longitude = inLongitude; } + @Override + public int hashCode() + { + return _latitude * 1000 + _longitude; + } + /** * Check for equality * @param inOther other tile object * @return true if both represent same tile */ - public boolean equals(SrtmTile inOther) + @Override + public boolean equals(Object inOther) { - return (_latitude == inOther._latitude) && (_longitude == inOther._longitude); + if (inOther == null || inOther.getClass() != getClass()) { + return false; + } + SrtmTile otherTile = (SrtmTile) inOther; + return (_latitude == otherTile._latitude) && (_longitude == otherTile._longitude); } /** @return latitude as int */ diff --git a/src/tim/prune/function/srtm/TileDownloader.java b/src/tim/prune/function/srtm/TileDownloader.java new file mode 100644 index 0000000..831d4dd --- /dev/null +++ b/src/tim/prune/function/srtm/TileDownloader.java @@ -0,0 +1,107 @@ +package tim.prune.function.srtm; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; + +import tim.prune.GpsPrune; +import tim.prune.config.Config; + +/** + * Class to provide a download function for the Space Shuttle's SRTM data files. + * HGT files are downloaded into memory via HTTP and stored in the map cache. + */ +public class TileDownloader +{ + /** Possible results of the download */ + public enum Result {DOWNLOADED, NOTHING_TO_DO, DOWNLOAD_FAILED, CACHE_FAILED}; + + /** + * Download a single tile of SRTM data + * @param inUrl remote URL to get + */ + public Result downloadTile(URL inUrl) + { + if (inUrl == null) { + return Result.NOTHING_TO_DO; + } + + // Check the cache is ok + final String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE); + if (diskCachePath != null) + { + File srtmDir = new File(diskCachePath, "srtm"); + if (srtmDir.exists() && !srtmDir.isDirectory()) { + // exists but isn't a directory - can't be used + return Result.CACHE_FAILED; + } + if (!srtmDir.exists() && !srtmDir.mkdir()) { + // can't create the srtm directory + return Result.CACHE_FAILED; + } + } + else { + // no cache set up + return Result.CACHE_FAILED; + } + + // Define streams + FileOutputStream outStream = null; + InputStream inStream = null; + Result result = Result.NOTHING_TO_DO; + try + { + // See if we've already got this tile or not + File outputFile = getFileToWrite(inUrl); + if (outputFile != null) + { + System.out.println("Download: Need to download: " + inUrl); + outStream = new FileOutputStream(outputFile); + URLConnection conn = inUrl.openConnection(); + conn.setRequestProperty("User-Agent", "GpsPrune v" + GpsPrune.VERSION_NUMBER); + inStream = conn.getInputStream(); + // Copy all the bytes to the file + int c; + while ((c = inStream.read()) != -1) + { + outStream.write(c); + } + result = Result.DOWNLOADED; + } + } + catch (IOException ioe) { + System.err.println(ioe.getClass().getName() + " - " + ioe.getMessage()); + result = Result.DOWNLOAD_FAILED; + } + // Make sure streams are closed + try {inStream.close();} catch (Exception e) {} + try {outStream.close();} catch (Exception e) {} + + return result; + } + + /** + * See whether the SRTM file is already available locally + * @param inUrl URL for online resource + * @return file object to write to, or null if already there + */ + private static File getFileToWrite(URL inUrl) + { + String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE); + if (diskCachePath != null) + { + File srtmDir = new File(diskCachePath, "srtm"); + if (srtmDir.exists() && srtmDir.isDirectory() && srtmDir.canRead()) + { + File srtmFile = new File(srtmDir, new File(inUrl.getFile()).getName()); + if (!srtmFile.exists() || !srtmFile.canRead() || srtmFile.length() <= 400) { + return srtmFile; + } + } + } + return null; + } +} diff --git a/src/tim/prune/function/srtm/TileFinder.java b/src/tim/prune/function/srtm/TileFinder.java index 5ada68c..e2b01fa 100644 --- a/src/tim/prune/function/srtm/TileFinder.java +++ b/src/tim/prune/function/srtm/TileFinder.java @@ -3,15 +3,17 @@ package tim.prune.function.srtm; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; -import java.util.ArrayList; /** * Class to get the URLs of the SRTM tiles * using the srtmtiles.dat file */ -public abstract class TileFinder +public class TileFinder { + /** tile data loaded from file */ + private byte[] _tileData = null; + /** URL prefix for all tiles */ private static final String URL_PREFIX = "https://dds.cr.usgs.gov/srtm/version2_1/SRTM3/"; /** Directory names for each continent */ @@ -24,33 +26,33 @@ public abstract class TileFinder * @param inTiles list of Tiles to get * @return array of URLs */ - public static URL[] getUrls(ArrayList inTiles) + public URL getUrl(SrtmTile inTile) { - if (inTiles == null || inTiles.size() < 1) {return null;} - URL[] urls = new URL[inTiles.size()]; - // Read dat file into array - byte[] lookup = readDatFile(); - if (lookup == null) - { - System.err.println("Build error: resource srtmtiles.dat missing!"); - return null; - } - for (int t=0; t 0) { - try { - urls[t] = new URL(URL_PREFIX + CONTINENTS[dir] + "/" + tile.getTileName()); - } catch (MalformedURLException e) {} // ignore error, url stays null - } - } catch (ArrayIndexOutOfBoundsException e) {} // ignore error, url stays null + System.err.println("Build error: resource srtmtiles.dat missing!"); + return null; + } } - return urls; + + URL url = null; + // Get byte from lookup array + int idx = (inTile.getLatitude() + 59)*360 + (inTile.getLongitude() + 180); + try + { + int dir = _tileData[idx]; + if (dir > 0) { + try { + url = new URL(URL_PREFIX + CONTINENTS[dir] + "/" + inTile.getTileName()); + } catch (MalformedURLException e) {} // ignore error, url stays null + } + } catch (ArrayIndexOutOfBoundsException e) {} // ignore error, url stays null + + return url; } /** diff --git a/src/tim/prune/gui/DisplayUtils.java b/src/tim/prune/gui/DisplayUtils.java index 25640d8..2300296 100644 --- a/src/tim/prune/gui/DisplayUtils.java +++ b/src/tim/prune/gui/DisplayUtils.java @@ -36,7 +36,8 @@ public abstract class DisplayUtils if (inNumSecs < 86400L) return "" + (inNumSecs / 60 / 60) + I18nManager.getText("display.range.time.hours") + " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins"); if (inNumSecs < 432000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days") - + " " + (inNumSecs / 60 / 60) % 24 + I18nManager.getText("display.range.time.hours"); + + " " + (inNumSecs / 60 / 60) % 24 + I18nManager.getText("display.range.time.hours") + + " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins"); if (inNumSecs < 86400000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days"); return "big"; } diff --git a/src/tim/prune/gui/MenuManager.java b/src/tim/prune/gui/MenuManager.java index d289b78..d87f459 100644 --- a/src/tim/prune/gui/MenuManager.java +++ b/src/tim/prune/gui/MenuManager.java @@ -96,7 +96,6 @@ public class MenuManager implements DataSubscriber private JMenuItem _routingGraphHopperItem = null; private JMenuItem _chartItem = null; private JMenuItem _lookupSrtmItem = null; - private JMenuItem _downloadSrtmItem = null; private JMenuItem _nearbyWikipediaItem = null; private JMenuItem _nearbyOsmPoiItem = null; private JMenuItem _showPeakfinderItem = null; @@ -260,8 +259,6 @@ public class MenuManager implements DataSubscriber // SRTM _lookupSrtmItem = makeMenuItem(FunctionLibrary.FUNCTION_LOOKUP_SRTM, false); onlineMenu.add(_lookupSrtmItem); - _downloadSrtmItem = makeMenuItem(FunctionLibrary.FUNCTION_DOWNLOAD_SRTM, false); - onlineMenu.add(_downloadSrtmItem); onlineMenu.addSeparator(); // browser submenu @@ -894,8 +891,6 @@ public class MenuManager implements DataSubscriber _downloadOsmItem.setEnabled(hasData); _getWeatherItem.setEnabled(hasData); _findWaypointItem.setEnabled(hasData && _track.hasWaypoints()); - // have we got a cache? - _downloadSrtmItem.setEnabled(hasData && Config.getConfigString(Config.KEY_DISK_CACHE) != null); // have we got any timestamps? _deleteByDateItem.setEnabled(hasData && _track.hasData(Field.TIMESTAMP)); @@ -1003,6 +998,7 @@ public class MenuManager implements DataSubscriber } else { + rfl.verifyAll(); // Rebuild menus _recentFileMenu.removeAll(); for (int i=0; iSb8~Z% zk&%>?l$x5Fot>SfrKP8*r>d%|#KgqL#>U;<-QVBelt)=IZL|?(XjI@9+5d z`1$$y{QUg={r&#_{{R2~XvnN^kxMdv%Sl8*R4C7_(nkVLGTAq7GrNR#s9{*X>Z6u(g^r4XYu^2i}UH z+Dq7#agOa2^EL{Yu@DZ?J~gO~yD(G1=f{u8IDhD|NWie@VwtNp+g1f0Mt_8>Eak7aXC3bfky(UUBJfCz+nm=^9DT7iqc~a-CK3NmsBII?Me+&gHXR)q@4BvXWH?9%CMPE+C@3f?DJfJ`R8>_~R#sM5S65kCSz20JTU%RP zTwHT=b9Hrfc6N4mcXxPrc&VwWs;a81tE;T6tgf!Eu&}VPu_m#yva++Yv$?ssy1Kf% zySu%;z1-Z~-QC^Z-rnEe-~a#r(p8{$kxMdv$w@>(R4C7#l4~16KoEu5C`IHhU0hnE z!vFtw&8%Ikp88@wopatb%q&G&Tv=#qnjK|dalTV|ndLk`sJZ}4-AaS#)v!AXMyT72>n*FZe_>Zpt7$xSRP{aoTj uu6Itzd43_KDRPT`-(l?N`XMQn{~T{Z)EVAu+ATi-0000}CW delta 195 zcmV;!06hQA1AzjN7&8O|0000ISs=>*0016POjJcLDF6Tf00jjF2L}f!DJg-0fy~Uz z)z#Jc`T76<|91{%&XK(`e{V@dK~xyiV_*ORMnORV1}G2&0|=WD!Vy4{fJiaII08@! zAw`H3NWwIuEf_2XUoP**}R4<@-4%OQz0fGoB0Fx>$OZ&rXCjbBd07*qo1w^hwV1mH=L_q)m diff --git a/src/tim/prune/gui/map/CacheFailure.java b/src/tim/prune/gui/map/CacheFailure.java new file mode 100644 index 0000000..6f9ac28 --- /dev/null +++ b/src/tim/prune/gui/map/CacheFailure.java @@ -0,0 +1,8 @@ +package tim.prune.gui.map; + +/** + * Exception thrown to indicate a failure to cache map tiles + */ +public class CacheFailure extends Exception +{ +} diff --git a/src/tim/prune/gui/map/DiskTileCacher.java b/src/tim/prune/gui/map/DiskTileCacher.java index 875fcc3..9be7841 100644 --- a/src/tim/prune/gui/map/DiskTileCacher.java +++ b/src/tim/prune/gui/map/DiskTileCacher.java @@ -38,6 +38,8 @@ public class DiskTileCacher implements Runnable private static int NUMBER_ACTIVE_THREADS = 0; /** Flag to remember whether any server connection is possible */ private static boolean CONNECTION_ACTIVE = true; + /** Flag to remember whether we have already tried to create the base path */ + private static boolean TRIED_TO_CREATE_BASEPATH = false; /** @@ -86,16 +88,17 @@ public class DiskTileCacher implements Runnable * @param inBasePath base path to disk cache * @param inTilePath relative path to this tile * @param inObserver observer to inform when load complete + * @throws CacheFailure if tile could not be saved */ - public static void saveTile(URL inUrl, String inBasePath, String inTilePath, ImageObserver inObserver) + public static void saveTile(URL inUrl, String inBasePath, String inTilePath, ImageObserver inObserver) throws CacheFailure { if (inBasePath == null || inTilePath == null) {return;} // save file if possible File basePath = new File(inBasePath); - if (!basePath.exists() || !basePath.isDirectory() || !basePath.canWrite()) + if (!checkBasePath(basePath)) { // Can't write to base path - return; + throw new CacheFailure(); } File tileFile = new File(basePath, inTilePath); @@ -113,6 +116,21 @@ public class DiskTileCacher implements Runnable } } + /** + * Check the given base path, and try (once) to create it if necessary + * @return true if base path can be written to + */ + private static boolean checkBasePath(File inBasePath) + { + if (!inBasePath.exists() && !TRIED_TO_CREATE_BASEPATH) + { + TRIED_TO_CREATE_BASEPATH = true; + System.out.println("Base path '" + inBasePath.getAbsolutePath() + "' does not exist, trying to create"); + return inBasePath.mkdirs(); + } + return inBasePath.exists() && inBasePath.isDirectory() && inBasePath.canWrite(); + } + /** * Start downloading the configured tile */ @@ -218,12 +236,14 @@ public class DiskTileCacher implements Runnable { success = true; } + else if (_file.delete() && tempFile.renameTo(_file)) + { + success = true; + } else { - // File couldn't be moved - delete both to be sure System.out.println("Failed to rename temp file: " + tempFile.getAbsolutePath()); tempFile.delete(); - _file.delete(); } } diff --git a/src/tim/prune/gui/map/MapCanvas.java b/src/tim/prune/gui/map/MapCanvas.java index d305d1c..a469e99 100644 --- a/src/tim/prune/gui/map/MapCanvas.java +++ b/src/tim/prune/gui/map/MapCanvas.java @@ -85,7 +85,7 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe /** coordinates of popup menu */ private int _popupMenuX = -1, _popupMenuY = -1; /** Flag to prevent showing too often the error message about loading maps */ - private boolean _shownOsmErrorAlready = false; + private boolean _shownMapLoadErrorAlready = false; /** Current drawing mode */ private int _drawMode = MODE_DEFAULT; /** Current waypoint icon definition */ @@ -339,8 +339,16 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe */ private void zoomToFit() { - _latRange = _track.getLatRange(); - _lonRange = _track.getLonRange(); + if (_track.getNumPoints() > 0) + { + _latRange = _track.getLatRange(); + _lonRange = _track.getLonRange(); + } + if (_latRange == null || _lonRange == null + || !_latRange.hasData() || !_lonRange.hasData()) + { + setDefaultLatLonRange(); + } _xRange = new DoubleRange(MapUtils.getXFromLongitude(_lonRange.getMinimum()), MapUtils.getXFromLongitude(_lonRange.getMaximum())); _yRange = new DoubleRange(MapUtils.getYFromLatitude(_latRange.getMinimum()), @@ -349,6 +357,37 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe getWidth(), getHeight()); } + /** + * Track data is empty, so find a default area on the map to show + */ + private void setDefaultLatLonRange() + { + String storedRange = Config.getConfigString(Config.KEY_LATLON_RANGE); + // Parse it into four latlon values + try + { + String[] values = storedRange.split(";"); + if (values.length == 4) + { + final double lat1 = Double.valueOf(values[0]); + final double lat2 = Double.valueOf(values[1]); + if (lat1 >= -90.0 && lat1 <= 90.0 && lat2 >= -90.0 && lat2 <= 90.0 && lat1 != lat2) + { + _latRange = new DoubleRange(lat1, lat2); + final double lon1 = Double.valueOf(values[2]); + final double lon2 = Double.valueOf(values[3]); + if (lon1 >= -180.0 && lon1 <= 180.0 && lon2 >= -180.0 && lon2 <= 180.0 && lon1 != lon2) + { + _lonRange = new DoubleRange(lon1, lon2); + return; + } + } + } + } + catch (Exception e) {} + _latRange = new DoubleRange(45.8, 47.9); + _lonRange = new DoubleRange(5.9, 10.6); + } /** * Paint method @@ -360,7 +399,9 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe if (_mapImage != null && (_mapImage.getWidth() != getWidth() || _mapImage.getHeight() != getHeight())) { _mapImage = null; } - if (_track.getNumPoints() > 0) + final boolean showMap = Config.getConfigBoolean(Config.KEY_SHOW_MAP); + final boolean showSomething = _track.getNumPoints() > 0 || showMap; + if (showSomething) { // Check for autopan if enabled / necessary if (_autopanCheckBox.isSelected()) @@ -373,6 +414,14 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe _prevSelectedPoint = selectedPoint; } + // Recognise empty map position, if no data has been loaded + if (_mapPosition.isEmpty()) + { + // Set to some default area + zoomToFit(); + _recalculate = true; + } + // Draw the map contents if necessary if (_mapImage == null || _recalculate) { @@ -425,6 +474,9 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe inG.drawString(I18nManager.getText("display.nodata"), 50, getHeight()/2); _scaleBar.updateScale(-1, 0); } + // enable or disable panels + _topPanel.setVisible(showSomething); + _sidePanel.setVisible(showSomething); // Draw slider etc on top paintChildren(inG); } @@ -503,7 +555,7 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe } // reset error message - if (!showMap) {_shownOsmErrorAlready = false;} + if (!showMap) {_shownMapLoadErrorAlready = false;} _recalculate = false; // Only get map tiles if selected if (showMap) @@ -941,9 +993,9 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe synchronized(this) { // Show message if loading failed (but not too many times) - if (!inIsOk && !_shownOsmErrorAlready && _mapCheckBox.isSelected()) + if (!inIsOk && !_shownMapLoadErrorAlready && _mapCheckBox.isSelected()) { - _shownOsmErrorAlready = true; + _shownMapLoadErrorAlready = true; // use separate thread to show message about failing to load osm images new Thread(new Runnable() { public void run() { @@ -957,6 +1009,15 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe } } + /** + * Inform that a cache failure occurred + */ + public void reportCacheFailure() + { + // Cache can't be used, so disable it - user will be reminded to set it up by the tips + Config.setConfigString(Config.KEY_DISK_CACHE, null); + } + /** * Zoom out, if not already at minimum zoom */ @@ -1074,15 +1135,17 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe */ public void mouseClicked(MouseEvent inE) { - if (_track != null && _track.getNumPoints() > 0) + final boolean showMap = Config.getConfigBoolean(Config.KEY_SHOW_MAP); + final boolean hasPoints = _track != null && _track.getNumPoints() > 0; + if (showMap || hasPoints) { // select point if it's a left-click if (!inE.isMetaDown()) { if (inE.getClickCount() == 1) { - // single click - if (_drawMode == MODE_DEFAULT) + // single left click + if (_drawMode == MODE_DEFAULT && hasPoints) { int pointIndex = _clickedPoint; if (pointIndex == INDEX_UNKNOWN) @@ -1408,10 +1471,6 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe } } repaint(); - // enable or disable components - boolean hasData = _track.getNumPoints() > 0; - _topPanel.setVisible(hasData); - _sidePanel.setVisible(hasData); // grab focus for the key presses this.requestFocus(); } diff --git a/src/tim/prune/gui/map/MapPosition.java b/src/tim/prune/gui/map/MapPosition.java index 25f05fc..a62d782 100644 --- a/src/tim/prune/gui/map/MapPosition.java +++ b/src/tim/prune/gui/map/MapPosition.java @@ -17,6 +17,8 @@ public class MapPosition private int _zoom = 12; /** Factor to zoom by, 2 to the power of zoom */ private int _zoomFactor = 1 << _zoom; + /** Flag to mark if this position has ever been set */ + private boolean _empty = true; /** Maximum zoom level */ private static final int MAX_ZOOM = 21; @@ -47,10 +49,12 @@ public class MapPosition } } if (requiredZoom < 2) requiredZoom = 2; + else if (requiredZoom > 18) requiredZoom = 18; // Set position setZoom(requiredZoom); _xPosition = transformToPixels((inMinX + inMaxX) / 2.0); _yPosition = transformToPixels((inMinY + inMaxY) / 2.0); + _empty = false; } /** @@ -61,6 +65,7 @@ public class MapPosition { _zoom = inZoom; _zoomFactor = 1 << _zoom; + _empty = false; } /** @@ -93,6 +98,7 @@ public class MapPosition // Set position _xPosition = (_xPosition - inWidth/2 + (inMinX + inMaxX) / 2) * multFactor; _yPosition = (_yPosition - inHeight/2 + (inMinY + inMaxY) / 2) * multFactor; + _empty = false; } /** @@ -277,4 +283,12 @@ public class MapPosition _xPosition += inDeltaX; _yPosition += inDeltaY; } + + /** + * @return true if this position has never been set + */ + public boolean isEmpty() + { + return _empty; + } } diff --git a/src/tim/prune/gui/map/MapTileManager.java b/src/tim/prune/gui/map/MapTileManager.java index 8c2c6ee..03b364a 100644 --- a/src/tim/prune/gui/map/MapTileManager.java +++ b/src/tim/prune/gui/map/MapTileManager.java @@ -210,6 +210,9 @@ public class MapTileManager implements ImageObserver } } catch (MalformedURLException urle) {} // ignore + catch (CacheFailure cf) { + _consumer.reportCacheFailure(); + } } return tileImage; } diff --git a/src/tim/prune/gui/map/TileConsumer.java b/src/tim/prune/gui/map/TileConsumer.java index 35a557e..a2de40a 100644 --- a/src/tim/prune/gui/map/TileConsumer.java +++ b/src/tim/prune/gui/map/TileConsumer.java @@ -7,4 +7,7 @@ public interface TileConsumer { /** Let the consumer know that the tiles have been updated */ public void tilesUpdated(boolean inIsOk); + + /** Let the consume know that a cache failure occurred */ + public void reportCacheFailure(); } diff --git a/src/tim/prune/lang/prune-texts_af.properties b/src/tim/prune/lang/prune-texts_af.properties index e12df2c..03acf63 100644 --- a/src/tim/prune/lang/prune-texts_af.properties +++ b/src/tim/prune/lang/prune-texts_af.properties @@ -109,7 +109,6 @@ function.selectsegment=Selekteer huidige segment function.splitsegments=Verdeel baan in segmente function.sewsegments=Naai baan segmente aanmekaar function.lookupsrtm=Kry hoogtes vanaf SRTM -function.downloadsrtm=Laai SRTM te\u00ebls af function.getwikipedia=Kry nabye Wikipedia artikels function.searchwikipedianames=Soek Wikiepdia volgens naam function.searchopencachingde=Soek OpenCaching.de @@ -582,7 +581,6 @@ confirm.running=Besig om te loop... confirm.lookupsrtm=%d hoogte waardes gevind confirm.downloadsrtm=%d leers afgelaai na data stoor confirm.downloadsrtm.1=%d leer afgelaai na data stoor -confirm.downloadsrtm.none=Geen leers afgelaai, hulle was alreeds in the data stoor confirm.deletefieldvalues=Veld waardes verwyder confirm.audioload=Klank leers bygevoeg confirm.correlateaudios.single=klankgreep was gekorreleer diff --git a/src/tim/prune/lang/prune-texts_cy.properties b/src/tim/prune/lang/prune-texts_cy.properties index 1c2d752..50ef3a2 100644 --- a/src/tim/prune/lang/prune-texts_cy.properties +++ b/src/tim/prune/lang/prune-texts_cy.properties @@ -14,6 +14,9 @@ menu.audio=Awdio menu.view=Golygu menu.settings=Dewisiadau menu.help=Cymorth +# Popup menu for map +menu.map.zoomin=Chwyddo i mewn +menu.map.zoomout=Chwyddo allan # Alt keys for menus altkey.menu.file=F @@ -35,6 +38,7 @@ function.exportpov=Cadw POV function.exportimage=Cadw llun function.charts=Siartiau function.distances=Pellterau +function.viewfulldetails=Manylion function.help=Cymorth function.about=Ynghylych GpsPrune @@ -83,7 +87,12 @@ details.track.file=Ffeil details.lists.audio=Awdio # Field names +fieldname.latitude=Lledred +fieldname.longitude=Hydred +fieldname.coordinates=Cyfesurynnau fieldname.waypointname=Enw +fieldname.distance=Pellter +fieldname.comment=Sylw # How to combine conditions, such as filters logic.and=a @@ -93,4 +102,3 @@ logic.or=neu url.googlemaps=maps.google.co.uk wikipedia.lang=cy openweathermap.lang=en - diff --git a/src/tim/prune/lang/prune-texts_cz.properties b/src/tim/prune/lang/prune-texts_cz.properties index 4d4b5c0..96956d9 100644 --- a/src/tim/prune/lang/prune-texts_cz.properties +++ b/src/tim/prune/lang/prune-texts_cz.properties @@ -106,7 +106,6 @@ function.setpaths=Nastavit cestu k program\u016fm function.splitsegments=Rozd\u011blit stopu na \u010d\u00e1sti function.sewsegments=Spojit \u010d\u00e1sti stopy function.lookupsrtm=Na\u010d\u00edst nadm. v\u00fd\u0161ku ze SRTM -function.downloadsrtm=St\u00e1hnout dla\u017edice ze SRTM function.getwikipedia=Hledat na Wikipedii podle vzd\u00e1lenosti function.searchwikipedianames=Hledat na Wikipedii podle jm\u00e9na function.searchopencachingde=Hledat na OpenCaching.de @@ -572,7 +571,6 @@ confirm.running=Prob\u00edh\u00e1 ... confirm.lookupsrtm=Nalezeno %d v\u00fd\u0161kov\u00fdch hodnot confirm.downloadsrtm=Do cache bylo sta\u017eeno %d soubor\u016f confirm.downloadsrtm.1=Do cache bylo sta\u017eeno %d soubor\u016f -confirm.downloadsrtm.none=\u017d\u00e1dn\u00fd soubor nebylo t\u0159eba stahovat, v\u0161e u\u017e je v cachi. confirm.deletefieldvalues=Hodnoty pole smaz\u00e1ny confirm.audioload=Audionahr\u00e1vky p\u0159id\u00e1ny confirm.correlateaudios.single=Audionahr\u00e1vka slad\u011bna @@ -582,7 +580,7 @@ confirm.correlateaudios.multi=Audionahr\u00e1vky slad\u011bny tip.title=Tip tip.useamapcache=Kdy\u017e nastav\u00edte odkl\u00e1dac\u00ed prostor na disku \u010dili cache (Nastaven\u00ed -> Ulo\u017eit mapy na disk),\nzrychl\u00ed se zobrazov\u00e1n\u00ed a zmen\u0161\u00ed se mno\u017estv\u00ed p\u0159en\u00e1\u0161en\u00fdch dat. tip.learntimeparams=V\u00fdsledky budou p\u0159esn\u011bj\u0161\u00ed, kdy\u017e na na\u010dten\u00e9 stopy pou\u017eijete funkci\nAnal\u00fdza stopy pro odhad \u010dasu. -tip.downloadsrtm=Na\u010d\u00edt\u00e1n\u00ed nadmo\u0159sk\u00fdch v\u00fd\u0161ek bude rychlej\u0161\u00ed, pokud st\u00e1hnete dla\u017edice do cache pomoc\u00ed\nOnline -> St\u00e1hnout dla\u017edice ze SRTM. +tip.downloadsrtm=Na\u010d\u00edt\u00e1n\u00ed nadmo\u0159sk\u00fdch v\u00fd\u0161ek bude rychlej\u0161\u00ed,\npokud st\u00e1hnete dla\u017edice do cache. tip.usesrtmfor3d=Tato stopa neobsahuje informaci o nadmo\u0159sk\u00e9 v\u00fd\u0161ce.\nPro na\u010dten\u00ed p\u0159ibli\u017en\u00fdch nadmo\u0159sk\u00fdch v\u00fd\u0161ek pot\u0159ebn\u00fdch\nna trojrozm\u011brn\u00e9 zobrazen\u00ed m\u016f\u017eete pou\u017e\u00edt funkce SRTM. tip.manuallycorrelateone=Kdy\u017e ru\u010dn\u011b slad\u00edte aspo\u0148 jednu fotografii, \u010dasov\u00fd posun bude vypo\u010d\u00edtat za v\u00e1s. diff --git a/src/tim/prune/lang/prune-texts_de.properties b/src/tim/prune/lang/prune-texts_de.properties index d1f6976..ffc031d 100644 --- a/src/tim/prune/lang/prune-texts_de.properties +++ b/src/tim/prune/lang/prune-texts_de.properties @@ -113,7 +113,6 @@ function.splitsegments=In Trackabschnitte schneiden function.sewsegments=Trackabschnitte zusammenf\u00fcgen function.createmarkerwaypoints=Wegpunkte im bestimmten Abstand kreieren function.lookupsrtm=H\u00f6hendaten von SRTM nachschlagen -function.downloadsrtm=SRTM Dateien herunterladen function.getwikipedia=Wikipediaartikel in der N\u00e4he nachschlagen function.searchwikipedianames=Wikipedia nach Namen durchsuchen function.searchosmpois=OpenStreetMap nach Punkten durchsuchen @@ -638,7 +637,6 @@ confirm.running=In Bearbeitung ... confirm.lookupsrtm=Es wurden %d H\u00f6henwerte gefunden confirm.downloadsrtm=Es wurden %d Dateien heruntergeladen confirm.downloadsrtm.1=Es wurde %d Datei heruntergeladen -confirm.downloadsrtm.none=Keine Dateien heruntergeladen, alle waren schon gespeichert. confirm.deletefieldvalues=Feldwerte gel\u00f6scht confirm.audioload=Audiodateien geladen confirm.correlateaudios.single=Audio wurde korreliert @@ -648,7 +646,7 @@ confirm.correlateaudios.multi=Audios wurden korreliert tip.title=Tipp tip.useamapcache=Mit lokal-gespeicherten Kartenkacheln (Einstellungen -> Karten auf Festplatte speichern)\nk\u00f6nnen Sie die Darstellung beschleunigen und Netzwerkverkehr reduzieren. tip.learntimeparams=Wenn Sie Track -> Zeitparameter erlernen mit Ihren Tracks benutzen\ndann werden die berechneten Werte genauer. -tip.downloadsrtm=Sie k\u00f6nnen diese Funktion beschleunigen indem Sie\nOnline -> SRTM Dateien herunterladen aufrufen\num die Daten lokal zu speichern. +tip.downloadsrtm=Sie k\u00f6nnen diese Funktion beschleunigen indem Sie\ndie SRTM Daten lokal im Kartenspeicher speichern. tip.usesrtmfor3d=Dieser Track hat keine H\u00f6heninformation.\nSie k\u00f6nnen die SRTM Funktionen verwenden, um\nH\u00f6henwerte abzusch\u00e4tzen. tip.manuallycorrelateone=Mit mindestens einem manuell verbundenen Element kann die Zeitdifferenz automatisch berechnet werden. diff --git a/src/tim/prune/lang/prune-texts_de_CH.properties b/src/tim/prune/lang/prune-texts_de_CH.properties index e2172ee..555390e 100644 --- a/src/tim/prune/lang/prune-texts_de_CH.properties +++ b/src/tim/prune/lang/prune-texts_de_CH.properties @@ -111,7 +111,6 @@ function.splitsegments=In Tracksegm\u00e4nte schniide function.sewsegments=Tracksegm\u00e4nte z\u00e4mef\u00fcge function.createmarkerwaypoints=Waypoints inem bestimmten Abstand kreiere function.lookupsrtm=H\u00f6hendate vonem SRTM hole -function.downloadsrtm=SRTM Files abalade function.getwikipedia=Im Wikipedia in dr N\u00f6chi naaluege function.searchwikipedianames=Wikipedia nachem Namen durasueche function.searchosmpois=OpenStreetMap na P\u00fcnkt durasueche @@ -633,7 +632,6 @@ confirm.running=Am Laufe ... confirm.lookupsrtm=Es sin %d H\u00f6henwerte gfunde confirm.downloadsrtm=Es sin %d Files abeglade confirm.downloadsrtm.1=Sisch %d File abeglade -confirm.downloadsrtm.none=Kei Files abeglade, die sin alli scho da gsi. confirm.deletefieldvalues=Feldw\u00e4rte gl\u00f6scht worde confirm.audioload=Audiofiles glade worde confirm.media.removed=entf\u00e4rnt @@ -644,7 +642,7 @@ confirm.correlateaudios.multi=Audiofiles sin korreliert worde tip.title=Tipp tip.useamapcache=Mit lokali Kartekachle (Iistellige -> Karten uufem Disk speichere)\nk\u00f6nnet Sie d Darstellig bschleunige und Netzwerkverkehr reduziere. tip.learntimeparams=Wenn Sie Track -> Ziitparameter erlerne mit Ihren Tracks benutze\ndann werdet d ber\u00e4chneti Werte gnauer. -tip.downloadsrtm=Sie k\u00f6nnet d Funktion beschleunige indem Sie\nOnline -> SRTM Files abalade uufrufe\num d Date lokal z'speichere. +tip.downloadsrtm=Sie k\u00f6nnet d Funktion beschluunige\nindem Sie Kartekachle lokal speichere\nund d H\u00f6chidate au d\u00f6t speichere. tip.usesrtmfor3d=Dere Track h\u00e4t kei H\u00f6chiinformation.\nSie k\u00f6nnet d SRTM Funktione verw\u00e4nde, um\nH\u00f6chiwerte abz'sch\u00e4tze. tip.manuallycorrelateone=Mit mindeschtens einem verbundenen Elem\u00e4nt chann die Ziitdiffer\u00e4nz automatisch ber\u00e4chnet werd\u00e4. diff --git a/src/tim/prune/lang/prune-texts_en.properties b/src/tim/prune/lang/prune-texts_en.properties index dbc4be4..ad0d8db 100644 --- a/src/tim/prune/lang/prune-texts_en.properties +++ b/src/tim/prune/lang/prune-texts_en.properties @@ -113,7 +113,6 @@ function.splitsegments=Split track into segments function.sewsegments=Sew track segments together function.createmarkerwaypoints=Create marker waypoints function.lookupsrtm=Get altitudes from SRTM -function.downloadsrtm=Download SRTM tiles function.getwikipedia=Get nearby Wikipedia articles function.searchwikipedianames=Search Wikipedia by name function.searchosmpois=Get nearby OSM points @@ -553,6 +552,7 @@ dialog.displaysettings.size.large=Large dialog.displaysettings.windowstyle=Window style (requires restart) dialog.displaysettings.windowstyle.default=Default dialog.displaysettings.windowstyle.nimbus=Nimbus +dialog.displaysettings.windowstyle.gtk=GTK dialog.downloadosm.desc=Confirm to download the raw OSM data for the specified area: dialog.searchwikipedianames.search=Search for: dialog.weather.location=Location @@ -641,7 +641,6 @@ confirm.running=Running ... confirm.lookupsrtm=Found %d altitude values confirm.downloadsrtm=Downloaded %d files to the cache confirm.downloadsrtm.1=Downloaded %d file to the cache -confirm.downloadsrtm.none=No files downloaded, they were already in the cache confirm.deletefieldvalues=Field values deleted confirm.audioload=Audio files added confirm.correlateaudios.single=audio was correlated @@ -651,7 +650,7 @@ confirm.correlateaudios.multi=audios were correlated tip.title=Tip tip.useamapcache=By setting up a disk cache (Settings -> Save maps to disk)\nyou can speed up the display and reduce network traffic. tip.learntimeparams=The results will be more accurate if you use\nTrack -> Learn time estimation parameters\non your recorded tracks. -tip.downloadsrtm=You can speed this up by calling\nOnline -> Download SRTM tiles\nto save the data in your map cache. +tip.downloadsrtm=You can speed this up by setting up a disk cache\nto save the SRTM data locally. tip.usesrtmfor3d=This track doesn't have altitudes.\nYou can use the SRTM functions to get approximate\naltitudes for the 3d view. tip.manuallycorrelateone=By manually connecting at least one item, the time offset can be calculated for you. diff --git a/src/tim/prune/lang/prune-texts_es.properties b/src/tim/prune/lang/prune-texts_es.properties index e4676f6..6d6b76e 100644 --- a/src/tim/prune/lang/prune-texts_es.properties +++ b/src/tim/prune/lang/prune-texts_es.properties @@ -12,7 +12,6 @@ menu.track=Track menu.track.undo=Deshacer menu.track.clearundo=Despejar la lista de deshacer menu.track.markrectangle=Marcar puntos dentro de un rect\u00e1ngulo -function.deletemarked=Eliminar puntos marcados menu.range=Rango menu.range.all=Seleccionar todo menu.range.none=No seleccionar nada @@ -36,9 +35,10 @@ menu.view.browser.openstreetmap=Openstreetmap menu.view.browser.mapquest=Mapquest menu.view.browser.yahoo=Mapas Yahoo menu.view.browser.bing=Mapas Bing +menu.view.browser.inlinemap=Mapa en l\u00ednea +menu.view.browser.graphhopper=GraphHopper menu.settings=Preferencias menu.settings.onlinemode=Cargar mapas de Internet -dialog.displaysettings.antialias=Usar antialiasing menu.settings.autosave=Auto Guardar menu.help=Ayuda @@ -87,6 +87,7 @@ function.exportpov=Exportar POV function.exportimage=Exportar imagen function.editwaypointname=Editar nombre de waypoint function.compress=Comprimir track +function.deletemarked=Eliminar puntos marcados function.marklifts=Marcar telef\u00e9ricos function.deleterange=Eliminar rango function.croptrack=Truncar track @@ -98,7 +99,9 @@ function.rearrangewaypoints=Reorganizar waypoints function.convertnamestotimes=Convertir los nombres de los "waypoints" a tiempo function.deletefieldvalues=Borrar valores del campo function.findwaypoint=Buscar waypoint -function.pastecoordinates=Insertar nuevas coordenadas +function.pastecoordinates=Insertar coordenadas de un nuevo punto +function.pastecoordinatelist=Ingrese lista de coordenadas +function.enterpluscode=Insertar c\u00f3digo plus function.charts=Diagramas function.show3d=Mostrar en 3-D function.distances=Distancias @@ -111,8 +114,8 @@ function.setpaths=Configurar rutas del programas function.selectsegment=Seleccionar segmento actual function.splitsegments=Segmentar el track function.sewsegments=Ensamblar los segmentos +function.createmarkerwaypoints=Crear waypoints marcadores function.lookupsrtm=Obtener altitudes de SRTM -function.downloadsrtm=Descargar datos de SRTM function.getwikipedia=Obtener art\u00edculos de Wikipedia cercanos function.searchwikipedianames=Buscar en Wikipedia por nombre function.searchosmpois=Buscar en OSM cercanos @@ -120,7 +123,9 @@ function.searchopencachingde=Buscar en OpenCaching.de function.mapillary=Buscar en Mapillary function.downloadosm=Descargar datos OSM del \u00e1rea function.duplicatepoint=Duplicar punto +function.projectpoint=Proyectar punto function.setcolours=Establecer color +function.setdisplaysettings=Establecer opciones para la visualizaci\u00f3n function.setlanguage=Establecer lenguaje function.connecttopoint=Conectar con punto function.disconnectfrompoint=Desconectar de punto @@ -145,6 +150,7 @@ function.diskcache=Guardar mapas en disco function.managetilecache=Administrar cache de mapas function.getweatherforecast=Obtener pron\u00f3stico del tiempo function.setaltitudetolerance=Establecer la tolerancia de altitud +function.selecttimezone=Seleccionar la zona horaria ## Dialogs dialog.exit.confirm.title=Salir de GpsPrune @@ -244,10 +250,6 @@ dialog.exportgpx.copysource=Copiar la fuente 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 @@ -268,6 +270,7 @@ dialog.baseimage.zoom=Zoom dialog.baseimage.incomplete=Imagen incompleta dialog.baseimage.tiles=Recuadros dialog.baseimage.size=Tama\u00f1o de la imagen +dialog.exportimage.noimagepossible=Las im\u00e1genes de mapas deben ser guardadas para poder usarlas para una exportaci\u00f3n. dialog.exportimage.drawtrack=Dibujar track dialog.exportimage.drawtrackpoints=Dibujar puntos del track dialog.exportimage.textscalepercent=Agrandamiento del texto (%) @@ -345,8 +348,11 @@ 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.estimatetime.error.nodistance=Las estimaciones de tiempo necesitan puntos de v\u00eda conectados, para dar una distancia dialog.estimatetime.error.noaltitudes=Los rangos seleccionados no contienen altitudes +dialog.learnestimationparams.intro=Estos son los par\u00e1metros calculados a partir del track dialog.learnestimationparams.averageerror=Error medio +dialog.learnestimationparams.combine=Estos par\u00e1metros se pueden combinar con los valores actuales dialog.learnestimationparams.combinedresults=Resultados combinados dialog.learnestimationparams.weight.100pccurrent=Mantener datos actuales dialog.learnestimationparams.weight.current=actuales @@ -407,8 +413,8 @@ dialog.correlate.timestamp.end=Final dialog.correlate.audioselect.intro=Seleccione uno de estos audios correlacionados para usarlo como margen temporal. dialog.correlate.select.audioname=Nombre del audio dialog.correlate.select.audiolater=Audio m\u00e1s adelante -dialog.rearrangephotos.desc=Seleccionar el destino y orden de los puntos de las fotos dialog.rearrangewaypoints.desc=Seleccionar el destino y orden de los waypoints +dialog.rearrangephotos.desc=Seleccionar el destino y orden de los puntos de las fotos dialog.rearrange.tostart=Mover al comienzo dialog.rearrange.toend=Mover al final dialog.rearrange.tonearest=Mover al punto m\u00e1s pr\u00f3ximo @@ -432,6 +438,10 @@ dialog.deletemarked.nonefound=Ning\u00fan punto eliminado dialog.pastecoordinates.desc=Ingresar o pegar las coordenadas aqu\u00ed dialog.pastecoordinates.coords=Coordenadas dialog.pastecoordinates.nothingfound=Por favor verificar las coordenadas e intentar nuevamente +dialog.pastecoordinatelist.desc=Introducir las coordenadas de los nuevos puntos con un punto por l\u00ednea +dialog.pluscode.desc=Introduzca o pegue el c\u00f3digo plus aqu\u00ed +dialog.pluscode.code=C\u00f3digo plus +dialog.pluscode.nothingfound=Por favor, compruebe el c\u00f3digo e int\u00e9ntelo de nuevo dialog.help.help=Por favor, ver\n https://gpsprune.activityworkshop.net/\npara m\u00e1s informaci\u00f3n y gu\u00edas del usuario. dialog.about.version=Versi\u00f3n dialog.about.build=Construcci\u00f3n @@ -530,12 +540,20 @@ dialog.diskcache.deleted=Borrado %d archivos del cache dialog.deletefieldvalues.intro=Seleccionar el campo a eliminar para el rango actual dialog.deletefieldvalues.nofields=No hay campos a eliminar para el rango actual dialog.displaysettings.linewidth=Anchura de las l\u00edneas para los recorridos (1-4) +dialog.displaysettings.antialias=Usar antialiasing dialog.displaysettings.waypointicons=Iconos de los waypoints +dialog.displaysettings.wpicon.default=Por defecto +dialog.displaysettings.wpicon.ringpt=Marcador redondeado dialog.displaysettings.wpicon.plectrum=Plectro dialog.displaysettings.wpicon.ring=Anillo +dialog.displaysettings.wpicon.pin=Chincheta dialog.displaysettings.size.small=Peque\u00f1os dialog.displaysettings.size.medium=Medianos dialog.displaysettings.size.large=Grandes +dialog.displaysettings.windowstyle=Estilo de la ventana +dialog.displaysettings.windowstyle.default=Por defecto +dialog.displaysettings.windowstyle.nimbus=Nimbus +dialog.displaysettings.windowstyle.gtk=GTK dialog.downloadosm.desc=Confirmar la descarga de datos en bruto de OSM para el \u00e1rea especificada. dialog.searchwikipedianames.search=Buscar: dialog.weather.location=Localidad @@ -559,17 +577,31 @@ dialog.weather.day.sunday=Domingo dialog.weather.wind=Viento dialog.weather.temp=Temp dialog.weather.humidity=Humedad +dialog.weather.creditnotice=Estos datos est\u00e1n disponibles en openweathermap.org. Su sitio web tiene m\u00e1s detalles. +dialog.deletebydate.onlyonedate=Todos los puntos se registraron en la misma fecha. +dialog.deletebydate.intro=Para cada fecha del track, puede elegir entre borrar o mantener los puntos dialog.deletebydate.nodate=Sin marcas de tiempo dialog.deletebydate.column.keep=Mantener dialog.deletebydate.column.delete=Eliminar dialog.setaltitudetolerance.text.metres=Limite (en metros) por debajo de cual peque\u00f1as subidas o bajadas ser\u00e1n ignoradas dialog.setaltitudetolerance.text.feet=Limite (en pies) por debajo de cual peque\u00f1as subidas o bajadas ser\u00e1n ignoradas +dialog.settimezone.intro=Aqu\u00ed se puede seleccionar la zona horaria para mostrar las marcas de tiempo de los puntos dialog.settimezone.system=Zona horaria del sistema +dialog.settimezone.custom=Usar la siguiente zona horaria: +dialog.settimezone.list.toomany=Demasiados por elegir +dialog.settimezone.selectedzone=Zona horaria seleccionada +dialog.settimezone.offsetfromutc=Compensaci\u00f3n respecto a UTC dialog.autoplay.duration=Duraci\u00f3n (seg) dialog.autoplay.usetimestamps=Usar informaci\u00f3n de tiempo dialog.autoplay.rewind=Rebobinar dialog.autoplay.pause=Pausar dialog.autoplay.play=Jugar +dialog.markers.halves=Puntos medios +dialog.markers.half.distance=Media distancia +dialog.markers.half.climb=Mitad de cuesta +dialog.markers.half.descent=Mitad de descenso +dialog.projectpoint.desc=Introduzca la direcci\u00f3n y la distancia para proyectar este punto +dialog.projectpoint.bearing=Azimut (grados desde el Norte) ## 3d window dialog.3d.title=GpsPrune vista 3-D @@ -617,6 +649,10 @@ confirm.correlateaudios.multi=Los audios fueron correlacionados ## Tips, shown just once when appropriate tip.title=Sugerencia +tip.useamapcache=Configurando una cach\u00e9 de disco (Preferencias -> Guardar mapas en disco)\npuede acelerar la visualizaci\u00f3n y reducir el tr\u00e1fico de la red. +tip.learntimeparams=Los resultados ser\u00e1n m\u00e1s precisos si utiliza\nTrack -> Aprender par\u00e1metros de estimaci\u00f3n de tiempo\nen sus pistas grabadas. +tip.downloadsrtm=Puede acelerar esto si guarda los datos en su cach\u00e9 de mapas. +tip.usesrtmfor3d=Esta pista no tiene altitudes.\nPuede utilizar las funciones del SRTM\npara obtener altitudes aproximadas para la vista 3d. tip.manuallycorrelateone=Correlacionando al menos una foto manualmente, el margen de tiempo se calcula autom\u00e1ticamente. ## Buttons @@ -730,6 +766,7 @@ fieldname.duration=Duraci\u00f3n fieldname.speed=Velocidad fieldname.verticalspeed=Velocidad vertical fieldname.description=Descripci\u00f3n +fieldname.comment=Comentario fieldname.mediafilename=Archivo ## Measurement units @@ -829,6 +866,7 @@ error.load.nopoints=No se encuentra ninguna informaci\u00f3n de coordenadas en e error.load.unknownxml=Formato xml no reconocido: error.load.noxmlinzip=No se encuentra ning\u00fan archivo xml en el archivo zip error.load.othererror=Fallo al cargar datos: +error.load.nopointsintext=No se encuentra ninguna informaci\u00f3n de coordenadas error.jpegload.dialogtitle=Error cargando fotos error.jpegload.nofilesfound=No se encuentra ning\u00fan archivo error.jpegload.nojpegsfound=No se encuentra ning\u00fan archivo jpeg @@ -856,32 +894,7 @@ 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.learnestimationparams.failed=No puede aprender los par\u00e1metros de esta pista.\nIntente cargar m\u00e1s pistas. 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. - -dialog.exportimage.noimagepossible=Las im\u00e1genes de mapas deben ser guardadas para poder usarlas para una exportaci\u00f3n. -dialog.estimatetime.error.nodistance=Las estimaciones de tiempo necesitan puntos de v\u00eda conectados, para dar una distancia -dialog.learnestimationparams.intro=Estos son los par\u00e1metros calculados a partir del track -dialog.learnestimationparams.combine=Estos par\u00e1metros se pueden combinar con los valores actuales -dialog.weather.creditnotice=Estos datos est\u00e1n disponibles en openweathermap.org. Su sitio web tiene m\u00e1s detalles. -dialog.deletebydate.onlyonedate=Todos los puntos se registraron en la misma fecha. -dialog.deletebydate.intro=Para cada fecha del track, puede elegir entre borrar o mantener los puntos -confirm.downloadsrtm.none=No se descargaron archivos, ya estaban en la cache -tip.useamapcache=Configurando una cach\u00e9 de disco (Preferencias -> Guardar mapas en disco)\npuede acelerar la visualizaci\u00f3n y reducir el tr\u00e1fico de la red. -tip.learntimeparams=Los resultados ser\u00e1n m\u00e1s precisos si utiliza\nTrack -> Aprender par\u00e1metros de estimaci\u00f3n de tiempo\nen sus pistas grabadas. -tip.downloadsrtm=Puede acelerar esto si llama a\nOnline -> Descargar datos de SRTM\npara guardar los datos en su cach\u00e9 de mapas. -tip.usesrtmfor3d=Esta pista no tiene altitudes.\nPuede utilizar las funciones del SRTM\npara obtener altitudes aproximadas para la vista 3d. -error.learnestimationparams.failed=No puede aprender los par\u00e1metros de esta pista.\nIntente cargar m\u00e1s pistas. -function.enterpluscode=Insertar c\u00f3digo plus -function.projectpoint=Proyectar punto -dialog.pastecoordinatelist.desc=Introducir las coordenadas de los nuevos puntos con un punto por l\u00ednea -dialog.pluscode.desc=Introduzca o pegue el c\u00f3digo plus aqu\u00ed -dialog.pluscode.code=C\u00f3digo plus -dialog.pluscode.nothingfound=Por favor, compruebe el c\u00f3digo e int\u00e9ntelo de nuevo -dialog.displaysettings.windowstyle=Estilo de la ventana -dialog.projectpoint.desc=Introduzca la direcci\u00f3n y la distancia para proyectar este punto -dialog.projectpoint.bearing=Azimut (grados desde el Norte) -fieldname.comment=Comentario -dialog.settimezone.selectedzone=Zona horaria seleccionada -function.selecttimezone=Seleccionar la zona horaria diff --git a/src/tim/prune/lang/prune-texts_fi.properties b/src/tim/prune/lang/prune-texts_fi.properties index 8b54aa6..226a84b 100644 --- a/src/tim/prune/lang/prune-texts_fi.properties +++ b/src/tim/prune/lang/prune-texts_fi.properties @@ -108,7 +108,6 @@ function.splitsegments=Pilko reitti lohkoihin function.sewsegments=Yhdist\u00e4 reittilohkot function.createmarkerwaypoints=Luo merkityt kohdepisteet function.lookupsrtm=Lue korkeysk\u00e4yr\u00e4t SRTM:st\u00e4 -function.downloadsrtm=Lataa SRTM-palat function.getwikipedia=Hae likeiset Wikipedia-artikkelit function.searchwikipedianames=Etsi nimell\u00e4 Wikipedia:sta... function.searchosmpois=Etsi l\u00e4heiset OSM-pisteet @@ -596,7 +595,6 @@ confirm.running=Running ... confirm.lookupsrtm=L\u00f6ytyi %d korkeusarvoa confirm.downloadsrtm=Ladattu %d tiedostoa v\u00e4limuistiin confirm.downloadsrtm.1=Ladattu %d tiedosto v\u00e4limuistiin -confirm.downloadsrtm.none=Tiedostoja ei ladattu, koska ne olivat jo v\u00e4limuistissa confirm.deletefieldvalues=Kentt\u00e4arvot poistettu confirm.audioload=\u00c4\u00e4nitiedostot lis\u00e4tty confirm.correlateaudios.single=\u00e4\u00e4ni oli korreloitu @@ -606,7 +604,6 @@ confirm.correlateaudios.multi=\u00e4\u00e4net olivat korreloidut tip.title=Vihje tip.useamapcache=Jos tallennutat karttapalat v\u00e4limuistina toimivaan hakemistoon levylle\n Valikko: Asetukset -> Talleta kartat hakemistoon,\nn\u00e4yt\u00f6n toiminta nopeutuu ja verkkoliikenne v\u00e4hentyy. tip.learntimeparams=Tuloset voivat olla tarkempia, jos suoritutat toiminnon\n Valikko: Reitti -> Opi aika-arvion parametrit\ntallentamillesi reiteille. -tip.downloadsrtm=Voit nopeututtaa t\u00e4t\u00e4 suorituttamalla toiminnon\n Valikko: Online -> Lataa SRTM-palat\nkarttojen v\u00e4limuistihakemistoon. tip.usesrtmfor3d=T\u00e4ss\u00e4 reitiss\u00e4 ei ole korkeustietoja.\nVoit k\u00e4ytt\u00e4\u00e4 SRTM-toimintoja saadaksesi likim\u00e4\u00e4r\u00e4iset\nkorkeusarvot 3D-n\u00e4kym\u00e4\u00e4 varten. tip.manuallycorrelateone=Jos korjaat v\u00e4hint\u00e4\u00e4n yhden kohteen aikatiedot, ohjelma voi laskea aikapoikkeamat puolestasi. diff --git a/src/tim/prune/lang/prune-texts_fr.properties b/src/tim/prune/lang/prune-texts_fr.properties index 9c0f85a..26981e4 100644 --- a/src/tim/prune/lang/prune-texts_fr.properties +++ b/src/tim/prune/lang/prune-texts_fr.properties @@ -86,6 +86,7 @@ function.exportpov=Exporter en POV function.exportimage=Exporter une image function.editwaypointname=\u00c9diter le nom du point function.compress=Compresser la trace +function.marklifts=Marquer les remont\u00e9es m\u00e9caniques function.deleterange=Supprimer l'\u00e9tendue function.croptrack=Recadrer l'\u00e9tendue function.interpolate=Interpoler les points @@ -109,17 +110,17 @@ function.autoplay=Jouer la trace function.selectsegment=S\u00e9lectionner le segment courant function.splitsegments=S\u00e9pare les segments function.sewsegments=R\u00e9unis les segments +function.createmarkerwaypoints=Cr\u00e9ation de points de rep\u00e8re function.lookupsrtm=R\u00e9cup\u00e9rer les altitudes depuis SRTM -function.downloadsrtm=T\u00e9l\u00e9charger les donn\u00e9es SRTM function.getwikipedia=Obtenir les articles de Wikip\u00e9dia \u00e0 proximit\u00e9 function.searchwikipedianames=Rechercher dans Wikip\u00e9dia par nom -function.searchosmpois=Rechercher dans OSM \u00e0 proximit\u00e9 +function.searchosmpois=Rechercher de marques OSM \u00e0 proximit\u00e9 function.searchopencachingde=Rechercher dans OpenCaching.de function.mapillary=Rechercher dans Mapillary function.downloadosm=T\u00e9l\u00e9charger les donn\u00e9es OSM de la zone function.duplicatepoint=Dupliquer le point function.setcolours=Choisir les couleurs -function.setdisplaysettings=Pr\u00e9f\u00e9rences graphiques +function.setdisplaysettings=Pr\u00e9f\u00e9rences d'affichage function.setlanguage=Choisir la langue function.connecttopoint=Relier au point function.disconnectfrompoint=D\u00e9tacher du point @@ -431,7 +432,7 @@ dialog.about.summarytext1=GpsPrune est un programme pour charger, afficher et \u dialog.about.summarytext2=Distribu\u00e9 sous license Gnu GPL pour un usage et une am\u00e9lioration libres, ouverts et mondiaux.
La copie, la redistribution et la modification sont autoris\u00e9es et encourag\u00e9es
selon les conditions d\u00e9taill\u00e9es dans le fichier license.txt inclus. dialog.about.summarytext3=Consultez la page https://activityworkshop.net/ pour plus de d\u00e9tails et des manuels utilisateur. dialog.about.languages=Langues disponibles -dialog.about.translatedby=Texte en fran\u00e7ais par Petrovsk, theYinYeti, R\u00e9mi et jmr. +dialog.about.translatedby=Texte en fran\u00e7ais par Petrovsk, theYinYeti, R\u00e9mi, jmr et Tche333. dialog.about.systeminfo=Info Syst\u00e8me dialog.about.systeminfo.os=Syst\u00e8me d'exploitation dialog.about.systeminfo.java=Java Runtime @@ -598,7 +599,6 @@ confirm.running=En cours... confirm.lookupsrtm=Trouv\u00e9 %d valeurs d'altitude confirm.downloadsrtm=%d fichiers ont \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9s confirm.downloadsrtm.1=%d fichier a \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9 -confirm.downloadsrtm.none=Pas de fichiers ont \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9s, ils sont d\u00e9j\u00e0 l\u00e0 confirm.deletefieldvalues=Valeurs effac\u00e9es confirm.audioload=Fichiers audio ajout\u00e9s confirm.correlateaudios.single=fichier audio a \u00e9t\u00e9 corr\u00e9l\u00e9 @@ -608,7 +608,6 @@ confirm.correlateaudios.multi=fichiers audio ont \u00e9t\u00e9 corr\u00e9l\u00e9 tip.title=Astuce tip.useamapcache=By setting up a disk cache (Pr\u00e9f\u00e9rences -> Enregistrer les cartes sur le disque)\nyou can speed up the display and reduce network traffic. tip.learntimeparams=The results will be more accurate if you use\nTrace -> Apprentissage de l'estimation\non your recorded tracks. -tip.downloadsrtm=You can speed this up by calling\nEn ligne -> T\u00e9l\u00e9charger les donn\u00e9es SRTM\nto save the data in your map cache. tip.manuallycorrelateone=En corr\u00e9lant manuellement au moins une photo, le d\u00e9calage de temps peut \u00eatre calcul\u00e9 pour vous. # Buttons diff --git a/src/tim/prune/lang/prune-texts_hu.properties b/src/tim/prune/lang/prune-texts_hu.properties index 021db53..8239865 100644 --- a/src/tim/prune/lang/prune-texts_hu.properties +++ b/src/tim/prune/lang/prune-texts_hu.properties @@ -35,6 +35,8 @@ menu.view.browser.openstreetmap=OpenStreetMap menu.view.browser.mapquest=Mapquest menu.view.browser.yahoo=Yahoo! Maps menu.view.browser.bing=Bing Maps +menu.view.browser.inlinemap=Inlinemap.net +menu.view.browser.graphhopper=GraphHopper menu.settings=Be\u00e1ll\u00edt\u00e1sok menu.settings.onlinemode=T\u00e9rk\u00e9pek bet\u00f6lt\u00e9se internetr\u0151l menu.settings.autosave=Be\u00e1ll\u00edt\u00e1sok automatikus ment\u00e9se kil\u00e9p\u00e9skor @@ -71,6 +73,7 @@ shortcut.menu.file.save=S shortcut.menu.track.undo=Z shortcut.menu.track.compress=C shortcut.menu.range.all=A +shortcut.menu.point.edit=E shortcut.menu.help.help=H # Functions @@ -97,9 +100,12 @@ function.convertnamestotimes=\u00datpontok neveinek konvert\u00e1l\u00e1sa id\u0 function.deletefieldvalues=Mez\u0151 \u00e9rt\u00e9keinek t\u00f6rl\u00e9se function.findwaypoint=\u00datpont keres\u00e9se function.pastecoordinates=\u00daj koordin\u00e1t\u00e1k megad\u00e1sa +function.pastecoordinatelist=Adja meg a koordin\u00e1t\u00e1k list\u00e1j\u00e1t +function.enterpluscode=Pluszk\u00f3d megad\u00e1sa function.charts=Diagramok function.show3d=3D n\u00e9zet function.distances=T\u00e1vols\u00e1gok +function.viewfulldetails=\u00d6sszes r\u00e9szlet function.estimatetime=Becs\u00fclt id\u0151 function.learnestimationparams=Id\u0151becsl\u00e9s tanul\u00e1s\u00e1nak param\u00e9terei function.autoplay=Nyomvonal lej\u00e1tsz\u00e1sa @@ -118,6 +124,7 @@ function.searchopencachingde=Keres\u00e9s az OpenCaching.de-n function.mapillary=F\u00e9nyk\u00e9pek keres\u00e9se Mapillary-n function.downloadosm=OSM adatok let\u00f6lt\u00e9se a ter\u00fcletr\u0151l function.duplicatepoint=Pont kett\u0151z\u00e9se +function.projectpoint=Pont vet\u00edt\u00e9se function.setcolours=Sz\u00ednek be\u00e1ll\u00edt\u00e1sa function.setdisplaysettings=Megjelen\u00edt\u00e9s be\u00e1ll\u00edt\u00e1sa function.setlanguage=Nyelv be\u00e1ll\u00edt\u00e1sa @@ -431,6 +438,10 @@ dialog.deletemarked.nonefound=Nem t\u00e1vol\u00edthat\u00f3 el adatpont dialog.pastecoordinates.desc=Adja meg vagy illessze be a koordin\u00e1t\u00e1kat ide dialog.pastecoordinates.coords=Koordin\u00e1t\u00e1k dialog.pastecoordinates.nothingfound=Ellen\u0151rizze a koordin\u00e1t\u00e1kat, \u00e9s pr\u00f3b\u00e1lja \u00fajra +dialog.pastecoordinatelist.desc=Adja meg az \u00faj pontok koordin\u00e1t\u00e1it, soronk\u00e9nt egy pont\u00e9t +dialog.pluscode.desc=Adja meg, vagy m\u00e1soja ide a pluszk\u00f3dot +dialog.pluscode.code=Pluszk\u00f3d +dialog.pluscode.nothingfound=Ellen\u0151rizze a k\u00f3dot, vagy pr\u00f3b\u00e1lja \u00fajra dialog.help.help=Tov\u00e1bbi inform\u00e1ci\u00f3k\u00e9rt \u00e9s kezel\u00e9si \u00fatmutat\u00f3\u00e9rt l\u00e1sd a \n https://gpsprune.activityworkshop.net/\nwebhelyet. dialog.about.version=Verzi\u00f3 dialog.about.build=Build @@ -539,6 +550,10 @@ dialog.displaysettings.wpicon.pin=Gombost\u0171 dialog.displaysettings.size.small=Kicsi dialog.displaysettings.size.medium=K\u00f6zepes dialog.displaysettings.size.large=Nagy +dialog.displaysettings.windowstyle=Ablak st\u00edlus (\u00fajraind\u00edt\u00e1st ig\u00e9nyel) +dialog.displaysettings.windowstyle.default=Alap\u00e9rtelmezett +dialog.displaysettings.windowstyle.nimbus=Nimbus +dialog.displaysettings.windowstyle.gtk=GTK dialog.downloadosm.desc=Nyers OSM adatok let\u00f6lt\u00e9s\u00e9nek meger\u0151s\u00edt\u00e9se a megadott ter\u00fcletre: dialog.searchwikipedianames.search=Keres\u00e9s erre: dialog.weather.location=Helysz\u00edn @@ -574,11 +589,19 @@ dialog.settimezone.intro=Kiv\u00e1laszthatja, hogy az \u00fatvonalpontok id\u015 dialog.settimezone.system=Rendszer id\u0151z\u00f3na haszn\u00e1lata dialog.settimezone.custom=Az al\u00e1bbi id\u0151z\u00f3na haszn\u00e1lata dialog.settimezone.list.toomany=T\u00fal sok lehet\u0151s\u00e9g +dialog.settimezone.selectedzone=Kiv\u00e1lasztott id\u0151z\u00f3na +dialog.settimezone.offsetfromutc=Elt\u00e9r\u00e9s az UTC-t\u0151l dialog.autoplay.duration=Id\u0151tartam (mp) dialog.autoplay.usetimestamps=Nyompontok id\u0151b\u00e9lyege alapj\u00e1n dialog.autoplay.rewind=Vissza az elej\u00e9re dialog.autoplay.pause=Sz\u00fcnet dialog.autoplay.play=Lej\u00e1tsz\u00e1s +dialog.markers.halves=F\u00e9l\u00fat pontok +dialog.markers.half.distance=F\u00e9lt\u00e1v +dialog.markers.half.climb=F\u00e9l\u00fat a m\u00e1sz\u00e1sban +dialog.markers.half.descent=F\u00e9l\u00fat az ereszked\u00e9sben +dialog.projectpoint.desc=A pont vet\u00edt\u00e9s\u00e9hez adjon meg egy ir\u00e1nyt \u00e9s t\u00e1vols\u00e1got +dialog.projectpoint.bearing=Ir\u00e1nysz\u00f6g (fok \u00e9szakt\u00f3l) # 3d window dialog.3d.title=GpsPrune 3D n\u00e9zet @@ -729,6 +752,7 @@ map.overzoom=Nem \u00e9rhet\u0151 el t\u00e9rk\u00e9p ezen a nagy\u00edt\u00e1si # Field names fieldname.latitude=Sz\u00e9less\u00e9g fieldname.longitude=Hossz\u00fas\u00e1g +fieldname.coordinates=Koordin\u00e1t\u00e1k fieldname.altitude=Magass\u00e1g fieldname.timestamp=Id\u0151 fieldname.time=Id\u0151 @@ -743,6 +767,7 @@ fieldname.duration=Id\u0151tartam fieldname.speed=Sebess\u00e9g fieldname.verticalspeed=F\u00fcgg\u0151leges sebess\u00e9g fieldname.description=Le\u00edr\u00e1s +fieldname.comment=Megjegyz\u00e9s fieldname.mediafilename=F\u00e1jln\u00e9v # Measurement units @@ -842,6 +867,7 @@ error.load.nopoints=Nem tal\u00e1lhat\u00f3 koordin\u00e1tainform\u00e1ci\u00f3 error.load.unknownxml=Ismeretlen xml form\u00e1tum: error.load.noxmlinzip=Nem tal\u00e1lhat\u00f3 xml f\u00e1jl a zip f\u00e1jlon bel\u00fcl error.load.othererror=Hiba a f\u00e1jl olvas\u00e1sa sor\u00e1n: +error.load.nopointsintext=Nincs benne koordin\u00e1ta inform\u00e1ci\u00f3 error.jpegload.dialogtitle=Hiba a k\u00e9pek bet\u00f6lt\u00e9sekor error.jpegload.nofilesfound=Nem tal\u00e1lhat\u00f3 f\u00e1jl error.jpegload.nojpegsfound=Nem tal\u00e1lhat\u00f3 jpeg f\u00e1jl diff --git a/src/tim/prune/lang/prune-texts_it.properties b/src/tim/prune/lang/prune-texts_it.properties index bc5a7b3..2e7b3aa 100644 --- a/src/tim/prune/lang/prune-texts_it.properties +++ b/src/tim/prune/lang/prune-texts_it.properties @@ -113,7 +113,6 @@ function.splitsegments=Dividi traccia in segmenti function.sewsegments=Riorganizza segmenti insieme function.createmarkerwaypoints=Crea marcatori function.lookupsrtm=Ottieni quote da SRTM -function.downloadsrtm=Scarica file da SRTM function.getwikipedia=Ottieni i punti Wikipedia nelle vicinanze function.searchwikipedianames=Cerca il nome in Wikipedia function.searchosmpois=Ottieni i punti OSM nelle vicinanze @@ -638,7 +637,6 @@ confirm.running=Operazione in corso... confirm.lookupsrtm=Trovato %d valori di quota confirm.downloadsrtm=Scarica %d file nella cache confirm.downloadsrtm.1=Scarica %d file nella cache -confirm.downloadsrtm.none=Nessun file scaricato, erano gi\u00e0 presenti nella cache confirm.deletefieldvalues=Valori del campo cancellati confirm.audioload=Ripresa audio aggiunta confirm.correlateaudios.single=la ripresa audio era correlata @@ -648,7 +646,7 @@ confirm.correlateaudios.multi=le riprese audio erano correlate 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.downloadsrtm=Puoi accelerare questa funzione 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 diff --git a/src/tim/prune/lang/prune-texts_nl.properties b/src/tim/prune/lang/prune-texts_nl.properties index cde8d6e..c757ccf 100644 --- a/src/tim/prune/lang/prune-texts_nl.properties +++ b/src/tim/prune/lang/prune-texts_nl.properties @@ -116,7 +116,6 @@ function.splitsegments=Splits route in segmenten function.sewsegments=Voeg segmenten samen function.createmarkerwaypoints=aak waypoints voor markering function.lookupsrtm=Hoogtes van SRTM ophalen -function.downloadsrtm=Downloaden SRTM tegels function.getwikipedia=Wikipedia artikelen uit de buurt ophalen function.searchwikipedianames=Wikipedia zoeken op naam function.searchosmpois=Haal nabije OSM punten op @@ -641,7 +640,6 @@ confirm.running=Bezig... confirm.lookupsrtm=Gevonden %d hoote waarden confirm.downloadsrtm=Er zijn %d bestanden gedownload nar de cache confirm.downloadsrtm.1=Er zijn %d bestanden gedownload nar de cache -confirm.downloadsrtm.none=Geen bestanden gedownload, waren al aanwezig in de cache. confirm.deletefieldvalues=Veldwaarden gewist confirm.audioload=Audiobestanden toegevoegd confirm.correlateaudios.single=audiobestand gecorreleerd @@ -651,7 +649,7 @@ confirm.correlateaudios.multi=audiobestanden gecorreleerd tip.title=Tip tip.useamapcache=Door het instellen van een schijfcache (Instellingen -> Kaart opslaan op schijf)\nkan je de afbeeldsnelheid verbeteren en het netwerkverkeer verminderen. tip.learntimeparams=De resultaten zullen nauwkeuriger zijn als je \nRoute -> Parameters voor geschatte tijd\ngebruikt op je opgenomen routes. -tip.downloadsrtm=Je kan dit versnellen door hier\nOnline -> Download SRTM tegels\nde data in je kaartcache op te slaan. +tip.downloadsrtm=Je kan dit versnellen door de data in je kaartcache op te slaan. tip.usesrtmfor3d=Deze route heeft geen hoogten.\nJe kan de SRTM functies gebruiken om een geschatte hoogte\nop te halen voor het 3d beeld. tip.manuallycorrelateone=Door handmatig een foto te koppelen kan het tijdsverschil voor u berekend worden. diff --git a/src/tim/prune/lang/prune-texts_no.properties b/src/tim/prune/lang/prune-texts_no.properties index 86aac6f..b83cc0c 100644 --- a/src/tim/prune/lang/prune-texts_no.properties +++ b/src/tim/prune/lang/prune-texts_no.properties @@ -7,8 +7,6 @@ menu.file.addphotos=Legg til bilder menu.file.recentfiles=Nyeste filer menu.file.save=Lagre som tekst menu.file.exit=Avslutt -menu.online= -menu.track= menu.track.undo=Angre menu.track.clearundo=Nullstill angreliste menu.track.markrectangle=Marker punkter i rektangel @@ -54,7 +52,6 @@ menu.map.editmode=Redigeringsmodus # Alt keys for menus altkey.menu.file=F -altkey.menu.online= altkey.menu.track=S altkey.menu.range=I altkey.menu.point=P @@ -66,7 +63,6 @@ altkey.menu.help=H # Ctrl shortcuts for menu items shortcut.menu.file.open=\u00c5 -shortcut.menu.file.load= shortcut.menu.file.save=L shortcut.menu.track.undo=g shortcut.menu.track.compress=K @@ -82,16 +78,13 @@ function.sendtogps=Overf\u00f8r data til GPS function.exportkml=Eksporter KML function.exportgpx=Eksporter GPX function.exportpov=Eksporter POV -function.exportimage= function.editwaypointname=Endre waypoint-navn function.compress=Komprimer spor function.deleterange=Fjern valgt intervall function.croptrack=Beskj\u00e6r sporet function.interpolate=Interpoler punkter -function.deletebydate= function.addtimeoffset=Legg til tidsinkrement function.addaltitudeoffset=Legg til h\u00f8ideinkrement -function.rearrangewaypoints= function.convertnamestotimes=Les waypoint-navn som tidspunkter function.deletefieldvalues=Slett feltets verdier function.findwaypoint=Finn waypoint @@ -100,18 +93,11 @@ function.charts=Grafer function.show3d=3-D visning function.distances=Avstander function.viewfulldetails=Vis alle detaljer -function.estimatetime= -function.learnestimationparams= function.setmapbg=Velg grunnlagskart function.setpaths=Angi plassering av programmer -function.selectsegment= -function.splitsegments= -function.sewsegments= function.lookupsrtm=Hent h\u00f8yde fra SRTM -function.downloadsrtm= function.getwikipedia=Vis Wikipedia info for omegn function.searchwikipedianames=S\u00f8k Wikipedia -function.searchopencachingde= function.downloadosm=Last ned OSM data for omr\u00e5det function.duplicatepoint=Dupliser punkt function.setcolours=Velg farger diff --git a/src/tim/prune/lang/prune-texts_pl.properties b/src/tim/prune/lang/prune-texts_pl.properties index d3b72e7..75bfc80 100644 --- a/src/tim/prune/lang/prune-texts_pl.properties +++ b/src/tim/prune/lang/prune-texts_pl.properties @@ -111,7 +111,6 @@ function.splitsegments=Podziel \u015bcie\u017ck\u0119 na fragmenty function.sewsegments=Po\u0142\u0105cz fragmenty function.createmarkerwaypoints=Stw\u00f3rz markery podzia\u0142u function.lookupsrtm=Pobierz wysoko\u015bci z SRTM -function.downloadsrtm=Zapisz dane z SRTM function.getwikipedia=Szukaj w Wikipedii o okolicy function.searchwikipedianames=Szukaj nazwy w Wikipedii function.searchopencachingde=Szukaj w OpenCaching.de @@ -608,7 +607,6 @@ confirm.running=Przetwarzam dane ... confirm.lookupsrtm=Znaleziono %d warto\u015bci wysoko\u015bci confirm.downloadsrtm=Pobrano %d plik\u00f3w do kesza confirm.downloadsrtm.1=Pobrano %d plik do kesza -confirm.downloadsrtm.none=Nie pobrano \u017cadnych plik\u00f3w, wszystkie by\u0142y ju\u017c w keszu confirm.deletefieldvalues=Warto\u015bci p\u00f3l usuni\u0119to confirm.audioload=dodano pliki audio confirm.correlateaudios.single=audio zosta\u0142o po\u0142\u0105czone @@ -618,7 +616,7 @@ confirm.correlateaudios.multi=audio zosta\u0142y po\u0142\u0105czone tip.title=Porada tip.useamapcache=Konfiguruj\u0105c kesz dyskowy (Ustawienia -> Zapisz mapy na dysk)\nprzyspieszasz wy\u015bwietlanie i ograniczasz ruch sieciowy tip.learntimeparams=Resultat b\u0119dzie dok\u0142adniejszy je\u015bli u\u017cyjesz -tip.downloadsrtm=Mo\u017cesz przyspieszy\u0107 operacj\u0119 wywo\u0142uj\u0105c polecenie +tip.downloadsrtm=Mo\u017cesz przyspieszy\u0107 operacj\u0119 konfiguruj\u0105c kesz dyskowy tip.usesrtmfor3d=\u015acie\u017cka nie zawiera danych o wysoko\u015bciach\nMo\u017cesz u\u017cy\u0107 funkcji SRTM by pobrac przybli\u017cone dane\no wysko\u015bciach w trybie widoku 3D. tip.manuallycorrelateone=Gdy powi\u0105\u017cesz r\u0119cznie przynajmniej jedno zdj\u0119cie, r\u00f3\u017cnica czasowa zostanie policzona automatycznie. @@ -718,6 +716,7 @@ map.overzoom=Brak map dla danego powi\u0119kszenia # Field names fieldname.latitude=Szeroko\u015b\u0107 fieldname.longitude=D\u0142ugo\u015b\u0107 +fieldname.coordinates=Wsp\u00f3\u0142rz\u0119dne fieldname.altitude=Wysoko\u015b\u0107 fieldname.timestamp=Czas fieldname.time=Czas @@ -732,6 +731,7 @@ fieldname.duration=Czas trwania fieldname.speed=Pr\u0119dko\u015b\u0107 fieldname.verticalspeed=Pr\u0119dko\u015b\u0107 pionowa fieldname.description=Opis +fieldname.comment=Komentarz fieldname.mediafilename=Nazwa pliku # Measurement units diff --git a/src/tim/prune/lang/prune-texts_pt.properties b/src/tim/prune/lang/prune-texts_pt.properties index fd785bf..55f60fa 100644 --- a/src/tim/prune/lang/prune-texts_pt.properties +++ b/src/tim/prune/lang/prune-texts_pt.properties @@ -108,7 +108,6 @@ function.selectsegment=Selecionar segmento atual function.splitsegments=Dividir rota em segmentos function.sewsegments=Reunir segmentos em rota function.lookupsrtm=Obter altitudes a partir do SRTM -function.downloadsrtm=Baixar arquivos SRTM function.getwikipedia=Obter artigos da Wikip\u00e9dia das redondezas function.searchwikipedianames=Procurar na Wikip\u00e9dia por nome function.searchopencachingde=Procurar na OpenCaching.de @@ -575,7 +574,6 @@ confirm.running=Rodando... confirm.lookupsrtm=Encontrado %d valores de altitude confirm.downloadsrtm=%d arquivos baixados para a cache confirm.downloadsrtm.1=%d arquivo baixados para a cache -confirm.downloadsrtm.none=Nenhum arquivo baixado, pois j\u00e1 est\u00e3o na cache. confirm.deletefieldvalues=Valores do campo removidos confirm.audioload=Arquivos de \u00e1udio adicionados confirm.correlateaudios.single=\u00e1udio foi correlacionado @@ -585,7 +583,6 @@ confirm.correlateaudios.multi=\u00e1udios foram correlacionados tip.title=Dica tip.useamapcache=Configurando a cache de disco (Configura\u00e7\u00f5es -> Salvar mapas para disco)\nvoc\u00ea pode acelerar a exibi\u00e7\u00e3o e reduzir o tr\u00e1fego de rede. tip.learntimeparams=Os resultados ser\u00e3o mais precisos se voc\u00ea usar\nRota -> Aprender os par\u00e2metros para estimativa de tempo\nde suas rotas gravadas. -tip.downloadsrtm=Voc\u00ea pode acelerar chamando\nOnline -> Baixar ladrilhos SRTM\npara obter as altitudes\naproximadas para a vis\u00e3o 3D. tip.usesrtmfor3d=Esta rota n\u00e3o possui altitudes.\nVoc\u00ea pode usar as fun\u00e7\u00f5es SRTM para obter as altitudes\naproximadas para a vis\u00e3o 3D. tip.manuallycorrelateone=Correlacionando pelo menos uma foto manualmente, a diferen\u00e7a de tempo pode ser calculada para voc\u00ea. diff --git a/src/tim/prune/lang/prune-texts_ro.properties b/src/tim/prune/lang/prune-texts_ro.properties index 70ceab6..e3a5610 100644 --- a/src/tim/prune/lang/prune-texts_ro.properties +++ b/src/tim/prune/lang/prune-texts_ro.properties @@ -39,6 +39,12 @@ menu.view.browser.bing=Harta Bing menu.settings=Set\u0103ri menu.settings.onlinemode=\u00cencarc\u0103 h\u0103r\u021bi dialog.displaysettings.antialias=Folose\u0219te antialiasing +dialog.displaysettings.wpicon.plectrum=Plectru +dialog.displaysettings.wpicon.ring=Inel +dialog.displaysettings.size.small=Mic +dialog.displaysettings.size.medium=Mediu +dialog.displaysettings.size.large=Mare +dialog.displaysettings.windowstyle=Stilul ferestrei (este necesar\u0103 o repornire) menu.settings.autosave=Salveaz\u0103 set\u0103rile automat la ie\u0219ire menu.help=Ajutor @@ -99,6 +105,7 @@ function.convertnamestotimes=Converte\u0219te numele waypoint-urilor \u00een tim function.deletefieldvalues=\u0218terge valorile c\u00e2mpurilor function.findwaypoint=G\u0103se\u0219te waypoint function.pastecoordinates=Introdu coordonate noi +function.pastecoordinatelist=Introdu o list\u0103 de coordonate function.charts=Grafice function.show3d=Vizualizare 3D function.distances=Distan\u0163e @@ -112,7 +119,6 @@ function.selectsegment=Selecteaz\u0103 segment curent function.splitsegments=Divizeaz\u0103 traseul \u00een segmente function.sewsegments=Combin\u0103 segmentele traseului function.lookupsrtm=Descarc\u0103 date SRTM \u00een cache -function.downloadsrtm=Descarc\u0103 date SRTM function.getwikipedia=Caut\u0103 articole Wikipedia din proximitate function.searchwikipedianames=Caut\u0103 Wikipedia dup\u0103 nume function.searchopencachingde=Caut\u0103 OpenCaching.de @@ -144,6 +150,7 @@ function.diskcache=Salvare harti function.managetilecache=Administreaz\u0103 imaginile salvate function.getweatherforecast=Prognoz\u0103 meteo function.setaltitudetolerance=Alege toleran\u021ba varia\u021biei altitudinii +function.selecttimezone=Selecta\u021Bi fusul orar # Dialogs dialog.exit.confirm.title=Ie\u015fire din programul GpsPrune @@ -601,7 +608,6 @@ confirm.running=Executare ... confirm.lookupsrtm=Au fost g\u0103site %d valori de altitudine confirm.downloadsrtm=S-au desc\u0103rcat %d fi\u015fiere confirm.downloadsrtm.1=S-au desc\u0103rcat %d fi\u015fier -confirm.downloadsrtm.none=Niciun fi\u0219ier nu a fost desc\u0103rcat, ele erau deja prezente \u00een cache confirm.deletefieldvalues=Valorile c\u00e2mpurilor au fost \u0219terse confirm.audioload=Fi\u0219iere audio au fost ad\u0103ugate confirm.correlateaudios.single=clipul audio a fost corelat @@ -611,7 +617,6 @@ confirm.correlateaudios.multi=clipurile audio au fost corelate tip.title=Indiciu tip.useamapcache=Prin configurarea unui cache pe disc (Set\u0103ri -> Salvare h\u0103r\u021bi)\npute\u021bi \u00eembun\u0103t\u0103\u021bi viteza de afi\u0219are \u0219i reduce traficul de re\u021bea tip.learntimeparams=Rezultatele vor fi mai corecte dac\u0103 folosi\u021bi\nTraseu -> \u00cenva\u021b\u0103 parametri pentru estim\u0103ri de timp\npe traseele deja \u00eenregistrate. -tip.downloadsrtm=Pute\u021bi \u00eembun\u0103t\u0103\u021bi viteza prin folosirea\nInternet -> Descarc\u0103 date SRTM tip.usesrtmfor3d=Acest traseu nu are valori de altitudine.\nPute\u021bi folosi func\u021biile SRTM pentru a aproxima altitudinile \u00een vederea 3D. tip.manuallycorrelateone=Decalajul de timp poate fi calculat dac\u0103 cel pu\u021bin un element e conectat. @@ -711,6 +716,7 @@ map.overzoom=Nu exist\u0103 h\u0103r\u021bi la acest nivel de apropiere # Field names fieldname.latitude=Latitudine fieldname.longitude=Longitudine +fieldname.coordinates=Coordonate fieldname.altitude=Altitudine fieldname.timestamp=Timp fieldname.time=Timp @@ -725,6 +731,7 @@ fieldname.duration=Durat\u0103 fieldname.speed=Vitez\u0103 fieldname.verticalspeed=Vitez\u0103 vertical\u0103 fieldname.description=Descriere +fieldname.comment=Comentariu fieldname.mediafilename=Fi\u0219ier # Measurement units diff --git a/src/tim/prune/lang/prune-texts_ru.properties b/src/tim/prune/lang/prune-texts_ru.properties index 6f99f0f..b1fe180 100644 --- a/src/tim/prune/lang/prune-texts_ru.properties +++ b/src/tim/prune/lang/prune-texts_ru.properties @@ -114,7 +114,6 @@ function.splitsegments=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u 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.createmarkerwaypoints=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0440\u043a\u0435\u0440\u044b \u043f\u0443\u0442\u0435\u0432\u044b\u0445 \u0442\u043e\u0447\u0435\u043a function.lookupsrtm=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443 \u0438\u0437 SRTM -function.downloadsrtm=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c SRTM-\u0442\u0430\u0439\u043b\u044b 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.searchosmpois=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 OSM @@ -439,6 +438,7 @@ dialog.pastecoordinates.coords=\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\ dialog.pastecoordinates.nothingfound=\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437 dialog.pastecoordinatelist.desc=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u0439 dialog.pluscode.desc=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u043b\u044e\u0441-\u043a\u043e\u0434 \u0437\u0434\u0435\u0441\u044c +dialog.pluscode.code=\u041f\u043b\u044e\u0441-\u043a\u043e\u0434 dialog.pluscode.nothingfound=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043a\u043e\u0434 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437 dialog.help.help=\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 \u0430\u0434\u0440\u0435\u0441\u0443\nhttps://gpsprune.activityworkshop.net/ dialog.about.version=\u0412\u0435\u0440\u0441\u0438\u044f @@ -638,7 +638,6 @@ 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\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\u0430 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 @@ -648,7 +647,7 @@ confirm.correlateaudios.multi=\u0417\u0432\u0443\u043a\u043e\u0437\u0430\u043f\u tip.title=\u0421\u043e\u0432\u0435\u0442 tip.useamapcache=\u041f\u0443\u0442\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u044d\u0448\u0430 \u0434\u0438\u0441\u043a\u0430 (\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -> \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u0434\u0438\u0441\u043a\u00bb)\n\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a. tip.learntimeparams=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u044b\u043c\u0438, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\n\u0422\u0440\u0435\u043a->\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\n\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u0430\u043c\u0438 \u0442\u0440\u0435\u043a\u0438. -tip.downloadsrtm=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e, \u0432\u044b\u0437\u043e\u0432\u043e\u043c\n\u041e\u043d\u043b\u0430\u0439\u043d-> \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c SRTM-\u0442\u0430\u0439\u043b\u044b\n\u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u044d\u0448\u0435 \u043a\u0430\u0440\u0442\u044b. +tip.downloadsrtm=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u044d\u0448\u0435 \u043a\u0430\u0440\u0442\u044b. tip.usesrtmfor3d=\u042d\u0442\u043e\u0442 \u0442\u0440\u0435\u043a \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u044b\u0441\u043e\u0442.\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SRTM, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442 \u0434\u043b\u044f \u0432\u0438\u0434\u0430 3D. tip.manuallycorrelateone=\u041f\u0440\u0438 \u0440\u0443\u0447\u043d\u043e\u043c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043c\u0435\u0442\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. diff --git a/src/tim/prune/lang/prune-texts_sv.properties b/src/tim/prune/lang/prune-texts_sv.properties index e2115aa..f7ed52e 100644 --- a/src/tim/prune/lang/prune-texts_sv.properties +++ b/src/tim/prune/lang/prune-texts_sv.properties @@ -1,5 +1,5 @@ # Text entries for the GpsPrune application -# Swedish entries +# Swedish entries thanks to erikiiofph7 # Menu entries menu.file=Arkiv @@ -17,7 +17,7 @@ menu.range.all=V\u00e4lj alla menu.range.none=V\u00e4lj ingen 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.average=Skapa medelv\u00e4rdespunkt menu.range.reverse=V\u00e4nd intervall menu.range.mergetracksegments=Sl\u00e5 ihop sp\u00e5rsegment menu.range.cutandmove=Klipp och flytta urval @@ -35,6 +35,8 @@ menu.view.browser.openstreetmap=Openstreetmap menu.view.browser.mapquest=Mapquest menu.view.browser.yahoo=Yahoo maps menu.view.browser.bing=Bing maps +menu.view.browser.inlinemap=Inline map +menu.view.browser.graphhopper=GraphHopper menu.settings=Inst\u00e4llningar menu.settings.onlinemode=H\u00e4mta kartor fr\u00e5n Internet menu.settings.autosave=Autospara inst\u00e4llningar vid avslut @@ -71,6 +73,7 @@ shortcut.menu.file.save=S shortcut.menu.track.undo=Z shortcut.menu.track.compress=K shortcut.menu.range.all=A +shortcut.menu.point.edit=E shortcut.menu.help.help=H # Functions @@ -96,13 +99,16 @@ function.rearrangewaypoints=Ordna waypoints function.convertnamestotimes=Omvandla waypointnamn till tidpunkter function.deletefieldvalues=Ta bort f\u00e4lt-v\u00e4rden function.findwaypoint=S\u00f6k waypoint -function.pastecoordinates=Infoga koordinater +function.pastecoordinates=Skapa punkt via koordinater +function.pastecoordinatelist=Skapa punkter via en koordinat-lista +function.enterpluscode=Skapa punkt(er) via pluss-kod function.charts=Diagram function.show3d=3D-vy function.distances=Avst\u00e5nd function.viewfulldetails=Alla detaljer function.estimatetime=Uppskatta tid function.learnestimationparams=L\u00e4r upp tidsuppskattningsparametrar +function.autoplay=Spela upp sp\u00e5ret function.setmapbg=V\u00e4lj bakgrundskarta function.setpaths=V\u00e4lj s\u00f6kv\u00e4gar f\u00f6r program function.selectsegment=Markera aktuellt segment @@ -110,7 +116,6 @@ function.splitsegments=Dela upp sp\u00e5ret i segment function.sewsegments=Sy ihop sp\u00e5r-segment function.createmarkerwaypoints=Skapa markerings-waypoints function.lookupsrtm=H\u00e4mta h\u00f6jddata fr\u00e5n SRTM -function.downloadsrtm=Ladda ner SRTM-h\u00f6jddata function.getwikipedia=H\u00e4mta n\u00e4rliggande Wikipedia-artiklar function.searchwikipedianames=S\u00f6k i Wikipedia p\u00e5 namn function.searchosmpois=H\u00e4mta n\u00e4rliggande OSM-punkter @@ -118,6 +123,7 @@ function.searchopencachingde=S\u00f6k p\u00e5 OpenCaching.de function.mapillary=S\u00f6k efter foton i Mapillary function.downloadosm=Ladda ner OSM-data f\u00f6r omr\u00e5det function.duplicatepoint=Duplicera punkt +function.projectpoint=Projicera punkt function.setcolours=V\u00e4lj f\u00e4rger function.setdisplaysettings=V\u00e4lj visningsalternativ function.setlanguage=V\u00e4lj spr\u00e5k @@ -162,7 +168,9 @@ dialog.load.table.field=F\u00e4lt dialog.load.table.datatype=Datatyp dialog.load.table.description=Beskrivning dialog.delimiter.comma=Komma , +dialog.delimiter.tab=Tabb dialog.delimiter.space=Mellanslag +dialog.delimiter.semicolon=Semikolon ; dialog.delimiter.other=Annat dialog.openoptions.altitudeunits=H\u00f6jdenhet dialog.openoptions.speedunits=Hastighetsenheter @@ -178,6 +186,7 @@ dialog.jpegload.loadjpegsoutsidearea=Inkludera foton utanf\u00f6r aktuellt omr\u dialog.jpegload.progress.title=Laddar in foton dialog.jpegload.progress=V\u00e4nta medan foton s\u00f6ks dialog.gpsload.nogpsbabel=Inget GPSBabel-program kunde hittas. Forts\u00e4tt \u00e4nd\u00e5? +dialog.gpsload.device=Enhetsnamn dialog.gpsload.format=Format dialog.gpsload.getwaypoints=Ladda in waypoints dialog.gpsload.gettracks=Ladda in sp\u00e5r @@ -329,9 +338,212 @@ dialog.estimatetime.results.actualtime=Faktisk tid dialog.estimatetime.error.nodistance=Tidsuppskattningen kr\u00e4ver kopplade sp\u00e5rpunkter f\u00f6r att f\u00e5 avst\u00e5nd dialog.estimatetime.error.noaltitudes=Intervallet har ingen h\u00f6jd-data dialog.learnestimationparams.intro=Detta \u00e4r parametrarna ber\u00e4knade fr\u00e5n detta sp\u00e5ret -dialog.rearrange.tostart=Alla till b\u00f6rjan av fil -dialog.rearrange.toend=Alla till slut av fil +dialog.learnestimationparams.averageerror=Medel-avvikelse +dialog.learnestimationparams.combine=Dessa parametrar kan kombineras med nuvarande v\u00e4rden +dialog.learnestimationparams.combinedresults=Kombinerat resultat +dialog.learnestimationparams.weight.100pccurrent=Beh\u00e5ll nuvarande v\u00e4rden +dialog.learnestimationparams.weight.current=nuvarande +dialog.learnestimationparams.weight.calculated=ber\u00e4knat +dialog.learnestimationparams.weight.50pc=Medel av nuvarande v\u00e4rden och ber\u00e4knade v\u00e4rden +dialog.learnestimationparams.weight.100pccalculated=Anv\u00e4nd dom ber\u00e4knade v\u00e4rdena +dialog.setmapbg.intro=V\u00e4lj en av kartorna, eller l\u00e4gg till en egen +dialog.addmapsource.title=L\u00e4gg till en ny karta +dialog.addmapsource.sourcename=Kartans namn +dialog.addmapsource.layer1url=URL f\u00f6r f\u00f6rsta lagret +dialog.addmapsource.layer2url=URL f\u00f6r andra lagret +dialog.addmapsource.maxzoom=Max zoom-niv\u00e5 +dialog.addmapsource.noname=Namnl\u00f6s +dialog.gpsies.column.name=Sp\u00e5rnamn +dialog.gpsies.column.length=L\u00e4ngd +dialog.gpsies.description=Beskrivning +dialog.gpsies.nodescription=Ingen beskrivning +dialog.gpsies.nonefound=Inga sp\u00e5r funna +dialog.mapillary.nonefound=Inga foton funna +dialog.wikipedia.column.name=Artikelnamn +dialog.wikipedia.column.distance=Avst\u00e5nd +dialog.wikipedia.nonefound=Inga punkter hittade p\u00e5 Wikipedia +dialog.wikipedia.gallery=Galleri +dialog.osmpois.column.name=Namn +dialog.osmpois.column.type=Typ +dialog.osmpois.nonefound=Inga punkter hittade +dialog.correlate.photoselect.intro=V\u00e4lj en av dessa korrelerade foton att anv\u00e4nda som tids-offset +dialog.correlate.select.photoname=Fotonamn +dialog.correlate.select.timediff=Tidsskillnad +dialog.correlate.select.photolater=Foto senare +dialog.correlate.options.intro=V\u00e4lj inst\u00e4llningar f\u00f6r automatisk korrelation +dialog.correlate.options.offsetpanel=tids-offset +dialog.correlate.options.offset=Offset +dialog.correlate.options.offset.hours=timmar, +dialog.correlate.options.offset.minutes=minuter och +dialog.correlate.options.offset.seconds=sekunder +dialog.correlate.options.photolater=Foto senare \u00e4n punkt +dialog.correlate.options.pointlaterphoto=Punkt senare \u00e4n foto +dialog.correlate.options.audiolater=Ljud senare \u00e4n punkt +dialog.correlate.options.pointlateraudio=Punkt senare \u00e4n ljud +dialog.correlate.options.limitspanel=Korrelationsbegr\u00e4nsningar +dialog.correlate.options.notimelimit=Ingen tidsbegr\u00e4nsning +dialog.correlate.options.timelimit=Tidsbegr\u00e4nsning +dialog.correlate.options.nodistancelimit=Ingen avst\u00e5ndsbegr\u00e4nsning +dialog.correlate.options.distancelimit=Avst\u00e5ndsbegr\u00e4nsning +dialog.correlate.options.correlate=Korrelera +dialog.correlate.alloutsiderange=Alla objekt \u00e4r utanf\u00f6r tidsomf\u00e5nget f\u00f6r sp\u00e5ret, s\u00e5 inga kan korreleras.\nF\u00f6rs\u00f6k att \u00e4ndra offset eller manuellt korrelera \u00e5tminstone ett av objekten. +dialog.correlate.filetimes=Filens tidsst\u00e4mpel markerar: +dialog.correlate.filetimes2=av ljudklippet +dialog.correlate.correltimes=F\u00f6r korrelering, anv\u00e4nd +dialog.correlate.timestamp.beginning=B\u00f6rjan +dialog.correlate.timestamp.middle=Mitten +dialog.correlate.timestamp.end=Slutet +dialog.correlate.audioselect.intro=V\u00e4lj en av dessa korrelerade ljud att anv\u00e4nda som tids-offset +dialog.correlate.select.audioname=Ljudnamn +dialog.correlate.select.audiolater=Ljud senare +dialog.rearrangewaypoints.desc=V\u00e4lj vart och i vilken ordning waypoints ska hamna +dialog.rearrangephotos.desc=V\u00e4lj vart och i vilken ordning foto-punkterna ska hamna +dialog.rearrange.tostart=Alla till b\u00f6rjan +dialog.rearrange.toend=Alla till slutet dialog.rearrange.tonearest=Varje till n\u00e4rmaste sp\u00e5rpunkt +dialog.rearrange.nosort=Sortera inte +dialog.rearrange.sortbyfilename=Sortera p\u00e5 filnamn +dialog.rearrange.sortbyname=Sortera p\u00e5 namn +dialog.rearrange.sortbytime=Sortera p\u00e5 tid +dialog.compress.closepoints.title=Ta bort punkter f\u00f6r n\u00e4ra varandra +dialog.compress.closepoints.paramdesc=Spannfaktor +dialog.compress.wackypoints.title=Ta bort avvikande punkter +dialog.compress.wackypoints.paramdesc=Avst\u00e5ndsfaktor +dialog.compress.singletons.title=Ta bort Singletons +dialog.compress.singletons.paramdesc=Avst\u00e5ndsfaktor +dialog.compress.duplicates.title=Ta bort dubbletter +dialog.compress.douglaspeucker.title=Douglas-Peucker-komprimering +dialog.compress.douglaspeucker.paramdesc=Spannfaktor +dialog.compress.summarylabel=Punkter att ta bort +dialog.compress.confirm=%d punkter har markerats.\nVill du ta bort de markerade punkterna? +dialog.compress.confirmnone=inga punkter har markerats +dialog.deletemarked.nonefound=Inga datapunkter kunde tas bort +dialog.pastecoordinates.desc=Fyll i koordinaterna h\u00e4r +dialog.pastecoordinates.coords=Koordinater +dialog.pastecoordinates.nothingfound=V\u00e4nligen kontrollera koordinaterna och f\u00f6rs\u00f6k igen +dialog.pastecoordinatelist.desc=Fyll i koordinaterna f\u00f6r dom nya punkterna, en punkt per rad +dialog.pluscode.desc=Fyll i pluss-koden (Open Location Code) h\u00e4r +dialog.pluscode.code=Pluss-kod +dialog.help.help=L\u00e4s\n https://gpsprune.activityworkshop.net/\nf\u00f6r mer information och tips,\ninklusive en PDF-anv\u00e4ndarhandbok som man kan k\u00f6pa. +dialog.about.version=Version +dialog.about.build=Build +dialog.about.summarytext1=GpsPrune \u00e4r ett program f\u00f6r att ladda in, visa och redigera data fr\u00e5n GPS-mottagare. +dialog.about.summarytext2=Det \u00e4r publicerat under Gnu GPL f\u00f6r fri, \u00f6ppen, v\u00e4rldsomsp\u00e4nnande anv\u00e4ndning och f\u00f6rb\u00e4ttring.
Kopiering, \u00e5terutgivning och modifieringar \u00e4r till\u00e5tna och uppmuntras
enligt villkoren i den inkluderade filen license.txt. +dialog.about.summarytext3=Bes\u00f6k https://activityworkshop.net/ f\u00f6r mer information och tips, inklusive
en PDF-anv\u00e4ndarhandbok som du kan k\u00f6pa. +dialog.about.languages=Tillg\u00e4ngliga spr\u00e5k +dialog.about.translatedby=\u00d6versatt till svenska av erikiiofph7. +dialog.about.systeminfo=System-info +dialog.about.systeminfo.os=Operativsystem +dialog.about.systeminfo.java=Java Runtime +dialog.about.systeminfo.java3d=Java3d installerat +dialog.about.systeminfo.povray=Povray installerat +dialog.about.systeminfo.exiftool=Exiftool installerat +dialog.about.systeminfo.gpsbabel=Gpsbabel installerat +dialog.about.systeminfo.gnuplot=Gnuplot installerat +dialog.about.yes=Ja +dialog.about.no=Nej +dialog.about.credits=Tillk\u00e4nnagivanden +dialog.about.credits.code=GpsPune:s kod skriven av +dialog.about.credits.exifcode=Exif:s kad skriven av +dialog.about.credits.icons=N\u00e5gra ikoner tagna fr\u00e5n +dialog.about.credits.translators=\u00d6vers\u00e4ttare +dialog.about.credits.translations=\u00d6vers\u00e4ttningar hj\u00e4lpta av +dialog.about.credits.devtools=Utvecklingsverktyg +dialog.about.credits.othertools=\u00d6vriga verktyg +dialog.about.credits.thanks=Tack till +dialog.about.readme=L\u00e4sMig +dialog.checkversion.error=Versionsnummret kunde inte kollas upp.\nVar god kontrollera din internetuppkoppling. +dialog.checkversion.uptodate=Du anv\u00e4nder den senaste versionen av GpsPrune. +dialog.checkversion.newversion1=En ny version av GpsPrune finns nu tillg\u00e4nglig! Den senaste versionen \u00e4r +dialog.checkversion.newversion2=. +dialog.checkversion.releasedate1=Denna nya version sl\u00e4pptes +dialog.checkversion.releasedate2=. +dialog.checkversion.download=F\u00f6r att ladda ner den nya versionen g\u00e5 till https://gpsprune.activityworkshop.net/download.html. +dialog.keys.intro=Du kan anv\u00e4nda dessa snabbkommandon ist\u00e4llet f\u00f6r att anv\u00e4nda musen +dialog.keys.keylist=
PiltangenterPanorera kartan \u00e5t v\u00e4nster, h\u00f6ger, upp, ner
Ctrl + v\u00e4nster, h\u00f6ger piltangentMarkera f\u00f6reg\u00e5ende eller n\u00e4sta punkt
Ctrl + pil upp, pil nerZooma in eller ut
Ctrl + PgUp, PgDownMarkera f\u00f6reg\u00e5ende, n\u00e4sta segment
Ctrl + Home, EndMarkera f\u00f6rsta, sista punkt
DelRadera markerad punkt
+dialog.keys.normalmodifier=Ctrl +dialog.keys.macmodifier=Command +dialog.paths.prune.gnuplotpath=S\u00f6kv\u00e4g till gnuplot +dialog.paths.prune.gpsbabelpath=S\u00f6kv\u00e4g till gpsbabel +dialog.paths.prune.exiftoolpath=S\u00f6kv\u00e4g till exiftool +dialog.setpaths.intro=Om du beh\u00f6ver kan du ange s\u00f6kv\u00e4gar till dom externa programmen: +dialog.setpaths.found=S\u00f6kv\u00e4g hittad? +dialog.addaltitude.noaltitudes=Det valda intervallet inneh\u00e5ller ingen h\u00f6jddata +dialog.addaltitude.desc=H\u00f6jd-offset att addera +dialog.lookupsrtm.overwritezeros=Skriva \u00f6ver h\u00f6jd-v\u00e4rden som \u00e4r noll? +dialog.setcolours.intro=Klicka p\u00e5 en f\u00e4rg-ruta f\u00f6r att \u00e4ndra f\u00e4rg +dialog.setcolours.background=Bakgrund +dialog.setcolours.borders=Kanter +dialog.setcolours.lines=Linjer +dialog.setcolours.primary=Prim\u00e4r +dialog.setcolours.secondary=Sekund\u00e4r +dialog.setcolours.point=Punkter +dialog.setcolours.selection=Markering +dialog.setcolours.text=Text +dialog.colourchooser.title=V\u00e4lj f\u00e4rg +dialog.colourchooser.red=R\u00f6d +dialog.colourchooser.green=Gr\u00f6n +dialog.colourchooser.blue=Bl\u00e5 +dialog.colourer.intro=En punkt-m\u00e5lare kan ge sp\u00e5rpunkter olika f\u00e4rg +dialog.colourer.type=M\u00e5lar-typ +dialog.colourer.type.none=Ingen +dialog.colourer.type.byfile=Efter fil +dialog.colourer.type.bysegment=Efter segment +dialog.colourer.type.byaltitude=Efter h\u00f6jd +dialog.colourer.type.byspeed=Efter hastighet +dialog.colourer.type.byvertspeed=Efter vertikal hastighet +dialog.colourer.type.bygradient=Efter gradient +dialog.colourer.type.bydate=Efter datum +dialog.colourer.start=Start-f\u00e4rg +dialog.colourer.end=Slut-f\u00e4rg +dialog.colourer.maxcolours=Max antal f\u00e4rger +dialog.setlanguage.firstintro=Du kan antingen v\u00e4lja ett av dom inkluderade spr\u00e5ken

eller v\u00e4lja att anv\u00e4nda en text-fil ist\u00e4llet. +dialog.setlanguage.secondintro=Du m\u00e5ste spara dina inst\u00e4llningar och sedan

starta om GpsPrune f\u00f6r att \u00e4ndringarna ska verkst\u00e4llas. +dialog.setlanguage.language=Spr\u00e5k +dialog.setlanguage.languagefile=Spr\u00e5k-fil +dialog.setlanguage.endmessage=Spara dina inst\u00e4llningar nu och starta om GpsPrune\nf\u00f6r att \u00e4ndringarna ska verkst\u00e4llas. +dialog.setlanguage.endmessagewithautosave=Var god starta om GpsPrune f\u00f6r att bytet av spr\u00e5k ska ske. +dialog.diskcache.save=Spara kartbilder till h\u00e5rddisk +dialog.diskcache.dir=Cache-mapp +dialog.diskcache.createdir=Skapa mapp +dialog.diskcache.nocreate=Ingen cache-mapp skapad +dialog.diskcache.cannotwrite=Kart-rutor ("tiles") kan inte sparas i den valda mappen +dialog.diskcache.table.path=Mapp +dialog.diskcache.table.usedby=Anv\u00e4nds av +dialog.diskcache.table.zoom=Zoom +dialog.diskcache.table.tiles=Kart-rutor ("tiles") +dialog.diskcache.table.megabytes=Megabytes +dialog.diskcache.tileset=Upps\u00e4ttning kart-rutor ("tiles") +dialog.diskcache.tileset.multiple=multipla +dialog.weather.sunrise=Soluppg\u00e5ng +dialog.weather.sunset=Solnedg\u00e5ng +dialog.weather.temperatureunits=Temperaturer +dialog.weather.currentforecast=Nuvarande v\u00e4der +dialog.weather.dailyforecast=Flerdygnsprognos +dialog.weather.day.now=Nuvarande v\u00e4der +dialog.weather.day.today=Idag +dialog.weather.day.tomorrow=Imorgon +dialog.weather.day.monday=M\u00e5ndag +dialog.weather.day.tuesday=Tisdag +dialog.weather.day.wednesday=Onsdag +dialog.weather.day.thursday=Torsdag +dialog.weather.day.friday=Fredag +dialog.weather.day.saturday=L\u00f6rdag +dialog.weather.day.sunday=S\u00f6ndag +dialog.weather.wind=Vind +dialog.weather.temp=Temp +dialog.weather.humidity=Fuktighet +dialog.deletebydate.nodate=Ingen tidsst\u00e4mpel +dialog.deletebydate.column.keep=Beh\u00e5ll +dialog.deletebydate.column.delete=Ta bort +dialog.settimezone.system=Anv\u00e4nd systemets tidszon +dialog.settimezone.custom=Anv\u00e4nd f\u00f6ljande tidszon: +dialog.settimezone.selectedzone=Vald tidszon +dialog.settimezone.offsetfromutc=Offset fr\u00e5n UTC +dialog.autoplay.usetimestamps=Anv\u00e4nd tidsst\u00e4mplar fr\u00e5n punkter +dialog.autoplay.rewind=Tillbaka till b\u00f6rjan +dialog.autoplay.pause=Paus +dialog.autoplay.play=Spela upp # Buttons button.ok=OK @@ -349,9 +561,9 @@ button.no=Nej button.yestoall=Ja till alla button.notoall=Nej till alla button.always=Alltid -button.select=Markera -button.selectall=Markera alla -button.selectnone=Markera inget +button.select=V\u00e4lj +button.selectall=V\u00e4lj alla +button.selectnone=V\u00e4lj ingen button.preview=F\u00f6rhandsvisa button.load=Ladda in button.guessfields=Gissa f\u00e4lt @@ -385,8 +597,8 @@ details.range.to=till details.altitude.to=till details.range.climb=Uppf\u00f6r details.range.descent=Nedf\u00f6r -details.coordformat=Koortinat-format -details.distanceunits=Distans-enhet +details.coordformat=Koordinatformat +details.distanceunits=Distansenhet display.range.time.secs=s display.range.time.mins=m display.range.time.hours=h @@ -410,5 +622,62 @@ details.audio.file=Ljudfil details.audio.playing=spelar... map.overzoom=Inga kartor tillg\u00e4ngliga p\u00e5 denna zoom-niv\u00e5 +# Field names +fieldname.latitude=Latitud +fieldname.longitude=Longitud +fieldname.coordinates=Koordinaterna +fieldname.altitude=Altitud +fieldname.timestamp=Tidpunkt +fieldname.time=Tid +fieldname.date=Datum +fieldname.waypointname=Namn +fieldname.waypointtype=Typ +fieldname.newsegment=Segment +fieldname.prefix=F\u00e4lt +fieldname.distance=Distans +fieldname.speed=Hastighet +fieldname.verticalspeed=Vertikal hastighet +fieldname.description=Beskrivning +fieldname.comment=Kommentar +fieldname.mediafilename=Filnamn + +# Measurement units +units.original=Original +units.default=Default +units.metres=Meter +units.metres.short=m +units.feet=Fot +units.feet.short=fot +units.kilometres=Kilometer +units.kilometres.short=km +units.kilometresperhour=km per timme +units.kilometresperhour.short=km/h +units.miles=Miles +units.miles.short=mi +units.milesperhour=miles per timme +units.milesperhour.short=mph +units.nauticalmiles=Nautiska mil +units.nauticalmiles.short=N.m. +units.nauticalmilesperhour.short=knop +units.metrespersec=meter per sekund +units.metrespersec.short=m/s +units.feetpersec=fot per sekund +units.feetpersec.short=fot/s +units.hours=timmar +units.minutes=minuter +units.seconds=sekunder +units.degminsec=Grad-min-sek +units.degmin=Grad-min +units.deg=Grader +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=och +logic.or=eller + # External urls and services openweathermap.lang=se diff --git a/src/tim/prune/lang/prune-texts_uk.properties b/src/tim/prune/lang/prune-texts_uk.properties index 43ef43d..8e82e11 100644 --- a/src/tim/prune/lang/prune-texts_uk.properties +++ b/src/tim/prune/lang/prune-texts_uk.properties @@ -106,7 +106,6 @@ function.selectsegment=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043f\u043e\u function.splitsegments=\u0420\u043e\u0437\u0431\u0438\u0442\u0438 \u0442\u0440\u0435\u043a \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438 function.sewsegments=\u0417\u0448\u0438\u0442\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438 \u0442\u0440\u0435\u043a\u0456\u0432 \u0440\u0430\u0437\u043e\u043c function.lookupsrtm=\u041e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0432\u0438\u0441\u043e\u0442\u0438 \u0437 SRTM -function.downloadsrtm=\u0417\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 SRTM-\u0442\u0430\u0439\u043b\u0438 function.getwikipedia=\u041e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u043d\u0430\u0439\u0431\u043b\u0438\u0436\u0447\u0443 \u0441\u0442\u0430\u0442\u0442\u044e \u0437 \u0412\u0456\u043a\u0456\u043f\u0435\u0434\u0456\u0457 function.searchwikipedianames=\u041f\u043e\u0448\u0443\u043a \u0441\u0442\u0430\u0442\u0435\u0439 \u0437 \u0412\u0456\u043a\u0456\u043f\u0435\u0434\u0456\u0457 \u0437\u0430 \u043d\u0430\u0437\u0432\u043e\u044e function.downloadosm=\u0417\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 OSM-\u0434\u0430\u043d\u0456 \u043d\u0430 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u044e diff --git a/src/tim/prune/lang/prune-texts_zh.properties b/src/tim/prune/lang/prune-texts_zh.properties index eba2b71..d915629 100644 --- a/src/tim/prune/lang/prune-texts_zh.properties +++ b/src/tim/prune/lang/prune-texts_zh.properties @@ -106,7 +106,6 @@ function.selectsegment=\u9009\u4e2d\u5f53\u524d\u8f68\u8ff9\u6bb5 function.splitsegments=\u5206\u5272\u8f68\u8ff9 function.sewsegments=\u63a5\u5408\u8f68\u8ff9\u7247\u6bb5 function.lookupsrtm=\u4eceSRTM\u83b7\u5f97\u9ad8\u5ea6\u4fe1\u606f -function.downloadsrtm=\u4e0b\u8f7dSRTM\u6570\u636e function.getwikipedia=\u7ef4\u57fa\u767e\u79d1\u6709\u5173\u672c\u5730\u6587\u7ae0 function.searchwikipedianames=\u6309\u540d\u5b57\u4ece\u7ef4\u57fa\u767e\u79d1\u67e5\u627e function.downloadosm=\u4e0b\u8f7d\u6b64\u5730OSM\u6570\u636e @@ -584,7 +583,6 @@ confirm.running=\u8bf7\u7a0d\u7b49... confirm.lookupsrtm=\u627e\u5230 %d \u9ad8\u5ea6\u503c confirm.downloadsrtm=\u4e0b\u8f7d %d \u9ad8\u5ea6\u6587\u4ef6\u5230\u7f13\u5b58\u4e2d confirm.downloadsrtm.1=\u4e0b\u8f7d %d \u9ad8\u5ea6\u6587\u4ef6\u5230\u7f13\u5b58\u4e2d -confirm.downloadsrtm.none=\u65e0\u9700\u4e0b\u8f7d\uff0c\u6587\u4ef6\u5df2\u5b58\u50a8\u5728\u7f13\u5b58\u4e2d confirm.deletefieldvalues=\u533a\u57df\u6570\u636e\u5df2\u5220\u9664 confirm.audioload=\u5df2\u6dfb\u52a0\u58f0\u97f3\u6587\u4ef6 confirm.correlateaudios.single=\u58f0\u97f3\u5df2\u5173\u8054 @@ -594,7 +592,6 @@ confirm.correlateaudios.multi=\u58f0\u97f3\u5df2\u5173\u8054 tip.title=\u63d0\u793a tip.useamapcache=\u542f\u7528\u78c1\u76d8\u7f13\u5b58 (\u8bbe\u7f6e -> \u4fdd\u5b58\u5730\u56fe)\n\u53ef\u4ee5\u63d0\u9ad8\u663e\u793a\u901f\u5ea6\uff0c\u51cf\u5c11\u7f51\u7edc\u6d41\u91cf tip.learntimeparams=\u5bf9\u8bb0\u5f55\u7684\u8f68\u8ff9\u542f\u7528 \u8f68\u8ff9 -> \u4f7f\u7528\u5f53\u524d\u8f68\u8ff9\u53c2\u6570\u4f30\u8ba1\u65f6\u95f4\n\u5c06\u4f7f\u7ed3\u679c\u66f4\u52a0\u7cbe\u786e -tip.downloadsrtm=\u53ef\u4ee5\u70b9\u51fb \u8054\u7f51 -> \u4e0b\u8f7dSRTM\u6570\u636e\n\u5c06\u6570\u636e\u4fdd\u5b58\u5230\u78c1\u76d8\u7f13\u5b58\u4ee5\u63d0\u9ad8\u901f\u5ea6 tip.usesrtmfor3d=\u6b64\u8f68\u8ff9\u6ca1\u6709\u9ad8\u5ea6\u4fe1\u606f\n\u53ef\u4ee5\u901a\u8fc7SRTM\u83b7\u53d6\u5927\u81f4\u9ad8\u5ea6\u4ee5\u663e\u793a3D\u89c6\u56fe tip.manuallycorrelateone=\u63d0\u793a\uff1a\u624b\u52a8\u94fe\u63a5\u81f3\u5c11\u4e00\u5f20\u7167\u7247\uff0c\u53ef\u81ea\u52a8\u8ba1\u7b97\u65f6\u95f4\u504f\u79fb diff --git a/src/tim/prune/load/xml/GpxHandler.java b/src/tim/prune/load/xml/GpxHandler.java index 6f63080..ebd106a 100644 --- a/src/tim/prune/load/xml/GpxHandler.java +++ b/src/tim/prune/load/xml/GpxHandler.java @@ -24,7 +24,7 @@ public class GpxHandler extends XmlHandler private String _latitude = null, _longitude = null; private GpxTag _elevation = new GpxTag(), _time = new GpxTag(); private GpxTag _type = new GpxTag(), _description = new GpxTag(); - private GpxTag _link = new GpxTag(); + private GpxTag _link = new GpxTag(), _comment = new GpxTag(); private GpxTag _currentTag = null; private ArrayList _pointList = new ArrayList(); private ArrayList _linkList = new ArrayList(); @@ -58,6 +58,7 @@ public class GpxHandler extends XmlHandler _type.setValue(null); _link.setValue(null); _description.setValue(null); + _comment.setValue(null); } else if (tag.equals("ele")) { _currentTag = _elevation; @@ -84,6 +85,9 @@ public class GpxHandler extends XmlHandler else if (tag.equals("description") || tag.equals("desc")) { _currentTag = _description; } + else if (tag.equals("cmt")) { + _currentTag = _comment; + } else if (tag.equals("link")) { _link.setValue(attributes.getValue("href")); } @@ -153,7 +157,7 @@ public class GpxHandler extends XmlHandler private void processPoint() { // Put the values into a String array matching the order in getFieldArray() - String[] values = new String[8]; + String[] values = new String[9]; values[0] = _latitude; values[1] = _longitude; values[2] = _elevation.getValue(); @@ -166,6 +170,7 @@ public class GpxHandler extends XmlHandler } values[6] = _type.getValue(); values[7] = _description.getValue(); + values[8] = _comment.getValue(); _pointList.add(values); _trackNameList.addPoint(_trackNum, _trackName.getValue(), _isTrackPoint); _linkList.add(_link.getValue()); @@ -179,7 +184,7 @@ public class GpxHandler extends XmlHandler { final Field[] fields = {Field.LATITUDE, Field.LONGITUDE, Field.ALTITUDE, Field.WAYPT_NAME, Field.TIMESTAMP, Field.NEW_SEGMENT, - Field.WAYPT_TYPE, Field.DESCRIPTION}; + Field.WAYPT_TYPE, Field.DESCRIPTION, Field.COMMENT}; return fields; } diff --git a/src/tim/prune/readme.txt b/src/tim/prune/readme.txt index 0023c74..405a536 100644 --- a/src/tim/prune/readme.txt +++ b/src/tim/prune/readme.txt @@ -1,5 +1,5 @@ -GpsPrune version 20 -=================== +GpsPrune version 20.1 +===================== GpsPrune is an application for viewing, editing and managing coordinate data from GPS systems, including format conversion, charting, 3d visualisation, audio and photo correlation, and online resource lookup. @@ -17,7 +17,7 @@ Running ======= To run GpsPrune from the jar file, simply call it from a command prompt or shell: - java -jar gpsprune_20.jar + java -jar gpsprune_20.1.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,11 +25,24 @@ 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_20.jar --lang=DE + java -jar gpsprune_20.1.jar --lang=DE -New with version 20 +New with version 20.1 ===================== +The following fixes and additions were made since version 20: + - Starting with an empty map (fperrin) + - Reading and writing tags from gpx files (Willy) + - Add option to use GTK look-and-feel (fperrin) + - Translation updates (Carlos, Tche333) + - Solve issue #29/973910 regarding missing tile cache (Peter Gervai) + - Remove "Download SRTM" function and just do it automatically + - Tweak waypoint icons + - Fix problem with a recently-used file which has disappeared + - Fix problem with moving / renaming downloaded tile files + +New with version 20 +=================== The following fixes and additions were made since version 19: - Add option to use Nimbus look-and-feel (wishlist 77) - Extend the marker waypoints function to include half the distance, half the climb and half the descent diff --git a/src/tim/prune/save/GpxExporter.java b/src/tim/prune/save/GpxExporter.java index 88ac791..8bfd090 100644 --- a/src/tim/prune/save/GpxExporter.java +++ b/src/tim/prune/save/GpxExporter.java @@ -583,6 +583,7 @@ public class GpxExporter extends GenericFunction implements Runnable } source = replaceGpxTags(source, "", "", XmlUtils.fixCdata(inPoint.getFieldValue(Field.DESCRIPTION))); + source = replaceGpxTags(source, "", "", inPoint.getFieldValue(Field.COMMENT)); } // photo / audio links if (source != null && (inPoint.hasMedia() || source.indexOf("") > 0)) { @@ -733,13 +734,21 @@ public class GpxExporter extends GenericFunction implements Runnable inWriter.write(XmlUtils.fixCdata(inPoint.getWaypointName().trim())); inWriter.write("\n"); // description, if any - String desc = XmlUtils.fixCdata(inPoint.getFieldValue(Field.DESCRIPTION)); + final String desc = XmlUtils.fixCdata(inPoint.getFieldValue(Field.DESCRIPTION)); if (desc != null && !desc.equals("")) { inWriter.write("\t\t"); inWriter.write(desc); inWriter.write("\n"); } + // comment, if any + final String comment = XmlUtils.fixCdata(inPoint.getFieldValue(Field.COMMENT)); + if (comment != null && !comment.equals("")) + { + inWriter.write("\t\t"); + inWriter.write(comment); + inWriter.write("\n"); + } // Media links, if any if (inSettings.getExportPhotoPoints() && inPoint.getPhoto() != null) { diff --git a/src/tim/prune/save/MapGrouter.java b/src/tim/prune/save/MapGrouter.java index 263a306..28b65ea 100644 --- a/src/tim/prune/save/MapGrouter.java +++ b/src/tim/prune/save/MapGrouter.java @@ -108,14 +108,11 @@ public class MapGrouter implements TileConsumer // Wait until tile is available (loaded asynchronously) while (tile.getWidth(null) < 0 && !inDownload) { - // System.out.println("Wait for tile width"); try { - Thread.sleep(inDownload ? 500 : 100); + Thread.sleep(100); } catch (InterruptedException ie) {} } - // work out where to copy it to, paint it - // System.out.println("Painting tile " + x + "," + y + " at " + xOffset + "," + yOffset); numTilesUsed++; g.drawImage(tile, xOffset, yOffset, null); } @@ -177,4 +174,10 @@ public class MapGrouter implements TileConsumer { // Doesn't need any action } + + /** React to cache problem */ + public void reportCacheFailure() + { + // Doesn't need any action + } } -- 2.43.0