Merge branch 'master' into road-surface

This commit is contained in:
Alexey 2019-02-06 19:34:30 +03:00 committed by GitHub
commit 7a85a85b22
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
613 changed files with 73577 additions and 14743 deletions

17
AUTHORS
View file

@ -1,17 +0,0 @@
Copyright © OsmAnd 20102014
### Credits to all major contributors/developers:
* Victor Shcherb all parts of the project, originator
* Pavol Zibrita first contributor and developer of some utilities
* Dusan Kazik one of the first contributors
* Andre Van Atten project supporter, active forum participant, one of the first users.
* Dr. Hardy Mueller map appearance concept and base renderers, international consistency and testing, usability, app scoping, concepts, documentation, wiki, market research.
* Yvecai main contributor to Contour Lines and Hillshade maps
* Alexey Pelykh C++ developer, created native library and made application much snappier.
* Max (Zahnstocher) Java contributor, active forum participant.
* Harry van der Wolf contributor to country boundaries, configuration files, address files, and much else; active forum participant.
* Robin ypid Schneider opening hours contributor
### Other Pull requests
Copyright © All authors of translations and pull requests could be found in commits history:
- Translations are under special “contributor” name weblate
- Pull requests have two committers, first is original contributor and second is project maintainer

7
AUTHORS.md Normal file
View file

@ -0,0 +1,7 @@
### Credits to all major contributors/developers:
Major contributors /developers listed here https://github.com/osmandapp/osmandapp.github.io/blob/master/website/help/about.html#L8
### Other Pull requests
Copyright © All authors of translations and pull requests could be found in commits history:
- Translations are under special “contributor” name weblate
- Pull requests have two committers, first is original contributor and second is project maintainer

View file

@ -40,9 +40,15 @@ task collectRegionsInfoResources(type: Copy) {
}
task collectTestResources(type: Copy) {
from "../../resources/test-resources"
into "src/test/resources/"
include "*"
from("../../resources/test-resources") {
include "*"
}
from("../../resources/poi") {
include "poi_types.xml"
include "/phrases/en/*"
//include "/phrases/ru/*"
}
}

View file

@ -124,6 +124,9 @@ public class CollatorStringMatcher implements StringMatcher {
public static boolean cstartsWith(Collator collator, String searchInParam, String theStart,
boolean checkBeginning, boolean checkSpaces, boolean equals, boolean trim) {
String searchIn = searchInParam.toLowerCase(Locale.getDefault());
if (trim && searchIn.length() > 0) {
searchIn += " ";
}
int searchInLength = searchIn.length();
if (trim && searchInLength > 0 && theStart.length() > searchInLength) {
theStart = theStart.substring(0, searchInLength);

View file

@ -130,10 +130,10 @@ public class NativeLibrary {
public RouteSegmentResult[] runNativeRouting(int sx31, int sy31, int ex31, int ey31, RoutingConfiguration config,
RouteRegion[] regions, RouteCalculationProgress progress, PrecalculatedRouteDirection precalculatedRouteDirection,
boolean basemap) {
boolean basemap, boolean publicTransport, boolean startTransportStop, boolean targetTransportStop) {
// config.router.printRules(System.out);
return nativeRouting(new int[] { sx31, sy31, ex31, ey31 }, config, config.initialDirection == null ? -360 : config.initialDirection.floatValue(),
regions, progress, precalculatedRouteDirection, basemap);
regions, progress, precalculatedRouteDirection, basemap, publicTransport, startTransportStop, targetTransportStop);
}
@ -156,7 +156,9 @@ public class NativeLibrary {
protected static native RouteDataObject[] getRouteDataObjects(RouteRegion reg, long rs, int x31, int y31);
protected static native RouteSegmentResult[] nativeRouting(int[] coordinates, RoutingConfiguration r,
float initDirection, RouteRegion[] regions, RouteCalculationProgress progress, PrecalculatedRouteDirection precalculatedRouteDirection, boolean basemap);
float initDirection, RouteRegion[] regions, RouteCalculationProgress progress,
PrecalculatedRouteDirection precalculatedRouteDirection, boolean basemap,
boolean publicTransport, boolean startTransportStop, boolean targetTransportStop);
protected static native void deleteSearchResult(long searchResultHandle);

View file

@ -1,37 +1,9 @@
package net.osmand.binary;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.map.TIntObjectMap;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
import gnu.trove.set.hash.TIntHashSet;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.CodedOutputStream;
import com.google.protobuf.WireFormat;
import net.osmand.Collator;
import net.osmand.CollatorStringMatcher;
@ -72,9 +44,37 @@ import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.CodedOutputStream;
import com.google.protobuf.WireFormat;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.map.TIntObjectMap;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
import gnu.trove.set.hash.TIntHashSet;
public class BinaryMapIndexReader {
@ -130,7 +130,7 @@ public class BinaryMapIndexReader {
init();
}
/*private */BinaryMapIndexReader(final RandomAccessFile raf, File file, boolean init) throws IOException {
public BinaryMapIndexReader(final RandomAccessFile raf, File file, boolean init) throws IOException {
this.raf = raf;
this.file = file;
codedIS = CodedInputStream.newInstance(raf);
@ -554,13 +554,15 @@ public class BinaryMapIndexReader {
}
return false;
}
public List<TransportStop> searchTransportIndex(SearchRequest<TransportStop> req) throws IOException {
for (TransportIndex index : transportIndexes) {
if (index.stopsFileLength == 0 || index.right < req.left || index.left > req.right || index.top > req.bottom
|| index.bottom < req.top) {
continue;
}
if (req.stringTable != null) {
req.stringTable.clear();
}
codedIS.seek(index.stopsFileOffset);
int oldLimit = codedIS.pushLimit(index.stopsFileLength);
int offset = req.searchResults.size();
@ -875,6 +877,8 @@ public class BinaryMapIndexReader {
continue;
}
// lazy initializing trees
if (index.trees == null) {
index.trees = new ArrayList<MapTree>();
@ -2074,14 +2078,14 @@ public class BinaryMapIndexReader {
private static boolean testAddressSearch = false;
private static boolean testAddressSearchName = false;
private static boolean testAddressJustifySearch = false;
private static boolean testPoiSearch = true;
private static boolean testPoiSearch = false;
private static boolean testPoiSearchOnPath = false;
private static boolean testTransportSearch = true;
private static int sleft = MapUtils.get31TileNumberX(4.7495);
private static int sright = MapUtils.get31TileNumberX(4.8608);
private static int stop = MapUtils.get31TileNumberY(52.3395);
private static int sbottom = MapUtils.get31TileNumberY(52.2589);
private static int sleft = MapUtils.get31TileNumberX(27.55079);
private static int sright = MapUtils.get31TileNumberX(27.55317);
private static int stop = MapUtils.get31TileNumberY(53.89378);
private static int sbottom = MapUtils.get31TileNumberY(53.89276);
private static int szoom = 15;
private static void println(String s) {
@ -2090,7 +2094,7 @@ public class BinaryMapIndexReader {
public static void main(String[] args) throws IOException {
File fl = new File(System.getProperty("maps") + "/Synthetic_test_rendering.obf");
fl = new File(System.getProperty("maps") + "/Map.obf");
fl = new File(System.getProperty("maps") + "/Belarus_europe_2.obf");
RandomAccessFile raf = new RandomAccessFile(fl, "r");
@ -2280,6 +2284,9 @@ public class BinaryMapIndexReader {
println(" " + route.getRef() + " " + route.getName() + " " + route.getDistance() + " "
+ route.getAvgBothDistance());
StringBuilder b = new StringBuilder();
if(route.getForwardWays() == null) {
continue;
}
for(Way w : route.getForwardWays()) {
b.append(w.getNodes()).append(" ");
}

View file

@ -5,17 +5,20 @@ import gnu.trove.map.hash.TIntObjectHashMap;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
import net.osmand.binary.OsmandOdb.TransportRouteSchedule;
import net.osmand.data.TransportSchedule;
import net.osmand.data.TransportStop;
import net.osmand.data.TransportStopExit;
import net.osmand.osm.edit.Node;
import net.osmand.osm.edit.Way;
import net.osmand.util.MapUtils;
import net.sf.junidecode.Junidecode;
import com.google.protobuf.ByteString;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.WireFormat;
@ -238,6 +241,11 @@ public class BinaryMapTransportReaderAdapter {
stringTable.putIfAbsent(i, "");
return ((char) i)+"";
}
private String regStr(TIntObjectHashMap<String> stringTable, int i) throws IOException{
stringTable.putIfAbsent(i, "");
return ((char) i)+"";
}
public net.osmand.data.TransportRoute getTransportRoute(int filePointer, TIntObjectHashMap<String> stringTable,
boolean onlyDescription) throws IOException {
@ -394,12 +402,12 @@ public class BinaryMapTransportReaderAdapter {
int oldLimit = codedIS.pushLimit(ind.stringTable.length);
int current = 0;
int i = 0;
while (i < values.length) {
while (i < values.length && codedIS.getBytesUntilLimit() > 0) {
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
switch (tag) {
case 0:
break;
return;
case OsmandOdb.StringTable.S_FIELD_NUMBER:
if (current == values[i]) {
String value = codedIS.readString();
@ -446,12 +454,26 @@ public class BinaryMapTransportReaderAdapter {
}
protected void initializeNames(TIntObjectHashMap<String> stringTable, TransportStop s) {
for (TransportStopExit exit : s.getExits()) {
if (exit.getRef().length() > 0) {
exit.setRef(stringTable.get(exit.getRef().charAt(0)));
}
}
if (s.getName().length() > 0) {
s.setName(stringTable.get(s.getName().charAt(0)));
}
if (s.getEnName(false).length() > 0) {
s.setEnName(stringTable.get(s.getEnName(false).charAt(0)));
}
Map<String, String> namesMap = new HashMap<>(s.getNamesMap(false));
if (!s.getNamesMap(false).isEmpty()) {
s.getNamesMap(false).clear();
}
Iterator<Map.Entry<String, String>> it = namesMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> e = it.next();
s.setName(stringTable.get(e.getKey().charAt(0)), stringTable.get(e.getValue().charAt(0)));
}
}
@ -517,6 +539,7 @@ public class BinaryMapTransportReaderAdapter {
TransportStop dataObject = new TransportStop();
dataObject.setLocation(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, x, y);
dataObject.setFileOffset(shift);
List<String> names = null;
while(true){
int t = codedIS.readTag();
tag = WireFormat.getTagFieldNumber(t);
@ -543,16 +566,76 @@ public class BinaryMapTransportReaderAdapter {
} else {
skipUnknownField(t);
}
break;
case OsmandOdb.TransportStop.ADDITIONALNAMEPAIRS_FIELD_NUMBER :
if (req.stringTable != null) {
int sizeL = codedIS.readRawVarint32();
int oldRef = codedIS.pushLimit(sizeL);
while (codedIS.getBytesUntilLimit() > 0) {
dataObject.setName(regStr(req.stringTable,codedIS.readRawVarint32()),
regStr(req.stringTable,codedIS.readRawVarint32()));
}
codedIS.popLimit(oldRef);
} else {
skipUnknownField(t);
}
break;
case OsmandOdb.TransportStop.ID_FIELD_NUMBER :
dataObject.setId(codedIS.readSInt64());
break;
case OsmandOdb.TransportStop.EXITS_FIELD_NUMBER :
int length = codedIS.readRawVarint32();
int oldLimit = codedIS.pushLimit(length);
TransportStopExit transportStopExit = readTransportStopExit(cleft, ctop, req);
dataObject.addExit(transportStopExit);
codedIS.popLimit(oldLimit);
break;
default:
skipUnknownField(t);
break;
}
}
}
private TransportStopExit readTransportStopExit(int cleft, int ctop, SearchRequest<TransportStop> req) throws IOException {
TransportStopExit dataObject = new TransportStopExit();
int x = 0;
int y = 0;
while (true) {
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
switch (tag) {
case 0:
if (dataObject.getName("en").length() == 0) {
dataObject.setEnName(Junidecode.unidecode(dataObject.getName()));
}
if (x != 0 || y != 0) {
dataObject.setLocation(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, x, y);
}
return dataObject;
case OsmandOdb.TransportStopExit.REF_FIELD_NUMBER:
if (req.stringTable != null) {
dataObject.setRef(regStr(req.stringTable));
} else {
skipUnknownField(t);
}
break;
case OsmandOdb.TransportStopExit.DX_FIELD_NUMBER:
x = codedIS.readSInt32() + cleft;
break;
case OsmandOdb.TransportStopExit.DY_FIELD_NUMBER:
y = codedIS.readSInt32() + ctop;
break;
default:
skipUnknownField(t);
break;
}
}
}
}

View file

@ -28,7 +28,7 @@ public class CommonWords {
public static int getCommonSearch(String name) {
Integer i = commonWordsDictionary.get(name);
return i == null ? getFrequentlyUsed(name) : i.intValue();
return i == null ? getFrequentlyUsed(name) : i.intValue() + frequentlyUsedWordsDictionary.size();
}
public static int getCommonGeocoding(String name) {

File diff suppressed because it is too large Load diff

View file

@ -578,7 +578,21 @@ public class RouteDataObject {
public boolean loop(){
return pointsX[0] == pointsX[pointsX.length - 1] && pointsY[0] == pointsY[pointsY.length - 1] ;
}
public boolean platform(){
int sz = types.length;
for(int i=0; i<sz; i++) {
RouteTypeRule r = region.quickGetEncodingRule(types[i]);
if(r.getTag().equals("railway") && r.getValue().equals("platform")) {
return true;
}
if(r.getTag().equals("public_transport") && r.getValue().equals("platform")) {
return true;
}
}
return false;
}
public boolean roundabout(){
int sz = types.length;
for(int i=0; i<sz; i++) {

View file

@ -1,16 +1,19 @@
package net.osmand.data;
import net.osmand.Location;
import net.osmand.osm.MapPoiTypes;
import net.osmand.osm.PoiCategory;
import net.osmand.osm.edit.Node;
import net.osmand.util.Algorithms;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
@ -317,4 +320,49 @@ public class Amenity extends MapObject {
public boolean isClosed() {
return OSM_DELETE_VALUE.equals(getAdditionalInfo(OSM_DELETE_TAG));
}
public JSONObject toJSON() {
JSONObject json = super.toJSON();
json.put("subType", subType);
json.put("type", type.getKeyName());
json.put("openingHours", openingHours);
if (additionalInfo != null && additionalInfo.size() > 0) {
JSONObject additionalInfoObj = new JSONObject();
for (Entry<String, String> e : additionalInfo.entrySet()) {
additionalInfoObj.put(e.getKey(), e.getValue());
}
json.put("additionalInfo", additionalInfoObj);
}
return json;
}
public static Amenity parseJSON(JSONObject json) {
Amenity a = new Amenity();
MapObject.parseJSON(json, a);
if (json.has("subType")) {
a.subType = json.getString("subType");
}
if (json.has("type")) {
String categoryName = json.getString("type");
a.setType(MapPoiTypes.getDefault().getPoiCategoryByName(categoryName));
} else {
a.setType(MapPoiTypes.getDefault().getOtherPoiCategory());
}
if (json.has("openingHours")) {
a.openingHours = json.getString("openingHours");
}
if (json.has("additionalInfo")) {
JSONObject namesObj = json.getJSONObject("additionalInfo");
a.additionalInfo = new HashMap<>();
Iterator<String> iterator = namesObj.keys();
while (iterator.hasNext()) {
String key = iterator.next();
String value = namesObj.getString(key);
a.additionalInfo.put(key, value);
}
}
return a;
}
}

View file

@ -1,12 +1,15 @@
package net.osmand.data;
import net.osmand.util.Algorithms;
import org.json.JSONObject;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import net.osmand.util.Algorithms;
public class Building extends MapObject {
private String postcode;
@ -216,4 +219,43 @@ public class Building extends MapObject {
return "";
}
public JSONObject toJSON() {
JSONObject json = super.toJSON();
json.put("postcode", postcode);
if (latLon2 != null) {
json.put("lat2", String.format(Locale.US, "%.5f", latLon2.getLatitude()));
json.put("lon2", String.format(Locale.US, "%.5f", latLon2.getLongitude()));
}
if (interpolationType != null) {
json.put("interpolationType", interpolationType.name());
}
if (interpolationInterval != 0) {
json.put("interpolationInterval", interpolationInterval);
}
json.put("name2", name2);
return json;
}
public static Building parseJSON(JSONObject json) throws IllegalArgumentException {
Building b = new Building();
MapObject.parseJSON(json, b);
if (json.has("postcode")) {
b.postcode = json.getString("postcode");
}
if (json.has("lat2") && json.has("lon2")) {
b.latLon2 = new LatLon(json.getDouble("lat2"), json.getDouble("lon2"));
}
if (json.has("interpolationType")) {
b.interpolationType = BuildingInterpolation.valueOf(json.getString("interpolationType"));
}
if (json.has("interpolationInterval")) {
b.interpolationInterval = json.getInt("interpolationInterval");
}
if (json.has("name2")) {
b.name2 = json.getString("name2");
}
return b;
}
}

View file

@ -1,5 +1,8 @@
package net.osmand.data;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
@ -55,7 +58,6 @@ public class City extends MapObject {
return new City(postcode, POSTCODE_INTERNAL_ID--);
}
public City(CityType type) {
if (type == null) {
throw new NullPointerException();
@ -156,4 +158,47 @@ public class City extends MapObject {
return m;
}
public JSONObject toJSON() {
return toJSON(true);
}
public JSONObject toJSON(boolean includingBuildings) {
JSONObject json = super.toJSON();
json.put("type", type.name());
json.put("postcode", postcode);
JSONArray listOfStreetsArr = new JSONArray();
for (Street s : listOfStreets) {
listOfStreetsArr.put(s.toJSON(includingBuildings));
}
json.put("listOfStreets", listOfStreetsArr);
return json;
}
public static City parseJSON(JSONObject json) throws IllegalArgumentException {
CityType type;
if (json.has("type")) {
type = CityType.valueOf(json.getString("type"));
} else {
throw new IllegalArgumentException();
}
City c = new City(type);
MapObject.parseJSON(json, c);
if (json.has("postcode")) {
c.postcode = json.getString("postcode");
}
if (json.has("listOfStreets")) {
JSONArray streetsArr = json.getJSONArray("listOfStreets");
c.listOfStreets = new ArrayList<>();
for (int i = 0; i < streetsArr.length(); i++) {
JSONObject streetObj = streetsArr.getJSONObject(i);
Street street = Street.parseJSON(c, streetObj);
if (street != null) {
c.listOfStreets.add(street);
}
}
}
return c;
}
}

View file

@ -1,19 +1,23 @@
package net.osmand.data;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.osmand.Collator;
import net.osmand.OsmAndCollator;
import net.osmand.util.Algorithms;
import net.sf.junidecode.Junidecode;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
public abstract class MapObject implements Comparable<MapObject> {
@ -73,6 +77,15 @@ public abstract class MapObject implements Comparable<MapObject> {
}
}
public void setNames(Map<String, String> name) {
if (name != null) {
if (names == null) {
names = new HashMap<String, String>();
}
names.putAll(name);
}
}
public Map<String, String> getNamesMap(boolean includeEn) {
if (!includeEn || Algorithms.isEmpty(enName)) {
if (names == null) {
@ -289,4 +302,48 @@ public abstract class MapObject implements Comparable<MapObject> {
return referenceFile;
}
public JSONObject toJSON() {
JSONObject json = new JSONObject();
json.put("name", name);
json.put("enName", enName);
if (names != null && names.size() > 0) {
JSONObject namesObj = new JSONObject();
for (Entry<String, String> e : names.entrySet()) {
namesObj.put(e.getKey(), e.getValue());
}
json.put("names", namesObj);
}
if (location != null) {
json.put("lat", String.format(Locale.US, "%.5f", location.getLatitude()));
json.put("lon", String.format(Locale.US, "%.5f", location.getLongitude()));
}
json.put("id", id);
return json;
}
protected static void parseJSON(JSONObject json, MapObject o) {
if (json.has("name")) {
o.name = json.getString("name");
}
if (json.has("enName")) {
o.enName = json.getString("enName");
}
if (json.has("names")) {
JSONObject namesObj = json.getJSONObject("names");
o.names = new HashMap<>();
Iterator<String> iterator = namesObj.keys();
while (iterator.hasNext()) {
String key = iterator.next();
String value = namesObj.getString(key);
o.names.put(key, value);
}
}
if (json.has("lat") && json.has("lon")) {
o.location = new LatLon(json.getDouble("lat"), json.getDouble("lon"));
}
if (json.has("id")) {
o.id = json.getLong("id");
}
}
}

View file

@ -1,12 +1,15 @@
package net.osmand.data;
import net.osmand.util.Algorithms;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import net.osmand.util.Algorithms;
public class Street extends MapObject {
@ -86,4 +89,57 @@ public class Street extends MapObject {
}
return nm;
}
public JSONObject toJSON() {
return toJSON(true);
}
public JSONObject toJSON(boolean includingBuildings) {
JSONObject json = super.toJSON();
if (buildings.size() > 0 && includingBuildings) {
JSONArray buildingsArr = new JSONArray();
for (Building b : buildings) {
buildingsArr.put(b.toJSON());
}
json.put("buildings", buildingsArr);
}
if (intersectedStreets != null) {
JSONArray intersectedStreetsArr = new JSONArray();
for (Street s : intersectedStreets) {
intersectedStreetsArr.put(s.toJSON());
}
json.put("intersectedStreets", intersectedStreetsArr);
}
return json;
}
public static Street parseJSON(City city, JSONObject json) throws IllegalArgumentException {
Street s = new Street(city);
MapObject.parseJSON(json, s);
if (json.has("buildings")) {
JSONArray buildingsArr = json.getJSONArray("buildings");
s.buildings = new ArrayList<>();
for (int i = 0; i < buildingsArr.length(); i++) {
JSONObject buildingObj = buildingsArr.getJSONObject(i);
Building building = Building.parseJSON(buildingObj);
if (building != null) {
s.buildings.add(building);
}
}
}
if (json.has("intersectedStreets")) {
JSONArray streetsArr = json.getJSONArray("intersectedStreets");
s.intersectedStreets = new ArrayList<>();
for (int i = 0; i < streetsArr.length(); i++) {
JSONObject streetObj = streetsArr.getJSONObject(i);
Street street = parseJSON(city, streetObj);
if (street != null) {
s.intersectedStreets.add(street);
}
}
}
return s;
}
}

View file

@ -1,5 +1,9 @@
package net.osmand.data;
import net.osmand.osm.edit.Node;
import net.osmand.osm.edit.Way;
import net.osmand.util.MapUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@ -8,10 +12,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.osmand.osm.edit.Node;
import net.osmand.osm.edit.Way;
import net.osmand.util.MapUtils;
public class TransportRoute extends MapObject {
private List<TransportStop> forwardStops = new ArrayList<TransportStop>();
private String ref;
@ -209,4 +209,16 @@ public class TransportRoute extends MapObject {
return d;
}
public String getAdjustedRouteRef() {
if (ref != null) {
int charPos = ref.lastIndexOf(':');
if (charPos != -1) {
ref = ref.substring(0, charPos);
}
if (ref.length() > 4) {
ref = ref.substring(0, 4);
}
}
return ref;
}
}

View file

@ -2,13 +2,20 @@ package net.osmand.data;
import net.osmand.util.MapUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TransportStop extends MapObject {
private int[] referencesToRoutes = null;
private Amenity amenity;
public int distance;
public int x31;
public int y31;
private List<TransportStopExit> exits;
private HashMap<String,String> names;
public TransportStop(){
}
@ -39,4 +46,35 @@ public class TransportStop extends MapObject {
y31 = dy << (31 - zoom);
setLocation(MapUtils.getLatitudeFromTile(zoom, dy), MapUtils.getLongitudeFromTile(zoom, dx));
}
public void addExit(TransportStopExit transportStopExit) {
if (exits == null) {
exits = new ArrayList<>();
}
exits.add(transportStopExit);
}
public List<TransportStopExit> getExits () {
if (exits == null) {
return Collections.emptyList();
}
return this.exits;
}
public String getExitsString () {
String exitsString = "";
String refString = "";
if (this.exits != null) {
int i = 1;
exitsString = exitsString + " Exits: [";
for (TransportStopExit e : this.exits ) {
if (e.getRef() != null) {
refString = " [ref:" + e.getRef() + "] ";
}
exitsString = exitsString + " " + i + ")" + refString + e.getName() + " " + e.getLocation() + " ]";
i++;
}
}
return exitsString;
}
}

View file

@ -0,0 +1,27 @@
package net.osmand.data;
import net.osmand.util.MapUtils;
public class TransportStopExit extends MapObject {
public int x31;
public int y31;
public String ref = null;
@Override
public void setLocation(double latitude, double longitude) {
super.setLocation(latitude, longitude);
}
public void setLocation(int zoom, int dx, int dy) {
x31 = dx << (31 - zoom);
y31 = dy << (31 - zoom);
setLocation(MapUtils.getLatitudeFromTile(zoom, dy), MapUtils.getLongitudeFromTile(zoom, dx));
}
public void setRef (String ref) {
this.ref = ref;
}
public String getRef() {
if (ref != null) {
return ref;
}
return "";
}
}

View file

@ -435,7 +435,6 @@ public class TileSourceManager {
public static java.util.List<TileSourceTemplate> getKnownSourceTemplates() {
java.util.List<TileSourceTemplate> list = new ArrayList<TileSourceTemplate>();
list.add(getMapnikSource());
list.add(getCycleMapSource());
list.add(getMapillaryRasterSource());
list.add(getMapillaryVectorSource());
return list;
@ -445,9 +444,6 @@ public class TileSourceManager {
return MAPNIK_SOURCE;
}
public static TileSourceTemplate getCycleMapSource(){
return CYCLE_MAP_SOURCE;
}
public static TileSourceTemplate getMapillaryRasterSource() {
return MAPILLARY_RASTER_SOURCE;

View file

@ -13,6 +13,7 @@ public class OSMSettings {
BOUNDARY("boundary"), //$NON-NLS-1$
POSTAL_CODE("postal_code"), //$NON-NLS-1$
RAILWAY("railway"), //$NON-NLS-1$
STATION("subway"), //$NON-NLS-1$
ONEWAY("oneway"), //$NON-NLS-1$
LAYER("layer"), //$NON-NLS-1$
BRIDGE("bridge"), //$NON-NLS-1$

View file

@ -194,7 +194,6 @@ public class Way extends Entity {
}
if (nodeIds != null) {
nodeIds.reverse();
;
}
}
}

View file

@ -32,6 +32,7 @@ public class GeneralRouter implements VehicleRouter {
public static final String AVOID_UNPAVED = "avoid_unpaved";
public static final String PREFER_MOTORWAYS = "prefer_motorway";
public static final String ALLOW_PRIVATE = "allow_private";
public static final String ALLOW_MOTORWAYS = "allow_motorway";
private final RouteAttributeContext[] objectAttributes;
public final Map<String, String> attributes;

View file

@ -55,6 +55,10 @@ public class RoutePlannerFrontEnd {
}
public RouteSegmentPoint findRouteSegment(double lat, double lon, RoutingContext ctx, List<RouteSegmentPoint> list) throws IOException {
return findRouteSegment(lat, lon, ctx, list, false);
}
public RouteSegmentPoint findRouteSegment(double lat, double lon, RoutingContext ctx, List<RouteSegmentPoint> list, boolean transportStop) throws IOException {
int px = MapUtils.get31TileNumberX(lon);
int py = MapUtils.get31TileNumberY(lat);
ArrayList<RouteDataObject> dataObjects = new ArrayList<RouteDataObject>();
@ -92,7 +96,26 @@ public class RoutePlannerFrontEnd {
}
});
if (list.size() > 0) {
RouteSegmentPoint ps = list.get(0);
RouteSegmentPoint ps = null;
if (ctx.publicTransport) {
for (RouteSegmentPoint p : list) {
if (transportStop && p.distSquare > 100) {
break;
}
boolean platform = p.road.platform();
if (transportStop && platform) {
ps = p;
break;
}
if (!transportStop && !platform) {
ps = p;
break;
}
}
}
if (ps == null) {
ps = list.get(0);
}
ps.others = list;
return ps;
}
@ -185,17 +208,17 @@ public class RoutePlannerFrontEnd {
}
int indexNotFound = 0;
List<RouteSegmentPoint> points = new ArrayList<RouteSegmentPoint>();
if (!addSegment(start, ctx, indexNotFound++, points)) {
if (!addSegment(start, ctx, indexNotFound++, points, ctx.startTransportStop)) {
return null;
}
if (intermediates != null) {
for (LatLon l : intermediates) {
if (!addSegment(l, ctx, indexNotFound++, points)) {
if (!addSegment(l, ctx, indexNotFound++, points, false)) {
return null;
}
}
}
if (!addSegment(end, ctx, indexNotFound++, points)) {
if (!addSegment(end, ctx, indexNotFound++, points, ctx.targetTransportStop)) {
return null;
}
ctx.calculationProgress.nextIteration();
@ -315,8 +338,8 @@ public class RoutePlannerFrontEnd {
}
private boolean addSegment(LatLon s, RoutingContext ctx, int indexNotFound, List<RouteSegmentPoint> res) throws IOException {
RouteSegmentPoint f = findRouteSegment(s.getLatitude(), s.getLongitude(), ctx, null);
private boolean addSegment(LatLon s, RoutingContext ctx, int indexNotFound, List<RouteSegmentPoint> res, boolean transportStop) throws IOException {
RouteSegmentPoint f = findRouteSegment(s.getLatitude(), s.getLongitude(), ctx, null, transportStop);
if (f == null) {
ctx.calculationProgress.segmentNotFound = indexNotFound;
return false;
@ -405,7 +428,8 @@ public class RoutePlannerFrontEnd {
long time = System.currentTimeMillis();
RouteSegmentResult[] res = ctx.nativeLib.runNativeRouting(ctx.startX, ctx.startY, ctx.targetX, ctx.targetY,
ctx.config, regions, ctx.calculationProgress, ctx.precalculatedRouteDirection, ctx.calculationMode == RouteCalculationMode.BASE);
ctx.config, regions, ctx.calculationProgress, ctx.precalculatedRouteDirection, ctx.calculationMode == RouteCalculationMode.BASE,
ctx.publicTransport, ctx.startTransportStop, ctx.targetTransportStop);
log.info("Native routing took " + (System.currentTimeMillis() - time) / 1000f + " seconds");
ArrayList<RouteSegmentResult> result = new ArrayList<RouteSegmentResult>(Arrays.asList(res));
if (recalculationEnd != null) {

View file

@ -41,7 +41,6 @@ public class RouteResultPreparation {
*/
List<RouteSegmentResult> prepareResult(RoutingContext ctx, FinalRouteSegment finalSegment) throws IOException {
List<RouteSegmentResult> result = convertFinalSegmentToResults(ctx, finalSegment);
combineWayPointsForAreaRouting(ctx, result);
prepareResult(ctx, result);
return result;
}
@ -158,6 +157,7 @@ public class RouteResultPreparation {
}
List<RouteSegmentResult> prepareResult(RoutingContext ctx, List<RouteSegmentResult> result) throws IOException {
combineWayPointsForAreaRouting(ctx, result);
validateAllPointsConnected(result);
splitRoadsAndAttachRoadSegments(ctx, result);
calculateTimeSpeed(ctx, result);

View file

@ -57,8 +57,11 @@ public class RoutingContext {
// 1. Initial variables
public int startX;
public int startY;
public boolean startTransportStop;
public int targetX;
public int targetY;
public boolean targetTransportStop;
public boolean publicTransport;
// deprecated
public long firstRoadId;
public int firstRoadDirection;

View file

@ -1,19 +1,5 @@
package net.osmand.router;
import gnu.trove.iterator.TIntIterator;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
import net.osmand.data.LatLon;
@ -24,11 +10,25 @@ import net.osmand.osm.edit.Node;
import net.osmand.osm.edit.Way;
import net.osmand.util.MapUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
import gnu.trove.iterator.TIntIterator;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
public class TransportRoutePlanner {
public List<TransportRouteResult> buildRoute(TransportRoutingContext ctx, LatLon start, LatLon end) throws IOException {
public List<TransportRouteResult> buildRoute(TransportRoutingContext ctx, LatLon start, LatLon end) throws IOException, InterruptedException {
ctx.startCalcTime = System.currentTimeMillis();
List<TransportRouteSegment> startStops = ctx.getTransportStops(start);
List<TransportRouteSegment> endStops = ctx.getTransportStops(end);
@ -45,8 +45,11 @@ public class TransportRoutePlanner {
}
double finishTime = ctx.cfg.maxRouteTime;
List<TransportRouteSegment> results = new ArrayList<TransportRouteSegment>();
initProgressBar(ctx, start, end);
while (!queue.isEmpty()) {
if (ctx.calculationProgress != null && ctx.calculationProgress.isCancelled) {
return null;
}
TransportRouteSegment segment = queue.poll();
TransportRouteSegment ex = ctx.visitedSegments.get(segment.getId());
if(ex != null) {
@ -56,7 +59,6 @@ public class TransportRoutePlanner {
continue;
}
ctx.visitedRoutesCount++;
System.out.println(segment);
ctx.visitedSegments.put(segment.getId(), segment);
if (segment.getDepth() > ctx.cfg.maxNumberOfChanges) {
continue;
@ -72,7 +74,10 @@ public class TransportRoutePlanner {
TransportStop prevStop = segment.getStop(segment.segStart);
List<TransportRouteSegment> sgms = new ArrayList<TransportRouteSegment>();
for (int ind = 1 + segment.segStart; ind < segment.getLength(); ind++) {
segmentId ++;
if (ctx.calculationProgress != null && ctx.calculationProgress.isCancelled) {
return null;
}
segmentId ++;
ctx.visitedSegments.put(segmentId, segment);
TransportStop stop = segment.getStop(ind);
// could be geometry size
@ -88,6 +93,9 @@ public class TransportRoutePlanner {
sgms.clear();
sgms = ctx.getTransportStops(stop.x31, stop.y31, true, sgms);
for (TransportRouteSegment sgm : sgms) {
if (ctx.calculationProgress != null && ctx.calculationProgress.isCancelled) {
return null;
}
if (segment.wasVisited(sgm)) {
continue;
}
@ -137,10 +145,36 @@ public class TransportRoutePlanner {
results.add(finish);
}
}
if (ctx.calculationProgress != null && ctx.calculationProgress.isCancelled) {
throw new InterruptedException("Route calculation interrupted");
}
updateCalculationProgress(ctx, queue);
}
return prepareResults(ctx, results);
}
private void initProgressBar(TransportRoutingContext ctx, LatLon start, LatLon end) {
ctx.calculationProgress.distanceFromEnd = 0;
ctx.calculationProgress.reverseSegmentQueueSize = 0;
ctx.calculationProgress.directSegmentQueueSize = 0;
float speed = (float) ctx.cfg.travelSpeed + 1; // assume
ctx.calculationProgress.totalEstimatedDistance = (float) (MapUtils.getDistance(start, end)/ speed);
}
private void updateCalculationProgress(TransportRoutingContext ctx, PriorityQueue<TransportRouteSegment> queue) {
if (ctx.calculationProgress != null) {
ctx.calculationProgress.directSegmentQueueSize = queue.size();
if (queue.size() > 0) {
TransportRouteSegment peek = queue.peek();
ctx.calculationProgress.distanceFromBegin = (float) Math.max(peek.distFromStart,
ctx.calculationProgress.distanceFromBegin);
}
}
}
private List<TransportRouteResult> prepareResults(TransportRoutingContext ctx, List<TransportRouteSegment> results) {
Collections.sort(results, new SegmentsComparator(ctx));
@ -149,11 +183,17 @@ public class TransportRoutePlanner {
(System.currentTimeMillis() - ctx.startCalcTime) / 1000.0, results.size(), ctx.visitedRoutesCount,
ctx.quadTree.size(), ctx.readTime / (1000 * 1000), ctx.loadTime / (1000 * 1000)));
for(TransportRouteSegment res : results) {
if (ctx.calculationProgress != null && ctx.calculationProgress.isCancelled) {
return null;
}
TransportRouteResult route = new TransportRouteResult(ctx);
route.routeTime = res.distFromStart;
route.finishWalkDist = res.walkDist;
TransportRouteSegment p = res;
while (p != null) {
if (ctx.calculationProgress != null && ctx.calculationProgress.isCancelled) {
return null;
}
if (p.parentRoute != null) {
TransportRouteResultSegment sg = new TransportRouteResultSegment(p.parentRoute.road,
p.parentRoute.segStart, p.parentStop, p.parentRoute.walkDist,
@ -165,6 +205,9 @@ public class TransportRoutePlanner {
// test if faster routes fully included
boolean include = false;
for(TransportRouteResult s : lst) {
if (ctx.calculationProgress != null && ctx.calculationProgress.isCancelled) {
return null;
}
if(includeRoute(s, route)) {
include = true;
break;
@ -255,7 +298,16 @@ public class TransportRoutePlanner {
public TransportStop getEnd() {
return route.getForwardStops().get(end);
}
public List<Node> getNodes() {
List<Node> nodes = new ArrayList<>();
List<Way> ways = getGeometry();
for (Way way : ways) {
nodes.addAll(way.getNodes());
}
return nodes;
}
public List<Way> getGeometry() {
List<Way> list = new ArrayList<Way>();
route.mergeForwardWays();
@ -327,7 +379,7 @@ public class TransportRoutePlanner {
public List<TransportRouteResultSegment> getSegments() {
return segments;
}
public double getWalkDist() {
double d = finishWalkDist;
for (TransportRouteResultSegment s : segments) {
@ -335,7 +387,15 @@ public class TransportRoutePlanner {
}
return d;
}
public double getFinishWalkDist() {
return finishWalkDist;
}
public double getWalkSpeed() {
return cfg.walkSpeed;
}
public double getRouteTime() {
return routeTime;
}

View file

@ -6,7 +6,9 @@ import net.osmand.PlatformUtil;
import net.osmand.ResultMatcher;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.data.Amenity;
import net.osmand.data.City;
import net.osmand.data.LatLon;
import net.osmand.data.MapObject;
import net.osmand.data.Street;
import net.osmand.osm.MapPoiTypes;
import net.osmand.search.core.CustomSearchPoiFilter;
@ -16,6 +18,7 @@ import net.osmand.search.core.SearchCoreFactory;
import net.osmand.search.core.SearchCoreFactory.SearchAmenityTypesAPI;
import net.osmand.search.core.SearchCoreFactory.SearchBuildingAndIntersectionsByStreetAPI;
import net.osmand.search.core.SearchCoreFactory.SearchStreetByCityAPI;
import net.osmand.search.core.SearchExportSettings;
import net.osmand.search.core.SearchPhrase;
import net.osmand.search.core.SearchPhrase.NameStringMatcher;
import net.osmand.search.core.SearchResult;
@ -25,14 +28,18 @@ import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import org.apache.commons.logging.Log;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@ -312,7 +319,7 @@ public class SearchUICore {
SearchAmenityTypesAPI searchAmenityTypesAPI = new SearchAmenityTypesAPI(poiTypes);
apis.add(searchAmenityTypesAPI);
apis.add(new SearchCoreFactory.SearchAmenityByTypeAPI(poiTypes, searchAmenityTypesAPI));
apis.add(new SearchCoreFactory.SearchAmenityByNameAPI(searchAmenityTypesAPI));
apis.add(new SearchCoreFactory.SearchAmenityByNameAPI());
SearchBuildingAndIntersectionsByStreetAPI streetsApi =
new SearchCoreFactory.SearchBuildingAndIntersectionsByStreetAPI();
apis.add(streetsApi);
@ -480,7 +487,7 @@ public class SearchUICore {
}
return;
}
searchInBackground(phrase, rm);
searchInternal(phrase, rm);
if (!rm.isCancelled()) {
SearchResultCollection collection = new SearchResultCollection(
phrase);
@ -492,6 +499,9 @@ public class SearchUICore {
LOG.info("Finishing search <" + phrase + "> Results=" + rm.getRequestResults().size());
}
currentSearchResult = collection;
if (phrase.getSettings().isExportObjects()) {
//rm.createTestJSON(collection);
}
rm.searchFinished(phrase);
if (onResultsComplete != null) {
onResultsComplete.run();
@ -548,7 +558,7 @@ public class SearchUICore {
return radius;
}
private void searchInBackground(final SearchPhrase phrase, SearchResultMatcher matcher) {
void searchInternal(final SearchPhrase phrase, SearchResultMatcher matcher) {
preparePhrase(phrase);
ArrayList<SearchCoreAPI> lst = new ArrayList<>(apis);
Collections.sort(lst, new Comparator<SearchCoreAPI>() {
@ -600,10 +610,7 @@ public class SearchUICore {
}
}
public static class SearchResultMatcher implements ResultMatcher<SearchResult>{
public static class SearchResultMatcher implements ResultMatcher<SearchResult>{
private final List<SearchResult> requestResults = new ArrayList<>();
private final ResultMatcher<SearchResult> matcher;
private final int request;
@ -612,7 +619,8 @@ public class SearchUICore {
private final AtomicInteger requestNumber;
int count = 0;
private SearchPhrase phrase;
private List<MapObject> exportedObjects;
private List<City> exportedCities;
public SearchResultMatcher(ResultMatcher<SearchResult> matcher, SearchPhrase phrase, int request,
AtomicInteger requestNumber, int totalLimit) {
@ -714,6 +722,108 @@ public class SearchUICore {
boolean cancelled = request != requestNumber.get();
return cancelled || (matcher != null && matcher.isCancelled());
}
public List<MapObject> getExportedObjects() {
return exportedObjects;
}
public List<City> getExportedCities() {
return exportedCities;
}
public void exportObject(MapObject object) {
if (exportedObjects == null) {
exportedObjects = new ArrayList<>();
}
exportedObjects.add(object);
}
public void exportCity(City city) {
if (exportedCities == null) {
exportedCities = new ArrayList<>();
}
exportedCities.add(city);
}
public JSONObject createTestJSON(SearchResultCollection searchResult) {
JSONObject json = new JSONObject();
Set<Amenity> amenities = new HashSet<>();
Set<City> cities;
Set<City> matchedCities = new HashSet<>();
Set<City> streetCities = new HashSet<>();
if (exportedCities != null) {
cities = new HashSet<>(exportedCities);
} else {
cities = new HashSet<>();
}
Set<Street> streets = new HashSet<>();
for (MapObject obj : exportedObjects) {
if (obj instanceof Amenity) {
amenities.add((Amenity) obj);
} else if (obj instanceof Street) {
Street street = (Street) obj;
streets.add(street);
if (street.getCity() != null) {
final City city = street.getCity();
cities.add(city);
streetCities.add(city);
}
} else if (obj instanceof City) {
City city = (City) obj;
cities.add(city);
matchedCities.add(city);
}
}
for (City city : cities) {
List<Street> cityStreets = city.getStreets();
for (Street street : streets) {
if (city.equals(street.getCity()) && !cityStreets.contains(street)) {
cityStreets.add(street);
}
}
}
SearchExportSettings exportSettings = phrase.getSettings().getExportSettings();
json.put("settings", phrase.getSettings().toJSON());
json.put("phrase", phrase.getRawUnknownSearchPhrase());
if (searchResult.searchResults != null && searchResult.searchResults.size() > 0) {
JSONArray resultsArr = new JSONArray();
for (SearchResult r : searchResult.searchResults) {
resultsArr.put(r.toString());
}
json.put("results", resultsArr);
}
if (amenities.size() > 0) {
JSONArray amenitiesArr = new JSONArray();
for (Amenity amenity : amenities) {
amenitiesArr.put(amenity.toJSON());
}
json.put("amenities", amenitiesArr);
}
if (cities.size() > 0) {
JSONArray citiesArr = new JSONArray();
for (City city : cities) {
final JSONObject cityObj = city.toJSON(exportSettings.isExportBuildings());
if (exportedCities.contains(city)) {
if (!exportSettings.isExportEmptyCities()) {
continue;
}
cityObj.put("init", 1);
}
if (matchedCities.contains(city)) {
cityObj.put("matchCity", 1);
}
if (streetCities.contains(city)) {
cityObj.put("matchStreet", 1);
}
citiesArr.put(cityObj);
}
json.put("cities", citiesArr);
}
return json;
}
}
public static class SearchResultComparator implements Comparator<SearchResult> {
@ -731,8 +841,14 @@ public class SearchUICore {
@Override
public int compare(SearchResult o1, SearchResult o2) {
if (o1.getFoundWordCount() != o2.getFoundWordCount()) {
return -Algorithms.compare(o1.getFoundWordCount(), o2.getFoundWordCount());
boolean topVisible1 = ObjectType.isTopVisible(o1.objectType);
boolean topVisible2 = ObjectType.isTopVisible(o2.objectType);
if ((!topVisible1 && !topVisible2) || (topVisible1 && topVisible2)) {
if (o1.isUnknownPhraseMatches() != o2.isUnknownPhraseMatches()) {
return o1.isUnknownPhraseMatches() ? -1 : 1;
} else if (o1.getFoundWordCount() != o2.getFoundWordCount()) {
return -Algorithms.compare(o1.getFoundWordCount(), o2.getFoundWordCount());
}
}
if (!sortByName) {
double s1 = o1.getSearchDistance(loc);
@ -747,6 +863,17 @@ public class SearchUICore {
if (st1 != st2) {
return Algorithms.compare(st1, st2);
}
if (o1.parentSearchResult != null && o2.parentSearchResult != null) {
if (o1.parentSearchResult == o2.parentSearchResult) {
int cmp = collator.compare(o1.localeName, o2.localeName);
if (cmp != 0) {
return cmp;
}
}
double s1 = o1.getSearchDistance(loc, 1);
double s2 = o2.getSearchDistance(loc, 1);
return Double.compare(s1, s2);
}
int cmp = collator.compare(o1.localeName, o2.localeName);
if (cmp != 0) {
return cmp;

View file

@ -34,6 +34,10 @@ public enum ObjectType {
return t == CITY || t == VILLAGE || t == POSTCODE || t == STREET || t == HOUSE || t == STREET_INTERSECTION;
}
public static boolean isTopVisible(ObjectType t) {
return t == POI_TYPE || t == FAVORITE || t == FAVORITE_GROUP || t == WPT || t == LOCATION || t == PARTIAL_LOCATION;
}
public static ObjectType getExclusiveSearchType(ObjectType t) {
if (t == FAVORITE_GROUP) {
return FAVORITE;

View file

@ -226,8 +226,6 @@ public class SearchCoreFactory {
return retName;
}
public static class SearchAddressByNameAPI extends SearchBaseAPI {
private static final int DEFAULT_ADDRESS_BBOX_RADIUS = 100 * 1000;
@ -315,18 +313,17 @@ public class SearchCoreFactory {
if (phrase.isNoSelectedType() && bbox != null
&& (phrase.isUnknownSearchWordPresent() || phrase.isEmptyQueryAllowed())
&& phrase.isSearchTypeAllowed(ObjectType.CITY)) {
String wrd = phrase.getUnknownWordToSearch();
NameStringMatcher nm = phrase.getNameStringMatcher(wrd, phrase.isUnknownSearchWordComplete());
String unknownSearchPhrase = phrase.getUnknownSearchPhrase().trim();
NameStringMatcher phraseMatcher = null;
if (!Algorithms.isEmpty(unknownSearchPhrase)) {
phraseMatcher = new NameStringMatcher(unknownSearchPhrase, StringMatcherMode.CHECK_EQUALS);
}
// NameStringMatcher nm = phrase.getNameStringMatcher();
String word = phrase.getUnknownWordToSearch();
NameStringMatcher nm = phrase.getNameStringMatcher(word, phrase.isUnknownSearchWordComplete());
NameStringMatcher wordEqualsMatcher = phrase.getNameStringMatcher(word, true);
boolean firstUnknownWordMatches = word.equals(phrase.getUnknownSearchWord());
resArray.clear();
resArray = townCitiesQR.queryInBox(bbox, resArray);
int limit = 0;
for (City c : resArray) {
if (phrase.getSettings().isExportObjects()) {
resultMatcher.exportCity(c);
}
SearchResult res = new SearchResult(phrase);
res.object = c;
res.file = (BinaryMapIndexReader) c.getReferenceFile();
@ -341,10 +338,8 @@ public class SearchCoreFactory {
if (phrase.isEmptyQueryAllowed() && phrase.isEmpty()) {
resultMatcher.publish(res);
} else if (nm.matches(res.localeName) || nm.matches(res.otherNames)) {
res.firstUnknownWordMatches = wrd.equals(phrase.getUnknownSearchWord());
if (phraseMatcher != null) {
res.unknownPhraseMatches = phraseMatcher.matches(res.localeName) || phraseMatcher.matches(res.otherNames);
}
res.firstUnknownWordMatches = firstUnknownWordMatches;
res.unknownPhraseMatches = wordEqualsMatcher.matches(res.localeName);
subSearchApiOrPublish(phrase, resultMatcher, res, cityApi);
}
if (limit++ > LIMIT * phrase.getRadiusLevel()) {
@ -354,7 +349,6 @@ public class SearchCoreFactory {
}
}
private void searchByName(final SearchPhrase phrase, final SearchResultMatcher resultMatcher)
throws IOException {
if (phrase.getRadiusLevel() > 1 || phrase.getUnknownSearchWordLength() > 3 || phrase.getUnknownSearchWords().size() > 0) {
@ -368,12 +362,14 @@ public class SearchCoreFactory {
final int priority = phrase.isNoSelectedType() ?
SEARCH_ADDRESS_BY_NAME_PRIORITY : SEARCH_ADDRESS_BY_NAME_PRIORITY_RADIUS2;
final BinaryMapIndexReader[] currentFile = new BinaryMapIndexReader[1];
ResultMatcher<MapObject> rm = new ResultMatcher<MapObject>() {
int limit = 0;
@Override
public boolean publish(MapObject object) {
if (phrase.getSettings().isExportObjects()) {
resultMatcher.exportObject(object);
}
if (isCancelled()) {
return false;
}
@ -415,7 +411,6 @@ public class SearchCoreFactory {
|| !phrase.isSearchTypeAllowed(ObjectType.CITY)) {
return false;
}
sr.objectType = ObjectType.CITY;
sr.priorityDistance = 0.1;
} else if (((City)object).isPostcode()) {
@ -425,7 +420,7 @@ public class SearchCoreFactory {
}
sr.objectType = ObjectType.POSTCODE;
sr.priorityDistance = 0;
} else {
} else {
if ((locSpecified && !villagesBbox.contains(x, y, x, y))
|| !phrase.isSearchTypeAllowed(ObjectType.VILLAGE)) {
return false;
@ -460,8 +455,6 @@ public class SearchCoreFactory {
return false;
}
@Override
public boolean isCancelled() {
return limit > LIMIT * phrase.getRadiusLevel() ||
@ -472,11 +465,8 @@ public class SearchCoreFactory {
SearchPhraseDataType.ADDRESS);
String wordToSearch = phrase.getUnknownWordToSearch();
String unknownSearchPhrase = phrase.getUnknownSearchPhrase().trim();
NameStringMatcher phraseMatcher = null;
if (!Algorithms.isEmpty(unknownSearchPhrase)) {
phraseMatcher = new NameStringMatcher(unknownSearchPhrase, StringMatcherMode.CHECK_EQUALS);
}
NameStringMatcher wordEqualsMatcher = phrase.getNameStringMatcher(wordToSearch, true);
boolean firstUnknownWordMatches = wordToSearch.equals(phrase.getUnknownSearchWord());
while (offlineIterator.hasNext() && wordToSearch.length() > 0) {
BinaryMapIndexReader r = offlineIterator.next();
currentFile[0] = r;
@ -490,10 +480,8 @@ public class SearchCoreFactory {
}
r.searchAddressDataByName(req);
for (SearchResult res : immediateResults) {
res.firstUnknownWordMatches = wordToSearch.equals(phrase.getUnknownSearchWord());
if (phraseMatcher != null) {
res.unknownPhraseMatches = phraseMatcher.matches(res.localeName) || phraseMatcher.matches(res.otherNames);
}
res.firstUnknownWordMatches = firstUnknownWordMatches;
res.unknownPhraseMatches = wordEqualsMatcher.matches(res.localeName);
if (res.objectType == ObjectType.STREET) {
City ct = ((Street) res.object).getCity();
phrase.countUnknownWordsMatch(res,
@ -510,18 +498,14 @@ public class SearchCoreFactory {
}
}
public static class SearchAmenityByNameAPI extends SearchBaseAPI {
private static final int LIMIT = 10000;
private static final int BBOX_RADIUS = 500 * 1000;
private static final int BBOX_RADIUS_INSIDE = 10000 * 1000; // to support city search for basemap
private static final int FIRST_WORD_MIN_LENGTH = 3;
private SearchAmenityTypesAPI searchAmenityTypesAPI;
public SearchAmenityByNameAPI(SearchAmenityTypesAPI searchAmenityTypesAPI) {
public SearchAmenityByNameAPI() {
super(ObjectType.POI);
this.searchAmenityTypesAPI = searchAmenityTypesAPI;
}
@Override
@ -530,7 +514,7 @@ public class SearchCoreFactory {
return false;
}
if (phrase.isNoSelectedType() && phrase.isUnknownSearchWordPresent()
&& phrase.isUnknownSearchWordComplete() && searchAmenityTypesAPI.hasFoundPoiTypes()) {
&& phrase.isUnknownSearchWordComplete() && phrase.hasUnknownSearchWordPoiTypes()) {
return false;
}
final BinaryMapIndexReader[] currentFile = new BinaryMapIndexReader[1];
@ -556,6 +540,9 @@ public class SearchCoreFactory {
int limit = 0;
@Override
public boolean publish(Amenity object) {
if (phrase.getSettings().isExportObjects()) {
resultMatcher.exportObject(object);
}
if (limit ++ > LIMIT) {
return false;
}
@ -587,7 +574,7 @@ public class SearchCoreFactory {
}
sr.priority = SEARCH_AMENITY_BY_NAME_PRIORITY;
if (phraseMatcher != null) {
sr.unknownPhraseMatches = phraseMatcher.matches(sr.localeName) || phraseMatcher.matches(sr.otherNames);
sr.unknownPhraseMatches = phraseMatcher.matches(sr.localeName);
}
phrase.countUnknownWordsMatch(sr);
sr.objectType = ObjectType.POI;
@ -643,8 +630,6 @@ public class SearchCoreFactory {
}
}
public static class SearchAmenityTypesAPI extends SearchBaseAPI {
private Map<String, PoiType> translatedNames = new LinkedHashMap<>();
@ -653,30 +638,12 @@ public class SearchCoreFactory {
private List<CustomSearchPoiFilter> customPoiFilters = new ArrayList<>();
private TIntArrayList customPoiFiltersPriorites = new TIntArrayList();
private MapPoiTypes types;
private List<AbstractPoiType> foundPoiTypes = new ArrayList<>();
private SearchPhrase lastSearchedPhrase;
public SearchAmenityTypesAPI(MapPoiTypes types) {
super(ObjectType.POI_TYPE);
this.types = types;
}
public List<AbstractPoiType> getFoundPoiTypes() {
return foundPoiTypes;
}
public boolean hasFoundPoiTypes() {
return foundPoiTypes.size() > 0;
}
public SearchPhrase getLastSearchedPhrase() {
return lastSearchedPhrase;
}
public void setLastSearchedPhrase(SearchPhrase lastSearchedPhrase) {
this.lastSearchedPhrase = lastSearchedPhrase;
}
public void clearCustomFilters() {
this.customPoiFilters.clear();
this.customPoiFiltersPriorites.clear();
@ -695,8 +662,13 @@ public class SearchCoreFactory {
categories = types.getCategories(false);
}
List<AbstractPoiType> results = new ArrayList<AbstractPoiType>();
NameStringMatcher nm =
new NameStringMatcher(phrase.getUnknownSearchPhrase(), StringMatcherMode.CHECK_ONLY_STARTS_WITH_TRIM);
NameStringMatcher nm;
String unknownSearchPhrase = phrase.getUnknownSearchPhrase();
if (phrase.getUnknownSearchWord().length() < unknownSearchPhrase.length()) {
nm = new NameStringMatcher(unknownSearchPhrase, StringMatcherMode.CHECK_ONLY_STARTS_WITH_TRIM);
} else {
nm = new NameStringMatcher(unknownSearchPhrase, StringMatcherMode.CHECK_STARTS_FROM_SPACE);
}
for (AbstractPoiType pf : topVisibleFilters) {
if (!phrase.isUnknownSearchWordPresent()
|| nm.matches(pf.getTranslation())
@ -728,21 +700,23 @@ public class SearchCoreFactory {
List<PoiType> additionals = pt.getPoiAdditionals();
if (additionals != null) {
for (PoiType a : additionals) {
if (!a.isReference() && !results.contains(a)
&& (nm.matches(a.getEnTranslation())
|| nm.matches(a.getTranslation())
|| nm.matches(a.getSynonyms()))) {
results.add(a);
if (!a.isReference() && !results.contains(a)) {
String enTranslation = a.getEnTranslation().toLowerCase();
if (!"yes".equals(enTranslation) && !"no".equals(enTranslation)
&& (nm.matches(enTranslation) || nm.matches(a.getTranslation()) || nm.matches(a.getSynonyms()))) {
results.add(a);
}
}
}
}
}
}
}
foundPoiTypes = new ArrayList<>(results);
lastSearchedPhrase = phrase;
phrase.setUnknownSearchWordPoiTypes(new ArrayList<>(results));
if (resultMatcher != null) {
String word = phrase.getUnknownSearchWord();
NameStringMatcher startMatch = new NameStringMatcher(word, StringMatcherMode.CHECK_ONLY_STARTS_WITH);
for (AbstractPoiType pt : results) {
SearchResult res = new SearchResult(phrase);
res.localeName = pt.getTranslation();
@ -750,6 +724,7 @@ public class SearchCoreFactory {
res.priority = SEARCH_AMENITY_TYPE_PRIORITY;
res.priorityDistance = 0;
res.objectType = ObjectType.POI_TYPE;
res.firstUnknownWordMatches = startMatch.matches(res.localeName);
resultMatcher.publish(res);
}
for (int i = 0; i < customPoiFilters.size(); i++) {
@ -781,12 +756,14 @@ public class SearchCoreFactory {
if (!p.isNoSelectedType() && !p.isUnknownSearchWordPresent()) {
return -1;
}
SearchWord lastSelectedWord = p.getLastSelectedWord();
if (lastSelectedWord != null && ObjectType.isAddress(lastSelectedWord.getType())) {
return -1;
}
return SEARCH_AMENITY_TYPE_API_PRIORITY;
}
}
public static class SearchAmenityByTypeAPI extends SearchBaseAPI {
private static final int BBOX_RADIUS = 10000;
private SearchAmenityTypesAPI searchAmenityTypesAPI;
@ -852,18 +829,16 @@ public class SearchCoreFactory {
}
searchPoi(phrase, resultMatcher, obj, null, ptf);
} else if (searchAmenityTypesAPI != null) {
if (searchAmenityTypesAPI.lastSearchedPhrase == null
|| !searchAmenityTypesAPI.lastSearchedPhrase.getUnknownSearchPhrase().equals(phrase.getUnknownSearchPhrase())) {
if (phrase.getUnknownSearchWordPoiTypes() == null) {
searchAmenityTypesAPI.search(phrase, null);
}
List<AbstractPoiType> poiTypes = searchAmenityTypesAPI.getFoundPoiTypes();
for (AbstractPoiType pt : poiTypes) {
SearchPoiTypeFilter ptf = getPoiTypeFilter(pt);
String customName = phrase.getPoiNameFilter(pt);
AbstractPoiType poiType = phrase.getUnknownSearchWordPoiType();
if (poiType != null) {
SearchPoiTypeFilter ptf = getPoiTypeFilter(poiType);
String customName = phrase.getPoiNameFilter(poiType);
if (customName != null) {
phrase.setUnknownSearchWordPoiType(pt);
searchPoi(phrase, resultMatcher, null, customName, ptf);
break;
phrase.setUnknownSearchWordPoiType(poiType);
searchPoi(phrase, resultMatcher, null, customName.length() == 0 ? null : customName, ptf);
}
}
}
@ -909,6 +884,9 @@ public class SearchCoreFactory {
@Override
public boolean publish(Amenity object) {
if (phrase.getSettings().isExportObjects()) {
resultMatcher.exportObject(object);
}
SearchResult res = new SearchResult(phrase);
String poiID = object.getType().getKeyName() + "_" + object.getId();
if(!searchedPois.add(poiID)) {
@ -939,7 +917,14 @@ public class SearchCoreFactory {
res.priority = SEARCH_AMENITY_BY_TYPE_PRIORITY;
res.priorityDistance = 1;
if (phraseMatcher != null) {
res.unknownPhraseMatches = phraseMatcher.matches(res.localeName) || phraseMatcher.matches(res.otherNames);
boolean unknownPhraseMatches = phraseMatcher.matches(res.localeName);
AbstractPoiType unknownSearchWordPoiType = phrase.getUnknownSearchWordPoiType();
if (unknownPhraseMatches && unknownSearchWordPoiType != null) {
unknownPhraseMatches = !phraseMatcher.matches(unknownSearchWordPoiType.getTranslation())
&& !phraseMatcher.matches(unknownSearchWordPoiType.getEnTranslation())
&& !phraseMatcher.matches(unknownSearchWordPoiType.getSynonyms());
}
res.unknownPhraseMatches = unknownPhraseMatches;
}
res.objectType = ObjectType.POI;
resultMatcher.publish(res);
@ -988,15 +973,13 @@ public class SearchCoreFactory {
@Override
public int getSearchPriority(SearchPhrase p) {
if ((p.isLastWord(ObjectType.POI_TYPE) && p.getLastTokenLocation() != null)
|| (p.isNoSelectedType() && p.isUnknownSearchWordComplete())) {
|| (p.isNoSelectedType())) {
return SEARCH_AMENITY_BY_TYPE_PRIORITY;
}
return -1;
}
}
public static class SearchStreetByCityAPI extends SearchBaseAPI {
private static final int DEFAULT_ADDRESS_BBOX_RADIUS = 100 * 1000;
@ -1058,7 +1041,7 @@ public class SearchCoreFactory {
phrase.getNameStringMatcher().matches(res.localeName) ||
phrase.getNameStringMatcher().matches(res.otherNames);
if (phraseMatcher != null) {
res.unknownPhraseMatches = phraseMatcher.matches(res.localeName) || phraseMatcher.matches(res.otherNames);
res.unknownPhraseMatches = phraseMatcher.matches(res.localeName);
}
res.localeRelatedObjectName = c.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
res.object = object;
@ -1094,8 +1077,6 @@ public class SearchCoreFactory {
p.isLastWord(ObjectType.VILLAGE);
}
public static class SearchBuildingAndIntersectionsByStreetAPI extends SearchBaseAPI {
Street cacheBuilding;
@ -1169,6 +1150,7 @@ public class SearchCoreFactory {
}
String lw = phrase.getUnknownWordToSearchBuilding();
NameStringMatcher buildingMatch = phrase.getNameStringMatcher(lw, phrase.isLastUnknownSearchWordComplete());
NameStringMatcher startMatch = new NameStringMatcher(lw, StringMatcherMode.CHECK_ONLY_STARTS_WITH);
for (Building b : s.getBuildings()) {
SearchResult res = new SearchResult(phrase);
boolean interpolation = b.belongsToInterpolation(lw);
@ -1182,6 +1164,7 @@ public class SearchCoreFactory {
res.file = file;
res.priority = priority;
res.priorityDistance = 0;
res.firstUnknownWordMatches = startMatch.matches(res.localeName);
res.relatedObject = s;
res.localeRelatedObjectName = s.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
res.objectType = ObjectType.HOUSE;
@ -1235,8 +1218,6 @@ public class SearchCoreFactory {
}
}
public static class SearchLocationAndUrlAPI extends SearchBaseAPI {
public SearchLocationAndUrlAPI() {
@ -1355,9 +1336,10 @@ public class SearchCoreFactory {
@Override
public int getSearchPriority(SearchPhrase p) {
if (!p.isNoSelectedType() || !p.isUnknownSearchWordPresent()) {
return -1;
}
return SEARCH_LOCATION_PRIORITY;
}
}
}

View file

@ -0,0 +1,32 @@
package net.osmand.search.core;
public class SearchExportSettings {
private boolean exportEmptyCities;
private boolean exportBuildings;
public SearchExportSettings() {
exportEmptyCities = true;
exportBuildings = true;
}
public SearchExportSettings(boolean exportEmptyCities, boolean exportBuildings) {
this.exportEmptyCities = exportEmptyCities;
this.exportBuildings = exportBuildings;
}
public boolean isExportEmptyCities() {
return exportEmptyCities;
}
public void setExportEmptyCities(boolean exportEmptyCities) {
this.exportEmptyCities = exportEmptyCities;
}
public boolean isExportBuildings() {
return exportBuildings;
}
public void setExportBuildings(boolean exportBuildings) {
this.exportBuildings = exportBuildings;
}
}

View file

@ -36,6 +36,7 @@ public class SearchPhrase {
private String rawUnknownSearchPhrase = "";
private String unknownSearchPhrase = "";
private AbstractPoiType unknownSearchWordPoiType;
private List<AbstractPoiType> unknownSearchWordPoiTypes = null;
private NameStringMatcher sm;
private SearchSettings settings;
@ -47,7 +48,8 @@ public class SearchPhrase {
private static final String ALLDELIMITERS = "\\s|,";
private static final Pattern reg = Pattern.compile(ALLDELIMITERS);
private Collator clt;
private static Comparator<String> commonWordsComparator;
private static Set<String> conjunctions = new TreeSet<>();
static {
// the
@ -110,6 +112,20 @@ public class SearchPhrase {
conjunctions.add("den");
conjunctions.add("dr");
conjunctions.add("y");
commonWordsComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int i1 = CommonWords.getCommonSearch(o1.toLowerCase());
int i2 = CommonWords.getCommonSearch(o2.toLowerCase());
if (i1 != i2) {
return icompare(i1, i2);
}
// compare length without numbers to not include house numbers
return -icompare(lengthWithoutNumbers(o1), lengthWithoutNumbers(o2));
}
};
}
@ -141,7 +157,7 @@ public class SearchPhrase {
for(SearchWord w : leftWords) {
if(restText.startsWith(w.getWord() + DELIMITER)) {
sp.words.add(w);
restText = restText.substring(w.getWord().length() + DELIMITER.length()).trim();
restText = restText.substring(w.getWord().length() + DELIMITER.length());
} else {
break;
}
@ -186,7 +202,7 @@ public class SearchPhrase {
public boolean isUnknownSearchWordComplete() {
return lastUnknownSearchWordComplete || unknownWords.size() > 0;
return lastUnknownSearchWordComplete || unknownWords.size() > 0 || unknownSearchWordPoiType != null;
}
public boolean isLastUnknownSearchWordComplete() {
@ -248,6 +264,24 @@ public class SearchPhrase {
return getPoiNameFilter(unknownSearchWordPoiType);
}
public boolean hasUnknownSearchWordPoiTypes() {
return unknownSearchWordPoiTypes != null && unknownSearchWordPoiTypes.size() > 0;
}
public List<AbstractPoiType> getUnknownSearchWordPoiTypes() {
return unknownSearchWordPoiTypes;
}
public void setUnknownSearchWordPoiTypes(List<AbstractPoiType> unknownSearchWordPoiTypes) {
this.unknownSearchWordPoiTypes = unknownSearchWordPoiTypes;
for (AbstractPoiType pt : unknownSearchWordPoiTypes) {
if (getPoiNameFilter(pt) != null) {
setUnknownSearchWordPoiType(pt);
break;
}
}
}
public String getPoiNameFilter(AbstractPoiType pt) {
String nameFilter = null;
if (pt != null) {
@ -256,11 +290,11 @@ public class SearchPhrase {
String enTranslation = pt.getEnTranslation();
String translation = pt.getTranslation();
String synonyms = pt.getSynonyms();
if (unknownSearchPhrase.length() > enTranslation.length() && nm.matches(enTranslation)) {
if (unknownSearchPhrase.length() >= enTranslation.length() && nm.matches(enTranslation)) {
nameFilter = unknownSearchPhrase.substring(enTranslation.length()).trim();
} else if (unknownSearchPhrase.length() > translation.length() && nm.matches(translation)) {
} else if (unknownSearchPhrase.length() >= translation.length() && nm.matches(translation)) {
nameFilter = unknownSearchPhrase.substring(translation.length()).trim();
} else if (unknownSearchPhrase.length() > synonyms.length() && nm.matches(synonyms)) {
} else if (unknownSearchPhrase.length() >= synonyms.length() && nm.matches(synonyms)) {
nameFilter = unknownSearchPhrase.substring(synonyms.length()).trim();
}
}
@ -727,42 +761,32 @@ public class SearchPhrase {
}
return getUnknownSearchWord();
}
private static int lengthWithoutNumbers(String s) {
int len = 0;
for(int k = 0; k < s.length(); k++) {
if (s.charAt(k) >= '0' && s.charAt(k) <= '9') {
} else {
len++;
}
}
return len;
}
public String getUnknownWordToSearch() {
List<String> unknownSearchWords = getUnknownSearchWords();
String wordToSearch = getUnknownSearchWord();
if (unknownSearchWords.size() > 0) {
List<String> searchWords = new ArrayList<>(unknownSearchWords);
searchWords.add(0, getUnknownSearchWord());
Collections.sort(searchWords, new Comparator<String>() {
private int lengthWithoutNumbers(String s) {
int len = 0;
for(int k = 0; k < s.length(); k++) {
if(s.charAt(k) >= '0' && s.charAt(k) <= '9') {
} else {
len++;
}
}
return len;
Collections.sort(searchWords, commonWordsComparator);
for (String s : searchWords) {
if (s.length() > 0 && !Character.isDigit(s.charAt(0))) {
return s;
}
@Override
public int compare(String o1, String o2) {
int i1 = CommonWords.getCommonSearch(o1.toLowerCase());
int i2 = CommonWords.getCommonSearch(o2.toLowerCase());
if (i1 != i2) {
return icompare(i1, i2);
}
// compare length without numbers to not include house numbers
return -icompare(lengthWithoutNumbers(o1), lengthWithoutNumbers(o2));
}
});
wordToSearch = searchWords.get(0);
}
}
return wordToSearch;
}

View file

@ -1,11 +1,19 @@
package net.osmand.search.core;
import java.util.Collection;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.data.Amenity;
import net.osmand.data.City;
import net.osmand.data.LatLon;
import net.osmand.data.Street;
import net.osmand.osm.AbstractPoiType;
import net.osmand.osm.PoiCategory;
import net.osmand.osm.PoiFilter;
import net.osmand.osm.PoiType;
import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import java.util.Collection;
public class SearchResult {
// search phrase that makes search result valid
public SearchPhrase requiredSearchPhrase;
@ -21,24 +29,28 @@ public class SearchResult {
public Collection<String> otherWordsMatch = null;
public boolean firstUnknownWordMatches = true;
public boolean unknownPhraseMatches = false;
public boolean isUnknownPhraseMatches() {
boolean res = unknownPhraseMatches;
if (!res && parentSearchResult != null) {
res = parentSearchResult.unknownPhraseMatches;
}
return res;
}
public SearchResult(SearchPhrase sp) {
this.requiredSearchPhrase = sp;
}
public int getFoundWordCount() {
int inc = 0;
if(firstUnknownWordMatches) {
if (firstUnknownWordMatches) {
inc = 1;
}
if (unknownPhraseMatches) {
inc += 1000;
}
if(otherWordsMatch != null) {
if (otherWordsMatch != null) {
inc += otherWordsMatch.size();
}
if(parentSearchResult != null) {
if (parentSearchResult != null) {
inc += parentSearchResult.getFoundWordCount();
}
return inc;
@ -70,11 +82,64 @@ public class SearchResult {
public String localeRelatedObjectName;
public Object relatedObject;
public double distRelatedObjectName;
@Override
public String toString() {
StringBuilder b = new StringBuilder();
if (!Algorithms.isEmpty(localeName)) {
b.append(localeName);
}
if (!Algorithms.isEmpty(localeRelatedObjectName)) {
if (b.length() > 0) {
b.append(", ");
}
b.append(localeRelatedObjectName);
if (relatedObject instanceof Street) {
Street street = (Street) relatedObject;
City city = street.getCity();
if (city != null) {
b.append(", ").append(city.getName(requiredSearchPhrase.getSettings().getLang(),
requiredSearchPhrase.getSettings().isTransliterate()));
}
}
} else if (object instanceof AbstractPoiType) {
if (b.length() > 0) {
b.append(" ");
}
AbstractPoiType poiType = (AbstractPoiType) object;
if (poiType instanceof PoiCategory) {
b.append("(Category)");
} else if (poiType instanceof PoiFilter) {
b.append("(Filter)");
} else if (poiType instanceof PoiType) {
PoiType p = (PoiType) poiType;
final AbstractPoiType parentType = p.getParentType();
if (parentType != null) {
final String translation = parentType.getTranslation();
b.append("(").append(translation);
if (parentType instanceof PoiCategory) {
b.append(" / Category)");
} else if (parentType instanceof PoiFilter) {
b.append(" / Filter)");
} else if (parentType instanceof PoiType) {
PoiType pp = (PoiType) poiType;
PoiFilter filter = pp.getFilter();
PoiCategory category = pp.getCategory();
if (filter != null && !filter.getTranslation().equals(translation)) {
b.append(" / ").append(filter.getTranslation()).append(")");
} else if (category != null && !category.getTranslation().equals(translation)) {
b.append(" / ").append(category.getTranslation()).append(")");
} else {
b.append(")");
}
}
} else if (p.getFilter() != null) {
b.append("(").append(p.getFilter().getTranslation()).append(")");
} else if (p.getCategory() != null) {
b.append("(").append(p.getCategory().getTranslation()).append(")");
}
}
}
return b.toString();
}
}

View file

@ -3,9 +3,13 @@ package net.osmand.search.core;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.data.LatLon;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
// immutable object
public class SearchSettings {
@ -19,30 +23,33 @@ public class SearchSettings {
private ObjectType[] searchTypes;
private boolean emptyQueryAllowed;
private boolean sortByName;
private SearchExportSettings exportSettings;
//private SearchExportSettings exportSettings = new SearchExportSettings(false, false);
public SearchSettings(SearchSettings s) {
if(s != null) {
this.radiusLevel = s.radiusLevel;
this.lang = s.lang;
this.transliterateIfMissing = s.transliterateIfMissing;
this.totalLimit = s.totalLimit;
this.offlineIndexes = s.offlineIndexes;
this.originalLocation = s.originalLocation;
this.searchTypes = s.searchTypes;
this.emptyQueryAllowed = s.emptyQueryAllowed;
this.sortByName = s.sortByName;
this.exportSettings = s.exportSettings;
}
}
public SearchSettings(List<BinaryMapIndexReader> offlineIndexes) {
public SearchSettings(List<? extends BinaryMapIndexReader> offlineIndexes) {
this.offlineIndexes = Collections.unmodifiableList(offlineIndexes);
}
public List<BinaryMapIndexReader> getOfflineIndexes() {
return offlineIndexes;
}
public void setOfflineIndexes(List<BinaryMapIndexReader> offlineIndexes) {
public void setOfflineIndexes(List<? extends BinaryMapIndexReader> offlineIndexes) {
this.offlineIndexes = Collections.unmodifiableList(offlineIndexes);
}
@ -131,6 +138,20 @@ public class SearchSettings {
return s;
}
public SearchExportSettings getExportSettings() {
return exportSettings;
}
public SearchSettings setExportSettings(SearchExportSettings exportSettings) {
SearchSettings s = new SearchSettings(this);
this.exportSettings = exportSettings;
return s;
}
public boolean isExportObjects() {
return exportSettings != null;
}
public boolean hasCustomSearchType(ObjectType type) {
if (searchTypes != null) {
for (ObjectType t : searchTypes) {
@ -141,4 +162,52 @@ public class SearchSettings {
}
return false;
}
public JSONObject toJSON() {
JSONObject json = new JSONObject();
if (originalLocation != null) {
json.put("lat", String.format(Locale.US, "%.5f", originalLocation.getLatitude()));
json.put("lon", String.format(Locale.US, "%.5f", originalLocation.getLongitude()));
}
json.put("radiusLevel", radiusLevel);
json.put("totalLimit", totalLimit);
json.put("lang", lang);
json.put("transliterateIfMissing", transliterateIfMissing);
json.put("emptyQueryAllowed", emptyQueryAllowed);
json.put("sortByName", sortByName);
if (searchTypes != null && searchTypes.length > 0) {
JSONArray searchTypesArr = new JSONArray();
for (ObjectType type : searchTypes) {
searchTypesArr.put(type.name());
}
json.put("searchTypes", searchTypes);
}
return json;
}
public static SearchSettings parseJSON(JSONObject json) {
SearchSettings s = new SearchSettings(new ArrayList<BinaryMapIndexReader>());
if (json.has("lat") && json.has("lon")) {
s.originalLocation = new LatLon(json.getDouble("lat"), json.getDouble("lon"));
}
s.radiusLevel = json.optInt("radiusLevel", 1);
s.totalLimit = json.optInt("totalLimit", -1);
s.transliterateIfMissing = json.optBoolean("transliterateIfMissing", false);
s.emptyQueryAllowed = json.optBoolean("emptyQueryAllowed", false);
s.sortByName = json.optBoolean("sortByName", false);
if (json.has("lang")) {
s.lang = json.getString("lang");
}
if (json.has("searchTypes")) {
JSONArray searchTypesArr = json.getJSONArray("searchTypes");
ObjectType[] searchTypes = new ObjectType[searchTypesArr.length()];
for (int i = 0; i < searchTypesArr.length(); i++) {
String name = searchTypesArr.getString(i);
searchTypes[i] = ObjectType.valueOf(name);
}
s.searchTypes = searchTypes;
}
return s;
}
}

View file

@ -2,8 +2,12 @@ package net.osmand.util;
import net.osmand.IProgress;
import net.osmand.PlatformUtil;
import net.osmand.router.GeneralRouter;
import net.osmand.router.RoutingConfiguration;
import org.apache.commons.logging.Log;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
@ -27,6 +31,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.Stack;
import java.util.zip.GZIPInputStream;
@ -691,4 +696,54 @@ public class Algorithms {
return str1.compareTo(str2);
}
public static String getFileAsString(File file) {
try {
FileInputStream fin = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(fin, "UTF-8"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
if (sb.length() > 0) {
sb.append("\n");
}
sb.append(line);
}
reader.close();
fin.close();
return sb.toString();
} catch (Exception e) {
return null;
}
}
public static Map<String, String> parseStringsXml(File file) throws IOException, XmlPullParserException {
InputStream is = new FileInputStream(file);
XmlPullParser parser = PlatformUtil.newXMLPullParser();
Map<String, String> map = new HashMap<>();
parser.setInput(is, "UTF-8");
int tok;
String key = null;
StringBuilder text = null;
while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) {
if (tok == XmlPullParser.START_TAG) {
text = new StringBuilder();
String name = parser.getName();
if ("string".equals(name)) {
key = parser.getAttributeValue("", "name");
}
} else if (tok == XmlPullParser.TEXT) {
if (text != null) {
text.append(parser.getText());
}
} else if (tok == XmlPullParser.END_TAG) {
if (key != null) {
map.put(key, text.toString());
}
key = null;
text = null;
}
}
is.close();
return map;
}
}

View file

@ -526,11 +526,20 @@ public class GeoPointParserUtil {
if (params.containsKey("z")) {
zmPart = params.get("z");
}
String[] vls = silentSplit(path, ",");
String[] vls = null;
if(path.contains("@")) {
path = path.substring(path.indexOf("@") + 1);
if(path.contains(",")) {
vls = silentSplit(path, ",");
}
}
if(vls == null) {
vls = silentSplit(path, ",");
}
if (vls.length >= 2) {
double lat = parseSilentDouble(vls[0]);
double lon = parseSilentDouble(vls[1]);
double lat = parseSilentDouble(vls[0], Double.NaN);
double lon = parseSilentDouble(vls[1], Double.NaN);
int zoom = GeoParsedPoint.NO_ZOOM;
if (vls.length >= 3 || zmPart.length() > 0) {
if (zmPart.length() == 0) {
@ -543,7 +552,9 @@ public class GeoPointParserUtil {
}
zoom = parseZoom(zmPart);
}
return new GeoParsedPoint(lat, lon, zoom);
if(!Double.isNaN(lat) && !Double.isNaN(lon)) {
return new GeoParsedPoint(lat, lon, zoom);
}
}
return new GeoParsedPoint(URLDecoder.decode(opath));
}
@ -566,13 +577,17 @@ public class GeoPointParserUtil {
}
private static double parseSilentDouble(String zoom) {
return parseSilentDouble(zoom, 0);
}
private static double parseSilentDouble(String zoom, double vl) {
try {
if (zoom != null) {
return Double.valueOf(zoom);
}
} catch (NumberFormatException e) {
}
return 0;
return vl;
}
private static int parseSilentInt(String zoom) {
@ -739,8 +754,9 @@ public class GeoPointParserUtil {
@Override
public String toString() {
return isGeoPoint() ? "GeoParsedPoint [lat=" + lat + ", lon=" + lon + ", zoom=" + zoom
+ ", label=" + label + "]" : "GeoParsedPoint [query=" + query;
return isGeoPoint() ?
String.format("GeoParsedPoint [lat=%.5f, lon=%.5f, zoom=%d, label=%s]", lat, lon, zoom, label) :
String.format("GeoParsedPoint [query=%s]",query);
}
}
}

View file

@ -1,22 +1,133 @@
package net.osmand.search;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import net.osmand.OsmAndCollator;
import net.osmand.ResultMatcher;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.data.Amenity;
import net.osmand.data.Building;
import net.osmand.data.City;
import net.osmand.data.LatLon;
import net.osmand.data.MapObject;
import net.osmand.data.Street;
import net.osmand.osm.AbstractPoiType;
import net.osmand.osm.MapPoiTypes;
import net.osmand.search.SearchUICore.SearchResultCollection;
import net.osmand.search.SearchUICore.SearchResultMatcher;
import net.osmand.search.core.SearchPhrase;
import net.osmand.search.core.SearchResult;
import net.osmand.search.core.SearchSettings;
import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Assert;
import org.junit.Test;
import org.xmlpull.v1.XmlPullParserException;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
public class SearchCoreUITest {
private static final String SEARCH_RESOURCES_PATH = "src/test/resources/search/";
private static Map<String, String> enPhrases = new HashMap<>();
private static Map<String, String> phrases = new HashMap<>();
static {
MapPoiTypes.setDefault(new MapPoiTypes("src/test/resources/poi_types.xml"));
MapPoiTypes poiTypes = MapPoiTypes.getDefault();
try {
enPhrases = Algorithms.parseStringsXml(new File("src/test/resources/phrases/en/phrases.xml"));
//phrases = Algorithms.parseStringsXml(new File("src/test/resources/phrases/ru/phrases.xml"));
phrases = enPhrases;
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
poiTypes.setPoiTranslator(new MapPoiTypes.PoiTranslator() {
@Override
public String getTranslation(AbstractPoiType type) {
AbstractPoiType baseLangType = type.getBaseLangType();
if (baseLangType != null) {
return getTranslation(baseLangType) + " (" + type.getLang().toLowerCase() + ")";
}
return getTranslation(type.getIconKeyName());
}
@Override
public String getTranslation(String keyName) {
String val = phrases.get("poi_" + keyName);
if (val != null) {
int ind = val.indexOf(';');
if (ind > 0) {
return val.substring(0, ind);
}
}
return val;
}
@Override
public String getSynonyms(AbstractPoiType type) {
AbstractPoiType baseLangType = type.getBaseLangType();
if (baseLangType != null) {
return getSynonyms(baseLangType);
}
return getSynonyms(type.getIconKeyName());
}
@Override
public String getSynonyms(String keyName) {
String val = phrases.get("poi_" + keyName);
if (val != null) {
int ind = val.indexOf(';');
if (ind > 0) {
return val.substring(ind + 1);
}
return "";
}
return null;
}
@Override
public String getEnTranslation(AbstractPoiType type) {
AbstractPoiType baseLangType = type.getBaseLangType();
if (baseLangType != null) {
return getEnTranslation(baseLangType) + " (" + type.getLang().toLowerCase() + ")";
}
return getEnTranslation(type.getIconKeyName());
}
@Override
public String getEnTranslation(String keyName) {
if (enPhrases.isEmpty()) {
return Algorithms.capitalizeFirstLetter(keyName.replace('_', ' '));
}
String val = enPhrases.get("poi_" + keyName);
if (val != null) {
int ind = val.indexOf(';');
if (ind > 0) {
return val.substring(0, ind);
}
}
return val;
}
});
}
@Test
public void testDuplicates() throws IOException {
SearchSettings ss = new SearchSettings((SearchSettings)null);
@ -100,4 +211,220 @@ public class SearchCoreUITest {
rs.add(res);
return res;
}
@Test
public void testSearchJsons() throws IOException {
final File[] files = new File(SEARCH_RESOURCES_PATH).listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String filename) {
return filename.endsWith(".json");
}
});
if (files != null) {
for (File f : files) {
//testSearchImpl(f);
}
}
}
private void testSearchImpl(File jsonFile) throws IOException, JSONException {
String sourceJsonText = Algorithms.getFileAsString(jsonFile);
Assert.assertNotNull(sourceJsonText);
Assert.assertTrue(sourceJsonText.length() > 0);
BinaryMapIndexReaderTest reader = new BinaryMapIndexReaderTest();
JSONObject sourceJson = new JSONObject(sourceJsonText);
String phraseText = sourceJson.getString("phrase");
JSONObject settingsJson = sourceJson.getJSONObject("settings");
if (sourceJson.has("amenities")) {
JSONArray amenitiesArr = sourceJson.getJSONArray("amenities");
List<Amenity> amenities = new ArrayList<>();
for (int i = 0; i < amenitiesArr.length(); i++) {
JSONObject amenityObj = amenitiesArr.getJSONObject(i);
amenities.add(Amenity.parseJSON(amenityObj));
}
reader.amenities = amenities;
}
if (sourceJson.has("cities")) {
JSONArray citiesArr = sourceJson.getJSONArray("cities");
List<City> cities = new ArrayList<>();
List<City> initCities = new ArrayList<>();
List<City> matchedCities = new ArrayList<>();
List<City> streetCities = new ArrayList<>();
for (int i = 0; i < citiesArr.length(); i++) {
JSONObject cityObj = citiesArr.getJSONObject(i);
final City city = City.parseJSON(cityObj);
cities.add(city);
if (cityObj.has("init")) {
initCities.add(city);
}
if (cityObj.has("matchCity")) {
matchedCities.add(city);
}
if (cityObj.has("matchStreet")) {
streetCities.add(city);
}
}
reader.cities = cities;
reader.initCities = initCities;
reader.matchedCities = matchedCities;
reader.streetCities = streetCities;
}
List<String> results = new ArrayList<>();
if (sourceJson.has("results")) {
JSONArray resultsArr = sourceJson.getJSONArray("results");
for (int i = 0; i < resultsArr.length(); i++) {
results.add(resultsArr.getString(i));
}
}
SearchSettings s = SearchSettings.parseJSON(settingsJson);
s.setOfflineIndexes(Collections.singletonList(reader));
SearchPhrase phrase = new SearchPhrase(s, OsmAndCollator.primaryCollator());
phrase = phrase.generateNewPhrase(phraseText, s);
final SearchUICore core = new SearchUICore(MapPoiTypes.getDefault(), "en", false);
core.init();
ResultMatcher<SearchResult> rm = new ResultMatcher<SearchResult>() {
@Override
public boolean publish(SearchResult object) {
return true;
}
@Override
public boolean isCancelled() {
return false;
}
};
SearchResultMatcher matcher = new SearchResultMatcher(rm, phrase, 1, new AtomicInteger(1), -1);
core.searchInternal(phrase, matcher);
SearchResultCollection collection = new SearchResultCollection(phrase);
collection.addSearchResults(matcher.getRequestResults(), true, true);
List<SearchResult> searchResults = collection.getCurrentSearchResults();
int i = 0;
for (SearchResult result : searchResults) {
String expected = results.get(i++);
String present = result.toString();
//System.out.println(present);
Assert.assertEquals(expected, present);
if (i >= results.size()) {
break;
}
}
}
private static class BinaryMapIndexReaderTest extends BinaryMapIndexReader {
List<Amenity> amenities = Collections.emptyList();
List<City> cities = Collections.emptyList();
List<City> initCities = Collections.emptyList();
List<City> matchedCities = Collections.emptyList();
List<City> streetCities = Collections.emptyList();
BinaryMapIndexReaderTest() throws IOException {
super(null, null, false);
}
@Override
public List<Amenity> searchPoiByName(SearchRequest<Amenity> req) throws IOException {
for (Amenity amenity : amenities) {
req.publish(amenity);
}
return req.getSearchResults();
}
@Override
public List<Amenity> searchPoi(SearchRequest<Amenity> req) throws IOException {
for (Amenity amenity : amenities) {
req.publish(amenity);
}
return req.getSearchResults();
}
@Override
public List<City> getCities(SearchRequest<City> resultMatcher, int cityType) throws IOException {
for (City city : initCities) {
if (resultMatcher != null) {
resultMatcher.publish(city);
}
}
return initCities;
}
@Override
public int preloadStreets(City c, SearchRequest<Street> resultMatcher) throws IOException {
return 0;
}
@Override
public void preloadBuildings(Street s, SearchRequest<Building> resultMatcher) throws IOException {
// cities must be filled with streets and buildings
}
@Override
public List<MapObject> searchAddressDataByName(SearchRequest<MapObject> req) throws IOException {
for (City city : streetCities) {
for (Street street : city.getStreets()) {
req.publish(street);
}
}
for (City city : matchedCities) {
req.publish(city);
}
return req.getSearchResults();
}
@Override
public String getRegionName() {
return "Test region";
}
@Override
public boolean containsPoiData(int left31x, int top31y, int right31x, int bottom31y) {
return true;
}
@Override
public boolean containsMapData() {
return true;
}
@Override
public boolean containsPoiData() {
return true;
}
@Override
public boolean containsRouteData() {
return true;
}
@Override
public boolean containsRouteData(int left31x, int top31y, int right31x, int bottom31y, int zoom) {
return true;
}
@Override
public boolean containsAddressData(int left31x, int top31y, int right31x, int bottom31y) {
return true;
}
@Override
public boolean containsMapData(int tile31x, int tile31y, int zoom) {
return true;
}
@Override
public boolean containsMapData(int left31x, int top31y, int right31x, int bottom31y, int zoom) {
return true;
}
@Override
public boolean containsAddressData() {
return true;
}
}
}

View file

@ -19,6 +19,19 @@ public class GeoPointParserUtilTest {
GeoParsedPoint test = GeoPointParserUtil.parse("geo:0,0?q=86HJV99P%2B29");
Assert.assertEquals(test.getQuery(), "86HJV99P+29");
}
@Test
public void testGoogleMaps() {
// https://www.google.com/maps?daddr=Bahnhofplatz+3,+7000+Chur@46.853582,9.529903
GeoParsedPoint actual = GeoPointParserUtil.parse(
"https://www.google.com/maps?daddr=Bahnhofplatz+3,+7000+Chur");
assertGeoPoint(actual, new GeoParsedPoint("Bahnhofplatz 3, 7000 Chur"));
actual = GeoPointParserUtil.parse(
"https://www.google.com/maps?daddr=Bahnhofplatz+3,+7000+Chur@46.853582,9.529903");
System.out.println(actual);
assertGeoPoint(actual, new GeoParsedPoint(46.853582, 9.529903));
}
@Test
public void testGeoPoint() {

View file

@ -1,3 +1,5 @@
*.json
/*.json
/osm_live/*.json
*.obf
*.osm
phrases.xml

View file

@ -0,0 +1,699 @@
{
"settings": {
"lat": "55.28666",
"lon": "52.00556",
"radiusLevel": 1,
"totalLimit": -1,
"lang": "",
"transliterateIfMissing": false,
"emptyQueryAllowed": false,
"sortByName": false
},
"phrase": "parking",
"results": [
"Parking (Personal transport)",
"Parking entrance (Personal transport)",
"Parking fee (Charging station / Transportation)",
"Parking fee: no (Charging station / Transportation)",
"Parking fee: yes (Charging station / Transportation)",
"Parking lot (Fire hydrant / Emergency infrastructure)",
"Parking tickets (Vending machine / Store)",
"Parking tickets (Vending machine / Store)",
"Parking time limit (Parking / Personal transport)",
"Bicycle parking (Bicycle transport)",
"Motorcycle parking (Personal transport)",
"Parking",
"Parking",
"Parking",
"Parking"
],
"amenities": [
{
"lat": "55.29801",
"lon": "51.99100",
"id": 881010149,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.29481",
"lon": "51.98964",
"id": 803545283,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"parking_surface": "surface"
}
},
{
"name": "Заинская ГРЭС",
"lat": "55.28492",
"lon": "52.02125",
"id": 481494555,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_yes": "yes",
"parking_surface": "surface"
}
},
{
"lat": "55.29105",
"lon": "51.99531",
"id": 540237721,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28683",
"lon": "52.01479",
"id": 888343263,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_unpaved": "unpaved",
"access_permissive": "permissive",
"supervised_yes": "yes"
}
},
{
"lat": "55.30317",
"lon": "52.00192",
"id": 1161722765,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"parking_surface": "surface",
"operator": "cахарный завод"
}
},
{
"name": "для техосмотра",
"lat": "55.30439",
"lon": "52.01634",
"id": 484385195,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28615",
"lon": "52.00702",
"id": 1040771455,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28582",
"lon": "52.00758",
"id": 535925577,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.30950",
"lon": "51.96954",
"id": 1228158833,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"parking_surface": "surface"
}
},
{
"lat": "55.29345",
"lon": "51.99385",
"id": 535897911,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.30957",
"lon": "52.00374",
"id": 897019441,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28602",
"lon": "52.00908",
"id": 268235957,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28777",
"lon": "51.99608",
"id": 4410403520512,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"surface_unpaved": "unpaved",
"supervised_yes": "yes",
"parking_surface": "surface",
"fee_yes": "yes",
"capacity": "70"
}
},
{
"lat": "55.34092",
"lon": "52.05172",
"id": 2136388576,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no"
}
},
{
"lat": "55.28271",
"lon": "52.00248",
"id": 536030271,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28391",
"lon": "52.00273",
"id": 536035007,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"name": "Служебная",
"lat": "55.28615",
"lon": "52.02350",
"id": 481491939,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"surface_asphalt": "asphalt",
"fee_no": "no",
"access_permissive": "permissive",
"supervised_yes": "yes",
"parking_surface": "surface"
}
},
{
"lat": "55.30969",
"lon": "51.96917",
"id": 1228158821,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.31022",
"lon": "51.97104",
"id": 1228158819,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"parking_surface": "surface"
}
},
{
"lat": "55.29275",
"lon": "51.99355",
"id": 892959215,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"name": "для посетителей",
"lat": "55.28688",
"lon": "52.00578",
"id": 11390213698,
"subType": "parking",
"type": "transportation"
},
{
"lat": "55.30838",
"lon": "51.96767",
"id": 1164434353,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"parking_surface": "surface"
}
},
{
"name": "Южная",
"lat": "55.27739",
"lon": "52.00544",
"id": 641567205,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"surface_unpaved": "unpaved",
"supervised_yes": "yes",
"parking_surface": "surface",
"fee_yes": "yes"
}
},
{
"lat": "55.28045",
"lon": "51.99550",
"id": 478137507,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"supervised_yes": "yes",
"parking_surface": "surface",
"fee_yes": "yes"
}
},
{
"name": "Автостоянка №1",
"lat": "55.29028",
"lon": "51.99934",
"id": 502948005,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"surface_gravel": "gravel",
"supervised_yes": "yes",
"parking_surface": "surface",
"fee_yes": "yes"
}
},
{
"lat": "55.27839",
"lon": "52.00301",
"id": 1168315587,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"parking_surface": "surface",
"operator": "Заинская ЦРБ"
}
},
{
"lat": "55.30468",
"lon": "52.01335",
"id": 897014805,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.32509",
"lon": "51.99930",
"id": 1172111487,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"name": "Штрафстоянка (Эвакуатор)",
"lat": "55.30439",
"lon": "52.01346",
"id": 5153530824,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"supervised_yes": "yes",
"parking_surface": "surface",
"fee_yes": "yes",
"phone": "+7 (85558) 7-77-01"
}
},
{
"name": "Три тополя",
"lat": "55.29666",
"lon": "51.99048",
"id": 642175341,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"surface_unpaved": "unpaved",
"supervised_yes": "yes",
"parking_surface": "surface",
"fee_yes": "yes"
}
},
{
"lat": "55.29077",
"lon": "52.00812",
"id": 1168356553,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"surface_asphalt": "asphalt",
"supervised_yes": "yes",
"parking_surface": "surface",
"fee_yes": "yes"
}
},
{
"lat": "55.29429",
"lon": "51.99190",
"id": 893048919,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.29959",
"lon": "52.00516",
"id": 1022216961,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28355",
"lon": "51.99881",
"id": 943827057,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"parking_surface": "surface"
}
},
{
"lat": "55.28651",
"lon": "52.00479",
"id": 905757839,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28928",
"lon": "52.00977",
"id": 190467181,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_gravel": "gravel",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28674",
"lon": "52.00282",
"id": 1168411743,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"name": "для клиентов",
"lat": "55.29116",
"lon": "51.99394",
"id": 821840897,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"surface_asphalt": "asphalt",
"parking_surface": "surface",
"access_customers": "customers"
}
},
{
"lat": "55.29068",
"lon": "51.99490",
"id": 540238031,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.28982",
"lon": "51.98911",
"id": 190489189,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.29341",
"lon": "51.99072",
"id": 806562897,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no"
}
},
{
"lat": "55.28042",
"lon": "52.00155",
"id": 1159734951,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.30493",
"lon": "52.01007",
"id": 1172110357,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.30500",
"lon": "52.01108",
"id": 1172110359,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface",
"capacity": "13"
}
},
{
"lat": "55.29816",
"lon": "51.99222",
"id": 1160388645,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.29015",
"lon": "51.99366",
"id": 503278061,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.30624",
"lon": "52.00475",
"id": 691494051,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface",
"operator": "ЗЗМК - Тимер"
}
},
{
"name": "для регистрации в ГИБДД",
"lat": "55.30438",
"lon": "52.01483",
"id": 484385289,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
},
{
"lat": "55.29258",
"lon": "51.99188",
"id": 892959265,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no"
}
},
{
"lat": "55.28050",
"lon": "52.00200",
"id": 1159662915,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface",
"capacity": "10"
}
},
{
"lat": "55.29845",
"lon": "51.99057",
"id": 881010015,
"subType": "parking",
"type": "transportation",
"additionalInfo": {
"fee_no": "no",
"surface_asphalt": "asphalt",
"supervised_no": "no",
"parking_surface": "surface"
}
}
]
}

View file

@ -0,0 +1,662 @@
{
"settings": {
"lat": "51.04933",
"lon": "13.73815",
"radiusLevel": 1,
"totalLimit": -1,
"lang": "",
"transliterateIfMissing": false,
"emptyQueryAllowed": false,
"sortByName": false
},
"phrase": "Biergarten",
"results": [
"Biergarten (Food)",
"Biergarten Italienisches Dörfchen",
"Biergarten Narrenhäus'l",
"Biergarten Elbsegler",
"Biergarten Elbsegler",
"Biergarten",
"Biergarten",
"Biergarten",
"Biergarten",
"Biergarten"
],
"amenities": [
{
"lat": "51.02489",
"lon": "13.69860",
"id": 244538865,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"surface_fine_gravel": "fine_gravel"
}
},
{
"lat": "51.09478",
"lon": "13.84153",
"id": 865332598,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Einkehr"
}
},
{
"lat": "51.01123",
"lon": "13.67918",
"id": 9712288200,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"website": "http://www.zur-linde-freital.de/",
"operator": "Zur Linde",
"image": "http://commons.wikimedia.org/wiki/File:Hotel_und_Gasthaus_Zur_Linde_Freital-Birkigt.jpg"
}
},
{
"name": "Altes Wettbüro",
"lat": "51.06472",
"lon": "13.74467",
"id": 11451975032,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Tu-Sa 17:00-22:00",
"additionalInfo": {
"wheelchair_limited": "limited",
"outdoor_seating_yes": "yes",
"outdoor_seating_filter_yes": "yes",
"opening_hours": "Tu-Sa 17:00-22:00",
"website": "http://www.altes-wettbuero.de",
"phone": "+49 351 6588983",
"operator": "Falk Gruß"
}
},
{
"name": "Carolaschlösschen",
"lat": "51.03341",
"lon": "13.76392",
"id": 3704353318,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Mo-Su 11:00-24:00",
"additionalInfo": {
"wheelchair_limited": "limited",
"opening_hours": "Mo-Su 11:00-24:00",
"facebook": "https://www.facebook.com/carolaschloesschen/"
}
},
{
"lat": "51.01251",
"lon": "13.69407",
"id": 562115695,
"subType": "biergarten",
"type": "sustenance"
},
{
"name": "Torwirtschaft",
"lat": "51.04156",
"lon": "13.75139",
"id": 517007905,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_yes": "yes",
"website": "http://www.torwirtschaft-dresden.de",
"facebook": "https://www.facebook.com/Torwirtschaft-der-Biergarten-f%C3%BCr-alle-Dynamofans-168677023169963/"
}
},
{
"name": "Biergarten Italienisches Dörfchen",
"lat": "51.05429",
"lon": "13.73759",
"id": 486232011,
"subType": "biergarten",
"type": "sustenance"
},
{
"lat": "51.04261",
"lon": "13.75229",
"id": 98518191,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_yes": "yes"
}
},
{
"name": "Körnergarten",
"names": {
"prefix": "Biergarten"
},
"lat": "51.05316",
"lon": "13.81192",
"id": 3704353594,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Mo-Su 11:00-24:00",
"additionalInfo": {
"wheelchair_limited": "limited",
"opening_hours": "Mo-Su 11:00-24:00",
"website": "http://www.koernergarten.de/"
}
},
{
"lat": "51.06397",
"lon": "13.79748",
"id": 670742479,
"subType": "biergarten",
"type": "sustenance"
},
{
"name": "Weingut Seifert",
"lat": "51.11134",
"lon": "13.66701",
"id": 789740008,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"note": "not really a 'biergarten' :)"
}
},
{
"lat": "50.98710",
"lon": "13.65086",
"id": 9037536542,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Zum Gründl"
}
},
{
"lat": "51.10538",
"lon": "13.62622",
"id": 9289210778,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Zum Bürgergarten"
}
},
{
"lat": "51.09459",
"lon": "13.84170",
"id": 5598697742,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Einkehr"
}
},
{
"name": "Trobischhof",
"lat": "51.08649",
"lon": "13.71338",
"id": 409847251,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_limited": "limited"
}
},
{
"name": "Demnitz Elbegarten",
"lat": "51.05328",
"lon": "13.81175",
"id": 771102016,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_no": "no",
"cuisine_german": "german",
"website": "http://www.elbegarten.de"
}
},
{
"name": "Augustus Garten am Narrenhäusl",
"lat": "51.05697",
"lon": "13.74166",
"id": 465538291,
"subType": "biergarten",
"type": "sustenance"
},
{
"lat": "51.01529",
"lon": "13.65107",
"id": 7482890514,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Burgwartschänke"
}
},
{
"name": "el Horst",
"lat": "51.04361",
"lon": "13.78979",
"id": 559979958,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Oct-Apr: Mo-Fr 17:00-18:00+, Oct-Apr: Sa,PH 11:30-18:00+, May-Sep: Mo-Fr 15:00-18:00+, May-Sep: Sa,PH 11:30-18:00+",
"additionalInfo": {
"opening_hours": "Oct-Apr: Mo-Fr 17:00-18:00+, Oct-Apr: Sa,PH 11:30-18:00+, May-Sep: Mo-Fr 15:00-18:00+, May-Sep: Sa,PH 11:30-18:00+"
}
},
{
"lat": "51.07376",
"lon": "13.70135",
"id": 553613482,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Wirtshaus Lindenschänke"
}
},
{
"name": "Wachstube",
"lat": "51.04254",
"lon": "13.75222",
"id": 46060263,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "11:00+",
"additionalInfo": {
"wheelchair_no": "no",
"opening_hours": "11:00+",
"website": "https://www.torwirtschaft-dresden.de/wachstube/restaurant.php",
"phone": "+49 351 4466975",
"image": "https://commons.wikimedia.org/wiki/File:Torhaus_N_Grosser_Garten_Dresden-2.jpg",
"wheelchair_description:de": "Zugang ins Gebäude nur über Stufen",
"height": "5.7",
"facebook": "https://www.facebook.com/Wachstube-im-Gro%C3%9Fen-Garten-Dresden-144180698984577/",
"email": "info@wachstube-dresden.de"
}
},
{
"lat": "51.09050",
"lon": "13.70555",
"id": 6300849046,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Bäckerei Werner"
}
},
{
"name": "Biergarten Elbsegler",
"lat": "51.05731",
"lon": "13.73973",
"id": 465318113,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_limited": "limited"
}
},
{
"name": "Straußenwirtschaft Weingut Pesterwitz",
"lat": "51.02883",
"lon": "13.64144",
"id": 478369183,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"website": "https://www.gut-pesterwitz.de/"
}
},
{
"name": "Schillergarten",
"lat": "51.05228",
"lon": "13.80908",
"id": 493702544,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Mo-Su 11:00-01:00",
"additionalInfo": {
"wheelchair_yes": "yes",
"opening_hours": "Mo-Su 11:00-01:00"
}
},
{
"lat": "51.04111",
"lon": "13.80554",
"id": 5837244174,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Astloch"
}
},
{
"name": "Spitzwegerich",
"lat": "51.07767",
"lon": "13.70757",
"id": 412610355,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_yes": "yes",
"toilets_wheelchair_no": "no"
}
},
{
"name": "Biergarten Goldener Anker",
"lat": "51.10399",
"lon": "13.62850",
"id": 143015201,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Tu-Su,PH 11:00-21:00",
"additionalInfo": {
"wheelchair_yes": "yes",
"opening_hours": "Tu-Su,PH 11:00-21:00"
}
},
{
"name": "Bottoms Up",
"lat": "51.06516",
"lon": "13.75615",
"id": 1394136626,
"subType": "biergarten",
"type": "sustenance"
},
{
"name": "Biergarten Narrenhäus'l",
"lat": "51.05666",
"lon": "13.74130",
"id": 466763007,
"subType": "biergarten",
"type": "sustenance"
},
{
"name": "Zum Schießhaus",
"lat": "51.05464",
"lon": "13.72727",
"id": 326416539,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Mo-Su,PH 11:00-23:00",
"additionalInfo": {
"wheelchair_yes": "yes",
"toilets_wheelchair_no": "no",
"opening_hours": "Mo-Su,PH 11:00-23:00"
}
},
{
"name": "Palais Bistro",
"lat": "51.05182",
"lon": "13.73682",
"id": 501015667,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Apr-Oct: Mo-Su 11:00-24:00, Nov-Mar: Mo-Th 12:00-14:30,17:30-24:00, Nov-Mar: Fr-Su 12:00-24:00",
"additionalInfo": {
"wheelchair_yes": "yes",
"opening_hours": "Apr-Oct: Mo-Su 11:00-24:00, Nov-Mar: Mo-Th 12:00-14:30,17:30-24:00, Nov-Mar: Fr-Su 12:00-24:00"
}
},
{
"name": "Brauhaus am Waldschlößchen",
"lat": "51.06778",
"lon": "13.77786",
"id": 594989978,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Mo-Su 11:00-01:00",
"additionalInfo": {
"wheelchair_limited": "limited",
"opening_hours": "Mo-Su 11:00-01:00"
}
},
{
"lat": "51.00222",
"lon": "13.68504",
"id": 2469999180,
"subType": "biergarten",
"type": "sustenance"
},
{
"name": "Biergarten Elbsegler",
"lat": "51.05738",
"lon": "13.73913",
"id": 466539133,
"subType": "biergarten",
"type": "sustenance"
},
{
"lat": "51.01010",
"lon": "13.66208",
"id": 7987508388,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_yes": "yes",
"operator": "Zum goldenen Löwen"
}
},
{
"lat": "50.99476",
"lon": "13.72701",
"id": 6765029580,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Eutschützer Mühle"
}
},
{
"lat": "50.99295",
"lon": "13.64362",
"id": 6065174964,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Alte Schmiede"
}
},
{
"name": "Louisengarten",
"lat": "51.06681",
"lon": "13.75278",
"id": 68516655,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Apr-Sep Su-Th 16:00+; Apr-Sep Fr,Sa 15:00+ || off \"Bei unfreundlichem Wetter\"",
"additionalInfo": {
"wheelchair_no": "no",
"opening_hours": "Apr-Sep Su-Th 16:00+; Apr-Sep Fr,Sa 15:00+ || off \"Bei unfreundlichem Wetter\"",
"website": "http://www.biergarten-dresden.de",
"note": "Neustädter Winter Hüttn von Oktober-Dezember",
"alt_name": "Neustädter Winter Hüttn"
}
},
{
"lat": "51.00871",
"lon": "13.65959",
"id": 9237211698,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_yes": "yes",
"operator": "Akropolis"
}
},
{
"lat": "51.03435",
"lon": "13.76042",
"id": 595971770,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Apr-Oct: Mo-Fr 11:00-19:00; Sa-Su 10:00-19:00; PH 10:00-19:00",
"additionalInfo": {
"wheelchair_yes": "yes",
"opening_hours": "Apr-Oct: Mo-Fr 11:00-19:00; Sa-Su 10:00-19:00; PH 10:00-19:00",
"website": "https://www.grosser-garten-dresden.de/de/gaesteservice/gastronomie-shop/",
"phone": "+49 152 37 00 67 53"
}
},
{
"name": "Landgut Hofewiese",
"lat": "51.10989",
"lon": "13.83207",
"id": 8455509378,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_yes": "yes"
}
},
{
"name": "Café & Restaurant Saite",
"lat": "51.07636",
"lon": "13.74825",
"id": 577481323,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Mo-Fr 18:00-24:00, Su 10:00-15:00",
"additionalInfo": {
"wheelchair_limited": "limited",
"opening_hours": "Mo-Fr 18:00-24:00, Su 10:00-15:00"
}
},
{
"name": "Alt-Dresden",
"lat": "51.04977",
"lon": "13.69881",
"id": 970594717,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_limited": "limited",
"phone": "0351 4135133"
}
},
{
"lat": "51.08677",
"lon": "13.70081",
"id": 413620001,
"subType": "biergarten",
"type": "sustenance"
},
{
"lat": "50.98618",
"lon": "13.63208",
"id": 10355747978,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "Hirschbergschenke"
}
},
{
"name": "Fährgarten Johannstadt",
"lat": "51.06151",
"lon": "13.76679",
"id": 4415013507072,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_yes": "yes",
"outdoor_seating_yes": "yes",
"outdoor_seating_filter_yes": "yes",
"website": "http://www.faehrgarten.de/",
"phone": "+49 351 4596262",
"brewery_additional": "Radeberger",
"email": "info@faehrgarten.de"
}
},
{
"lat": "51.02343",
"lon": "13.73347",
"id": 4563637454,
"subType": "biergarten",
"type": "sustenance"
},
{
"name": "Besenwirtschaft Steinrücken",
"lat": "51.11590",
"lon": "13.62457",
"id": 7474665554,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"website": "http://www.besenwirtschaft-steinruecken.de/index.html"
}
},
{
"lat": "51.05181",
"lon": "13.81396",
"id": 9819148822,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"operator": "WSV \"Am Blauen Wunder\""
}
},
{
"name": "Zacke",
"lat": "51.01300",
"lon": "13.63618",
"id": 7498805230,
"subType": "biergarten",
"type": "sustenance"
},
{
"name": "Klotzscher Sommerwirtschaft",
"lat": "51.11072",
"lon": "13.76879",
"id": 717794449,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Mo-Fr 17:00-23:00; Sa-Su 11:00-23:00; Nov-Mar off",
"additionalInfo": {
"opening_hours": "Mo-Fr 17:00-23:00; Sa-Su 11:00-23:00; Nov-Mar off",
"website": "http://klotzschersommerwirtschaft.de",
"phone": "+49 351 8804570",
"fax": "+49 351 8902050",
"email": "Kontakt@klotzscher-sommerwirtschaft.de",
"capacity": "20"
}
},
{
"name": "Brauhaus Watzke",
"lat": "51.07744",
"lon": "13.71540",
"id": 397976739,
"subType": "biergarten",
"type": "sustenance",
"additionalInfo": {
"wheelchair_limited": "limited",
"toilets_wheelchair_no": "no"
}
},
{
"name": "Trachauer Sommergarten",
"lat": "51.09166",
"lon": "13.70289",
"id": 1822089672,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "Mo-Su 17:00-21:00",
"additionalInfo": {
"opening_hours": "Mo-Su 17:00-21:00",
"note": "Auch im Winter geöffnet"
}
},
{
"lat": "51.06520",
"lon": "13.82406",
"id": 11565282314,
"subType": "biergarten",
"type": "sustenance",
"openingHours": "seasonal",
"additionalInfo": {
"outdoor_seating_yes": "yes",
"outdoor_seating_filter_yes": "yes",
"opening_hours": "seasonal"
}
}
]
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -135,7 +135,9 @@ dependencies {
implementation project(path: ':OsmAnd-java', configuration: 'android')
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation( "org.jetbrains.kotlin:kotlin-stdlib:1.2.71") {
exclude group: 'org.jetbrains', module: 'annotations'
}
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
implementation 'com.android.support:design:28.0.0-rc01'
implementation 'com.android.support:customtabs:28.0.0-rc01'
@ -146,4 +148,5 @@ dependencies {
implementation("com.github.HITGIF:TextFieldBoxes:1.4.4") {
exclude group: 'com.android.support'
}
implementation 'org.jetbrains:annotations-java5:15.0'
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/ctrl_active_light" />
<corners android:radius="@dimen/dialog_button_radius" />
</shape>
</item>
<item android:state_enabled="false">
<shape android:shape="rectangle">
<solid android:color="@color/ctrl_light" />
<corners android:radius="@dimen/dialog_button_radius" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@null" />
<corners android:radius="@dimen/dialog_button_radius" />
<stroke android:width="1dp" android:color="@color/app_bar_divider" />
</shape>
</item>
</selector>

View file

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:layout_gravity="bottom">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/scroll_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v4.widget.NestedScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:behavior_hideable="true"
app:behavior_peekHeight="@dimen/bottom_sheet_peek_height"
app:layout_behavior="@string/bottom_sheet_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/card_bg_color"
android:orientation="vertical">
<net.osmand.telegram.ui.views.TextViewEx
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard"
android:text="@string/add_device"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/list_item_title_text_size"
app:firstBaselineToTopHeight="28sp"
app:typeface="@string/font_roboto_medium" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard"
android:text="@string/enter_device_name_description"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:firstBaselineToTopHeight="28sp"
app:lastBaselineToBottomHeight="16sp"
app:typeface="@string/font_roboto_regular" />
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard"
app:hasClearButton="true"
app:labelText="@string/device_name">
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
<TextView
android:id="@+id/error_text_descr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginTop="@dimen/content_padding_half"
android:letterSpacing="@dimen/text_description_letter_spacing"
android:lineSpacingMultiplier="@dimen/text_description_line_spacing_multiplier"
android:textSize="@dimen/hint_text_size"
android:visibility="invisible"
tools:text="@string/device_name_cannot_be_empty" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/buttons_bottom_bar_height"
android:background="?attr/card_bg_color"
android:gravity="center_vertical"
android:paddingLeft="@dimen/content_padding_half"
android:paddingRight="@dimen/content_padding_half">
<include
layout="@layout/secondary_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<View
android:layout_width="@dimen/content_padding_half"
android:layout_height="match_parent" />
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<include
layout="@layout/primary_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="@dimen/progress_bar_size_small"
android:layout_height="@dimen/progress_bar_size_small"
android:layout_gravity="center"
android:visibility="gone"/>
</FrameLayout>
</LinearLayout>
</LinearLayout>

View file

@ -95,11 +95,13 @@
app:typeface="@string/font_roboto_medium" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/share_as_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard"
android:text="@string/share_location_as_descr"
android:text="@string/share_location_as_description"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:firstBaselineToTopHeight="20sp"
@ -120,6 +122,38 @@
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:id="@+id/add_new_device_btn"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_button_height"
android:layout_marginBottom="@dimen/content_padding_standard"
android:layout_marginLeft="@dimen/content_padding_half"
android:layout_marginRight="@dimen/content_padding_half"
android:background="@drawable/btn_round"
android:gravity="center_vertical"
android:paddingLeft="@dimen/content_padding_half"
android:paddingRight="@dimen/content_padding_half">
<ImageView
android:id="@+id/add_new_device_icon"
android:layout_width="@dimen/list_item_icon_size"
android:layout_height="@dimen/list_item_icon_size"
tools:src="@drawable/ic_action_add"
tools:tint="@color/icon_light" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/add_new_device_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding_big"
android:layout_marginRight="@dimen/content_padding_big"
android:text="@string/add_device"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/list_item_title_text_size"
app:typeface="@string/font_roboto_medium" />
</LinearLayout>
</LinearLayout>
<include layout="@layout/list_item_divider" />

View file

@ -117,13 +117,32 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/last_telegram_update_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center_horizontal"
android:gravity="center"
android:paddingTop="@dimen/content_padding_half"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
android:visibility="gone"
app:typeface="@string/font_roboto_regular" />
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="@dimen/list_view_bottom_padding"
android:scrollbars="vertical"/>
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="@dimen/list_item_content_margin"
android:scrollbars="vertical" />
</android.support.v4.widget.SwipeRefreshLayout>
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/open_osmand_btn"

View file

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/card_bg_color">
<net.osmand.telegram.ui.views.TextViewEx
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:letterSpacing="@dimen/title_letter_spacing"
android:maxLines="1"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard"
android:text="@string/timeline"
android:textColor="@color/app_bar_title_light"
android:paddingTop="@dimen/content_padding_standard"
android:paddingBottom="12dp"
android:textSize="@dimen/title_text_size"
app:typeface="@string/font_roboto_mono_bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard"
android:text="@string/timeline_description"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/descr_text_size" />
<FrameLayout
android:id="@+id/monitoring_container"
android:layout_width="match_parent"
android:layout_height="@dimen/action_bar_height"
android:background="?attr/selectableItemBackground"
android:orientation="horizontal"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/monitoring_title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical|start"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:text="@string/monitoring_is_enabled"
android:textColor="@color/ctrl_active_light"
android:textSize="@dimen/descr_text_size"
app:typeface="@string/font_roboto_medium" />
<Switch
android:id="@+id/monitoring_switcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:background="@null"
android:clickable="false"
android:focusable="false" />
</FrameLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/app_bar_divider" />
<FrameLayout
android:id="@+id/date_row"
android:layout_width="match_parent"
android:layout_height="@dimen/timeline_time_buttons_height"
android:background="@color/screen_bg_light"
android:orientation="horizontal"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/date_btn"
android:layout_width="wrap_content"
android:layout_height="@dimen/dialog_button_height"
android:layout_gravity="center"
android:layout_marginEnd="@dimen/content_padding_half"
android:layout_marginRight="@dimen/content_padding_half"
android:background="@drawable/btn_round_border"
android:drawablePadding="@dimen/content_padding_half"
android:ellipsize="end"
android:gravity="start|center_vertical"
android:maxLines="1"
android:paddingLeft="@dimen/image_button_padding"
android:paddingRight="@dimen/image_button_padding"
android:text="@string/shared_string_date"
android:textColor="?attr/ctrl_active_color"
android:textSize="@dimen/text_button_text_size"
app:typeface="@string/font_roboto_medium" />
</FrameLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="@dimen/list_item_content_margin"
android:scrollbars="vertical" />
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>

View file

@ -0,0 +1,526 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/card_bg_color">
<ScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:id="@+id/image_container"
android:layout_width="match_parent"
android:layout_height="102dp"
app:layout_scrollFlags="scroll">
<ImageView
android:id="@+id/back_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/shared_string_back"
android:padding="@dimen/content_padding_standard"
tools:src="@drawable/ic_arrow_back"
tools:tint="@color/icon_light" />
<ImageView
android:id="@+id/user_icon"
android:layout_width="@dimen/timeline_user_icon_size"
android:layout_height="@dimen/timeline_user_icon_size"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/content_padding_half"
tools:src="@drawable/img_user_picture" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:text="@string/start_location_sharing"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/title_text_size"
app:typeface="@string/font_roboto_mono_bold" />
</FrameLayout>
<LinearLayout
android:id="@+id/interval_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/start_descr"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/start_date"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:firstBaselineToTopHeight="@dimen/list_item_baseline_to_top_height"
app:typeface="@string/font_roboto_regular" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/end_descr"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/content_padding_standard"
android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/end_date"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:firstBaselineToTopHeight="@dimen/list_item_baseline_to_top_height"
app:typeface="@string/font_roboto_regular" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/card_divider_bottom_margin"
android:paddingBottom="@dimen/content_padding_half"
android:orientation="horizontal">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/date_start_btn"
android:layout_width="0dp"
android:layout_height="@dimen/dialog_button_height"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/content_padding_half"
android:layout_marginRight="@dimen/content_padding_half"
android:layout_weight="1"
android:background="@drawable/btn_round"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:paddingLeft="@dimen/image_button_padding"
android:paddingRight="@dimen/image_button_padding"
android:textSize="@dimen/text_button_text_size"
app:typeface="@string/font_roboto_medium"
tools:textColor="?attr/ctrl_active_color"
tools:visibility="visible" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/time_start_btn"
android:layout_width="wrap_content"
android:layout_height="@dimen/dialog_button_height"
android:layout_gravity="center_vertical"
android:background="@drawable/btn_round"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingLeft="@dimen/image_button_padding"
android:paddingRight="@dimen/image_button_padding"
android:textSize="@dimen/text_button_text_size"
app:typeface="@string/font_roboto_medium"
tools:textColor="?attr/ctrl_active_color"
tools:visibility="visible" />
<View
android:layout_width="16dp"
android:layout_height="1dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/content_padding_half"
android:layout_marginRight="@dimen/content_padding_half"
android:background="@color/card_divider_light" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/date_end_btn"
android:layout_width="0dp"
android:layout_height="@dimen/dialog_button_height"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/content_padding_half"
android:layout_marginRight="@dimen/content_padding_half"
android:layout_weight="1"
android:background="@drawable/btn_round"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingLeft="@dimen/image_button_padding"
android:paddingRight="@dimen/image_button_padding"
android:textSize="@dimen/text_button_text_size"
app:typeface="@string/font_roboto_medium"
tools:textColor="?attr/ctrl_active_color"
tools:visibility="visible" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/time_end_btn"
android:layout_width="wrap_content"
android:layout_height="@dimen/dialog_button_height"
android:layout_gravity="center_vertical"
android:background="@drawable/btn_round"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingLeft="@dimen/image_button_padding"
android:paddingRight="@dimen/image_button_padding"
android:textSize="@dimen/text_button_text_size"
app:typeface="@string/font_roboto_medium"
tools:textColor="?attr/ctrl_active_color"
tools:visibility="visible" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/map_container"
android:layout_width="match_parent"
android:layout_height="152dp"
android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard">
<ImageView
android:id="@+id/gpx_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/shared_string_map" />
</FrameLayout>
<LinearLayout
android:id="@+id/gpx_statistic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/distance_time_span"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="11dp"
android:paddingTop="13dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:paddingLeft="16dp">
<ImageView
android:id="@+id/distance_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:src="@drawable/ic_action_sort_by_distance" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:orientation="vertical">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/distance_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:layout_marginBottom="6dp"
android:background="@null"
android:text="@string/shared_string_distance"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:typeface="@string/font_roboto_regular" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/distance_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/descr_text_size"
app:typeface="@string/font_roboto_mono_bold"
tools:text="40 km" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:paddingLeft="16dp">
<ImageView
android:id="@+id/duration_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:src="@drawable/ic_action_share_location" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:orientation="vertical">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/duration_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:layout_marginBottom="6dp"
android:background="@null"
android:text="@string/time_on_the_move"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:typeface="@string/font_roboto_regular" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/duration_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/descr_text_size"
app:typeface="@string/font_roboto_mono_bold"
tools:text="3:32:44" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/list_divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="8dp">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/card_divider_light" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:paddingLeft="8dp"
android:paddingRight="16dp">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/card_divider_light" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/start_end_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="13dp"
android:paddingBottom="11dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:paddingLeft="16dp">
<ImageView
android:id="@+id/average_speed_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:src="@drawable/ic_action_speed_average" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:orientation="vertical">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/average_speed_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="6dp"
android:background="@null"
android:text="@string/average_speed"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:typeface="@string/font_roboto_regular" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/average_speed_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/descr_text_size"
app:typeface="@string/font_roboto_mono_bold"
tools:text="15:04:58" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:paddingLeft="16dp">
<ImageView
android:id="@+id/average_altitude_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:src="@drawable/ic_action_share_location" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:orientation="vertical">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/average_altitude_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="6dp"
android:background="@null"
android:text="@string/average_altitude"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:typeface="@string/font_roboto_regular" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/average_altitude_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/descr_text_size"
app:typeface="@string/font_roboto_mono_bold"
tools:text="20:58:00" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/open_in_osmand_btn"
android:layout_width="match_parent"
android:layout_height="@dimen/list_item_height_min"
android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginBottom="@dimen/image_button_padding"
android:background="@drawable/btn_round"
android:gravity="center_vertical"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard">
<ImageView
android:id="@+id/open_in_osmand_icon"
android:layout_width="@dimen/list_item_icon_size"
android:layout_height="@dimen/list_item_icon_size"
android:src="@drawable/ic_logo_osmand_free" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/open_in_osmand_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding_big"
android:layout_marginRight="@dimen/content_padding_big"
android:text="@string/open_in_osmand"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/list_item_title_text_size"
app:typeface="@string/font_roboto_regular" />
</LinearLayout>
<LinearLayout
android:id="@+id/share_gpx_btn"
android:layout_width="match_parent"
android:layout_height="@dimen/list_item_height_min"
android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginBottom="@dimen/content_padding_standard"
android:background="@drawable/btn_round"
android:gravity="center_vertical"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard">
<ImageView
android:id="@+id/share_gpx_icon"
android:layout_width="@dimen/list_item_icon_size"
android:layout_height="@dimen/list_item_icon_size"
tools:src="@drawable/ic_action_share"
tools:tint="@color/ctrl_active_light" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/share_gpx_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding_big"
android:layout_marginRight="@dimen/content_padding_big"
android:text="@string/shared_string_share"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/list_item_title_text_size"
app:typeface="@string/font_roboto_regular" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</android.support.design.widget.CoordinatorLayout>

View file

@ -40,7 +40,8 @@
android:layout_marginEnd="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_weight="1"
android:orientation="vertical">
android:orientation="vertical"
android:paddingBottom="@dimen/content_padding_half">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/title"
@ -55,40 +56,78 @@
tools:text="Share location"/>
<LinearLayout
android:id="@+id/group_container"
android:id="@+id/details_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:visibility="gone"
tools:visibility="visible">
android:gravity="center_vertical">
<ImageView
android:id="@+id/group_icon"
android:layout_width="@dimen/list_item_icon_size_small"
android:layout_height="@dimen/list_item_icon_size_small"
android:layout_gravity="bottom"
android:layout_marginEnd="@dimen/content_padding_small"
android:layout_marginRight="@dimen/content_padding_small"
tools:src="@drawable/img_group_picture" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/group_title"
<LinearLayout
android:id="@+id/distance_and_points_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="?attr/android:textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:firstBaselineToTopHeight="@dimen/list_item_baseline_to_top_height"
app:typeface="@string/font_roboto_regular"
tools:text="@string/shared_string_group" />
android:orientation="horizontal"
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:id="@+id/distance_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginEnd="@dimen/content_padding_small"
android:layout_marginRight="@dimen/content_padding_small"
tools:src="@drawable/ic_action_distance_16dp"
tools:tint="@color/icon_light" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/distance_and_points_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:firstBaselineToTopHeight="@dimen/list_item_baseline_to_top_height"
app:typeface="@string/font_roboto_regular"
tools:text="213 m" />
</LinearLayout>
<LinearLayout
android:id="@+id/group_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:id="@+id/group_icon"
android:layout_width="@dimen/list_item_icon_size_small"
android:layout_height="@dimen/list_item_icon_size_small"
android:layout_gravity="bottom"
android:layout_marginEnd="@dimen/content_padding_small"
android:layout_marginRight="@dimen/content_padding_small"
tools:src="@drawable/img_group_picture" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/group_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:firstBaselineToTopHeight="@dimen/list_item_baseline_to_top_height"
app:typeface="@string/font_roboto_regular"
tools:text="@string/shared_string_group" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/location_with_descr_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/content_padding_half">
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/location_view_container"
@ -211,4 +250,16 @@
android:id="@+id/bottom_shadow"
layout="@layout/card_bottom_divider"/>
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/last_telegram_update_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:gravity="center"
android:paddingTop="@dimen/content_padding_half"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
android:visibility="gone"
app:typeface="@string/font_roboto_regular" />
</LinearLayout>

View file

@ -171,6 +171,44 @@
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/gps_points"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/hint_text_size"
app:typeface="@string/font_roboto_regular"
android:text="@string/gps_points" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/gps_points_collected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/hint_text_size"
app:typeface="@string/font_roboto_mono_bold" />
<net.osmand.telegram.ui.views.TextViewEx
android:layout_width="wrap_content"
android:id="@+id/gps_points_in_buffer_txt"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/hint_text_size"
android:text="@string/gps_points_in_buffer"
app:typeface="@string/font_roboto_regular" />
</LinearLayout>
</LinearLayout>
<Switch

View file

@ -144,4 +144,16 @@
android:id="@+id/bottom_shadow"
layout="@layout/card_bottom_divider"/>
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/last_telegram_update_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:gravity="center"
android:paddingTop="@dimen/content_padding_half"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
android:visibility="gone"
app:typeface="@string/font_roboto_regular" />
</LinearLayout>

View file

@ -9,4 +9,9 @@
android:id="@+id/action_live_now"
android:icon="@drawable/ic_action_live_now"
android:title="@string/live_now"/>
<item
android:id="@+id/action_timeline"
android:icon="@drawable/ic_action_timeline"
android:title="@string/timeline"/>
</menu>

View file

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="average_altitude">Altitú media</string>
<string name="average_speed">Velocidá media</string>
<string name="shared_string_map">Mapa</string>
<string name="shared_string_add">Amestar</string>
<string name="shared_string_hide">Anubrir</string>
<string name="shared_string_status">Estáu</string>
<string name="shared_string_disable">Desactivar</string>
<string name="shared_string_save">Guardar</string>
<string name="shared_string_name">Nome</string>
<string name="shared_string_exit">Colar</string>
<string name="shared_string_close">Zarrar</string>
<string name="shared_string_off">Non</string>
<string name="shared_string_install">Instalar</string>
<string name="shared_string_share">Compartir</string>
<string name="shared_string_back">Atrás</string>
<string name="shared_string_continue">Siguir</string>
<string name="shared_string_cancel">Encaboxar</string>
<string name="shared_string_settings">Axustes</string>
<string name="yard">yd</string>
<string name="foot">ft</string>
<string name="mile">mi</string>
<string name="km">km</string>
<string name="m">m</string>
<string name="nm">nmi</string>
<string name="min_mile">min/m</string>
<string name="min_km">min/km</string>
<string name="m_s">m/s</string>
<string name="km_h">km/h</string>
<string name="mile_per_hour">mph</string>
<string name="si_kmh">Quilómetros per hora</string>
<string name="si_mph">Milles per hora</string>
<string name="si_m_s">Metros per segundu</string>
<string name="si_min_km">Minutos per quilómetru</string>
<string name="si_min_m">Minutos per milla</string>
<string name="si_mi_feet">Milles/pies</string>
<string name="si_mi_yard">Milles/yardes</string>
<string name="si_km_m">Quilómetros/metros</string>
<string name="si_nm">Milles náutiques</string>
<string name="si_mi_meters">Milles/metros</string>
<string name="monitoring_is_enabled">La supervisión ta activada</string>
<string name="monitoring_is_disabled">La supervisión ta desactivada</string>
<string name="end_date">Data de fin</string>
<string name="start_date">Data d\'aniciu</string>
<string name="timeline_description">Activa la supervisión pa recoyer en segundu planu los datos de la movición.</string>
<string name="send_location_as">Unviar l\'allugamientu como</string>
<string name="send_location_as_descr">Escueyi cómo van vese los mensaxes col to allugamientu.</string>
<string name="shared_string_text">Testu</string>
<string name="map_and_text">Mapa y testu</string>
<string name="last_update_from_telegram">L\'últimu anovamientu dende Telegram</string>
<string name="enter_another_device_name">Escueyi un nome que nun usares yá</string>
<string name="device_added_successfully">Amestóse %1$s.</string>
<string name="error_adding_new_device">Nun pudo amestase\'l preséu nuevu</string>
<string name="enter_device_name_description">El nome del preséu nuevu, 200 caráuteres como máximu.</string>
<string name="device_name_is_too_long">El nome del preséu ye perllargu</string>
<string name="device_name_cannot_be_empty">El nome del preséu nun pue tar baleru</string>
<string name="device_name">Nome del preséu</string>
<string name="share_location_as_description_second_line">Pues crear y ver la ID del preséu nun veceru pa Telegram usando la charra col robó %1$s .%2$s</string>
<string name="share_location_as_description">Si quies coneutar munchos preseos a una cuenta de Telegram, precises usar un preséu diferente al compartir l\'allugamientu.</string>
<string name="waiting_for_response_from_telegram">Esperando pola rempuesta de Telegram</string>
<string name="initializing">Aniciando</string>
<string name="searching_for_gps">Posicionando…</string>
<string name="background_work_description">Camuda los axustes de la optimización de la batería pa estabilizar la compartición del allugamientu.</string>
<string name="background_work">Trabayu en segundu planu</string>
<string name="sharing_in_background">Compartición en segundu planu</string>
<string name="go_to_settings">Dir a Axustes</string>
<string name="shared_string_later">Más sero</string>
<string name="sharing_enabled">Compartición: Activada</string>
<string name="no_gps_connection">Nun hai conexón al GPS</string>
<string name="no_internet_connection">Nun hai conexón a internet</string>
<string name="add_device">Amestar un preséu</string>
<string name="live_now_description">Contautos y grupos que tán compartiendo l\'allugamientu contigo.</string>
<string name="logout_from_osmand_telegram_descr">¿De xuru que quies zarrar sesión n\'OsmAnd Telegram pa que nun pueas compartir l\'allugamientu nin ver el d\'otros\?</string>
<string name="logout_from_osmand_telegram">¿Zarrar la sesión d\'OsmAnd Telegram\?</string>
<string name="by_distance">pola distancia</string>
<string name="by_name">pol nome</string>
<string name="by_group">pol grupu</string>
<string name="shared_string_sort_by">Ordenar por</string>
<string name="choose_osmand_desc">Esbilla la versión d\'OsmAnd onde van amosase los contautos nel mapa.</string>
<string name="disable_all_sharing_desc">Desactiva la compartición del allugamientu en toles charres esbillaes ((%1$d).</string>
<string name="disable_all_sharing">Desactivar toles comparticiones</string>
<string name="turn_off_all">Desactivar too</string>
<string name="shared_string_group">Grupu</string>
<string name="disconnect_from_telegram_desc">Pa revocar l\'accesu a la compartición del allugamientu. Abri Telegram, vete a Axustes → Privacidá y seguranza → Sesiones y zarra la sesión d\'OsmAnd Telegram.</string>
<string name="disconnect_from_telegram">Cómo desactivar la compartición del allugamientu con OsmAnd dende Telegram</string>
<string name="logout_help_desc">Cómo desactivar la compartición del allugamientu con OsmAnd dende Telegram</string>
<string name="connected_account">Cuenta coneutada</string>
<string name="shared_string_account">Cuenta</string>
<string name="in_time">en %1$s</string>
<string name="osmand_connect_desc">Escueyi la versión d\'OsmAnd qu\'OsmAnd Telegram va usar p\'amosar les posiciones.</string>
<string name="osmand_connect">Conexón a OsmAnd</string>
<string name="location_history_desc">Anubre los contautos que nun se movieren nel tiempu apurríu.</string>
<string name="location_history">Historial d\'allugamientos</string>
<string name="stale_location_desc">La última vez qu\'un contautu se movió.</string>
<string name="stale_location">Ausencia de movición</string>
<string name="send_my_location_desc">Afita l\'intervalu mínimu pa la compartición del allugamientu.</string>
<string name="send_my_location">Unviar el mio allugamientu</string>
<string name="gps_and_location">Posición</string>
<string name="sharing_time">Tiempu de la compartición</string>
<string name="expire_at">Caduca a les</string>
<string name="turn_off_location_sharing">Desactivar la compartición del allugamientu</string>
<string name="open_osmand">Abrir OsmAnd</string>
<string name="shared_string_live">En direuto</string>
<string name="shared_string_bot">Robó</string>
<string name="get_telegram_title">Rexistru en Telegram</string>
<string name="get_telegram_account_first">Precises una cuenta de Telegram pa usar la compartición d\'allugamientuos.</string>
<string name="get_telegram_description_continue">Instala Telegram y configura una cuenta.</string>
<string name="get_telegram_after_creating_account">Darréu vas poder usar esta aplicación.</string>
<string name="shared_string_all">Too</string>
<string name="do_not_have_telegram">Nun teo una cuenta de Telegram</string>
<string name="enter_phone_number">Introduz el númberu telefónicu</string>
<string name="enter_authentication_code">Introduz el códigu d\'autentación</string>
<string name="hours_and_minutes_format">%1$d h %2$d m</string>
<string name="minutes_format">%1$d m</string>
<string name="hours_format">%1$d h</string>
<string name="visible_time_for_all">Visibilidá xeneral demientres</string>
<string name="set_time">Afitamientu del tiempu</string>
<string name="location_sharing_description">Esbilla los contautos y grupos colos que quies compartir el to allugamientu.</string>
<string name="app_name">OsmAnd Telegram</string>
<string name="phone_number_title">Númberu telefónicu</string>
<string name="phone_number_descr">Númberu telefónicu nel formatu internacional</string>
<string name="shared_string_password">Contraseña</string>
<string name="authentication_code">Códigu d\'autenticación</string>
<string name="authentication_code_descr">Telegram unvióte un códigu pa OsmAnd pa qu\'anicies sesión na to cuenta.</string>
<string name="enter_password">Introduz la contraseña</string>
<string name="password_descr">Contraseña de Telegram</string>
<string name="shared_string_logout">Zarrar sesión</string>
<string name="gps_network_not_enabled">¿Activar «Allugamientu»\?</string>
<string name="not_logged_in">Nun aniciesti sesión</string>
<string name="gps_not_available">Activa «Allugamientu» nos axustes del sistema</string>
<string name="osmand_service_descr">OsmAnd Telegram execútase en segundu planu cola pantalla apagada.</string>
<string name="shared_string_distance">Distancia</string>
<string name="sharing_location">Compartiendo l\'allugamientu</string>
<string name="process_service">Serviciu d\'OsmAnd Telegram</string>
<string name="osmand_logo">Logu d\'OsmAnd</string>
<string name="install_osmand_dialog_message">Primero precises instalar la versión de baldre o de pagu d\'OsmAnd</string>
<string name="install_osmand">Instalación d\'OsmAnd</string>
<string name="shared_string_authorization">Autorización</string>
<string name="shared_string_authorization_descr">Introduz el to númberu telefónicu de Telegram nel formatu internacional</string>
<string name="shared_string_welcome">Afáyate</string>
<string name="nm_h">nmi/h</string>
<string name="si_nm_h">Milles náutiques per hora (nuedos)</string>
<string name="shared_string_hour_short">h</string>
<string name="shared_string_minute_short">m</string>
<string name="shared_string_second_short">s</string>
<string name="welcome_descr">La <b>compartición del allugamientu con OsmAnd</b> déxate compartir el to allugamientu y ver el d\'otros n\'OsmAnd.<br/><br/>L\'aplicación usa l\'API de Telegram y vas precisar una cuenta de Telegram.</string>
<string name="my_location">El mio allugamientu</string>
<string name="live_now">En direuto</string>
<string name="timeline">Llinia temporal</string>
<string name="last_available_location">L\'últimu allugamientu disponible</string>
<string name="sharing_status">Estáu de la compartición</string>
<string name="set_time_description">Afita\'l tiempu nel que los contautos y grupos esbillaos van ver el to allugamientu en tiempu real.</string>
</resources>

View file

@ -0,0 +1,190 @@
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="last_update_from_telegram">Апошняе абнаўленне з Telegram</string>
<string name="enter_another_device_name">Абярыце імя, якое вы яшчэ не выкарыстоўвалі</string>
<string name="device_added_successfully">%1$s дададзена.</string>
<string name="shared_string_add">Дадаць</string>
<string name="error_adding_new_device">Не атрымалася дадаць новую прыладу</string>
<string name="enter_device_name_description">Максімальная даўжыня назвы новай прылады - 200 сімвалаў.</string>
<string name="device_name_is_too_long">Назва прылады занадта доўгая</string>
<string name="device_name_cannot_be_empty">Назва прылады не можа быць пустой</string>
<string name="device_name">Назва прылады</string>
<string name="shared_string_hide">Схаваць</string>
<string name="share_location_as_description_second_line">Вы можаце стварыць і праглядзець ідэнтыфікатар прылады ў кліенце Тэлеграма, выкарыстоўваючы %1$s бота. %2$s</string>
<string name="share_location_as_description">Калі вы хочаце падлучыць некалькі прылад да аднаго акаўнта тэлеграм, то вам неабходна выкарыстаць розныя прылады, каб падзяліцца месцазнаходжаннем.</string>
<string name="last_updated_location">Апошняе абнаўленне месцазнаходжання:</string>
<string name="successfully_sent_and_updated">Паспяхова адпраўлена і абноўлена</string>
<string name="not_possible_to_send_to_telegram_chats">Немагчыма адправіць у размову Тэлеграм:</string>
<string name="waiting_for_response_from_telegram">Чаканне адказу ад Тэлеграм</string>
<string name="sending_location_messages">Адпраўленне месцазнаходжання</string>
<string name="initializing">Запуск</string>
<string name="searching_for_gps">Пазіцыянаванне…</string>
<string name="connecting_to_the_internet">Злучэнне з Інтэрнэтам</string>
<string name="background_work_description">Змена параметраў аптымізацыі батарэі для стабілізацыі абмену інфармацыяй аб месцазнаходжанні.</string>
<string name="background_work">Праца ў фонавым рэжыме</string>
<string name="battery_optimization_description">Выключыць аптымізацыю батарэі для OsmAnd Telegram, каб прадухіліць нечаканае выключэнне фонавага рэжыму.</string>
<string name="sharing_in_background">Абмен у фонавым рэжыме</string>
<string name="go_to_settings">Перайсці ў налады</string>
<string name="shared_string_later">Пазней</string>
<string name="not_sent_yet">Яшчэ не адпраўлена</string>
<string name="not_found_yet">Яшчэ не знойдзена</string>
<string name="re_send_location">Пераадправіць звесткі аб месцазнаходжанні</string>
<string name="last_available_location">Апошняе даступнае месца</string>
<string name="sharing_status">"Статус абмену "</string>
<string name="sharing_enabled">Абмен: Уключаны</string>
<string name="shared_string_status">Статус</string>
<string name="no_gps_connection">Злучэнне з GPS адсутнічае</string>
<string name="no_internet_connection">Злучэнне з Інтэрнэтам адсутнічае</string>
<string name="shared_string_disable">Выключыць</string>
<string name="shared_string_save">Захаваць</string>
<string name="add_device">Дадаць прыладу</string>
<string name="share_location_as">Падзяліцца месцазнаходжаннем як</string>
<string name="live_now_description">Кантакты і групы для абмену месцазнаходжаннем.</string>
<string name="logout_from_osmand_telegram_descr">Вы не зможаце падзяліцца сваім месцазнаходжаннем і ўбачыць месцазнаходжанне іншых. Сапраўды выйсці з OsmAnd Telegram\?</string>
<string name="logout_from_osmand_telegram">Выйсці з OsmAnd Telegram\?</string>
<string name="shared_string_name">Імя</string>
<string name="by_distance">Па адлегласці</string>
<string name="by_name">Па імёнах</string>
<string name="by_group">Па групе</string>
<string name="shared_string_sort">Упарадкаваць</string>
<string name="shared_string_sort_by">Упарадкаваць па</string>
<string name="choose_osmand_desc">Абярыце версію OsmAnd, у якой кантакты будуць адлюстроўвацца на мапе.</string>
<string name="choose_osmand">Абярыце версію OsmAnd для выкарыстання</string>
<string name="disable_all_sharing_desc">Выключыць абмен для ўсіх абраных размоў (%1$d).</string>
<string name="disable_all_sharing">Выключыць усе абмены</string>
<string name="turn_off_all">Выключыце ўсе</string>
<string name="shared_string_exit">Выйсці</string>
<string name="time_ago">таму</string>
<string name="last_response">Апошні адказ</string>
<string name="shared_string_group">Група</string>
<string name="logout_no_internet_msg">Падлучыцеся да Інтэрнэту, каб карэктна выйсці з Тэлеграм.</string>
<string name="shared_string_close">Закрыць</string>
<string name="disconnect_from_telegram_desc">Для таго, каб скасаваць абмен месцазнаходжаннем, адкрыйце Тэлеграм, перайдзіце ў Налады → Прыватнасць і бяспека → Сеансы і спыніце сеанс OsmAnd Telegram.</string>
<string name="disconnect_from_telegram">Як выключыць абмен месцазнаходжаннем у OsmAnd праз Тэлеграм</string>
<string name="logout_help_desc">Як выключыць абмен месцазнаходжаннем у OsmAnd праз Тэлеграм</string>
<string name="connected_account">Падлучаны акаўнт</string>
<string name="shared_string_account">Рахунак</string>
<string name="in_time">у %1$s</string>
<string name="osmand_connect_desc">Абраць версію OsmAnd, якую OsmAnd Telegram будзе выкарыстоўваць для адлюстравання пазіцыі.</string>
<string name="osmand_connect">Злучэнне з OsmAnd</string>
<string name="location_history_desc">Схаваць кантакты, якія не перамяшчаліся пэўны час.</string>
<string name="location_history">Гісторыя месцазнаходжанняў</string>
<string name="stale_location_desc">Апошні раз кантакт рухаўся.</string>
<string name="stale_location">Не рухаецца</string>
<string name="send_my_location_desc">Вызначыць мінімальны інтэрвал для абмену інфармацыяй аб месцазнаходжанні.</string>
<string name="send_my_location">Адправіць маё месцазнаходжанне</string>
<string name="gps_and_location">Пазіцыя</string>
<string name="sharing_time">"Час абмену "</string>
<string name="expire_at">Сыходзіць</string>
<string name="stop_sharing_all">Абмен уключаны (выключыць)</string>
<string name="turn_off_location_sharing">Выключыць абмен</string>
<string name="open_osmand">Адкрыць OsmAnd</string>
<string name="shared_string_live">Дзейных</string>
<string name="shared_string_bot">Бот</string>
<string name="get_telegram_title">Рэгістрацыя ў Telegram</string>
<string name="get_telegram_account_first">Для абмену вам неабходны акаўнт Тэлеграм.</string>
<string name="get_telegram_description_continue">Калі ласка, ўсталюйце Тэлеграм і наладзьце акаўнт.</string>
<string name="get_telegram_after_creating_account">Пасля гэтага вы зможаце выкарыстоўваць дадатак.</string>
<string name="shared_string_all">Усе</string>
<string name="shared_string_off">Выкл</string>
<string name="already_registered_in_telegram">Вам неабходна мець акаўнт Тэлеграм і нумар тэлефона</string>
<string name="do_not_have_telegram">У мяне няма акаўнта Тэлеграм</string>
<string name="enter_phone_number">Увядзіце нумар тэлефона</string>
<string name="enter_authentication_code">Увядзіце код аўтарызацыі</string>
<string name="set_visible_time_for_all">Вызначце бачны час для ўсіх</string>
<string name="hours_and_minutes_format">%1$d г %2$d хв</string>
<string name="minutes_format">%1$d хв</string>
<string name="hours_format">%1$d г</string>
<string name="shared_string_install">Усталяваць</string>
<string name="shared_string_share">Падзяліцца</string>
<string name="shared_string_back">Назад</string>
<string name="visible_time_for_all">Бачны для ўсіх час</string>
<string name="set_time_description">Задайце час, што будуць бачыць абраныя вамі кантакты і групы ў рэжыме рэальнага часу.</string>
<string name="set_time">Задаць час</string>
<string name="location_sharing_description">Абярыце кантакты і групы, з якімі хочаце абменьвацца вашым месцазнаходжаннем.</string>
<string name="my_location_search_hint">Пошук: група альбо кантакт</string>
<string name="start_location_sharing">Падзяліцца месцазнаходжаннем</string>
<string name="show_on_map">Паказаць на мапе</string>
<string name="app_name">ОsmAnd Telegram</string>
<string name="phone_number_title">Нумар тэлефона</string>
<string name="phone_number_descr">Нумар тэлефона ў міжнародным фармаце</string>
<string name="shared_string_password">Пароль</string>
<string name="enter_code">Увядзіце код</string>
<string name="authentication_code">Код аўтэнтыфікацыі</string>
<string name="authentication_code_descr">Тэлеграм адправіў вам код для OsmAnd для ўваходу ў акаўнт.</string>
<string name="enter_password">Увядзіце пароль</string>
<string name="password_descr">Пароль Тэлеграм</string>
<string name="shared_string_login">Увайсці</string>
<string name="shared_string_logout">Выйсці</string>
<string name="initialization">Запуск</string>
<string name="logging_out">Выхад</string>
<string name="closing">Закрыццё</string>
<string name="gps_network_not_enabled">Уключыць \"Месцазнаходжанне\"\?</string>
<string name="not_logged_in">Вы не ўвайшлі</string>
<string name="shared_string_continue">Працягнуць</string>
<string name="shared_string_cancel">Скасаваць</string>
<string name="shared_string_settings">Налады</string>
<string name="no_location_permission">Дадатак не мае дазволу на доступ да даных аб месцазнаходжанні.</string>
<string name="gps_not_available">Калі ласка, ўключыце \"Месцазнаходжанне\" ў сістэмных наладах</string>
<string name="location_service_no_gps_available">Абярыце аднаго пастаўшчыка месцазнаходжання, каб падзяліцца сваім месцазнаходжаннем.</string>
<string name="osmand_service">Фонавы рэжым</string>
<string name="osmand_service_descr">OsmAnd Telegram працуе ў фонавым рэжыме з выключаным экранам.</string>
<string name="shared_string_distance">Адлегласць</string>
<string name="share_location">Падзяліцца месцазнаходжаннем</string>
<string name="sharing_location">Абмен данымі аб месцазнаходжанні</string>
<string name="process_service">Сэрвіс OsmAnd Telegram</string>
<string name="osmand_logo">Лагатып OsmAnd</string>
<string name="install_osmand_dialog_message">Спачатку вам неабходна ўсталяваць бясплатную ці платную версію OsmAnd</string>
<string name="install_osmand">Усталяваць OsmAnd</string>
<string name="show_users_on_map">Паказаць карыстальнікаў на мапе</string>
<string name="active_chats">Актыўныя размовы</string>
<string name="shared_string_authorization">Аўтарызацыя</string>
<string name="shared_string_authorization_descr">Калі ласка, увядзіце ваш нумар тэлефона, звязаны з Тэлеграм, ў міжнародным фармаце</string>
<string name="shared_string_welcome">Вітаем</string>
<string name="yard">ярд</string>
<string name="foot">фут</string>
<string name="mile">міл</string>
<string name="km">км</string>
<string name="m">м</string>
<string name="nm">м.мілі</string>
<string name="min_mile">хв/м</string>
<string name="min_km">хв/км</string>
<string name="nm_h">м.міль/г</string>
<string name="m_s">м/с</string>
<string name="km_h">км/г</string>
<string name="mile_per_hour">м/г</string>
<string name="si_kmh">Кіламетраў за гадзіну</string>
<string name="si_mph">Міляў за гадзіну</string>
<string name="si_m_s">Метраў за секунду</string>
<string name="si_min_km">Хвілін на кіламетар</string>
<string name="si_min_m">Хвілін на мілю</string>
<string name="si_nm_h">Марскіх міль за гадзіну (вузлоў)</string>
<string name="si_mi_feet">Мілі/футы</string>
<string name="si_mi_yard">Мілі/ярды</string>
<string name="si_km_m">Кіламетры/метры</string>
<string name="si_nm">Марскія мілі</string>
<string name="si_mi_meters">Мілі/метры</string>
<string name="shared_string_hour_short">г</string>
<string name="shared_string_minute_short">хвіл</string>
<string name="shared_string_second_short">сек</string>
<string name="welcome_descr"><b>Абмен месцазнаходжаннем OsmAnd</b> Дае магчымасць дзяліцца сваім месцазнаходжаннем і бачыць месцазнаходжанне іншых у OsmAnd.<br/><br/> Дадатак выкарыстоўвае Telegram API, таму вам неабходны акаўнт Тэлеграм.</string>
<string name="my_location">Маё месцазнаходжанне</string>
<string name="live_now">Зараз дзейнічае</string>
<string name="send_location_as">Адправіць месцазнаходжанне як</string>
<string name="send_location_as_descr">Абярыце як будуць выглядаць паведамленні з вашым месцазнаходжаннем.</string>
<string name="shared_string_map">Мапа</string>
<string name="shared_string_text">Тэкст</string>
<string name="map_and_text">Мапа і тэкст</string>
<string name="monitoring_is_enabled">Маніторынг уключаны</string>
<string name="monitoring_is_disabled">Маніторынг адключаны</string>
<string name="time_on_the_move">час руху</string>
<string name="average_altitude">Сярэдняя вышыня</string>
<string name="average_speed">Сярэдняя хуткасць</string>
<string name="open_in_osmand">Адкрыць у OsmAnd</string>
<string name="end_date">Дата закрыцця</string>
<string name="start_date">Час адкрыцця</string>
<string name="timeline_description">Уключаць маніторынг для збору данных руху ў фоне.</string>
<string name="timeline">Храналогія</string>
</resources>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View file

@ -1,28 +1,21 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="background_work_description">Skift indstillinger for batterioptimering, for stabil deling af placering</string>
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="background_work_description">Skift indstillinger for batterioptimering, for stabil deling af placering.</string>
<string name="background_work">Baggrundstilstand</string>
<string name="battery_optimization_description">Sluk for batterioptimering af OsmAnd Telegram, så det ikke pludselig slukker, når i baggrunden.</string>
<string name="battery_optimization_description">Sluk for batterioptimering af OsmAnd Telegram, så det ikke pludseligt bliver slukket, når det er i baggrunden.</string>
<string name="sharing_in_background">Deling i baggrunden</string>
<string name="go_to_settings">Gå til indstillinger</string>
<string name="shared_string_later">Senere</string>
<string name="not_sent_yet">Ikke sendt endnu</string>
<string name="not_found_yet">Ikke fundet endnu</string>
<string name="re_send_location">Send placering igen</string>
<string name="last_sent_location">Sidst sendte placering</string>
<string name="last_available_location">Sidste tilgængelige placering</string>
<string name="sharing_status">Delingsstatus</string>
<string name="sharing_enabled">Deling: aktiveret</string>
<string name="shared_string_status">Status</string>
<string name="no_gps_connection">Ingen GPS-forbindelse</string>
<string name="sharing_success">Sendt korrekt og opdateret</string>
<string name="not_possible_to_send_to_chats">Ikke muligt at sende til samtaler:</string>
<string name="no_internet_connection">Ingen internetforbindelse</string>
<string name="shared_string_disable">Deaktiver</string>
<string name="shared_string_save">Gem</string>
<string name="add_device_descr">Indtast enheds-id, som kan findes på https://live.osmand.net/device/ID</string>
<string name="device_id">Enheds-id</string>
<string name="add_device">Tilføj enhed</string>
<string name="share_location_as_descr">Giver mulighed for at dele enhedens placering, eller placering af brugerdefinerede enheder det tilføjes via API.</string>
<string name="share_location_as">Del placering som</string>
<string name="live_now_description">Kontakter og grupper som der deles placering med.</string>
<string name="logout_from_osmand_telegram_descr">Er du sikker på at du vil logge ud af OsmAnd Telegram, så du ikke kan dele din placering eller se placeringen af andre\?</string>
@ -33,16 +26,16 @@
<string name="by_group">Efter gruppe</string>
<string name="shared_string_sort">Sorter</string>
<string name="shared_string_sort_by">Sorter efter</string>
<string name="choose_osmand_desc">Vælg OsmAnd version, hvor kontakter skal vises på kortet.</string>
<string name="choose_osmand">Vælg en OsmAnd-version</string>
<string name="disable_all_sharing_desc">Deaktiverer deling af placering for alle de valgte samtaler (%1$d).</string>
<string name="choose_osmand_desc">Vælg den OsmAnd version, der skal vise kontakter på kortet.</string>
<string name="choose_osmand">Vælg OsmAnd-version der skal bruges</string>
<string name="disable_all_sharing_desc">Slukker for placeringsdeling for alle de valgte samtaler (%1$d).</string>
<string name="disable_all_sharing">Deaktiver al deling</string>
<string name="turn_off_all">Sluk alt</string>
<string name="shared_string_exit">Afslut</string>
<string name="time_ago">siden</string>
<string name="last_response">Sidste svar</string>
<string name="shared_string_group">Gruppe</string>
<string name="logout_no_internet_msg">Opret forbindelse til internettet for at logge ud af Telegram.</string>
<string name="logout_no_internet_msg">Opret forbindelse til Internettet for at logge ud af Telegram.</string>
<string name="shared_string_close">Luk</string>
<string name="disconnect_from_telegram_desc">"Sådan tilbagekaldes adgang til placeringsdeling. Åbn Telegram, gå til Settings - Privacy and Security - Sessions og afslut OsmAnd Telegram session. "</string>
<string name="disconnect_from_telegram">Hvordan afbrydes OsmAnd placeringsdeling fra Telegram</string>
@ -51,29 +44,28 @@
<string name="shared_string_account">Konto</string>
<string name="in_time">i %1$s</string>
<string name="osmand_connect_desc">Vælg den OsmAnd version, som OsmAnd Telegram bruger til vise placeringer på kortet.</string>
<string name="osmand_connect">OsmAnd forbindelse</string>
<string name="location_history_desc">Skjul de kontaktpersoner, der ikke har opdateret placering i et givet tidsrum.</string>
<string name="osmand_connect">Tilslut OsmAnd</string>
<string name="location_history_desc">Skjul kontakter, der ikke har bevæget sig i en given tid.</string>
<string name="location_history">Placeringshistorik</string>
<string name="stale_location_desc">Sidste gang en kontakt har sendt en placering.</string>
<string name="stale_location">Uaktuel placering</string>
<string name="stale_location_desc">Sidste gang en kontakt har bevæget sig.</string>
<string name="stale_location">Bevæger sig ikke</string>
<string name="send_my_location_desc">Angiv den mindste interval for deling af placering.</string>
<string name="send_my_location">Send placering</string>
<string name="gps_and_location">GPS og placering</string>
<string name="sharing_time">Delingstidsrum</string>
<string name="gps_and_location">Placering</string>
<string name="sharing_time">Delingstid</string>
<string name="expire_at">Udløber</string>
<string name="stop_sharing_all">Deling er aktiveret (deaktiver)</string>
<string name="turn_off_location_sharing">Sluk for deling af placering</string>
<string name="open_osmand">Åbn OsmAnd</string>
<string name="shared_string_live">Live</string>
<string name="shared_string_bot">Bot</string>
<string name="get_telegram_title">Registrering i Telegram</string>
<string name="get_telegram_account_first">Det er nødvendigt med en Telegram-konto for at bruge OsmAnd placeringsdeling.</string>
<string name="get_telegram_description_continue">Installer Telegram fra Google Play, og opret en konto.</string>
<string name="get_telegram_after_creating_account">Når konto er oprettet, kan programmet bruges.</string>
<string name="get_telegram_account_first">Det er nødvendigt med en Telegram-konto for at bruge placeringsdeling.</string>
<string name="get_telegram_description_continue">Installer Telegram og opret en konto.</string>
<string name="get_telegram_after_creating_account"> kan programmet bruges.</string>
<string name="shared_string_all">Alle</string>
<string name="shared_string_off">Fra</string>
<string name="already_registered_in_telegram">Der er brug for en registreret Telegram-konto og telefonnummer</string>
<string name="do_not_have_telegram">Jeg har ikke Telegram konto</string>
<string name="do_not_have_telegram">Har ikke Telegram konto</string>
<string name="enter_phone_number">Indtast telefonnummer</string>
<string name="enter_authentication_code">Indtast autentificeringskode</string>
<string name="set_visible_time_for_all">Sæt synlige tid for alle</string>
@ -83,12 +75,12 @@
<string name="shared_string_install">Installer</string>
<string name="shared_string_share">Del</string>
<string name="shared_string_back">Tilbage</string>
<string name="visible_time_for_all">Synlige tid for alle</string>
<string name="set_time_description">Sæt tidrummet hvor de valgte kontaktpersoner og grupper kan placering i realtid.</string>
<string name="visible_time_for_all">Synlig tid for alle</string>
<string name="set_time_description">Sæt tiden hvor de valgte kontakter og grupper kan se placering i realtid.</string>
<string name="set_time">Sæt tid</string>
<string name="location_sharing_description">Vælg de kontaktpersoner og grupper, som placeringen skal deles med.</string>
<string name="location_sharing_description">Vælg de kontakter og grupper, som placeringen skal deles med.</string>
<string name="my_location_search_hint">Søg: gruppe eller kontakt</string>
<string name="start_location_sharing">Start deling af placering</string>
<string name="start_location_sharing">Del placering</string>
<string name="show_on_map">Vis på kort</string>
<string name="app_name">OsmAnd Telegram</string>
<string name="phone_number_title">Telefonnummer</string>
@ -98,30 +90,21 @@
<string name="authentication_code">Autentificeringkode</string>
<string name="authentication_code_descr">Telegram har sendt en kode. Den vil blive brugt af OsmAnd som konto log ind.</string>
<string name="enter_password">Indtast adgangskode</string>
<string name="password_descr">Indtast adgangskode til Telegram-konto</string>
<string name="password_descr">Telegram adgangskode</string>
<string name="shared_string_login">Log ind</string>
<string name="shared_string_logout">Log ud</string>
<string name="not_logged_in">Ikke logget ind</string>
<string name="initialization">Initialisering</string>
<string name="logging_out">Logger ud</string>
<string name="closing">Lukker</string>
<string name="shared_string_continue">Fortsæt</string>
<string name="shared_string_cancel">Annuller</string>
<string name="gps_network_not_enabled">Placeringtjenesten er ikke aktiveret. Aktiver\?</string>
<string name="shared_string_settings">Indstillinger</string>
<string name="no_location_permission">Mangler tilladelse til at bruge placeringsdata.</string>
<string name="gps_not_available">Aktiver GPS i indstillinger</string>
<string name="gps_not_available">Tænd for \"Placering\" i systemindstillinger</string>
<string name="location_service_no_gps_available">Vælg en af placeringsudbyderne til at dele placering.</string>
<string name="osmand_service">Baggrundstilstand</string>
<string name="osmand_service_descr">OsmAnd Telegram kører i baggrunden med skærmen slukket.</string>
<string name="shared_string_distance">Afstand</string>
<string name="share_location">Del placering</string>
<string name="sharing_location">Deler placering</string>
<string name="shared_string_paused">Pauset</string>
<string name="shared_string_no_data">Ingen data</string>
<string name="shared_string_pause">Pause</string>
<string name="shared_string_start">Start</string>
<string name="shared_string_stop">Stop</string>
<string name="process_service">OsmAnd Telegram tjeneste</string>
<string name="osmand_logo">OsmAnd logo</string>
<string name="install_osmand_dialog_message">Det er nødvendigt at installere en gratis eller betalt version af OsmAnd</string>
@ -129,7 +112,7 @@
<string name="show_users_on_map">Vis brugere på kortet</string>
<string name="active_chats">Aktive samtaler</string>
<string name="shared_string_authorization">Autorisation</string>
<string name="shared_string_authorization_descr">Indtast telefonnummer på Telegram-konto i internationalt format</string>
<string name="shared_string_authorization_descr">Indtast Telegram telefonnummer i internationalt format</string>
<string name="shared_string_welcome">Velkommen</string>
<string name="yard">yd</string>
@ -158,18 +141,48 @@
<string name="shared_string_hour_short">t</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_second_short">sek</string>
<string name="plus">+</string>
<string name="welcome_descr"><b>OsmAnd placeringsdeling</b> giver mulighed for at dele placering og se placering af andre i OsmAnd.<br/><br/>Programmet bruger Telegram API og skal have en Telegram konto.</string>
<string name="welcome_descr"><b>OsmAnd placeringsdeling</b> giver mulighed for at dele placering og se placering af andre i OsmAnd.<br/><br/>Programmet bruger Telegram API og skal bruge en Telegram konto.</string>
<string name="my_location">Placering</string>
<string name="live_now">Sender nu</string>
<string name="last_updated_location">Sidste ajourførte placering:</string>
<string name="last_updated_location">Sidste ajourførte placering:</string>
<string name="successfully_sent_and_updated">Sendt korrekt og opdateret</string>
<string name="not_possible_to_send_to_telegram_chats">Ikke muligt at sende til Telegram samtaler:</string>
<string name="waiting_for_response_from_telegram">Venter på svar fra Telegram</string>
<string name="sending_location_messages">Sender placeringsmeddelelser</string>
<string name="initializing">Initialiserer</string>
<string name="searching_for_gps">Søger efter GPS</string>
<string name="connecting_to_the_internet">Forbinder til internettet</string>
</resources>
<string name="sending_location_messages">Sender placering</string>
<string name="initializing">Starter</string>
<string name="searching_for_gps">Positionering…</string>
<string name="connecting_to_the_internet">Forbinder til Internettet</string>
<string name="enter_another_device_name">Vælg et navn der ikke allerede er brugt</string>
<string name="device_added_successfully">%1$s tilføjet.</string>
<string name="shared_string_add">Tilføj</string>
<string name="error_adding_new_device">Kunne ikke tilføje ny enhed</string>
<string name="enter_device_name_description">Indtast et navn til den nye enhed. Max 200 tegn.</string>
<string name="device_name_is_too_long">Enhedsnavn er for langt</string>
<string name="device_name_cannot_be_empty">Enhedsnavn må ikke være tomt</string>
<string name="device_name">Enhedsnavn</string>
<string name="shared_string_hide">Skjul</string>
<string name="share_location_as_description_second_line">Opret og få vist enhedens-id i Telegram-klienten ved hjælp af %1$s chat-bot. %2$s</string>
<string name="share_location_as_description">Hvis der skal tilsluttes flere enheder til en Telegram-konto, er det nødvendigt til at bruge forskellige enheder til at dele placeringen.</string>
<string name="shared_string_save">Gem</string>
<string name="stop_sharing_all">Deling er aktiv (sluk)</string>
<string name="initialization">Starter</string>
<string name="logging_out">Logger ud</string>
<string name="closing">Lukker</string>
<string name="gps_network_not_enabled">Tænd for \"Placering\"\?</string>
<string name="live_now">Live now</string>
<string name="last_update_from_telegram">Sidste opdatering fra Telegram</string>
<string name="send_location_as">Send placering som</string>
<string name="send_location_as_descr">Vælg hvordan beskeder med placering skal se ud.</string>
<string name="shared_string_map">Kort</string>
<string name="shared_string_text">Tekst</string>
<string name="map_and_text">Kort og tekst</string>
<string name="average_altitude">Gennemsnitshøjde</string>
<string name="average_speed">Gennemsnitshastighed</string>
<string name="open_in_osmand">Åbn i OsmAnd</string>
<string name="end_date">Slutdato</string>
<string name="start_date">Startdato</string>
<string name="timeline">Tidslinje</string>
</resources>

View file

@ -1,21 +1,15 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="sharing_in_background">Teilen im Hintergrund</string>
<string name="go_to_settings">Einstellungen öffnen</string>
<string name="not_sent_yet">Noch nicht gesendet</string>
<string name="not_found_yet">Noch nicht gefunden</string>
<string name="re_send_location">Position neu senden</string>
<string name="last_sent_location">Letzter gesendeter Standort</string>
<string name="sharing_status">Freigabestatus</string>
<string name="sharing_enabled">Teilen: Aktiviert</string>
<string name="shared_string_status">Status</string>
<string name="no_gps_connection">Kein GPS-Signal</string>
<string name="sharing_success">Gesendet und aktualisiert</string>
<string name="not_possible_to_send_to_chats">Konnte nicht an Chats senden:</string>
<string name="no_internet_connection">Keine Internetverbindung</string>
<string name="shared_string_disable">Deaktivieren</string>
<string name="shared_string_save">Speichern</string>
<string name="add_device_descr">Finden Sie Ihre Geräte-ID unter https://live.osmand.net/device/ID</string>
<string name="device_id">Geräte-ID</string>
<string name="add_device">Gerät hinzufügen</string>
<string name="shared_string_later">Später</string>
<string name="last_available_location">Letzter verfügbarer Standort</string>
@ -28,7 +22,7 @@
<string name="by_group">Nach Gruppe</string>
<string name="shared_string_sort">Sortieren</string>
<string name="shared_string_sort_by">Sortieren nach</string>
<string name="choose_osmand_desc">Wählen Sie die OsmAnd-Version, in der die Kontakte auf der Karte angezeigt werden.</string>
<string name="choose_osmand_desc">Wählen Sie die OsmAnd-Version, in der Kontakte auf der Karte angezeigt werden.</string>
<string name="choose_osmand">Zu verwendende OsmAnd-Version auswählen</string>
<string name="turn_off_all">Alle ausschalten</string>
<string name="shared_string_exit">Beenden</string>
@ -40,19 +34,19 @@
<string name="connected_account">Verbundenes Konto</string>
<string name="shared_string_account">Konto</string>
<string name="in_time">"in %1$s "</string>
<string name="osmand_connect_desc">Wählen Sie die OsmAnd-Version, die OsmAnd Telegram verwendet, um Positionen auf der Karte anzuzeigen.</string>
<string name="osmand_connect_desc">Wählen Sie die OsmAnd-Version, die OsmAnd Telegram verwendet, um Positionen anzuzeigen.</string>
<string name="osmand_connect">OsmAnd verbinden</string>
<string name="location_history_desc">Blenden Sie die Kontakte aus, die ihren Standort in einer vorgegebenen Zeitspanne nicht aktualisiert haben.</string>
<string name="location_history_desc">Blendet Kontakte aus, die sich eine bestimmte Zeit lang nicht bewegt haben.</string>
<string name="location_history">Standortverlauf</string>
<string name="stale_location_desc">Das letzte Mal, dass ein Kontakt seinen Standort gesendet hat.</string>
<string name="stale_location_desc">Das letzte Mal, dass sich ein Kontakt bewegt hat.</string>
<string name="send_my_location">Meinen Standort senden</string>
<string name="gps_and_location">GPS &amp; Standort</string>
<string name="gps_and_location">Position</string>
<string name="open_osmand">OsmAnd öffnen</string>
<string name="shared_string_live">"Live "</string>
<string name="get_telegram_title">Registrierung in Telegram</string>
<string name="get_telegram_account_first">Sie benötigen ein Telegram-Konto, um die OsmAnd Standortfreigabe nutzen zu können.</string>
<string name="get_telegram_description_continue">Bitte installieren Sie Telegram von Google Play und registrieren Sie dazu ein Konto.</string>
<string name="get_telegram_after_creating_account">Nach der Erstellung des Kontos können Sie diese App nutzen.</string>
<string name="get_telegram_account_first">Sie benötigen ein Telegram-Konto, um die Standortfreigabe nutzen zu können.</string>
<string name="get_telegram_description_continue">Bitte installieren Sie Telegram und richten Sie ein Konto ein.</string>
<string name="get_telegram_after_creating_account">Dann können Sie diese App nutzen.</string>
<string name="shared_string_all">Alle</string>
<string name="shared_string_off">Aus</string>
<string name="already_registered_in_telegram">Sie benötigen ein registriertes Telegram-Konto und eine Telefonnummer</string>
@ -71,33 +65,24 @@
<string name="show_on_map">Auf Karte anzeigen</string>
<string name="app_name">"OsmAnd Telegram "</string>
<string name="phone_number_title">Telefonnummer</string>
<string name="phone_number_descr">Telefonnummer im internationalen Format</string>
<string name="phone_number_descr">Telefonnummer in internationalem Format</string>
<string name="shared_string_password">Passwort</string>
<string name="enter_code">Code eingeben</string>
<string name="authentication_code">Authentifizierungscode</string>
<string name="authentication_code_descr">Telegram hat Ihnen einen Code für OsmAnd zur Anmeldung an Ihrem Konto gesendet.</string>
<string name="enter_password">Passwort eingeben</string>
<string name="shared_string_login">Anmelden</string>
<string name="shared_string_logout">Abmeldung</string>
<string name="shared_string_logout">Abmelden</string>
<string name="not_logged_in">Sie sind nicht angemeldet</string>
<string name="initialization">Initialisierung</string>
<string name="logging_out">Abmeldung</string>
<string name="closing">Schließen</string>
<string name="shared_string_continue">Fortfahren</string>
<string name="shared_string_cancel">Abbrechen</string>
<string name="gps_network_not_enabled">Standortdienst einschalten\?</string>
<string name="shared_string_settings">Einstellungen</string>
<string name="no_location_permission">Der App fehlt die Berechtigung, auf Standortdaten zuzugreifen.</string>
<string name="gps_not_available">Bitte aktivieren Sie GPS in den Einstellungen</string>
<string name="gps_not_available">Bitte schalten Sie \"Standort\" in den Systemeinstellungen ein</string>
<string name="osmand_service">Hintergrundmodus</string>
<string name="osmand_service_descr">OsmAnd Telegram läuft im Hintergrund bei ausgeschaltetem Bildschirm.</string>
<string name="shared_string_distance">Distanz</string>
<string name="share_location">Standort teilen</string>
<string name="shared_string_paused">Pausiert</string>
<string name="shared_string_no_data">Keine Daten</string>
<string name="shared_string_pause">"Pause "</string>
<string name="shared_string_start">"Start "</string>
<string name="shared_string_stop">"Stop "</string>
<string name="process_service">OsmAnd Telegram-Service</string>
<string name="osmand_logo">OsmAnd-Logo</string>
<string name="install_osmand_dialog_message">Sie müssen zuerst die kostenlose oder kostenpflichtige Version von OsmAnd installieren</string>
@ -132,44 +117,76 @@
<string name="shared_string_hour_short">h</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_second_short">s</string>
<string name="plus">+</string>
<string name="my_location">Mein Standort</string>
<string name="live_now">Sende gerade</string>
<string name="background_work">Hintergrundbetrieb</string>
<string name="successfully_sent_and_updated">Erfolgreich gesendet und aktualisiert</string>
<string name="waiting_for_response_from_telegram">Warten auf Antwort von Telegram</string>
<string name="sending_location_messages">Versand von Standortmitteilungen</string>
<string name="initializing">Initialisierung</string>
<string name="searching_for_gps">Suche nach GPS-Signal</string>
<string name="sending_location_messages">Sende Standort</string>
<string name="initializing">Startet</string>
<string name="searching_for_gps">Positioniere..…</string>
<string name="connecting_to_the_internet">Verbindung zum Internet</string>
<string name="background_work_description">Akkuoptimierungseinstellungen für eine dauerhafte Standortfreigabe ändern</string>
<string name="password_descr">Bitte Passwort für Ihr Telegram-Konto eingeben</string>
<string name="background_work_description">Akkuoptimierungseinstellungen, um die Standortfreigabe zu stabilisieren.</string>
<string name="password_descr">Telegram-Passwort</string>
<string name="nm">kn</string>
<string name="nm_h">kn/h</string>
<string name="last_updated_location">Zuletzt aktualisierter Ort:</string>
<string name="not_possible_to_send_to_telegram_chats">Es ist nicht möglich, an Telegram-Chats zu senden:</string>
<string name="battery_optimization_description">Schalten Sie die Batterieoptimierung für OsmAnd Telegram aus, damit es nicht plötzlich im Hintergrund ausgeschaltet wird.</string>
<string name="share_location_as_descr">Die gemeinsame Nutzung Ihres Geräte-Standorts oder des Standorts benutzerdefinierter Geräte erlauben, die über die API hinzugefügt wurden.</string>
<string name="logout_from_osmand_telegram_descr">Sind Sie sicher, dass Sie sich von OsmAnd Telegram abmelden möchten, so dass Sie den Standort nicht teilen oder den Standort anderer sehen können\?</string>
<string name="disable_all_sharing_desc">Schaltet die Standortfreigabe für alle ausgewählten Chats aus (%1$d).</string>
<string name="disable_all_sharing">Alle Freigaben deaktivieren</string>
<string name="disconnect_from_telegram_desc">Um den Zugriff auf die Standortfreigabe zu widerrufen, öffnen Sie Telegram, gehen zu Einstellungen - Datenschutz und Sicherheit - Sitzungen und beenden die OsmAnd Telegram-Sitzung.</string>
<string name="disconnect_from_telegram_desc">Um den Zugriff auf die Standortfreigabe zu widerrufen, öffnen Sie Telegram, gehen zu Einstellungen → Datenschutz und Sicherheit → Sitzungen und beenden die OsmAnd Telegram-Sitzung.</string>
<string name="disconnect_from_telegram">So deaktivieren Sie OsmAnd Standortfreigabe von Telegram aus</string>
<string name="logout_help_desc">So deaktivieren Sie OsmAnd Standortfreigabe von Telegram aus</string>
<string name="stale_location">Veralteter Standort</string>
<string name="stale_location">Keine Bewegung</string>
<string name="send_my_location_desc">Legen Sie das Mindestintervall für die Standortfreigabe fest.</string>
<string name="sharing_time">Freigabezeit</string>
<string name="expire_at">Verfällt um</string>
<string name="stop_sharing_all">Freigabe ist aktiviert (deaktivieren)</string>
<string name="expire_at">Verfällt</string>
<string name="turn_off_location_sharing">Standortfreigabe ausschalten</string>
<string name="shared_string_bot">Bot</string>
<string name="set_visible_time_for_all">Für alle sichtbare Zeit einstellen</string>
<string name="set_time_description">Zeit einstellen, zu der Ihren Kontakten und Gruppen Ihr Standorts in Echtzeit angezeigt wird.</string>
<string name="location_sharing_description">Kontakte und Gruppen wählen, für die Sie Ihren Standort freigeben möchten.</string>
<string name="start_location_sharing">Standortfreigabe starten</string>
<string name="location_service_no_gps_available">Wählen Sie einen der Standortprovider aus, um Ihren Standort freizugeben.</string>
<string name="location_sharing_description">Kontakte und Gruppen wählen, denen Sie Ihren Standort freigeben möchten.</string>
<string name="start_location_sharing">Standort freigeben</string>
<string name="location_service_no_gps_available">Wählen Sie einen der Standortanbieter aus, um Ihren Standort freizugeben.</string>
<string name="sharing_location">Standort teilen</string>
<string name="welcome_descr"><b>OsmAnd Standortfreigabe</b> ermöglicht es Ihnen, Ihren Standort zu teilen und den anderer in OsmAnd zu sehen.<br/><br/>Die App verwendet die API von Telegram und Sie benötigen ein Telegram-Konto.</string>
</resources>
<string name="enter_another_device_name">Wählen Sie einen Namen, den Sie noch nicht benutzt haben</string>
<string name="device_added_successfully">%1$s hinzugefügt.</string>
<string name="shared_string_add">Hinzufügen</string>
<string name="error_adding_new_device">Neues Gerät konnte nicht hinzugefügt werden</string>
<string name="enter_device_name_description">Benennen Sie Ihr neues Gerät mit max. 200 Symbolen.</string>
<string name="device_name_is_too_long">Gerätename ist zu lang</string>
<string name="device_name_cannot_be_empty">Der Gerätename darf nicht leer sein</string>
<string name="device_name">Gerätename</string>
<string name="shared_string_hide">Verbergen</string>
<string name="share_location_as_description_second_line">Sie können die Geräte-ID im Telegram-Client mit dem Chat-Bot %1$s erstellen und anzeigen. %2$s</string>
<string name="share_location_as_description">Wenn Sie mehrere Geräte mit einem Telegram-Konto verbinden möchten, müssen Sie ein anderes Gerät verwenden, um Ihren Standort zu teilen.</string>
<string name="shared_string_save">Speichern</string>
<string name="stop_sharing_all">Die Freigabe ist eingeschaltet (ausschalten)</string>
<string name="initialization">Startet</string>
<string name="logging_out">Abmeldevorgang</string>
<string name="closing">Schliesst</string>
<string name="gps_network_not_enabled">\"Standort\" einschalten\?</string>
<string name="live_now">Jetzt live</string>
<string name="last_update_from_telegram">Letztes Update von Telegram</string>
<string name="send_location_as">Senden Standort als</string>
<string name="send_location_as_descr">Wählen Sie, wie Nachrichten mit Ihrem Standort aussehen sollen.</string>
<string name="shared_string_map">Karte</string>
<string name="shared_string_text">Text</string>
<string name="map_and_text">Karte und Text</string>
<string name="monitoring_is_enabled">Überwachung aktiviert</string>
<string name="monitoring_is_disabled">Überwachung deaktiviert</string>
<string name="time_on_the_move">Zeit in Bewegung</string>
<string name="average_altitude">Durchschnittliche Höhe</string>
<string name="average_speed">Durchschnittliche Geschwindigkeit</string>
<string name="open_in_osmand">In OsmAnd öffnen</string>
<string name="end_date">Endzeit</string>
<string name="start_date">Startzeit</string>
<string name="timeline_description">Überwachung aktivieren, um Bewegungsdaten im Hintergrund zu erfassen.</string>
<string name="timeline">Zeitachse</string>
</resources>

View file

@ -1,34 +1,26 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="background_work_description">Cambiar los ajustes de optimización de la batería, para compartir una ubicación estable</string>
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="background_work_description">Cambiar los ajustes de optimización de la batería para estabilizar la ubicación compartida.</string>
<string name="background_work">Funcionamiento en segundo plano</string>
<string name="battery_optimization_description">Para un uso compartido estable de su posición en segundo plano, es aconsejable desactivar la optimización de la batería para OsmAnd Telegram.
\n
\nSi la optimización está activada, el sistema puede desactivar automáticamente la aplicación que se está ejecutando en segundo plano (con la pantalla bloqueada y/o la aplicación minimizada). Esto sucede sin notificación y hace que la transmisión de la posición geográfica se detenga.</string>
<string name="battery_optimization_description">Desactivar la optimización de la batería para OsmAnd Telegram de modo que no se desconecte repentinamente cuando esté en segundo plano.</string>
<string name="sharing_in_background">Compartir en segundo plano</string>
<string name="go_to_settings">Ir a los ajustes</string>
<string name="shared_string_later">Luego</string>
<string name="not_sent_yet">No enviado aún</string>
<string name="not_found_yet">Aún no encontrada</string>
<string name="re_send_location">Reenviar ubicación</string>
<string name="last_sent_location">Última ubicación enviada</string>
<string name="last_available_location">Última ubicación disponible</string>
<string name="sharing_status">Estado de compartición</string>
<string name="sharing_enabled">Compartir: Activado</string>
<string name="shared_string_status">Estado</string>
<string name="no_gps_connection">Sin conexión GPS</string>
<string name="sharing_success">Enviado y actualizado con éxito</string>
<string name="not_possible_to_send_to_chats">Imposible enviar a los chats:</string>
<string name="no_internet_connection">Sin conexión a Internet</string>
<string name="shared_string_disable">Desactivar</string>
<string name="shared_string_save">Guardar</string>
<string name="add_device_descr">Ingrese su ID de dispositivo que puede encontrar en https://live.osmand.net/device/ID</string>
<string name="device_id">Id. del dispositivo</string>
<string name="add_device">Añadir dispositivo</string>
<string name="share_location_as_descr">Permite compartir la ubicación de este dispositivo o la ubicación del dispositivo personalizado añadido a través de dispositivos API.</string>
<string name="share_location_as">Compartir ubicación como</string>
<string name="live_now_description">Contactos y grupos que comparten su ubicación con usted.</string>
<string name="logout_from_osmand_telegram_descr">Si cierra sesión en OsmAnd Telegram, no podrá enviar su posición ni ver la ubicación de sus contactos en el mapa de OsmAnd.</string>
<string name="logout_from_osmand_telegram">¿Cerrar sesión en OsmAnd Telegram\?</string>
<string name="live_now_description">Contactos y grupos que comparten la ubicación contigo.</string>
<string name="logout_from_osmand_telegram_descr">¿Cerrar sesión en OsmAnd Telegram\? No podrá compartir la ubicación o ver la ubicación de otros</string>
<string name="logout_from_osmand_telegram">¿Cerrar sesión de OsmAnd Telegram\?</string>
<string name="shared_string_name">Nombre</string>
<string name="by_distance">Por distancia</string>
<string name="by_name">Por nombre</string>
@ -37,44 +29,43 @@
<string name="shared_string_sort_by">Ordenar por</string>
<string name="choose_osmand_desc">Seleccione la versión de OsmAnd donde los contactos se mostrarán en el mapa.</string>
<string name="choose_osmand">Seleccione la versión de OsmAnd para usar</string>
<string name="disable_all_sharing_desc">Dejará de compartir la ubicación con todos los chats seleccionados (%1$d).</string>
<string name="disable_all_sharing_desc">Desactivar la ubicación compartida en todos los chats seleccionados (%1$d).</string>
<string name="disable_all_sharing">Desactivar el uso compartido</string>
<string name="turn_off_all">Apagar todos</string>
<string name="shared_string_exit">Salir</string>
<string name="time_ago">hace</string>
<string name="last_response">Última respuesta</string>
<string name="shared_string_group">Grupo</string>
<string name="logout_no_internet_msg">Para desconectarse correctamente de su cuenta de Telegram, se necesita Internet.</string>
<string name="logout_no_internet_msg">Conéctese a Internet para cerrar sesión en Telegram correctamente.</string>
<string name="shared_string_close">Cerrar</string>
<string name="disconnect_from_telegram_desc">Para revocar el acceso a su cuenta de Telegram desde OsmAnd, abra Telegram, vaya a «Ajustes - Privacidad y Seguridad - Sesiones» y termine la sesión de Telegram de OsmAnd. Después de eso, «OsmAnd Location Sharing» ya no tendrá acceso a su cuenta y no podrá utilizar esta aplicación hasta que vuelva a iniciar sesión.</string>
<string name="disconnect_from_telegram">Cómo desconectar «OsmAnd Location Sharing» de la cuenta de Telegram</string>
<string name="logout_help_desc">Cómo desconectar «OsmAnd Location Sharing» de la cuenta de Telegram</string>
<string name="disconnect_from_telegram_desc">Para revocar el acceso a la ubicación compartida. Abra Telegram, vaya a «Ajustes → Privacidad y Seguridad → Sesiones» y cierre sesión de OsmAnd Telegram.</string>
<string name="disconnect_from_telegram">Cómo desactivar la «Ubicación Compartida de OsmAnd» desde Telegram</string>
<string name="logout_help_desc">Cómo desactivar la «Ubicación Compartida de OsmAnd» desde Telegram</string>
<string name="connected_account">Cuenta conectada</string>
<string name="shared_string_account">Cuenta</string>
<string name="in_time">en %1$s</string>
<string name="osmand_connect_desc">Elija la versión de OsmAnd a la que se referirá «OsmAnd Telegram» para mostrar la ubicación en el mapa.</string>
<string name="osmand_connect_desc">Elija la versión de OsmAnd el cual «OsmAnd Telegram» utilizará para mostrar las ubicaciones.</string>
<string name="osmand_connect">Conectar OsmAnd</string>
<string name="location_history_desc">Ocultar los contactos que no hayan actualizado su ubicación después del período de tiempo especificado.</string>
<string name="location_history_desc">Ocultar los contactos que no se han movido en un tiempo determinado.</string>
<string name="location_history">Historial de ubicación</string>
<string name="stale_location_desc">La última vez que un contacto envió una actualización a su ubicación.</string>
<string name="stale_location">Ubicación obsoleta</string>
<string name="stale_location_desc">La última vez que un contacto se movió.</string>
<string name="stale_location">Sin movimiento</string>
<string name="send_my_location_desc">Fijar el intervalo mínimo para compartir la ubicación.</string>
<string name="send_my_location">Enviar mi ubicación</string>
<string name="gps_and_location">GPS y ubicación</string>
<string name="gps_and_location">Ubicación</string>
<string name="sharing_time">Tiempo compartido</string>
<string name="expire_at">Expira en</string>
<string name="stop_sharing_all">El uso compartido está activado (desactivar)</string>
<string name="turn_off_location_sharing">Desactivar el uso compartido de ubicaciones</string>
<string name="turn_off_location_sharing">Desactivar la ubicación compartida</string>
<string name="open_osmand">Abrir OsmAnd</string>
<string name="shared_string_live">En vivo</string>
<string name="shared_string_bot">Bot</string>
<string name="get_telegram_title">Registro en Telegram</string>
<string name="get_telegram_account_first">Necesita una cuenta en Telegram para utilizar las capacidades de «OsmAnd Location Sharing».</string>
<string name="get_telegram_description_continue">Si desea continuar, instale Telegram de Google Play y registre su cuenta.</string>
<string name="get_telegram_after_creating_account">Después de crear una cuenta, puede utilizar esta aplicación.</string>
<string name="get_telegram_account_first">Necesita una cuenta en Telegram para utilizar la ubicación compartida.</string>
<string name="get_telegram_description_continue">Instale Telegram y cree una cuenta.</string>
<string name="get_telegram_after_creating_account">Después podrá utilizar esta aplicación.</string>
<string name="shared_string_all">Todos</string>
<string name="shared_string_off">No</string>
<string name="already_registered_in_telegram">Necesita una cuenta ya registrada y un número de teléfono en Telegram</string>
<string name="already_registered_in_telegram">Necesita una cuenta registrada en Telegram y un número de teléfono</string>
<string name="do_not_have_telegram">No tengo cuenta de Telegram</string>
<string name="enter_phone_number">Ingrese el número de teléfono</string>
<string name="enter_authentication_code">Ingrese el código de autenticación</string>
@ -89,8 +80,8 @@
<string name="set_time_description">Ajustar la hora en que los contactos y grupos marcados verán la ubicación en tiempo real.</string>
<string name="set_time">Fijar la hora</string>
<string name="location_sharing_description">Marque los contactos y grupos con los que desea compartir su ubicación.</string>
<string name="my_location_search_hint">Buscar: grupo o contacto</string>
<string name="start_location_sharing">Iniciar el uso compartido de ubicaciones</string>
<string name="my_location_search_hint">Buscar: Grupo o contacto</string>
<string name="start_location_sharing">Compartir ubicación</string>
<string name="show_on_map">Mostrar en el mapa</string>
<string name="app_name">OsmAnd Telegram</string>
<string name="phone_number_title">Número de teléfono</string>
@ -98,40 +89,32 @@
<string name="shared_string_password">Contraseña</string>
<string name="enter_code">Ingresar código</string>
<string name="authentication_code">Código de autenticación</string>
<string name="authentication_code_descr">Se ha enviado un código a Telegram. Será utilizado por OsmAnd para acceder a su cuenta.</string>
<string name="authentication_code_descr">Telegram ha enviado un código para que OsmAnd inicie sesión en su cuenta.</string>
<string name="enter_password">Ingresar contraseña</string>
<string name="password_descr">Por favor, ingrese la contraseña de su cuenta de Telegram para finalizar la autorización</string>
<string name="password_descr">Contraseña de Telegram</string>
<string name="shared_string_login">Iniciar sesión</string>
<string name="shared_string_logout">Cerrar sesión</string>
<string name="not_logged_in">No ha iniciado sesión</string>
<string name="initialization">Inicialización</string>
<string name="logging_out">Cerrar sesión</string>
<string name="closing">Cerrando</string>
<string name="shared_string_continue">Continuar</string>
<string name="shared_string_cancel">Cancelar</string>
<string name="gps_network_not_enabled">Servicio de ubicación desactivado. ¿Quieres activarlo\?</string>
<string name="gps_network_not_enabled">¿Activar «Ubicación»\?</string>
<string name="shared_string_settings">Ajustes</string>
<string name="no_location_permission">La aplicación no tiene permiso de acceso a los datos de ubicación.</string>
<string name="gps_not_available">Activa el GPS en ajustes</string>
<string name="location_service_no_gps_available">El servicio de ubicación compartida requiere que se active un proveedor de ubicación.</string>
<string name="no_location_permission">La aplicación no tiene permiso para acceder a los datos de ubicación.</string>
<string name="gps_not_available">Activar «Ubicación» en los ajustes del sistema</string>
<string name="location_service_no_gps_available">Elija uno de los proveedores de ubicación para compartir su ubicación.</string>
<string name="osmand_service">Modo reposo</string>
<string name="osmand_service_descr">OsmAnd Telegram se ejecuta en modo reposo con la pantalla apagada.</string>
<string name="shared_string_distance">Distancia</string>
<string name="share_location">Compartir ubicación</string>
<string name="sharing_location">Compartir ubicación</string>
<string name="shared_string_paused">Pausado</string>
<string name="shared_string_no_data">Sin datos</string>
<string name="shared_string_pause">Pausar</string>
<string name="shared_string_start">Iniciar</string>
<string name="shared_string_stop">Parar</string>
<string name="process_service">Servicio de OsmAnd Telegram</string>
<string name="osmand_logo">Logotipo de OsmAnd</string>
<string name="install_osmand_dialog_message">Necesita instalar primero una versión gratuita o de pago de OsmAnd</string>
<string name="install_osmand_dialog_message">Necesita instalar primero la versión gratuita o de pago de OsmAnd</string>
<string name="install_osmand">Instalar OsmAnd</string>
<string name="show_users_on_map">Mostrar usuarios en el mapa</string>
<string name="active_chats">Chats activos</string>
<string name="shared_string_authorization">Autorización</string>
<string name="shared_string_authorization_descr">Por favor, introduzca el número de teléfono de su cuenta de Telegram en el formato internacional</string>
<string name="shared_string_authorization_descr">Ingrese el número de teléfono de Telegram en el formato internacional</string>
<string name="shared_string_welcome">Bienvenido</string>
<string name="yard">yd</string>
@ -160,10 +143,54 @@
<string name="shared_string_hour_short">h</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_second_short">seg</string>
<string name="plus">+</string>
<string name="welcome_descr"><b>OsmAnd Location Sharing</b> permite compartir su ubicación y ver las ubicaciones de otras personas en OsmAnd.<br/><br/>La aplicación funciona sobre la base de Telegram API. Para utilizar esta aplicación debe tener una cuenta de Telegram.</string>
<string name="welcome_descr">La <b>Ubicación Compartida de OsmAnd</b> (en inglés, «OsmAnd Location Sharing») permite compartir su ubicación y ver las ubicaciones de otras personas en OsmAnd.<br/><br/>La aplicación funciona sobre la base de Telegram API. Para utilizar esta aplicación debe tener una cuenta de Telegram.</string>
<string name="my_location">Mi ubicación</string>
<string name="live_now">En vivo ahora</string>
</resources>
<string name="enter_another_device_name">Elige un nombre que no se haya usado</string>
<string name="device_added_successfully">%1$s añadido(s).</string>
<string name="shared_string_add">Añadir</string>
<string name="error_adding_new_device">No se pudo añadir el dispositivo</string>
<string name="enter_device_name_description">El nombre del dispositivo nuevo (máx. 200 símbolos).</string>
<string name="device_name_is_too_long">Nombre del dispositivo demasiado largo</string>
<string name="device_name_cannot_be_empty">El nombre del dispositivo no debe estar vacío</string>
<string name="device_name">Nombre del dispositivo</string>
<string name="shared_string_hide">Ocultar</string>
<string name="share_location_as_description_second_line">Puede crear y ver el ID de dispositivo en el cliente de Telegram usando el chat bot %1$s. %2$s</string>
<string name="share_location_as_description">Si desea conectar varios dispositivos a una cuenta de Telegram, debe utilizar un dispositivo diferente para compartir su ubicación.</string>
<string name="last_updated_location">Última ubicación actualizada:</string>
<string name="successfully_sent_and_updated">Enviado y actualizado con éxito</string>
<string name="not_possible_to_send_to_telegram_chats">Imposible enviar a los chats de Telegram:</string>
<string name="waiting_for_response_from_telegram">Esperando la respuesta de Telegram</string>
<string name="sending_location_messages">Ubicación de envío</string>
<string name="initializing">Iniciando</string>
<string name="searching_for_gps">Ubicando…</string>
<string name="connecting_to_the_internet">Conexión a Internet</string>
<string name="last_update_from_telegram">Última actualización de Telegram</string>
<string name="stop_sharing_all">Compartir está activado (desactivar)</string>
<string name="initialization">Iniciando</string>
<string name="logging_out">Cerrar sesión</string>
<string name="closing">Cerrando</string>
<string name="send_location_as">Enviar ubicación como</string>
<string name="send_location_as_descr">Elige cómo se verán los mensajes con tu ubicación.</string>
<string name="shared_string_map">Mapa</string>
<string name="shared_string_text">Texto</string>
<string name="map_and_text">Mapa y texto</string>
<string name="monitoring_is_enabled">Monitorización activada</string>
<string name="monitoring_is_disabled">Monitorización desactivada</string>
<string name="time_on_the_move">tiempo en movimiento</string>
<string name="average_altitude">Altitud media</string>
<string name="average_speed">Velocidad media</string>
<string name="open_in_osmand">Abrir en OsmAnd</string>
<string name="end_date">Fecha de finalización</string>
<string name="start_date">Fecha de inicio</string>
<string name="timeline_description">Activar la monitorización para recopilar datos de movimiento en segundo plano.</string>
<string name="timeline">Línea de tiempo</string>
<string name="gps_points_in_buffer">enviado (%1$d en búfer)</string>
<string name="points_size">%1$d puntos</string>
<string name="shared_string_date">Fecha</string>
<string name="shared_string_collected">Recolectados</string>
<string name="gps_points">Puntos de GPS</string>
<string name="shared_string_sent">Enviado</string>
</resources>

View file

@ -1,34 +1,25 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="background_work_description">Cambiar los ajustes de optimización de la batería, para compartir una ubicación estable</string>
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="background_work_description">Cambiar los ajustes de optimización de la batería para estabilizar la ubicación compartida.</string>
<string name="background_work">Funcionamiento en segundo plano</string>
<string name="battery_optimization_description">Para un uso compartido estable de su posición en segundo plano, es aconsejable desactivar la optimización de la batería para OsmAnd Telegram.
\n
\nSi la optimización está activada, el sistema puede desactivar automáticamente la aplicación que se está ejecutando en segundo plano (con la pantalla bloqueada y/o la aplicación minimizada). Esto sucede sin notificación y hace que la transmisión de la posición geográfica se detenga.</string>
<string name="battery_optimization_description">Desactivar la optimización de la batería para OsmAnd Telegram de modo que no se desconecte repentinamente cuando esté en segundo plano.</string>
<string name="sharing_in_background">Compartir en segundo plano</string>
<string name="go_to_settings">Ir a los ajustes</string>
<string name="shared_string_later">Luego</string>
<string name="not_sent_yet">No enviado aún</string>
<string name="not_found_yet">Aún no encontrada</string>
<string name="re_send_location">Reenviar ubicación</string>
<string name="last_sent_location">Última ubicación enviada</string>
<string name="last_available_location">Última ubicación disponible</string>
<string name="sharing_status">Estado de compartición</string>
<string name="sharing_enabled">Compartir: Activado</string>
<string name="shared_string_status">Estado</string>
<string name="no_gps_connection">Sin conexión GPS</string>
<string name="sharing_success">Enviado y actualizado con éxito</string>
<string name="not_possible_to_send_to_chats">Imposible enviar a los chats:</string>
<string name="no_internet_connection">Sin conexión a Internet</string>
<string name="shared_string_disable">Desactivar</string>
<string name="shared_string_save">Guardar</string>
<string name="add_device_descr">Ingrese su ID de dispositivo que puede encontrar en https://live.osmand.net/device/ID</string>
<string name="device_id">Id. del dispositivo</string>
<string name="add_device">Añadir dispositivo</string>
<string name="share_location_as_descr">Permite compartir la ubicación de este dispositivo o la ubicación del dispositivo personalizado añadido a través de dispositivos API.</string>
<string name="share_location_as">Compartir ubicación como</string>
<string name="live_now_description">Contactos y grupos que comparten su ubicación con usted.</string>
<string name="logout_from_osmand_telegram_descr">Si cierra sesión en OsmAnd Telegram, no podrá enviar su posición ni ver la ubicación de sus contactos en el mapa de OsmAnd.</string>
<string name="logout_from_osmand_telegram">¿Cerrar sesión en OsmAnd Telegram\?</string>
<string name="live_now_description">Contactos y grupos que comparten la ubicación contigo.</string>
<string name="logout_from_osmand_telegram_descr">¿Cerrar sesión en OsmAnd Telegram\? No podrá compartir la ubicación o ver la ubicación de otros</string>
<string name="logout_from_osmand_telegram">¿Cerrar sesión de OsmAnd Telegram\?</string>
<string name="shared_string_name">Nombre</string>
<string name="by_distance">Por distancia</string>
<string name="by_name">Por nombre</string>
@ -37,44 +28,43 @@
<string name="shared_string_sort_by">Ordenar por</string>
<string name="choose_osmand_desc">Seleccione la versión de OsmAnd donde los contactos se mostrarán en el mapa.</string>
<string name="choose_osmand">Seleccione la versión de OsmAnd para usar</string>
<string name="disable_all_sharing_desc">Dejará de compartir la ubicación con todos los chats seleccionados (%1$d).</string>
<string name="disable_all_sharing_desc">Desactivar la ubicación compartida en todos los chats seleccionados (%1$d).</string>
<string name="disable_all_sharing">Desactivar el uso compartido</string>
<string name="turn_off_all">Apagar todos</string>
<string name="shared_string_exit">Salir</string>
<string name="time_ago">hace</string>
<string name="last_response">Última respuesta</string>
<string name="shared_string_group">Grupo</string>
<string name="logout_no_internet_msg">Para desconectarse correctamente de su cuenta de Telegram, se necesita Internet.</string>
<string name="logout_no_internet_msg">Conéctese a Internet para cerrar sesión en Telegram correctamente.</string>
<string name="shared_string_close">Cerrar</string>
<string name="disconnect_from_telegram_desc">Para revocar el acceso a su cuenta de Telegram desde OsmAnd, abra Telegram, vaya a «Ajustes - Privacidad y Seguridad - Sesiones» y termine la sesión de Telegram de OsmAnd. Después de eso, «OsmAnd Location Sharing» ya no tendrá acceso a su cuenta y no podrá utilizar esta aplicación hasta que vuelva a iniciar sesión.</string>
<string name="disconnect_from_telegram">Cómo desconectar «OsmAnd Location Sharing» de la cuenta de Telegram</string>
<string name="logout_help_desc">Cómo desconectar «OsmAnd Location Sharing» de la cuenta de Telegram</string>
<string name="disconnect_from_telegram_desc">Para revocar el acceso a la ubicación compartida. Abra Telegram, vaya a «Ajustes → Privacidad y Seguridad → Sesiones» y cierre sesión de OsmAnd Telegram.</string>
<string name="disconnect_from_telegram">Cómo desactivar la «Ubicación Compartida de OsmAnd» desde Telegram</string>
<string name="logout_help_desc">Cómo desactivar la «Ubicación Compartida de OsmAnd» desde Telegram</string>
<string name="connected_account">Cuenta conectada</string>
<string name="shared_string_account">Cuenta</string>
<string name="in_time">en %1$s</string>
<string name="osmand_connect_desc">Elija la versión de OsmAnd a la que se referirá «OsmAnd Telegram» para mostrar la ubicación en el mapa.</string>
<string name="osmand_connect_desc">Elija la versión de OsmAnd el cual «OsmAnd Telegram» utilizará para mostrar las ubicaciones.</string>
<string name="osmand_connect">Conectar OsmAnd</string>
<string name="location_history_desc">Ocultar los contactos que no hayan actualizado su ubicación después del período de tiempo especificado.</string>
<string name="location_history_desc">Ocultar los contactos que no se han movido en un tiempo determinado.</string>
<string name="location_history">Historial de ubicación</string>
<string name="stale_location_desc">La última vez que un contacto envió una actualización a su ubicación.</string>
<string name="stale_location">Ubicación obsoleta</string>
<string name="stale_location_desc">La última vez que un contacto se movió.</string>
<string name="stale_location">Sin movimiento</string>
<string name="send_my_location_desc">Fijar el intervalo mínimo para compartir la ubicación.</string>
<string name="send_my_location">Enviar mi ubicación</string>
<string name="gps_and_location">GPS y ubicación</string>
<string name="gps_and_location">Ubicación</string>
<string name="sharing_time">Tiempo compartido</string>
<string name="expire_at">Expira en</string>
<string name="stop_sharing_all">El uso compartido está activado (desactivar)</string>
<string name="turn_off_location_sharing">Desactivar el uso compartido de ubicaciones</string>
<string name="turn_off_location_sharing">Desactivar la ubicación compartida</string>
<string name="open_osmand">Abrir OsmAnd</string>
<string name="shared_string_live">En vivo</string>
<string name="shared_string_bot">Bot</string>
<string name="get_telegram_title">Registro en Telegram</string>
<string name="get_telegram_account_first">Necesita una cuenta en Telegram para utilizar las capacidades de «OsmAnd Location Sharing».</string>
<string name="get_telegram_description_continue">Si desea continuar, instale Telegram de Google Play y registre su cuenta.</string>
<string name="get_telegram_after_creating_account">Después de crear una cuenta, puede utilizar esta aplicación.</string>
<string name="get_telegram_account_first">Necesita una cuenta en Telegram para utilizar la ubicación compartida.</string>
<string name="get_telegram_description_continue">Instale Telegram y cree una cuenta.</string>
<string name="get_telegram_after_creating_account">Después podrá utilizar esta aplicación.</string>
<string name="shared_string_all">Todos</string>
<string name="shared_string_off">No</string>
<string name="already_registered_in_telegram">Necesita una cuenta ya registrada y un número de teléfono en Telegram</string>
<string name="already_registered_in_telegram">Necesita una cuenta registrada en Telegram y un número de teléfono</string>
<string name="do_not_have_telegram">No tengo cuenta de Telegram</string>
<string name="enter_phone_number">Ingrese el número de teléfono</string>
<string name="enter_authentication_code">Ingrese el código de autenticación</string>
@ -89,8 +79,8 @@
<string name="set_time_description">Ajustar la hora en que los contactos y grupos marcados verán la ubicación en tiempo real.</string>
<string name="set_time">Fijar la hora</string>
<string name="location_sharing_description">Marque los contactos y grupos con los que desea compartir su ubicación.</string>
<string name="my_location_search_hint">Buscar: grupo o contacto</string>
<string name="start_location_sharing">Iniciar el uso compartido de ubicaciones</string>
<string name="my_location_search_hint">Buscar: Grupo o contacto</string>
<string name="start_location_sharing">Compartir ubicación</string>
<string name="show_on_map">Mostrar en el mapa</string>
<string name="app_name">OsmAnd Telegram</string>
<string name="phone_number_title">Número de teléfono</string>
@ -98,40 +88,31 @@
<string name="shared_string_password">Contraseña</string>
<string name="enter_code">Ingresar código</string>
<string name="authentication_code">Código de autenticación</string>
<string name="authentication_code_descr">Se ha enviado un código a Telegram. Será utilizado por OsmAnd para acceder a su cuenta.</string>
<string name="authentication_code_descr">Telegram ha enviado un código para que OsmAnd inicie sesión en su cuenta.</string>
<string name="enter_password">Ingresar contraseña</string>
<string name="password_descr">Por favor, ingrese la contraseña de su cuenta de Telegram para finalizar la autorización</string>
<string name="password_descr">Contraseña de Telegram</string>
<string name="shared_string_login">Iniciar sesión</string>
<string name="shared_string_logout">Cerrar sesión</string>
<string name="not_logged_in">No ha iniciado sesión</string>
<string name="initialization">Inicialización</string>
<string name="logging_out">Cerrar sesión</string>
<string name="closing">Cerrando</string>
<string name="shared_string_continue">Continuar</string>
<string name="shared_string_cancel">Cancelar</string>
<string name="gps_network_not_enabled">Servicio de ubicación desactivado. ¿Quieres activarlo\?</string>
<string name="shared_string_settings">Ajustes</string>
<string name="no_location_permission">La aplicación no tiene permiso de acceso a los datos de ubicación.</string>
<string name="gps_not_available">Active el GPS en los ajustes</string>
<string name="location_service_no_gps_available">El servicio de ubicación compartida requiere que se active un proveedor de ubicación.</string>
<string name="no_location_permission">La aplicación no tiene permiso para acceder a los datos de ubicación.</string>
<string name="gps_not_available">Activar «Ubicación» en los ajustes del sistema</string>
<string name="location_service_no_gps_available">Elija uno de los proveedores de ubicación para compartir su ubicación.</string>
<string name="osmand_service">Modo en segundo plano</string>
<string name="osmand_service_descr">OsmAnd Telegram se ejecuta en modo reposo con la pantalla apagada.</string>
<string name="shared_string_distance">Distancia</string>
<string name="share_location">Compartir ubicación</string>
<string name="sharing_location">Compartir ubicación</string>
<string name="shared_string_paused">Pausado</string>
<string name="shared_string_no_data">Sin datos</string>
<string name="shared_string_pause">Pausar</string>
<string name="shared_string_start">Iniciar</string>
<string name="shared_string_stop">Parar</string>
<string name="process_service">Servicio de OsmAnd Telegram</string>
<string name="osmand_logo">Logotipo de OsmAnd</string>
<string name="install_osmand_dialog_message">Necesita instalar primero una versión gratuita o de pago de OsmAnd</string>
<string name="install_osmand_dialog_message">Necesita instalar primero la versión gratuita o de pago de OsmAnd</string>
<string name="install_osmand">Instalar OsmAnd</string>
<string name="show_users_on_map">Mostrar usuarios en el mapa</string>
<string name="active_chats">Chats activos</string>
<string name="shared_string_authorization">Autorización</string>
<string name="shared_string_authorization_descr">Por favor, introduzca el número de teléfono de su cuenta de Telegram en el formato internacional</string>
<string name="shared_string_authorization_descr">Ingrese el número de teléfono de Telegram en el formato internacional</string>
<string name="shared_string_welcome">Bienvenido</string>
<string name="yard">yd</string>
@ -160,10 +141,56 @@
<string name="shared_string_hour_short">h</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_second_short">seg</string>
<string name="plus">+</string>
<string name="welcome_descr"><b>OsmAnd Location Sharing</b> permite compartir su ubicación y ver las ubicaciones de otras personas en OsmAnd.<br/><br/>La aplicación funciona sobre la base de Telegram API. Para utilizar esta aplicación debe tener una cuenta de Telegram.</string>
<string name="welcome_descr">La <b>Ubicación Compartida de OsmAnd</b> (en inglés, «OsmAnd Location Sharing») permite compartir su ubicación y ver las ubicaciones de otras personas en OsmAnd.<br/><br/>La aplicación funciona sobre la base de Telegram API. Para utilizar esta aplicación debe tener una cuenta de Telegram.</string>
<string name="my_location">Mi ubicación</string>
<string name="live_now">En vivo ahora</string>
</resources>
<string name="enter_another_device_name">Elige un nombre que no se haya usado</string>
<string name="device_added_successfully">%1$s añadido(s).</string>
<string name="shared_string_add">Añadir</string>
<string name="error_adding_new_device">No se pudo añadir el dispositivo</string>
<string name="enter_device_name_description">El nombre del dispositivo nuevo (máx. 200 símbolos).</string>
<string name="device_name_is_too_long">Nombre del dispositivo demasiado largo</string>
<string name="device_name_cannot_be_empty">El nombre del dispositivo no debe estar vacío</string>
<string name="device_name">Nombre del dispositivo</string>
<string name="shared_string_hide">Ocultar</string>
<string name="share_location_as_description_second_line">Puede crear y ver el ID de dispositivo en el cliente de Telegram usando el chat bot %1$s. %2$s</string>
<string name="share_location_as_description">Si desea conectar varios dispositivos a una cuenta de Telegram, debe utilizar un dispositivo diferente para compartir su ubicación.</string>
<string name="last_updated_location">Última ubicación actualizada:</string>
<string name="successfully_sent_and_updated">Enviado y actualizado con éxito</string>
<string name="shared_string_save">Guardar</string>
<string name="last_update_from_telegram">Última actualización de Telegram</string>
<string name="not_possible_to_send_to_telegram_chats">Imposible enviar a los chats de Telegram:</string>
<string name="waiting_for_response_from_telegram">Esperando la respuesta de Telegram</string>
<string name="sending_location_messages">Ubicación de envío</string>
<string name="initializing">Iniciando</string>
<string name="searching_for_gps">Ubicando…</string>
<string name="connecting_to_the_internet">Conexión a Internet</string>
<string name="stop_sharing_all">Compartir está activado (desactivar)</string>
<string name="initialization">Iniciando</string>
<string name="logging_out">Cerrar sesión</string>
<string name="closing">Cerrando</string>
<string name="gps_network_not_enabled">¿Activar «Ubicación»\?</string>
<string name="send_location_as">Enviar ubicación como</string>
<string name="send_location_as_descr">Elija cómo se verán los mensajes con su ubicación.</string>
<string name="shared_string_map">Mapa</string>
<string name="shared_string_text">Texto</string>
<string name="map_and_text">Mapa y texto</string>
<string name="monitoring_is_enabled">Monitorización activada</string>
<string name="monitoring_is_disabled">Monitorización desactivada</string>
<string name="time_on_the_move">tiempo en movimiento</string>
<string name="average_altitude">Altitud media</string>
<string name="average_speed">Velocidad media</string>
<string name="open_in_osmand">Abrir en OsmAnd</string>
<string name="end_date">Fecha de fin</string>
<string name="start_date">Fecha de inicio</string>
<string name="timeline_description">Activar la monitorización para recopilar datos de movimiento en segundo plano.</string>
<string name="timeline">Línea de tiempo</string>
<string name="gps_points_in_buffer">enviado (%1$d en búfer)</string>
<string name="points_size">%1$d puntos</string>
<string name="shared_string_date">Fecha</string>
<string name="shared_string_collected">Recolectados</string>
<string name="gps_points">Puntos de GPS</string>
<string name="shared_string_sent">Enviado</string>
</resources>

View file

@ -0,0 +1,23 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="last_update_from_telegram">آخرین به‌روزرسانی نسخهٔ تلگرام</string>
<string name="device_added_successfully">%1$s اضافه شد.</string>
<string name="shared_string_add">افزودن</string>
<string name="error_adding_new_device">نمی‌توان دستگاه جدید اضافه کرد</string>
<string name="enter_device_name_description">نام دستگاه جدید خود را با حداکثر ۲۰۰ نویسه بنویسید.</string>
<string name="device_name_is_too_long">نام دستگاه خیلی طولانی است</string>
<string name="device_name_cannot_be_empty">نام دستگاه نباید خالی باشد</string>
<string name="device_name">نام دستگاه</string>
<string name="share_location_as_description">اگر بخواهید چندین دستگاه را به یک حساب تلگرامی متصل کنید، باید موقعیت خود را با دستگاه دیگری به‌اشتراک بگذارید.</string>
<string name="successfully_sent_and_updated">با موفقیت ارسال و به‌روز شد</string>
<string name="waiting_for_response_from_telegram">در انتظار پاسخ از تلگرام</string>
<string name="searching_for_gps">در حال موقعیت‌یابی…</string>
<string name="battery_optimization_description">بهینه‌سازی باتری را برای OsmAnd Telegram غیرفعال کنید تا هنگامی که در پس‌زمینه کار می‌کند ناگهان بسته نشود.</string>
<string name="go_to_settings">برو به تنظیمات</string>
<string name="shared_string_later">بعداً</string>
<string name="not_sent_yet">هنوز ارسال نشده</string>
<string name="not_found_yet">هنوز پیدا نشده</string>
<string name="re_send_location">بازفرستی موقعیت</string>
<string name="sharing_enabled">اشتراک‌گذاری: فعال</string>
<string name="shared_string_status">وضعیت</string>
<string name="shared_string_close">بستن</string>
</resources>

View file

@ -1,30 +1,25 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="background_work_description">Muda-los axustes de optimización da batería, para poñer a funciona-la ubicación de xeito estábel</string>
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="background_work_description">Muda-los axustes de optimización da batería, para estabilizares a ubicación compartillada.</string>
<string name="background_work">Funcionamento no segundo plano</string>
<string name="sharing_in_background">Partillar ou compartir no segundo plano</string>
<string name="sharing_in_background">Compartillar no segundo plano</string>
<string name="go_to_settings">Ir ós axustes</string>
<string name="shared_string_later">Máis tarde</string>
<string name="not_sent_yet">Aínda non enviado</string>
<string name="not_found_yet">Aínda non atopado</string>
<string name="re_send_location">Voltar a enviar ubicación</string>
<string name="last_sent_location">Derradeira ubicación enviada</string>
<string name="last_available_location">Derradeira ubicación dispoñíbel</string>
<string name="sharing_status">Estado de emprego partillado ou compartido</string>
<string name="sharing_enabled">Partillar ou compartir: Activado</string>
<string name="last_available_location">Última ubicación dispoñíbel</string>
<string name="sharing_status">Estado do compartillamento</string>
<string name="sharing_enabled">Compartillar: Activado</string>
<string name="shared_string_status">Estado</string>
<string name="no_gps_connection">Sen unha conexión GPS</string>
<string name="sharing_success">Enviado e actualizado de xeito correcto</string>
<string name="not_possible_to_send_to_chats">Non é posíbel enviar ás parolas:</string>
<string name="no_internet_connection">Sen conexión á Internet</string>
<string name="no_internet_connection">Sen unha conexión á Internet</string>
<string name="shared_string_disable">Desactivar</string>
<string name="shared_string_save">Gardar</string>
<string name="add_device_descr">Insira o seu ID do dispositivo que pode atopar en https://live.osmand.net/device/ID</string>
<string name="device_id">Identificador do dispositivo</string>
<string name="add_device">Engadir dispositivo</string>
<string name="share_location_as">Partillar ou compartir ubicación coma</string>
<string name="live_now_description">Contactos e grupos que partillan ou comparten a súa ubicación con vostede.</string>
<string name="logout_from_osmand_telegram_descr">Se pecha a sesión no Telegram do OsmAnd, non poderá envia-la súa ubicación nin olla-las localizacións dos seus contactos no mapa do OsmAnd.</string>
<string name="logout_from_osmand_telegram">Pechar sesión do Telegram do OsmAnd\?</string>
<string name="share_location_as">Compartillar ubicación coma</string>
<string name="live_now_description">Contactos e grupos que están a compartilla-la súa ubicación para vostede.</string>
<string name="logout_from_osmand_telegram_descr">Está na certeza de que desexa desconectarse do Telegram OsmAnd para non poder compartilla-la ubicación ou olla-la ubicación doutros\?</string>
<string name="logout_from_osmand_telegram">Pecha-la sesión do Telegram OsmAnd\?</string>
<string name="shared_string_name">Nome</string>
<string name="by_distance">Pola distancia</string>
<string name="by_name">Polo nome</string>
@ -33,32 +28,163 @@
<string name="shared_string_sort_by">Ordenar polo</string>
<string name="choose_osmand_desc">Escolle a versión do OsmAnd onde os contactos amosaranse no mapa.</string>
<string name="choose_osmand">Escolle a versión do OsmAnd para empregar</string>
<string name="disable_all_sharing_desc">Deixarás de partillar ou comparti-la ubicación con tódalas parolas elixidas (%1$d).</string>
<string name="disable_all_sharing">Desactiva-lo emprego partillado ou compartido</string>
<string name="disable_all_sharing_desc">Desactiva a ubicación compartillada en tódalas conversas elixidas (%1$d).</string>
<string name="disable_all_sharing">Desactiva-lo emprego compartillado</string>
<string name="turn_off_all">Desactivar todos</string>
<string name="shared_string_exit">Saír</string>
<string name="time_ago">hai</string>
<string name="last_response">Derradeira resposta</string>
<string name="last_response">Última resposta</string>
<string name="shared_string_group">Grupo</string>
<string name="shared_string_close">Pechar</string>
<string name="connected_account">Conta conectada</string>
<string name="shared_string_account">Conta</string>
<string name="in_time">en %1$s</string>
<string name="location_history">Historial da localización</string>
<string name="location_history">Historial da ubicación</string>
<string name="send_my_location">Envia-la miña localización</string>
<string name="gps_and_location">GPS e localización</string>
<string name="gps_and_location">Ubicación</string>
<string name="open_osmand">Abri-lo OsmAnd</string>
<string name="shared_string_live">Ao vivo</string>
<string name="get_telegram_title">Rexistro no Telegram</string>
<string name="shared_string_all">Todo</string>
<string name="shared_string_off">Desactivado</string>
<string name="do_not_have_telegram">Non tes unha conta do Telegram</string>
<string name="enter_phone_number">Insire o número de teléfono móbil</string>
<string name="enter_authentication_code">Insire o código de autenticación</string>
<string name="shared_string_off">Non</string>
<string name="do_not_have_telegram">Non teño unha conta do Telegram</string>
<string name="enter_phone_number">Insira o número do teléfono móbil</string>
<string name="enter_authentication_code">Insira o código da autentificación</string>
<string name="hours_and_minutes_format">%1$d h %2$d min</string>
<string name="minutes_format">%1$d min</string>
<string name="hours_format">%1$d h</string>
<string name="shared_string_install">Instalar</string>
<string name="shared_string_share">Partillar ou compartir</string>
<string name="shared_string_share">Compartillar</string>
<string name="shared_string_back">Voltar</string>
</resources>
<string name="shared_string_add">Engadir</string>
<string name="enter_another_device_name">Escolle un nome que aínda non está a ser empregado</string>
<string name="device_added_successfully">%1$s engadido.</string>
<string name="shared_string_cancel">Desbotar</string>
<string name="nm">nmi</string>
<string name="si_kmh">Quilómetros por hora</string>
<string name="si_mph">Millas por hora</string>
<string name="si_m_s">Metros por segundo</string>
<string name="si_min_km">Minutos por quilómetro</string>
<string name="si_min_m">Minutos por milla</string>
<string name="si_mi_feet">Millas/pés</string>
<string name="si_mi_yard">Millas/iardas</string>
<string name="si_km_m">Quilómetros/metros</string>
<string name="si_nm">Millas náuticas</string>
<string name="si_mi_meters">Millas/metros</string>
<string name="last_update_from_telegram">Última actualización do Telegram</string>
<string name="error_adding_new_device">Non foi posíbel engadi-lo dispositivo</string>
<string name="enter_device_name_description">O nome do novo dispositivo (máx. 200 símbolos).</string>
<string name="device_name_is_too_long">Nome do dispositivo moi longo</string>
<string name="device_name_cannot_be_empty">O nome do dispositivo non pode ficar baleiro</string>
<string name="device_name">Nome do dispositivo</string>
<string name="shared_string_hide">Agochar</string>
<string name="share_location_as_description_second_line">Pode xerar e olla-lo ID do dispositivo no cliente do Telegram empregando o chat bot %1$s. %2$s</string>
<string name="share_location_as_description">Se desexa conectar varios dispositivos a unha conta do Telegram, ten que empregar un dispositivo diferente para compartilla-la súa ubicación.</string>
<string name="last_updated_location">Última ubicación actualizada:</string>
<string name="successfully_sent_and_updated">Enviado e actualizado de xeito correcto</string>
<string name="not_possible_to_send_to_telegram_chats">Non é posíbel enviar ás converas do Telegram:</string>
<string name="waiting_for_response_from_telegram">Estase a agarda-la resposta do Telegram</string>
<string name="sending_location_messages">Ubicación do envío</string>
<string name="initializing">Estase a iniciar</string>
<string name="searching_for_gps">Estase a posicionar…</string>
<string name="connecting_to_the_internet">Estase a conectar á Internet</string>
<string name="battery_optimization_description">Desactiva-la optimización da batería para o OsmAnd Telegram de xeito que non se desconecte de xeito súbito cando esté no segundo plano.</string>
<string name="logout_no_internet_msg">Conéctese á Internet para pecha-la sesión no Telegram de xeito correcto.</string>
<string name="disconnect_from_telegram_desc">Para revoga-lo acceso á ubicación compartillada. Abra o Telegram, vaia cara ós «Axustes → Privacidade e Seguranza → Sesións» e peche a sesión do OsmAnd Telegram.</string>
<string name="disconnect_from_telegram">De que xeito desactiva-la «Ubicación compartillada do OsmAnd» dende o Telegram</string>
<string name="logout_help_desc">De que xeito desactiva-la «Ubicación compartillada do OsmAnd» dende o Telegram</string>
<string name="osmand_connect_desc">Escolla a versión do OsmAnd na cal o «OsmAnd Telegram» empregará para amosa-las ubicacións.</string>
<string name="osmand_connect">Conecta-lo OsmAnd</string>
<string name="location_history_desc">Agocha-los contactos que non se moveron nun tempo determinado.</string>
<string name="stale_location_desc">A última vez que un contacto se moveu.</string>
<string name="stale_location">Sen movemento</string>
<string name="send_my_location_desc">Fixar intre mínimo para compartilla-la ubicación.</string>
<string name="sharing_time">Hora compartillada</string>
<string name="expire_at">Remata en</string>
<string name="stop_sharing_all">O compartillamento fica activado (desactivar)</string>
<string name="turn_off_location_sharing">Desactiva-la ubicación compartillada</string>
<string name="shared_string_bot">Bot</string>
<string name="get_telegram_account_first">Precisa dunha conta no Telegram para emprega-la ubicación compartillada.</string>
<string name="get_telegram_description_continue">Instale o Telegram e cree unha conta.</string>
<string name="get_telegram_after_creating_account">Despois poderá empregar esta aplicación.</string>
<string name="already_registered_in_telegram">Precisa dunha conta rexistrada no Telegram e dun número de teléfono móbil</string>
<string name="set_visible_time_for_all">Axusta-la hora visíbel para todos</string>
<string name="visible_time_for_all">Hora visíbel para todos</string>
<string name="set_time_description">Axusta-la hora na que os contactos e grupos marcados ollarán a ubicación en tempo real.</string>
<string name="set_time">Fixar hora</string>
<string name="location_sharing_description">Escolla os contactos e grupos cos que desexa compartilla-la súa ubicación.</string>
<string name="my_location_search_hint">Procurar: Grupo ou contacto</string>
<string name="start_location_sharing">Compartillar ubicación</string>
<string name="show_on_map">Amosar no mapa</string>
<string name="app_name">OsmAnd Telegram</string>
<string name="phone_number_title">Número do teléfono móbil</string>
<string name="phone_number_descr">Número do teléfono móbil no formato internacional</string>
<string name="shared_string_password">Contrasinal</string>
<string name="enter_code">Inserir código</string>
<string name="authentication_code">Código da autentificación</string>
<string name="authentication_code_descr">O Telegram enviou un código para que o OsmAnd inicie sesión na súa conta.</string>
<string name="enter_password">Inserir contrasinal</string>
<string name="password_descr">Contrasinal do Telegram</string>
<string name="shared_string_login">Inicia-la sesión</string>
<string name="shared_string_logout">Pecha-la sesión</string>
<string name="initialization">Estase a iniciar</string>
<string name="logging_out">Estase a pecha-la sesión</string>
<string name="closing">Estase a pechar</string>
<string name="gps_network_not_enabled">Activar «Ubicación»\?</string>
<string name="not_logged_in">Non iniciou a sesión</string>
<string name="shared_string_continue">Proseguer</string>
<string name="shared_string_settings">Axustes</string>
<string name="no_location_permission">A aplicación non ten permiso para acceder ós datos da ubicación.</string>
<string name="gps_not_available">Activar «Ubicación» nos axustes do sistema</string>
<string name="location_service_no_gps_available">Escolla un dos fornecedores da ubicación para compartilla-la súa ubicación.</string>
<string name="osmand_service">Modo no segundo plano</string>
<string name="osmand_service_descr">O OsmAnd Telegram execútase no modo en segundo plano ca pantalla apagada.</string>
<string name="shared_string_distance">Distancia</string>
<string name="share_location">Compartillar ubicación</string>
<string name="sharing_location">Estase a compartilla-la ubicación</string>
<string name="process_service">Servizo do OsmAnd Telegram</string>
<string name="osmand_logo">Logotipo do OsmAnd</string>
<string name="install_osmand_dialog_message">Precísase instalar primeiro a versión de balde ou de pagamento do OsmAnd</string>
<string name="install_osmand">Instala-lo OsmAnd</string>
<string name="show_users_on_map">Amosar usuarios no mapa</string>
<string name="active_chats">Conversas activas</string>
<string name="shared_string_authorization">Autorización</string>
<string name="shared_string_authorization_descr">Insira o número de teléfono móbil do Telegram no formato internacional</string>
<string name="shared_string_welcome">Benvido</string>
<string name="yard">id</string>
<string name="foot">pés</string>
<string name="mile">mi</string>
<string name="km">km</string>
<string name="m">m</string>
<string name="min_mile">min/mi</string>
<string name="min_km">min/km</string>
<string name="nm_h">nmi/h</string>
<string name="m_s">m/seg</string>
<string name="km_h">km/h</string>
<string name="mile_per_hour">mi/h</string>
<string name="si_nm_h">Millas náuticas por hora (nós)</string>
<string name="shared_string_hour_short">h</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_second_short">seg</string>
<string name="welcome_descr">A <b>Ubicación compartillada do OsmAnd</b> (en inglés, «OsmAnd Location Sharing») permite compartilla-la súa ubicación e olla-las ubicacións de outras persoas no OsmAnd.<br/><br/>A aplicación execútase sobre a base da API do Telegram. Para empregar esta aplicación ten que ter unha conta do Telegram.</string>
<string name="my_location">A miña ubicación</string>
<string name="live_now">Ao vivo agora</string>
<string name="send_location_as">Enviar ubicación coma</string>
<string name="send_location_as_descr">Escolla de que xeito se verán as mensaxes ca súa ubicación.</string>
<string name="shared_string_map">Mapa</string>
<string name="shared_string_text">Texto</string>
<string name="map_and_text">Mapa e texto</string>
<string name="monitoring_is_enabled">O monitoramento está activado</string>
<string name="monitoring_is_disabled">O monitoramento está desactivado</string>
<string name="time_on_the_move">tempo en movemento</string>
<string name="average_altitude">Altitude media</string>
<string name="average_speed">Velocidade media</string>
<string name="open_in_osmand">Abrir no OsmAnd</string>
<string name="end_date">Data de finalización</string>
<string name="start_date">Data de inicio</string>
<string name="timeline_description">Activar o monitoramento para recompilar datos de movemento no segundo plano.</string>
<string name="timeline">Liña do tempo</string>
</resources>

View file

@ -0,0 +1,192 @@
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="last_update_from_telegram">עדכון אחרון מטלגרם</string>
<string name="enter_another_device_name">נא לבחור שם שלא השתמשת בו עדיין</string>
<string name="device_added_successfully">%1$s נוסף.</string>
<string name="shared_string_add">הוספה</string>
<string name="error_adding_new_device">לא ניתן להוסיף מכשיר חדש</string>
<string name="enter_device_name_description">נא לתת שם באורך של עד 200 תווים למכשיר החדש שלך.</string>
<string name="device_name_is_too_long">שם המכשיר ארוך מדי</string>
<string name="device_name_cannot_be_empty">שם המכשיר לא יכול להישאר ריק</string>
<string name="device_name">שם המכשיר</string>
<string name="shared_string_hide">הסתרה</string>
<string name="share_location_as_description_second_line">ניתן ליצור ולצפות במזהה ההתקן בלקוח הטלגרם הזה באמצעות רובוט ההתכתבות %1$s. %2$s</string>
<string name="share_location_as_description">אם ברצונך לחבר מגוון מכשירים לחשבון טלגרם אחד, עליך להשתמש במכשיר אחר כדי לשתף את המיקום שלך.</string>
<string name="last_updated_location">המיקום האחרון שעודכן:</string>
<string name="successfully_sent_and_updated">נשלח ועודכן בהצלחה</string>
<string name="not_possible_to_send_to_telegram_chats">אין אפשרות לשלוח להתכתבויות בטלגרם:</string>
<string name="send_location_as">שליחת מיקום בתור</string>
<string name="send_location_as_descr">נא לבחור כיצד הודעות עם המיקום שלך תיראנה.</string>
<string name="shared_string_map">מפה</string>
<string name="shared_string_text">טקסט</string>
<string name="map_and_text">מפה וטקסט</string>
<string name="waiting_for_response_from_telegram">בהמתנה לתגובה מטלגרם</string>
<string name="sending_location_messages">המיקום נשלח</string>
<string name="initializing">מופעל</string>
<string name="searching_for_gps">מתבצע איתור המיקום…</string>
<string name="connecting_to_the_internet">מתבצעת התחברות לאינטרנט</string>
<string name="background_work_description">ניתן לשנות הגדרות מיטוב סוללה כדי לייצב את שיתוף המיקום.</string>
<string name="background_work">עבודת רקע</string>
<string name="sharing_in_background">מתבצע שיתוף ברקע</string>
<string name="go_to_settings">מעבר להגדרות</string>
<string name="shared_string_later">אחר כך</string>
<string name="not_sent_yet">לא נשלח עדיין</string>
<string name="not_found_yet">לא נמצא עדיין</string>
<string name="re_send_location">שליחת המיקום מחדש</string>
<string name="last_available_location">המיקום האחרון הזמין</string>
<string name="sharing_status">מצב שיתוף</string>
<string name="sharing_enabled">שיתוף: פעיל</string>
<string name="shared_string_status">מצב</string>
<string name="no_gps_connection">אין חיבור ל־GPS</string>
<string name="no_internet_connection">אין חיבור לאינטרנט</string>
<string name="shared_string_disable">השבתה</string>
<string name="shared_string_save">שמירה</string>
<string name="add_device">הוספת מכשיר</string>
<string name="share_location_as">שיתוף מיקום בתור</string>
<string name="live_now_description">אנשי קשר וקבוצות שמשתפים אתך מיקום.</string>
<string name="battery_optimization_description">כיבוי מיטוב סוללה עבור טלגרם OsmAnd כדי שהשירות לא יכבה ברקע.</string>
<string name="logout_from_osmand_telegram_descr">לצאת מטלגרם OsmAnd כדי לכבות את האפשרות לשתף מיקום או לצפות במיקום של אחרים\?</string>
<string name="logout_from_osmand_telegram">לצאת מטלגרם OsmAnd\?</string>
<string name="shared_string_name">שם</string>
<string name="by_distance">לפי מרחק</string>
<string name="by_name">לפי שם</string>
<string name="by_group">לפי קבוצה</string>
<string name="shared_string_sort">מיון</string>
<string name="shared_string_sort_by">מיון לפי</string>
<string name="shared_string_exit">יציאה</string>
<string name="last_response">תגובה אחרונה</string>
<string name="shared_string_group">קבוצה</string>
<string name="logout_no_internet_msg">יש להתחבר לאינטרנט כדי לצאת מטלגרם כראוי.</string>
<string name="shared_string_close">סגירה</string>
<string name="choose_osmand_desc">נא לבחור גרסת OsmAnd שבה אנשי קשר יופיעו על המסך.</string>
<string name="choose_osmand">נא לבחור גרסת OsmAnd לשימוש</string>
<string name="disable_all_sharing_desc">כיבוי שיתוף מיקום לכל ההתכתבויות הנבחרות (%1$d).</string>
<string name="disable_all_sharing">השבתת כל השיתופים</string>
<string name="turn_off_all">לכבות הכול</string>
<string name="shared_string_account">חשבון</string>
<string name="monitoring_is_enabled">הניטור פעיל</string>
<string name="monitoring_is_disabled">הניטור מושבת</string>
<string name="time_on_the_move">זמן בתנועה</string>
<string name="average_altitude">גובה ממוצע</string>
<string name="average_speed">מהירות ממוצעת</string>
<string name="open_in_osmand">פתיחה ב־OsmAnd</string>
<string name="end_date">מועד סיום</string>
<string name="start_date">מועד התחלה</string>
<string name="timeline_description">יש להפעיל ניטור כדי לאסוף נתוני תנועה ברקע.</string>
<string name="disconnect_from_telegram_desc">כדי לשלול גישה לשיתוף המיקום. יש לפתוח את טלגרם, לגשת להגדרות ← פרטיות ← הפעלות ולסגור את הפעלת הטלגרם של OsmAnd.</string>
<string name="disconnect_from_telegram">איך לכבות את שיתוף המיקום של OsmAnd מטלגרם</string>
<string name="logout_help_desc">איך לכבות את שיתוף המיקום של OsmAnd מטלגרם</string>
<string name="connected_account">חשבון מחובר</string>
<string name="in_time">בעוד %1$s</string>
<string name="osmand_connect_desc">נא לבחור את גרסת ה־OsmAnd בה יעשה שימוש OsmAnd טלגרם לטובת הצגת מיקומים.</string>
<string name="location_history_desc">להסתיר אנשי קשר שלא זזו במשך זה מסוים.</string>
<string name="location_history">היסטוריית מיקום</string>
<string name="stale_location_desc">הפעם האחרונה שאיש קשר זז.</string>
<string name="stale_location">אין תזוזה</string>
<string name="send_my_location">שליחת המיקום שלי</string>
<string name="gps_and_location">מיקום</string>
<string name="sharing_time">זמן השיתוף</string>
<string name="expire_at">תפוגה</string>
<string name="stop_sharing_all">השיתוף פעיל (כיבוי)</string>
<string name="turn_off_location_sharing">כיבוי שיתוף מיקום</string>
<string name="open_osmand">פתיחת OsmAnd</string>
<string name="shared_string_live">חי</string>
<string name="shared_string_bot">רובוט</string>
<string name="get_telegram_title">הרשמה בטלגרם</string>
<string name="get_telegram_account_first">כדי להשתמש בשיתוף מיקום צריך חשבון בטלגרם.</string>
<string name="get_telegram_description_continue">נא להתקין טלגרם ולהגדיר חשבון.</string>
<string name="get_telegram_after_creating_account">לאחר מכן תהיה לך אפשרות להשתמש ביישומון הזה.</string>
<string name="shared_string_all">הכול</string>
<string name="shared_string_off">כבוי</string>
<string name="already_registered_in_telegram">צריך חשבון רשום בטלגרם ומספר טלפון</string>
<string name="do_not_have_telegram">אין לי חשבון בטלגרם</string>
<string name="enter_phone_number">נא להקליד מספר טלפון</string>
<string name="enter_authentication_code">נא להקליד קוד אימות</string>
<string name="set_visible_time_for_all">הגדרת זמן חשיפה לכולם</string>
<string name="hours_and_minutes_format">%1$d שע׳ %2$d דק׳</string>
<string name="minutes_format">%1$d דק׳</string>
<string name="hours_format">%1$d שע׳</string>
<string name="shared_string_install">התקנה</string>
<string name="shared_string_share">שיתוף</string>
<string name="shared_string_back">חזרה</string>
<string name="visible_time_for_all">זמן חשיפה לכולם</string>
<string name="set_time_description">נא להגדיר את משך הזמן שבו הקבוצות ואנשי הקשר הנבחרים שלך יראו את המיקום שלך בזמן אמת.</string>
<string name="set_time">הגדרת זמן</string>
<string name="location_sharing_description">נא לבחור את אנשי הקשר והקבוצות עמם ברצונך לשתף את מיקומך.</string>
<string name="my_location_search_hint">חיפוש: קבוצה או איש קשר</string>
<string name="start_location_sharing">שיתוף מיקום</string>
<string name="show_on_map">הצגה במפה</string>
<string name="app_name">OsmAnd טלגרם</string>
<string name="phone_number_title">מספר טלפון</string>
<string name="phone_number_descr">מספר טלפון בתצורה בינלאומית</string>
<string name="shared_string_password">ססמה</string>
<string name="enter_code">נא להכניס קוד</string>
<string name="authentication_code">קוד אימות</string>
<string name="authentication_code_descr">נשלח אליך קוד מטלגרם עבור OsmAnd לטובת כניסה לחשבון שלך.</string>
<string name="enter_password">נא להקליד ססמה</string>
<string name="password_descr">ססמת טלגרם</string>
<string name="shared_string_login">כניסה</string>
<string name="shared_string_logout">יציאה</string>
<string name="initialization">התחלה</string>
<string name="logging_out">מתבצעת יציאה</string>
<string name="closing">מתבצעת סגירה</string>
<string name="gps_network_not_enabled">להפעיל „מיקום”\?</string>
<string name="not_logged_in">לא נכנסת</string>
<string name="shared_string_continue">המשך</string>
<string name="shared_string_cancel">ביטול</string>
<string name="shared_string_settings">הגדרות</string>
<string name="no_location_permission">ליישומון חסרה הרשאה לגישה לנתוני מיקום.</string>
<string name="gps_not_available">נא להפעיל את „מיקום” בהגדרות המערכת</string>
<string name="location_service_no_gps_available">נא לבחור את אחד מספקי המיקום כדי לשתף את המיקום שלך.</string>
<string name="osmand_service">מצב רקע</string>
<string name="osmand_service_descr">OsmAnd טלגרם פועל ברקע בזמן שהמסך כבוי.</string>
<string name="shared_string_distance">מרחק</string>
<string name="share_location">שיתוף מיקום</string>
<string name="sharing_location">המיקום משותף</string>
<string name="process_service">שירות OsmAnd טלגרם</string>
<string name="osmand_logo">הלוגו של OsmAnd</string>
<string name="install_osmand_dialog_message">עליך להתקין את הגרסה החופשית או את הגרסה בתשלום של OsmAnd תחילה</string>
<string name="install_osmand">התקנת OsmAnd</string>
<string name="show_users_on_map">הצגת משתמשים במפה</string>
<string name="active_chats">התכתבויות פעילות</string>
<string name="shared_string_authorization">אימות</string>
<string name="shared_string_authorization_descr">נא להקליד את מספר הטלפון שלך בטלגרם בתצורה בינלאומית</string>
<string name="shared_string_welcome">ברוך בואך</string>
<string name="yard">יארד</string>
<string name="foot">רגל</string>
<string name="mile">מייל</string>
<string name="km">ק״מ</string>
<string name="m">מ׳</string>
<string name="nm">מייל ימי</string>
<string name="min_mile">דק׳/מ׳</string>
<string name="min_km">דק׳/ק״מ</string>
<string name="nm_h">קשר</string>
<string name="m_s">מ/שנ׳</string>
<string name="km_h">קמ״ש</string>
<string name="mile_per_hour">מייל לשעה</string>
<string name="si_kmh">קילומטרים לשעה</string>
<string name="si_mph">מיילים לשעה</string>
<string name="si_m_s">מטרים לשנייה</string>
<string name="si_min_km">דקות לקילומטר</string>
<string name="si_min_m">דקות למייל</string>
<string name="si_nm_h">מייל ימי לשעה (קשר)</string>
<string name="si_mi_feet">מיילים/רגל</string>
<string name="si_mi_yard">מיילים/יארדים</string>
<string name="si_km_m">קילומטרים/מטרים</string>
<string name="si_nm">מיילים ימיים</string>
<string name="si_mi_meters">מיילים/מטרים</string>
<string name="shared_string_hour_short">שע</string>
<string name="shared_string_minute_short">דק׳</string>
<string name="shared_string_second_short">שנ׳</string>
<string name="my_location">המיקום שלי</string>
<string name="timeline">ציר זמן</string>
<string name="send_my_location_desc">הגדרת טווח הזמן המזערי לשיתוף מיקום.</string>
<string name="welcome_descr"><b>שיתוף המקום דרךOsmAnd</b> מאפשר לך לשתף את המיקום ולראות את מיקומם של אחרים ב־OsmAnd.<br/><br/>היישומון משתמש ב־API ודורש חשבון טלגרם.</string>
<string name="live_now">חי כעת</string>
<string name="gps_points_in_buffer">נשלחו (%1$d ממתינות)</string>
<string name="points_size">%1$d נקודות</string>
<string name="shared_string_date">תאריך</string>
<string name="shared_string_collected">נאספו</string>
<string name="gps_points">נקודות GPS</string>
<string name="shared_string_sent">נשלחו</string>
<string name="osmand_connect">OsmAnd connect</string>
</resources>

View file

@ -0,0 +1,190 @@
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="last_update_from_telegram">Ultimo aggiornamento da Telegram</string>
<string name="enter_another_device_name">Scegli un nome che non hai ancora usato</string>
<string name="device_added_successfully">%1$s aggiunto.</string>
<string name="shared_string_add">Aggiungi</string>
<string name="error_adding_new_device">Impossibile aggiungere il nuovo dispositivo</string>
<string name="enter_device_name_description">Dai un nome di non più di 200 caratteri al tuo dispositivo.</string>
<string name="device_name_is_too_long">Nome del dispositivo troppo lungo</string>
<string name="device_name_cannot_be_empty">Il nome del dispositivo non può essere vuoto</string>
<string name="device_name">Nome del dispositivo</string>
<string name="shared_string_hide">Nascondi</string>
<string name="share_location_as_description_second_line">Puoi creare e visualizzare l\'ID del dispositivo nel client Telegram usando il chat bot %1$s. %2$s</string>
<string name="share_location_as_description">Se vuoi connettere più dispositivi a un account telegram, devi usare un dispositivo diverso per condividere la tua posizione.</string>
<string name="last_updated_location">Ultimo aggiornamento della posizione:</string>
<string name="successfully_sent_and_updated">Inviato e caricato con successo</string>
<string name="not_possible_to_send_to_telegram_chats">Impossibile da inviare alle chat Telegram:</string>
<string name="waiting_for_response_from_telegram">Aspettando una risposta da Telegram</string>
<string name="sending_location_messages">Inviando la posizione</string>
<string name="initializing">Avvio</string>
<string name="searching_for_gps">Localizzazione…</string>
<string name="connecting_to_the_internet">Collegamento a Internet</string>
<string name="background_work_description">Cambia le impostazioni di ottimizzazione della batteria per stabilizzare la condivisione della posizione.</string>
<string name="background_work">Funzionamento in secondo piano</string>
<string name="battery_optimization_description">Disattiva l\'ottimizzazione della batteria per OsmAnd Telegram in modo che non venga chiuso improvvisamente quando è in secondo piano.</string>
<string name="sharing_in_background">Condivisione in secondo piano</string>
<string name="go_to_settings">Vai alle impostazioni</string>
<string name="shared_string_later">Più tardi</string>
<string name="not_sent_yet">Non ancora inviato</string>
<string name="not_found_yet">Non ancora trovato</string>
<string name="re_send_location">Invia nuovamente la posizione</string>
<string name="last_available_location">Ultima posizione disponibile</string>
<string name="sharing_status">Condivisione dello stato</string>
<string name="sharing_enabled">Condivisione: Attivata</string>
<string name="shared_string_status">Stato</string>
<string name="no_gps_connection">Nessuna connessione GPS</string>
<string name="no_internet_connection">Nessuna connessione ad Internet</string>
<string name="shared_string_disable">Disattiva</string>
<string name="shared_string_save">Salva</string>
<string name="add_device">Aggiungi dispositivo</string>
<string name="share_location_as">Condividi posizione come</string>
<string name="live_now_description">Contatti e gruppi che condividono la posizione con te.</string>
<string name="logout_from_osmand_telegram">Disconnettersi da OsmAnd Telegram\?</string>
<string name="shared_string_name">Nome</string>
<string name="by_distance">Per distanza</string>
<string name="by_name">Per nome</string>
<string name="by_group">Per gruppo</string>
<string name="shared_string_sort">Ordina</string>
<string name="shared_string_sort_by">Ordina per</string>
<string name="choose_osmand_desc">Seleziona la versione di OsmAnd in cui i contatti saranno mostrati sulla mappa.</string>
<string name="choose_osmand">Seleziona la versione di OsmAnd da usare</string>
<string name="disable_all_sharing_desc">Disattiva la condivisione della posizione per tutte le conversazioni selezionate (%1$d).</string>
<string name="disable_all_sharing">Disattiva tutte le condivisioni</string>
<string name="turn_off_all">Disattiva tutto</string>
<string name="shared_string_exit">Esci</string>
<string name="time_ago">fa</string>
<string name="last_response">Ultima risposta</string>
<string name="shared_string_group">Gruppo</string>
<string name="logout_no_internet_msg">Connettiti a Internet per uscire correttamente dall\'account di Telegram.</string>
<string name="shared_string_close">Chiudi</string>
<string name="disconnect_from_telegram_desc">Per revocare l\'accesso alla condivisione della posizione, apri Telegram, vai a Impostazioni → Privacy e Sicurezza → Sessioni, e termina la sessione di OsmAnd Telegram.</string>
<string name="disconnect_from_telegram">Come disattivare la condivisione della posizione di OsmAnd da Telegram</string>
<string name="logout_help_desc">Come disattivare la condivisione della posizione di OsmAnd da Telegram</string>
<string name="connected_account">Account connesso</string>
<string name="shared_string_account">Account</string>
<string name="in_time">in %1$s</string>
<string name="osmand_connect_desc">Scegli la versione di OsmAnd che OsmAnd Telegram userà per mostrare le posizioni.</string>
<string name="location_history_desc">Nascondi i contatti che non si sono spostati per un certo periodo di tempo.</string>
<string name="location_history">Cronologia delle posizioni</string>
<string name="stale_location_desc">L\'ultima volta in cui un contatto si è spostato.</string>
<string name="stale_location">Non in movimento</string>
<string name="send_my_location_desc">Imposta l\'intervallo di tempo minimo per condividere la posizione.</string>
<string name="send_my_location">Invia la mia posizione</string>
<string name="gps_and_location">Posizione</string>
<string name="sharing_time">Tempo di condivisione</string>
<string name="expire_at">Scade</string>
<string name="stop_sharing_all">La condivisione è attivata (disattiva)</string>
<string name="turn_off_location_sharing">Disattiva la condivisione della posizione</string>
<string name="open_osmand">Apri OsmAnd</string>
<string name="shared_string_live">In diretta</string>
<string name="shared_string_bot">Bot</string>
<string name="get_telegram_title">Registrazione a Telegram</string>
<string name="get_telegram_account_first">Hai bisogno di un account Telegram per usare la condivisione della posizione.</string>
<string name="get_telegram_description_continue">Si prega di installare Telegram e creare un account.</string>
<string name="get_telegram_after_creating_account">Allora potrai usare quest\'applicazione.</string>
<string name="shared_string_all">Tutti</string>
<string name="shared_string_off">Spento</string>
<string name="already_registered_in_telegram">Hai bisogno di un account di Telegram e un numero di telefono</string>
<string name="do_not_have_telegram">Non ho un account di Telegram</string>
<string name="enter_phone_number">Inserisci un numero di telefono</string>
<string name="enter_authentication_code">Inserisci il codice di autenticazione</string>
<string name="hours_and_minutes_format">%1$d h %2$d m</string>
<string name="minutes_format">%1$d m</string>
<string name="hours_format">%1$d h</string>
<string name="shared_string_install">Installa</string>
<string name="shared_string_share">Condividi</string>
<string name="shared_string_back">Indietro</string>
<string name="set_time_description">Imposta il tempo in cui i contatti e gruppi che hai selezionato vedranno la tua posizione in tempo reale.</string>
<string name="set_time">Imposta il tempo</string>
<string name="location_sharing_description">Seleziona i contatti e i gruppi con cui vuoi condividere la tua posizione.</string>
<string name="my_location_search_hint">Cerca: gruppo o contatto</string>
<string name="start_location_sharing">Condividi la posizione</string>
<string name="show_on_map">Mostra sulla mappa</string>
<string name="app_name">OsmAnd Telegram</string>
<string name="phone_number_title">Numero di telefono</string>
<string name="phone_number_descr">Numero di telefono nel formato internazionale</string>
<string name="shared_string_password">Password</string>
<string name="enter_code">Inserisci il codice</string>
<string name="authentication_code">Codice di autenticazione</string>
<string name="authentication_code_descr">Telegram ti ha inviato un codice per OsmAnd per entrare nel tuo account.</string>
<string name="enter_password">Inserisci la password</string>
<string name="password_descr">Password di Telegram</string>
<string name="shared_string_login">Entra</string>
<string name="shared_string_logout">Esci</string>
<string name="initialization">Avvio</string>
<string name="logging_out">Disconnessione</string>
<string name="closing">Chiusura</string>
<string name="gps_network_not_enabled">Attivare la \"posizione\"\?</string>
<string name="not_logged_in">Non sei connesso</string>
<string name="shared_string_continue">Continua</string>
<string name="shared_string_cancel">Annulla</string>
<string name="shared_string_settings">Impostazioni</string>
<string name="no_location_permission">L\'applicazione non ha i permessi per accedere ai dati sulla posizione.</string>
<string name="gps_not_available">Si prega di attivare la \"posizione\" nelle impostazioni di sistema</string>
<string name="location_service_no_gps_available">Seleziona uno dei provider della posizione per condividerla.</string>
<string name="osmand_service">In secondo piano</string>
<string name="osmand_service_descr">OsmAnd Telegram funziona in secondo piano quando lo schermo è spento.</string>
<string name="shared_string_distance">Distanza</string>
<string name="share_location">Condividi la posizione</string>
<string name="sharing_location">Condivisione della posizione</string>
<string name="process_service">Servizio di OsmAnd Telegram</string>
<string name="osmand_logo">Logo di OsmAnd</string>
<string name="install_osmand_dialog_message">Devi installare prima la versione gratis o a pagamento di OsmAnd</string>
<string name="install_osmand">Installa OsmAnd</string>
<string name="show_users_on_map">Mostra gli utenti sulla mappa</string>
<string name="active_chats">Conversazioni attive</string>
<string name="shared_string_authorization">Autorizzazione</string>
<string name="shared_string_authorization_descr">Si prega di inserire il numero di telefono di Telegram nel formato internazionale</string>
<string name="shared_string_welcome">Benvenuto/a</string>
<string name="yard">yd</string>
<string name="foot">ft</string>
<string name="mile">mi</string>
<string name="km">km</string>
<string name="m">m</string>
<string name="nm">nmi</string>
<string name="min_mile">min/m</string>
<string name="si_kmh">Chilometri all\'ora</string>
<string name="si_mph">Miglia all\'ora</string>
<string name="si_m_s">Metri al secondo</string>
<string name="si_min_km">Minuti al chilometro</string>
<string name="si_min_m">Minuti al miglio</string>
<string name="si_nm_h">Miglia nautiche all\'ora (nodi)</string>
<string name="si_mi_feet">Miglia/piedi</string>
<string name="si_mi_yard">Miglia/iarde</string>
<string name="si_km_m">Chilometri/metri</string>
<string name="si_nm">Miglia nautiche</string>
<string name="si_mi_meters">Miglia/metri</string>
<string name="shared_string_hour_short">h</string>
<string name="shared_string_minute_short">m</string>
<string name="shared_string_second_short">s</string>
<string name="welcome_descr"><b>OsmAnd Location Sharing</b> ti permette di condividere la tua posizione e di vedere quella di altri in OsmAnd.<br/><br/>L\'applicazione usa le API di Telegram ed è necessario un account di Telegram.</string>
<string name="my_location">La mia posizione</string>
<string name="live_now">Ora in diretta</string>
<string name="logout_from_osmand_telegram_descr">Sei sicuro di volerti disconnettere da OsmAnd Telegram, cosicché non potrai condividere la posizione o vedere quella di altri\?</string>
<string name="osmand_connect">Connessione OsmAnd</string>
<string name="set_visible_time_for_all">Imposta un orario visibile a tutti</string>
<string name="visible_time_for_all">Orario visibile a tutti</string>
<string name="min_km">min/km</string>
<string name="nm_h">kn</string>
<string name="m_s">m/s</string>
<string name="km_h">km/h</string>
<string name="mile_per_hour">mi/h</string>
<string name="monitoring_is_enabled">Monitoraggio abilitato</string>
<string name="monitoring_is_disabled">Monitoraggio disabilitato</string>
<string name="time_on_the_move">tempo in movimento</string>
<string name="average_altitude">Altitudine media</string>
<string name="average_speed">Velocità media</string>
<string name="open_in_osmand">Apri in OsmAnd</string>
<string name="end_date">Data di fine</string>
<string name="start_date">Data d\'inizio</string>
<string name="timeline_description">Abilita il monitoraggio per raccogliere i dati degli spostamenti in secondo piano.</string>
<string name="send_location_as">Invia la localizzazione come</string>
<string name="send_location_as_descr">Scegli l\'aspetto dei messaggi con la tua localizzazione.</string>
<string name="shared_string_map">Mappa</string>
<string name="shared_string_text">Testo</string>
<string name="map_and_text">Mappa e testo</string>
<string name="timeline">Cronologia</string>
</resources>

View file

@ -1,33 +1,24 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="background_work_description">Endre batterioptimiseringsinnstillinger, for stabil plasseringsdeling</string>
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="background_work_description">Endre batterioptimiseringsinnstillinger for mer stabil posisjonsdeling.</string>
<string name="background_work">Bakgrunnsarbeid</string>
<string name="battery_optimization_description">For stabil deling av din plassering i bakgrunnen, anbefales det å skru av batterioptimalisering for OsmAnd Telegram.
\n
\nHvis optimaliseringer er påskrudd, kan systemet skru av programmet som kjører i bakgrunnen automatisk (når skjermen er låst/eller programmet er minimert). Dette skjer uten merknad, og opphever kringkasting av plassering.</string>
<string name="battery_optimization_description">Skru av batterioptimisering for OsmAnd Telegram slik at det ikke plutselig skrur seg av når det er i bakgrunnen.</string>
<string name="sharing_in_background">Deling i bakgrunnen</string>
<string name="go_to_settings">Gå til innstillinger</string>
<string name="shared_string_later">Senere</string>
<string name="not_sent_yet">Ikke sendt enda</string>
<string name="not_found_yet">Ikke funnet enda</string>
<string name="re_send_location">Send plassering på ny</string>
<string name="last_sent_location">Sist sendte plassering</string>
<string name="last_available_location">Sist tilgjengelige plassering</string>
<string name="re_send_location">Send posisjon på nytt</string>
<string name="last_available_location">Sist tilgjengelige posisjon</string>
<string name="sharing_status">Delingsstatus</string>
<string name="sharing_enabled">Deling: Påslått</string>
<string name="shared_string_status">Status</string>
<string name="no_gps_connection">Ingen GPS-tilkobling</string>
<string name="sharing_success">Sendt og oppdatert</string>
<string name="not_possible_to_send_to_chats">Kunne ikke sende sludring:</string>
<string name="no_internet_connection">Ingen internettilknytning</string>
<string name="shared_string_disable">Skru av</string>
<string name="shared_string_save">Lagre</string>
<string name="add_device_descr">Skriv inn din enhets-ID fra https://live.osmand.net/device/ID</string>
<string name="device_id">Enhets-ID</string>
<string name="add_device">Legg til enhet</string>
<string name="share_location_as_descr">Dette valget lar deg dele enhetens plassering, eller plassering for egendefinert lagt til via API-enheter.</string>
<string name="share_location_as">Del plassering som</string>
<string name="live_now_description">Kontakter og grupper som deler sin plassering med deg.</string>
<string name="logout_from_osmand_telegram_descr">Er du sikker på at du vil logge ut av OsmAnd Telegram\? Etter det, vil du ikke kunne sende din plassering, og se dine kontakters plassering på kartet i OsmAnd.</string>
<string name="share_location_as">Del posisjon som</string>
<string name="live_now_description">Kontakter og grupper som deler sin posisjon med deg.</string>
<string name="logout_from_osmand_telegram_descr">Er du sikker på at du vil logge ut av OsmAnd Telegram slik at du ikke kan sende din posisjon, eller se andres\?</string>
<string name="logout_from_osmand_telegram">Logg ut av OsmAnd Telegram\?</string>
<string name="shared_string_name">Navn</string>
<string name="by_distance">Etter distanse</string>
@ -37,39 +28,38 @@
<string name="shared_string_sort_by">Sorter etter</string>
<string name="choose_osmand_desc">Velg OsmAnd-versjon der kontaktene skal vises på kartet.</string>
<string name="choose_osmand">Velg OsmAnd versjon å bruke</string>
<string name="disable_all_sharing_desc">Det vil skru av deling av din plassering til alle valgte sludringer (%1$d).</string>
<string name="disable_all_sharing_desc">Det vil skru av posisjonsdeling til alle valgte sludringer (%1$d).</string>
<string name="disable_all_sharing">Skru av all deling</string>
<string name="turn_off_all">Skru av alle</string>
<string name="shared_string_exit">Avslutt</string>
<string name="time_ago">siden</string>
<string name="last_response">Siste svar</string>
<string name="shared_string_group">Gruppe</string>
<string name="logout_no_internet_msg">For å logge ut av din Telegram-konto på rett vis, trenger du Internett.</string>
<string name="logout_no_internet_msg">Koble til Internett for å logge ut av Telegram ordentlig.</string>
<string name="shared_string_close">Lukk</string>
<string name="disconnect_from_telegram_desc">For å blokekre Telegram fra din OsmAnd-konto må du åpne innstillingene i Telegram. Under Personvern og sikkerhet - Økter, må du sluttføre OsmAnd Telegram-økta. Etter det, vil OsmAnd Plasseringsdeling ikke lenger ha tilgang til kontoen din, og du vil ikke kunne bruke dette programmet til du logger inn igjen.</string>
<string name="disconnect_from_telegram">Hvordan koble fra OsmAnd plasseringsdeling fra Telegram-kontoen</string>
<string name="logout_help_desc">Hvordan koble fra OsmAnd plasseringsdeling fra Telegram</string>
<string name="disconnect_from_telegram_desc">For å tilbakekalle posisjonsdelingstilgang. Åpne Telegram, gå til Innstillinger - Personvern og sikkerhet - Økter, og sluttfør OsmAnd Telegram-økta.</string>
<string name="disconnect_from_telegram">Hvordan koble fra OsmAnd posisjonsdeling fra Telegram</string>
<string name="logout_help_desc">Hvordan koble fra OsmAnd posisjonsdeling fra Telegram</string>
<string name="connected_account">Tilkoblet konto</string>
<string name="shared_string_account">Konto</string>
<string name="in_time">i %1$s</string>
<string name="osmand_connect_desc">Velg OsmAnd-versjonen OsmAnd Telegram henvender seg til for å vise posisjonen på kartet.</string>
<string name="osmand_connect_desc">Velg OsmAnd-versjonen OsmAnd Telegram bruker for å vise posisjoner på kartet.</string>
<string name="osmand_connect">OsmAnd connect</string>
<string name="location_history_desc">Skjul kontaktene som ikke har oppdatert sin plassering etter et gitt tidsintervall.</string>
<string name="location_history">Plasseringshistorikk</string>
<string name="location_history">Posisjonshistorikk</string>
<string name="stale_location_desc">Siste tidspunkt en kontakt sendte en plasseringsoppdatering.</string>
<string name="stale_location">Urørlig plassering</string>
<string name="send_my_location_desc">Sett minimumsintervall for plasseringsdeling.</string>
<string name="send_my_location">Send min plassering</string>
<string name="send_my_location_desc">Sett minimumsintervall for posisjonsdeling.</string>
<string name="send_my_location">Send min posisjon</string>
<string name="gps_and_location">GPS og plassering</string>
<string name="sharing_time">Delingstid</string>
<string name="expire_at">Utløper</string>
<string name="stop_sharing_all">Deling er påslått (skru av)</string>
<string name="turn_off_location_sharing">Skru av plasseringsdeling</string>
<string name="turn_off_location_sharing">Skru av posisjonsdeling</string>
<string name="open_osmand">Åpne OsmAnd</string>
<string name="shared_string_live">Sanntid</string>
<string name="shared_string_bot">Bot</string>
<string name="get_telegram_title">Registrering i Telegram</string>
<string name="get_telegram_account_first">Du trenger en Telegram-konto for å bruke funksjonene i OsmAnd plasseringsdeling.</string>
<string name="get_telegram_account_first">Du trenger en Telegram-konto for å bruke funksjonene i OsmAnd posisjonsdeling.</string>
<string name="get_telegram_description_continue">Hvis du ønsker å fortsette, installer Telegram fra Google Play og registrer din konto.</string>
<string name="get_telegram_after_creating_account">Etter oppretting av konto, kan du bruke dette programmet.</string>
<string name="shared_string_all">Alle</string>
@ -86,11 +76,11 @@
<string name="shared_string_share">Del</string>
<string name="shared_string_back">Tilbake</string>
<string name="visible_time_for_all">Synlig tid for alle</string>
<string name="set_time_description">Sett tiden dine valgte kontakter og grupper vil se din plassering i sanntid.</string>
<string name="set_time_description">Sett tiden dine valgte kontakter og grupper vil se din posisjon i sanntid.</string>
<string name="set_time">Sett tid</string>
<string name="location_sharing_description">Velg kontaktene og gruppene du ønsker å dele din plassering med.</string>
<string name="location_sharing_description">Velg kontaktene og gruppene du ønsker å dele din posisjon med.</string>
<string name="my_location_search_hint">Søk: Gruppe eller kontakt</string>
<string name="start_location_sharing">Start plasseringsdeling</string>
<string name="start_location_sharing">Del posisjon</string>
<string name="show_on_map">Vis på kartet</string>
<string name="app_name">OsmAnd Telegram</string>
<string name="phone_number_title">Telefonnummer</string>
@ -98,32 +88,23 @@
<string name="shared_string_password">Passord</string>
<string name="enter_code">Skriv inn kode</string>
<string name="authentication_code">Identitetsbekreftelseskode</string>
<string name="authentication_code_descr">Du har blitt tilsendt en kode av Telegram. Den vil bli brukt av OsmAnd for å logge inn på kontoen din.</string>
<string name="authentication_code_descr">Telegram har sendt deg en kode slik at OsmAnd kan logge inn på kontoen din.</string>
<string name="enter_password">Skriv inn passord</string>
<string name="password_descr">Skriv inn passordet for din Telegram-konto for å fullføre identitetsbekreftelse</string>
<string name="password_descr">Skriv inn passordet for din Telegram-konto</string>
<string name="shared_string_login">Logg inn</string>
<string name="shared_string_logout">Logg ut</string>
<string name="not_logged_in">Du er ikke innlogget</string>
<string name="initialization">Igangsetting</string>
<string name="logging_out">Logger ut</string>
<string name="closing">Lukker</string>
<string name="shared_string_continue">Fortsett</string>
<string name="shared_string_cancel">Avbryt</string>
<string name="gps_network_not_enabled">Skru på plasseringstjeneste\?</string>
<string name="shared_string_settings">Innstillinger</string>
<string name="no_location_permission">Programmet mangler tilgang til plasseringsdata.</string>
<string name="gps_not_available">Skru på GPS i innstillingene</string>
<string name="location_service_no_gps_available">Plasseringsdelingstjenesten krever at en plasseringstilbyder er påslått.</string>
<string name="no_location_permission">Programmet mangler tilgang til posisjonsdata.</string>
<string name="gps_not_available">Skru på «Posisjon» i systeminnstillingene</string>
<string name="location_service_no_gps_available">Velg en av posisjonstilbyderne for å dele din posisjon.</string>
<string name="osmand_service">Bakgrunnsmodus</string>
<string name="osmand_service_descr">OsmAnd Telegram kjører som nisse med skjermen av.</string>
<string name="shared_string_distance">Distanse</string>
<string name="share_location">Del plassering</string>
<string name="sharing_location">Deler plassering</string>
<string name="shared_string_paused">Pauset</string>
<string name="shared_string_no_data">Ingen data</string>
<string name="shared_string_pause">Pause</string>
<string name="shared_string_start">Start</string>
<string name="shared_string_stop">Stopp</string>
<string name="share_location">Del posisjon</string>
<string name="sharing_location">Deler posisjon</string>
<string name="process_service">OsmAnd Telegram-tjeneste</string>
<string name="osmand_logo">OsmAnd-logo</string>
<string name="install_osmand_dialog_message">Du må installere gratis- eller betalt versjon av OsmAnd først</string>
@ -131,7 +112,7 @@
<string name="show_users_on_map">Vis brukere på kartet</string>
<string name="active_chats">Aktive sludringer</string>
<string name="shared_string_authorization">Identitetsbekreftelse</string>
<string name="shared_string_authorization_descr">Skriv inn telefonnummeret for din Telegram-konto i internasjonalt format</string>
<string name="shared_string_authorization_descr">Skriv inn ditt Telegram-telefonnummer i internasjonalt format</string>
<string name="shared_string_welcome">Velkommen</string>
<string name="km">km</string>
@ -143,19 +124,17 @@
<string name="shared_string_hour_short">t</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_second_short">sek</string>
<string name="plus">+</string>
<string name="welcome_descr"><b>OsmAnd plasseringsdeling</b> lar deg dele din plassering og se andres posisjon i OsmAnd.<br/><br/>Programmet belager seg på Telegram-API-et. For å bruke dette programmet må du ha en Telegram-konto.</string>
<string name="my_location">Min plassering</string>
<string name="live_now">Sender nå</string>
<string name="welcome_descr"><b>OsmAnd posisjonsdeling</b> lar deg dele din posisjon og se andres posisjon i OsmAnd.<br/><br/>Programmet belager seg på Telegram-API-et. For å bruke dette programmet må du ha en Telegram-konto.</string>
<string name="my_location">Min posisjon</string>
<string name="last_updated_location">Sist oppdaterte plassering:</string>
<string name="last_updated_location">Sist oppdaterte posisjon:</string>
<string name="successfully_sent_and_updated">Sendt og oppdatert</string>
<string name="not_possible_to_send_to_telegram_chats">Kan ikke sende til Telegram-sludringer:</string>
<string name="waiting_for_response_from_telegram">Venter på svar fra Telegram</string>
<string name="sending_location_messages">Sender plasseringsmeldinger</string>
<string name="sending_location_messages">Sender posisjon</string>
<string name="initializing">Starter</string>
<string name="searching_for_gps">Søker etter GPS</string>
<string name="searching_for_gps">Posisjonerer…</string>
<string name="connecting_to_the_internet">Kobler til Internett</string>
<string name="yard">yd</string>
<string name="foot">fot</string>
@ -174,4 +153,40 @@
<string name="si_km_m">Kilometer/meter</string>
<string name="si_nm">Nautiske mil</string>
<string name="si_mi_meters">Engelske mil/meter</string>
</resources>
<string name="enter_another_device_name">Du har allerede en enhet med samme navn, velg noe annet</string>
<string name="device_added_successfully">%1$s lagt til.</string>
<string name="shared_string_add">Legg til</string>
<string name="error_adding_new_device">Kunne ikke legge til ny enhet</string>
<string name="enter_device_name_description">Skriv inn et nytt navn for din nye enhet. Maksimal lengde 200 tegn.</string>
<string name="device_name_is_too_long">For lang enhetsnavn</string>
<string name="device_name_cannot_be_empty">Enhetsnavn må velges</string>
<string name="device_name">Enhetsnavn</string>
<string name="shared_string_hide">Skjul</string>
<string name="share_location_as_description_second_line">Du kan opprette og vise enhets-ID i Telegram-klienten ved bruk av %1$s-sludrebot-en. %2$s</string>
<string name="share_location_as_description">Hvis du vil koble flere enheter til én Telegram-konto, må du bruke en annen enhet til å dele din posisjon.</string>
<string name="shared_string_save">Lagre</string>
<string name="stop_sharing_all">Deling er på (skru av)</string>
<string name="initialization">Starter</string>
<string name="logging_out">Logger ut</string>
<string name="closing">Lukker</string>
<string name="gps_network_not_enabled">Skru på \"Posisjon\"\?</string>
<string name="live_now">Nå direkte</string>
<string name="last_update_from_telegram">Siste oppdatering fra Telegram</string>
<string name="send_location_as">Send plassering som</string>
<string name="send_location_as_descr">Velg hvordan meldinger med din plassering skal se ut.</string>
<string name="shared_string_map">Kart</string>
<string name="shared_string_text">Tekst</string>
<string name="map_and_text">Kart og tekst</string>
<string name="monitoring_is_enabled">Oppsyn er påskrudd</string>
<string name="monitoring_is_disabled">Oppsyn er avskrudd</string>
<string name="time_on_the_move">tid i bevegelse</string>
<string name="average_altitude">Gjennomsnittlig høyde</string>
<string name="average_speed">Gjennomsnittsfart</string>
<string name="open_in_osmand">Åpne i OsmAnd</string>
<string name="end_date">Sluttdato</string>
<string name="start_date">Startdato</string>
<string name="timeline_description">Skru på oppsyn for å samle bevegelsesdata i bakgrunnen.</string>
<string name="timeline">Tidslinje</string>
</resources>

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="background_work_description">Zmień ustawienia optymalizacji baterii, aby zapewnić stabilną lokalizację</string>
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="background_work_description">Zmień ustawienia optymalizacji baterii, aby zapewnić stabilną lokalizację.</string>
<string name="background_work">Praca w tle</string>
<string name="battery_optimization_description">Aby stabilnie udostępniać swoją pozycję w tle, zaleca się wyłączenie optymalizacji baterii dla Telegram OsmAnd.
\n
@ -10,25 +10,19 @@
<string name="not_sent_yet">Jeszcze nie wysłane</string>
<string name="not_found_yet">Jeszcze nie znaleziono</string>
<string name="re_send_location">Wyślij ponownie lokalizację</string>
<string name="last_sent_location">Ostatnia wysłana lokalizacja</string>
<string name="last_available_location">Ostatnia dostępna lokalizacja</string>
<string name="sharing_status">Status udostępniania</string>
<string name="sharing_enabled">Udostępnianie: Włączone</string>
<string name="shared_string_status">Status</string>
<string name="no_gps_connection">Brak połączenia GPS</string>
<string name="sharing_success">Pomyślnie wysłano i zaktualizowano</string>
<string name="not_possible_to_send_to_chats">Nie można wysłać na czat:</string>
<string name="no_internet_connection">Brak połączenia z internetem</string>
<string name="shared_string_disable">Wyłącz</string>
<string name="shared_string_save">Zapisz</string>
<string name="add_device_descr">Wprowadź swój identyfikator urządzenia, który można znaleźć w https://live.osmand.net/device/ID</string>
<string name="device_id">Identyfikator urządzenia</string>
<string name="add_device">Dodaj urządzenie</string>
<string name="share_location_as_descr">Ta opcja umożliwia udostępnianie lokalizacji urządzenia lub lokalizacji niestandardowych dodawanych przez urządzenia interfejsu API.</string>
<string name="share_location_as">Udostępnij lokalizację jako</string>
<string name="live_now_description">Kontakty i grupy, które udostępniają Ci swoją lokalizację.</string>
<string name="logout_from_osmand_telegram_descr">Czy na pewno chcesz się wylogować z OsmAnd Telegram\? Po tym czasie nie będziesz mógł wysłać swojej pozycji i zobaczyć lokalizacji swoich kontaktów na mapie w OsmAnd.</string>
<string name="logout_from_osmand_telegram">Wyloguj się z OsmAnd Telegram\?</string>
<string name="logout_from_osmand_telegram_descr">Czy na pewno chcesz się wylogować z OsmAnd Telegram, aby nie udostępniać lokalizacji ani nie widzieć lokalizacji innych\?</string>
<string name="logout_from_osmand_telegram">Wylogować się z OsmAnd Telegram\?</string>
<string name="shared_string_name">Nazwa</string>
<string name="by_distance">Według odległości</string>
<string name="by_name">Według nazwy</string>
@ -37,43 +31,42 @@
<string name="shared_string_sort_by">Sortuj według</string>
<string name="choose_osmand_desc">Wybierz wersję OsmAnd, w której kontakty będą wyświetlane na mapie.</string>
<string name="choose_osmand">Wybierz używaną wersję OsmAnd</string>
<string name="disable_all_sharing_desc">To wyłączy udostępnianie lokalizacji dla wszystkich wybranych czatów (%1$d).</string>
<string name="disable_all_sharing_desc">Wyłącza udostępnianie lokalizacji dla wszystkich wybranych czatów (%1$d).</string>
<string name="disable_all_sharing">Wyłącz udostępnianie</string>
<string name="turn_off_all">Wyłącz wszystko</string>
<string name="shared_string_exit">Zakończ</string>
<string name="time_ago">temu</string>
<string name="last_response">Ostatnia odpowiedź</string>
<string name="shared_string_group">Grupa</string>
<string name="logout_no_internet_msg">Internet jest wymagany, by właściwie wylogować się z konta Telegramu.</string>
<string name="logout_no_internet_msg">Połącz się z internetem, by właściwie wylogować się z konta Telegramu.</string>
<string name="shared_string_close">Zamknij</string>
<string name="disconnect_from_telegram">Jak rozłączyć Udostępnianie Lokalizacji OsmAnd z konta Telegramu</string>
<string name="logout_help_desc">Jak rozłączyć Udostępnianie Lokalizacji OsmAnd z Telegramu</string>
<string name="disconnect_from_telegram">Jak wyłączyć Udostępnianie Lokalizacji OsmAnd z Telegramu</string>
<string name="logout_help_desc">Jak wyłączyć Udostępnianie Lokalizacji OsmAnd z Telegramu</string>
<string name="connected_account">Połączone konta</string>
<string name="shared_string_account">Konto</string>
<string name="in_time">w %1$s</string>
<string name="osmand_connect_desc">Wybierz wersję OsmAnd do której Telegram OsmAnd będzie się odnosił przy wyświetlaniu pozycji na mapie.</string>
<string name="osmand_connect_desc">Wybierz wersję OsmAnd, którą Telegram OsmAnd będzie używał do wyświetlaniu pozycji.</string>
<string name="osmand_connect">Połącz OsmAnd</string>
<string name="location_history_desc">Ukryj kontakty, które nie zaktualizowały swojej lokalizacji po określonym czasie.</string>
<string name="location_history_desc">Ukryj kontakty, które nie zostały przeniesione w określonym czasie.</string>
<string name="location_history">Historia lokalizacji</string>
<string name="stale_location_desc">Ostatni raz, kiedy kontakt wysłał aktualizację do swojej lokalizacji.</string>
<string name="stale_location_desc">Ostatni kontakt został przeniesiony.</string>
<string name="send_my_location_desc">Wybierz minimalny odstęp dla udostępniania lokalizacji.</string>
<string name="send_my_location">Wyślij moją lokalizację</string>
<string name="gps_and_location">GPS i lokalizacja</string>
<string name="gps_and_location">Pozycja</string>
<string name="sharing_time">Czas udostępniania</string>
<string name="expire_at">Wygasa o</string>
<string name="stop_sharing_all">Udostępnianie jest włączone (wyłącz)</string>
<string name="expire_at">Wygasa</string>
<string name="turn_off_location_sharing">Wyłącz udostępnianie lokalizacji</string>
<string name="open_osmand">Otwórz OsmAnd</string>
<string name="shared_string_live">Na żywo</string>
<string name="shared_string_bot">Bot</string>
<string name="get_telegram_title">Rejestracja w Telegramie</string>
<string name="get_telegram_account_first">Potrzebujesz konto w Telegramie, by używać Udostępniania Lokalizacji OsmAnd.</string>
<string name="get_telegram_description_continue">Jeśli chcesz kontynuować, prosimy zainstalować Telegram z Google Play i zarejestrować konto.</string>
<string name="get_telegram_after_creating_account">Po utworzeniu konta, możesz używać aplikacji.</string>
<string name="get_telegram_account_first">Aby korzystać z udostępniania lokalizacji, potrzebujesz konta Telegram.</string>
<string name="get_telegram_description_continue">Zainstaluj Telegram i skonfiguruj konto.</string>
<string name="get_telegram_after_creating_account">Następnie możesz użyć tej aplikacji.</string>
<string name="shared_string_all">Wszystkie</string>
<string name="shared_string_off">Wyłączone</string>
<string name="already_registered_in_telegram">Potrzebujesz już zarejestrowanego konta i numeru telefonu w Telegramie</string>
<string name="do_not_have_telegram">Nie masz konta w Telegramie</string>
<string name="already_registered_in_telegram">Potrzebujesz zarejestrowanego konta w Telegramie i numeru telefonu</string>
<string name="do_not_have_telegram">Nie mam konta w Telegramie</string>
<string name="enter_phone_number">Wpisz numer telefonu</string>
<string name="enter_authentication_code">Wpisz kod zabezpieczający</string>
<string name="set_visible_time_for_all">Ustaw czas widoczny dla wszystkich</string>
@ -87,8 +80,8 @@
<string name="set_time_description">Ustaw czas, kiedy wybrane kontakty i grupy będą widzieć twoją lokalizację w czasie rzeczywistym.</string>
<string name="set_time">Ustaw czas</string>
<string name="location_sharing_description">Wybierz kontakty i grupy, którym chcesz udostępnić swoją lokalizację.</string>
<string name="my_location_search_hint">Wyszukiwanie: grupa i kontakt</string>
<string name="start_location_sharing">Rozpocznij udostępnianie lokalizacji</string>
<string name="my_location_search_hint">Szukaj: Grupa lub kontakt</string>
<string name="start_location_sharing">Udostępnij lokalizację</string>
<string name="show_on_map">Pokazuj na mapie</string>
<string name="app_name">OsmAnd Telegram</string>
<string name="phone_number_title">Numer telefonu</string>
@ -96,32 +89,24 @@
<string name="shared_string_password">Hasło</string>
<string name="enter_code">Wpisz kod</string>
<string name="authentication_code">Kod zabezpieczający</string>
<string name="authentication_code_descr">Telegram wysłał ci kod. Będzie on używany przez OsmAnd jako login do konta.</string>
<string name="authentication_code_descr">Telegram wysłał ci kod do OsmAnd jako login do konta.</string>
<string name="enter_password">Wpisz kod</string>
<string name="password_descr">Proszę wpisać kod konta w Telegramie by zakończyć autoryzację</string>
<string name="password_descr">Hasło Telegram</string>
<string name="shared_string_login">Zaloguj się</string>
<string name="shared_string_logout">Wyloguj się</string>
<string name="not_logged_in">Nie jesteś zalogowany/a</string>
<string name="initialization">Inicjalizacja</string>
<string name="logging_out">Wylogowywanie</string>
<string name="closing">Zamykanie</string>
<string name="shared_string_continue">Kontynuuj</string>
<string name="shared_string_cancel">Anuluj</string>
<string name="gps_network_not_enabled">Usługa lokalizacji nie jest włączona. Włączyć ją\?</string>
<string name="gps_network_not_enabled">Włączyć lokalizację\?</string>
<string name="shared_string_settings">Opcje</string>
<string name="no_location_permission">Aplikacja nie ma uprawnień dostępu do danych o położeniu.</string>
<string name="gps_not_available">Proszę włączyć GPS w opcjach</string>
<string name="location_service_no_gps_available">Usługa udostępniania lokalizacji wymaga włączonego dostawcy lokalizacji.</string>
<string name="gps_not_available">Włącz \"Lokalizacja\" w ustawieniach systemu</string>
<string name="location_service_no_gps_available">Wybierz jednego z dostawców lokalizacji, aby udostępnić swoją lokalizację.</string>
<string name="osmand_service">Tryb tła</string>
<string name="osmand_service_descr">Telegram OsmAnd będzie działał w tle przy wygaszonym ekranie.</string>
<string name="shared_string_distance">Odległość</string>
<string name="share_location">Udostępnij lokalizację</string>
<string name="sharing_location">Udostępnianie lokalizacji</string>
<string name="shared_string_paused">Wstrzymano</string>
<string name="shared_string_no_data">Brak danych</string>
<string name="shared_string_pause">Wstrzymaj</string>
<string name="shared_string_start">Rozpocznij</string>
<string name="shared_string_stop">Zakończ</string>
<string name="process_service">Usługa Telegramu OsmAnd</string>
<string name="osmand_logo">Logo OsmAnd</string>
<string name="install_osmand_dialog_message">Najpierw musisz zainstalować darmową lub płatną wersję OsmAnd</string>
@ -129,7 +114,7 @@
<string name="show_users_on_map">Pokazuj użytkowników na mapie</string>
<string name="active_chats">Aktywuj czat</string>
<string name="shared_string_authorization">Autoryzacja</string>
<string name="shared_string_authorization_descr">Proszę wprowadzić numer telefonu konta Telegramu w formacie międzynarodowym</string>
<string name="shared_string_authorization_descr">Wprowadź swój numer Telegram w formacie międzynarodowym</string>
<string name="shared_string_welcome">Witamy</string>
<string name="yard">yd</string>
@ -137,7 +122,7 @@
<string name="mile">mi</string>
<string name="km">km</string>
<string name="m">m</string>
<string name="nm">nmi</string>
<string name="nm">Mm</string>
<string name="min_mile">min/m</string>
<string name="min_km">min/km</string>
<string name="nm_h">nmi/h</string>
@ -158,10 +143,50 @@
<string name="shared_string_hour_short">h</string>
<string name="shared_string_minute_short">min</string>
<string name="shared_string_second_short">sek</string>
<string name="plus">+</string>
<string name="welcome_descr"><b>Udostępnianie Lokalizacji OsmAnd</b> umożliwi ci udostępnianie twojej lokalizacji i zobaczenie lokalizacji innych osób w OsmAnd.<br/><br/>Aplikacja działa w opraciu o Telegram API. By używać aplikacji musisz mieć konto w Telegramie.</string>
<string name="welcome_descr"><b>Udostępnianie Lokalizacji OsmAnd</b> pozwala Ci udostępniać swoją lokalizację i widzieć ją w OsmAnd.<br/><br/>Aplikacja używa Telegram API i potrzebujesz konta Telegram.</string>
<string name="my_location">Moja lokalizacja</string>
<string name="live_now">Na żywo teraz</string>
<string name="live_now">Na żywo</string>
</resources>
<string name="enter_another_device_name">Wybierz nazwę, której jeszcze nie używasz</string>
<string name="device_added_successfully">%1$s dodany.</string>
<string name="shared_string_add">Dodaj</string>
<string name="error_adding_new_device">Nie można dodać nowego urządzenia</string>
<string name="enter_device_name_description">Nazwij swoje nowe urządzenie maksymalnie 200 znaków.</string>
<string name="device_name_is_too_long">Nazwa urządzenia jest za długa</string>
<string name="device_name_cannot_be_empty">Nazwa sprzętu nie można być pusta</string>
<string name="device_name">Nazwa urządzenia</string>
<string name="shared_string_hide">Ukryj</string>
<string name="share_location_as_description_second_line">Możesz utworzyć i zobaczyć ID sprzętu w telegramie klienta, używając %1$s bota czatu. %2$s</string>
<string name="share_location_as_description">Jeśli chcesz połączyć wiele urządzeń z jednym kontem telegramu, potrzebujesz użyć innego sprzętu do udostępniania lokalizacji.</string>
<string name="last_updated_location">Ostatnia aktualizacja lokalizacji:</string>
<string name="successfully_sent_and_updated">Wysłano i zaktualizowano z powodzeniem</string>
<string name="not_possible_to_send_to_telegram_chats">Nie można wysłać na czaty Telegramu:</string>
<string name="waiting_for_response_from_telegram">Oczekiwanie na odpowiedź od Telegramu</string>
<string name="sending_location_messages">Wysyłam lokalizację</string>
<string name="initializing">Wystartuj</string>
<string name="searching_for_gps">Pozycjonowanie…</string>
<string name="connecting_to_the_internet">Łączenie z internetem</string>
<string name="disconnect_from_telegram_desc">Aby anulować dostęp do udostępniania lokalizacji. Otwórz Telegram, przejdź do Ustawienia → Prywatność i bezpieczeństwo → Sesje i zakończ sesję OsmAnd Telegram.</string>
<string name="stale_location">Nie porusza się</string>
<string name="last_update_from_telegram">Ostatnia aktualizacja z Telegram</string>
<string name="stop_sharing_all">Udostępnianie jest włączone (wyłącz)</string>
<string name="initialization">Wystartuj</string>
<string name="logging_out">Wylogowuję się</string>
<string name="closing">Zamykanie</string>
<string name="send_location_as">Wyślij lokalizację jako</string>
<string name="send_location_as_descr">Wybierz sposób wyświetlania wiadomości z Twoją lokalizacją.</string>
<string name="shared_string_map">Mapa</string>
<string name="shared_string_text">Tekst</string>
<string name="map_and_text">Mapa i tekst</string>
<string name="monitoring_is_enabled">Monitorowanie jest włączone</string>
<string name="monitoring_is_disabled">Monitorowanie jest wyłączone</string>
<string name="time_on_the_move">czas w ruchu</string>
<string name="average_altitude">Średnia wysokość</string>
<string name="average_speed">Średnia prędkość</string>
<string name="open_in_osmand">Otwarte w OsmAnd</string>
<string name="end_date">Data końcowa</string>
<string name="start_date">Data rozpoczęcia</string>
<string name="timeline_description">Umożliwia monitorowanie, by zgromadzić dane ruchu w tle.</string>
<string name="timeline">Linia czasu</string>
</resources>

Some files were not shown because too many files have changed in this diff Show more