From 3ac68eb0114e8b166179aaceab22f314f104d7e3 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Wed, 2 Dec 2015 02:19:45 +0100 Subject: [PATCH 1/7] Fix some geocoding issues --- .../net/osmand/binary/GeocodingUtilities.java | 126 ++++++++++-------- 1 file changed, 71 insertions(+), 55 deletions(-) diff --git a/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java b/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java index 684dd283b8..f2edb35451 100644 --- a/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java +++ b/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java @@ -58,7 +58,7 @@ public class GeocodingUtilities { public static final float THRESHOLD_MULTIPLIER_SKIP_BUILDINGS_AFTER = 1.5f; public static final float THRESHOLD_MULTIPLIER_SKIP_STREETS_AFTER = 3; - public static final float DISTANCE_STREET_NAME_PROXIMITY_BY_NAME = 20000; + public static final float DISTANCE_STREET_NAME_PROXIMITY_BY_NAME = 15000; public static final float DISTANCE_BULDING_PROXIMITY = 100; public static final Comparator DISTANCE_COMPARATOR = new Comparator() { @@ -212,13 +212,13 @@ public class GeocodingUtilities { } } - public List justifyReverseGeocodingSearch(final GeocodingResult r, BinaryMapIndexReader reader, + public List justifyReverseGeocodingSearch(final GeocodingResult road, BinaryMapIndexReader reader, double knownMinBuidlingDistance) throws IOException { // test address index search final List streetsList = new ArrayList(); - final List streetNamePacked = prepareStreetName(r.streetName); + final List streetNamePacked = prepareStreetName(road.streetName); if (streetNamePacked.size() > 0) { - log.info("Search street by name " + r.streetName + " " + streetNamePacked); + log.info("Search street by name " + road.streetName + " " + streetNamePacked); String mainWord = ""; for(int i = 0; i < streetNamePacked.size(); i++) { String s = streetNamePacked.get(i); @@ -235,11 +235,13 @@ public class GeocodingUtilities { public boolean publish(MapObject object) { if (object instanceof Street && prepareStreetName(object.getName()).equals(streetNamePacked)) { - double d = MapUtils.getDistance(object.getLocation(), r.searchPoint.getLatitude(), - r.searchPoint.getLongitude()); + double d = MapUtils.getDistance(object.getLocation(), road.searchPoint.getLatitude(), + road.searchPoint.getLongitude()); if (d < DISTANCE_STREET_NAME_PROXIMITY_BY_NAME) { - GeocodingResult rs = new GeocodingResult(r); + GeocodingResult rs = new GeocodingResult(road); rs.street = (Street) object; + // set connection point to sort + rs.connectionPoint = rs.street.getLocation(); rs.city = rs.street.getCity(); streetsList.add(rs); return true; @@ -259,55 +261,18 @@ public class GeocodingUtilities { final List res = new ArrayList(); if(streetsList.size() == 0) { - res.add(r); + res.add(road); } else { - for (GeocodingResult s : streetsList) { - final List streetBuildings = new ArrayList(); - reader.preloadBuildings(s.street, null); - log.info("Preload buildings " + s.street.getName() + " " + s.city.getName() + " " + s.street.getId()); - for (Building b : s.street.getBuildings()) { - if(b.getLatLon2() != null) { - double slat = b.getLocation().getLatitude(); - double slon = b.getLocation().getLongitude(); - double tolat = b.getLatLon2().getLatitude(); - double tolon = b.getLatLon2().getLongitude(); - double coeff = MapUtils.getProjectionCoeff(r.searchPoint.getLatitude(), r.searchPoint.getLongitude(), - slat, slon, tolat, tolon); - double plat = slat + (tolat - slat) * coeff; - double plon = slon + (tolon - slon) * coeff; - if (MapUtils.getDistance(r.searchPoint, plat, plon) < DISTANCE_BULDING_PROXIMITY) { - GeocodingResult bld = new GeocodingResult(s); - bld.building = b; - bld.connectionPoint = b.getLocation(); - streetBuildings.add(bld); - if(!Algorithms.isEmpty(b.getName2())) { - int fi = Algorithms.extractFirstIntegerNumber(b.getName()); - int si = Algorithms.extractFirstIntegerNumber(b.getName2()); - if(si != 0 && fi != 0) { - int num = (int) (fi + (si - fi) * coeff); - BuildingInterpolation type = b.getInterpolationType(); - if(type == BuildingInterpolation.EVEN || type == BuildingInterpolation.ODD) { - if(num % 2 == (type == BuildingInterpolation.EVEN ? 1 : 0)) { - num --; - } - } else if(b.getInterpolationInterval() > 0){ - int intv = b.getInterpolationInterval(); - if ((num - fi) % intv != 0) { - num = ((num - fi) / intv) * intv + fi; - } - } - bld.buildingInterpolation = num +""; - } - } - } - - } else if (MapUtils.getDistance(b.getLocation(), r.searchPoint) < DISTANCE_BULDING_PROXIMITY) { - GeocodingResult bld = new GeocodingResult(s); - bld.building = b; - bld.connectionPoint = b.getLocation(); - streetBuildings.add(bld); - } + Collections.sort(streetsList, DISTANCE_COMPARATOR); + double streetDistance = 0; + for (GeocodingResult street : streetsList) { + if(streetDistance == 0) { + streetDistance = street.getDistance(); + } else if(street.getDistance() > streetDistance + 1000) { + continue; } + street.connectionPoint = road.connectionPoint; + final List streetBuildings = loadStreetBuildings(road, reader, street); Collections.sort(streetBuildings, DISTANCE_COMPARATOR); if (streetBuildings.size() > 0) { Iterator it = streetBuildings.iterator(); @@ -325,10 +290,61 @@ public class GeocodingUtilities { res.add(nextBld); } } - res.add(s); + res.add(street); } } Collections.sort(res, DISTANCE_COMPARATOR); return res; } + + private List loadStreetBuildings(final GeocodingResult road, BinaryMapIndexReader reader, + GeocodingResult street) throws IOException { + final List streetBuildings = new ArrayList(); + reader.preloadBuildings(street.street, null); + log.info("Preload buildings " + street.street.getName() + " " + street.city.getName() + " " + street.street.getId()); + for (Building b : street.street.getBuildings()) { + if(b.getLatLon2() != null) { + double slat = b.getLocation().getLatitude(); + double slon = b.getLocation().getLongitude(); + double tolat = b.getLatLon2().getLatitude(); + double tolon = b.getLatLon2().getLongitude(); + double coeff = MapUtils.getProjectionCoeff(road.searchPoint.getLatitude(), road.searchPoint.getLongitude(), + slat, slon, tolat, tolon); + double plat = slat + (tolat - slat) * coeff; + double plon = slon + (tolon - slon) * coeff; + if (MapUtils.getDistance(road.searchPoint, plat, plon) < DISTANCE_BULDING_PROXIMITY) { + GeocodingResult bld = new GeocodingResult(street); + bld.building = b; + bld.connectionPoint = b.getLocation(); + streetBuildings.add(bld); + if(!Algorithms.isEmpty(b.getName2())) { + int fi = Algorithms.extractFirstIntegerNumber(b.getName()); + int si = Algorithms.extractFirstIntegerNumber(b.getName2()); + if(si != 0 && fi != 0) { + int num = (int) (fi + (si - fi) * coeff); + BuildingInterpolation type = b.getInterpolationType(); + if(type == BuildingInterpolation.EVEN || type == BuildingInterpolation.ODD) { + if(num % 2 == (type == BuildingInterpolation.EVEN ? 1 : 0)) { + num --; + } + } else if(b.getInterpolationInterval() > 0){ + int intv = b.getInterpolationInterval(); + if ((num - fi) % intv != 0) { + num = ((num - fi) / intv) * intv + fi; + } + } + bld.buildingInterpolation = num +""; + } + } + } + + } else if (MapUtils.getDistance(b.getLocation(), road.searchPoint) < DISTANCE_BULDING_PROXIMITY) { + GeocodingResult bld = new GeocodingResult(street); + bld.building = b; + bld.connectionPoint = b.getLocation(); + streetBuildings.add(bld); + } + } + return streetBuildings; + } } From 055012198ef14a5f2de48150595dea2f7f7a9417 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Wed, 2 Dec 2015 10:14:24 +0100 Subject: [PATCH 2/7] Update multiplier --- .../src/net/osmand/binary/GeocodingUtilities.java | 15 ++++++++++----- .../net/osmand/plus/CurrentPositionHelper.java | 10 +++++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java b/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java index f2edb35451..b2663be432 100644 --- a/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java +++ b/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java @@ -35,6 +35,13 @@ import org.apache.commons.logging.Log; public class GeocodingUtilities { private static final Log log = PlatformUtil.getLog(GeocodingUtilities.class); + + public static final float THRESHOLD_MULTIPLIER_SKIP_BUILDINGS_AFTER = 1.5f; + public static final float THRESHOLD_MULTIPLIER_SKIP_STREETS_AFTER = 4; + public static final float DISTANCE_STREET_NAME_PROXIMITY_BY_NAME = 15000; + public static final float DISTANCE_BULDING_PROXIMITY = 100; + public static final float DISTANCE_STREET_FROM_CLOSEST = 1000; + public static final String[] SUFFIXES = new String[] {"av.", "avenue", "просп.", "пер.", "пр.","заул.", "проспект", "переул.", "бул.", "бульвар", "тракт"}; public static final String[] DEFAULT_SUFFIXES = new String[] {"str.", "street", "улица", "ул."}; private static Set SET_DEF_SUFFIXES = null; @@ -56,10 +63,6 @@ public class GeocodingUtilities { return SET_SUFFIXES; } - public static final float THRESHOLD_MULTIPLIER_SKIP_BUILDINGS_AFTER = 1.5f; - public static final float THRESHOLD_MULTIPLIER_SKIP_STREETS_AFTER = 3; - public static final float DISTANCE_STREET_NAME_PROXIMITY_BY_NAME = 15000; - public static final float DISTANCE_BULDING_PROXIMITY = 100; public static final Comparator DISTANCE_COMPARATOR = new Comparator() { @Override @@ -137,6 +140,8 @@ public class GeocodingUtilities { return bld.toString(); } } + + public List reverseGeocodingSearch(RoutingContext ctx, double lat, double lon) throws IOException { RoutePlannerFrontEnd rp = new RoutePlannerFrontEnd(false); @@ -268,7 +273,7 @@ public class GeocodingUtilities { for (GeocodingResult street : streetsList) { if(streetDistance == 0) { streetDistance = street.getDistance(); - } else if(street.getDistance() > streetDistance + 1000) { + } else if(street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST) { continue; } street.connectionPoint = road.connectionPoint; diff --git a/OsmAnd/src/net/osmand/plus/CurrentPositionHelper.java b/OsmAnd/src/net/osmand/plus/CurrentPositionHelper.java index 9c86875e38..cc21ededa8 100644 --- a/OsmAnd/src/net/osmand/plus/CurrentPositionHelper.java +++ b/OsmAnd/src/net/osmand/plus/CurrentPositionHelper.java @@ -87,11 +87,15 @@ public class CurrentPositionHelper { } protected void justifyResult(List res, final ResultMatcher result) { - double minBuildingDistance = 0; List complete = new ArrayList(); + double minBuildingDistance = 0; + double minStreetDistance = 0; for (GeocodingResult r : res) { - if (minBuildingDistance > 0 - && r.getDistance() > GeocodingUtilities.THRESHOLD_MULTIPLIER_SKIP_STREETS_AFTER * minBuildingDistance) { + double streetDistance = r.getDistance(); + if(minStreetDistance == 0) { + minStreetDistance = streetDistance; + } else if(streetDistance > GeocodingUtilities.THRESHOLD_MULTIPLIER_SKIP_STREETS_AFTER * minStreetDistance || + streetDistance > minStreetDistance + GeocodingUtilities.DISTANCE_STREET_FROM_CLOSEST) { break; } Collection rar = app.getResourceManager().getAddressRepositories(); From 1006087e6856546877db12f9e4d00c907d9c1bc6 Mon Sep 17 00:00:00 2001 From: ezjerry liao Date: Wed, 2 Dec 2015 06:33:53 +0100 Subject: [PATCH 3/7] Translated using Weblate (Chinese (Taiwan)) Currently translated at 94.1% (2200 of 2337 strings) --- OsmAnd/res/values-zh-rTW/phrases.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml index d88592ab1d..3b50bd0488 100644 --- a/OsmAnd/res/values-zh-rTW/phrases.xml +++ b/OsmAnd/res/values-zh-rTW/phrases.xml @@ -2389,4 +2389,15 @@ 歷史時期:第一中間期 (西元前2181年 - 2055年) 歷史時期:第二中間期 (西元前1650年 - 1550年) "歷史時期:第三中間期 (西元前1069年 - 664年) " + 歷史時期:第一波斯時期 + 歷史時期:後期 (西元前664 - 332年) + 歷史時期:第二波斯時期 + 歷史時期:亞歷山大大帝 + 歷史時期:托勒密埃及 (西元前305年 - 西元前30年) + 歷史時期:基督教埃及 + 歷史時期:拜占庭埃及 (西元前30年 - 西元641年) + 歷史時期:波斯佔領期 + 歷史時期:希臘黑暗時代 (西元前1100年 - 800年) + 歷史時期:羅馬希臘 (西元前146年 - 西元330年) + 歷史時期:羅馬王國 (西元前753年 – 西元前509年) From 19dc9a025750095238556c1b0d5ed365438cc6a9 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Wed, 2 Dec 2015 10:22:33 +0100 Subject: [PATCH 4/7] Update --- .../net/osmand/binary/GeocodingUtilities.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java b/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java index b2663be432..8e5ee77bb9 100644 --- a/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java +++ b/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java @@ -35,12 +35,15 @@ import org.apache.commons.logging.Log; public class GeocodingUtilities { private static final Log log = PlatformUtil.getLog(GeocodingUtilities.class); - - public static final float THRESHOLD_MULTIPLIER_SKIP_BUILDINGS_AFTER = 1.5f; + public static final float THRESHOLD_MULTIPLIER_SKIP_STREETS_AFTER = 4; - public static final float DISTANCE_STREET_NAME_PROXIMITY_BY_NAME = 15000; - public static final float DISTANCE_BULDING_PROXIMITY = 100; + public static final float STOP_SEARCHING_STREET_WITH_MULTIPLIER_RADIUS = 100; + public static final float STOP_SEARCHING_STREET_WITHOUT_MULTIPLIER_RADIUS = 400; public static final float DISTANCE_STREET_FROM_CLOSEST = 1000; + public static final float DISTANCE_STREET_NAME_PROXIMITY_BY_NAME = 15000; + + public static final float THRESHOLD_MULTIPLIER_SKIP_BUILDINGS_AFTER = 1.5f; + public static final float DISTANCE_BULDING_PROXIMITY = 100; public static final String[] SUFFIXES = new String[] {"av.", "avenue", "просп.", "пер.", "пр.","заул.", "проспект", "переул.", "бул.", "бульвар", "тракт"}; public static final String[] DEFAULT_SUFFIXES = new String[] {"str.", "street", "улица", "ул."}; @@ -172,10 +175,11 @@ public class GeocodingUtilities { lst.add(sr); } } - if(p.dist > 100*100 && dist != 0 && p.dist > 4 * dist ) { + if(p.dist > STOP_SEARCHING_STREET_WITH_MULTIPLIER_RADIUS * STOP_SEARCHING_STREET_WITH_MULTIPLIER_RADIUS && + dist != 0 && p.dist > THRESHOLD_MULTIPLIER_SKIP_STREETS_AFTER * dist ) { break; } - if(p.dist > 300*300) { + if(p.dist > STOP_SEARCHING_STREET_WITHOUT_MULTIPLIER_RADIUS*STOP_SEARCHING_STREET_WITHOUT_MULTIPLIER_RADIUS) { break; } } From ee74636b35da95fa8a1353f16d25c7001164ae5d Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Wed, 2 Dec 2015 13:45:47 +0100 Subject: [PATCH 5/7] Update utilties --- .../net/osmand/binary/GeocodingUtilities.java | 5 ++-- .../osmand/plus/CurrentPositionHelper.java | 8 ----- .../audionotes/AudioVideoNotesPlugin.java | 29 ++++++++++--------- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java b/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java index 8e5ee77bb9..e0990de0e3 100644 --- a/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java +++ b/OsmAnd-java/src/net/osmand/binary/GeocodingUtilities.java @@ -39,8 +39,9 @@ public class GeocodingUtilities { public static final float THRESHOLD_MULTIPLIER_SKIP_STREETS_AFTER = 4; public static final float STOP_SEARCHING_STREET_WITH_MULTIPLIER_RADIUS = 100; public static final float STOP_SEARCHING_STREET_WITHOUT_MULTIPLIER_RADIUS = 400; - public static final float DISTANCE_STREET_FROM_CLOSEST = 1000; + public static final float DISTANCE_STREET_NAME_PROXIMITY_BY_NAME = 15000; + public static final float DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME = 1000; public static final float THRESHOLD_MULTIPLIER_SKIP_BUILDINGS_AFTER = 1.5f; public static final float DISTANCE_BULDING_PROXIMITY = 100; @@ -277,7 +278,7 @@ public class GeocodingUtilities { for (GeocodingResult street : streetsList) { if(streetDistance == 0) { streetDistance = street.getDistance(); - } else if(street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST) { + } else if(street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME) { continue; } street.connectionPoint = road.connectionPoint; diff --git a/OsmAnd/src/net/osmand/plus/CurrentPositionHelper.java b/OsmAnd/src/net/osmand/plus/CurrentPositionHelper.java index cc21ededa8..268d3e0f10 100644 --- a/OsmAnd/src/net/osmand/plus/CurrentPositionHelper.java +++ b/OsmAnd/src/net/osmand/plus/CurrentPositionHelper.java @@ -89,15 +89,7 @@ public class CurrentPositionHelper { protected void justifyResult(List res, final ResultMatcher result) { List complete = new ArrayList(); double minBuildingDistance = 0; - double minStreetDistance = 0; for (GeocodingResult r : res) { - double streetDistance = r.getDistance(); - if(minStreetDistance == 0) { - minStreetDistance = streetDistance; - } else if(streetDistance > GeocodingUtilities.THRESHOLD_MULTIPLIER_SKIP_STREETS_AFTER * minStreetDistance || - streetDistance > minStreetDistance + GeocodingUtilities.DISTANCE_STREET_FROM_CLOSEST) { - break; - } Collection rar = app.getResourceManager().getAddressRepositories(); RegionAddressRepository foundRepo = null; for(RegionAddressRepository repo : rar) { diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index b9cebf179a..688f3d9427 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -134,7 +134,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { private DataTileManager recordings = new DataTileManager(14); private Map recordingByFileName = new LinkedHashMap<>(); private AudioNotesLayer audioNotesLayer; - private MapActivity activity; + private MapActivity mapActivity; private static File mediaRecFile; private static MediaRecorder mediaRec; private File lastTakingPhoto; @@ -475,7 +475,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { @Override public void registerLayers(MapActivity activity) { - this.activity = activity; + this.mapActivity = activity; if (audioNotesLayer != null) { activity.getMapView().removeLayer(audioNotesLayer); } @@ -718,16 +718,17 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { @Override public void mapActivityResume(MapActivity activity) { - this.activity = activity; - ; + this.mapActivity = activity; ((AudioManager) activity.getSystemService(Context.AUDIO_SERVICE)).registerMediaButtonEventReceiver( new ComponentName(activity, MediaRemoteControlReceiver.class)); } - - public MapActivity getActivity() { - return activity; + + @Override + public void mapActivityPause(MapActivity activity) { + this.mapActivity = null; } + public void recordVideo(final double lat, final double lon, final MapActivity mapActivity) { if (AV_EXTERNAL_RECORDER.get()) { captureVideoExternal(lat, lon, mapActivity); @@ -1035,7 +1036,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { private void updateRecordControl(final MapActivity mapActivity, final File f) { recordControl.setText(app.getString(R.string.shared_string_control_stop), ""); - recordControl.setImageDrawable(activity.getResources().getDrawable(R.drawable.widget_icon_av_active)); + recordControl.setImageDrawable(mapActivity.getResources().getDrawable(R.drawable.widget_icon_av_active)); final MapInfoLayer mil = mapActivity.getMapLayers().getMapInfoLayer(); final boolean contains = recordControl.isVisible(); if (!contains) { @@ -1060,8 +1061,8 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { } private void updateContextMenu(Recording rec) { - if (activity != null) { - MapContextMenu menu = activity.getContextMenu(); + if (mapActivity != null) { + MapContextMenu menu = mapActivity.getContextMenu(); if (menu.isVisible()) { if (rec != null) { menu.show(new LatLon(rec.lat, rec.lon), audioNotesLayer.getObjectName(rec), rec); @@ -1196,9 +1197,9 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { newMap.remove(r.file.getName()); recordingByFileName = newMap; Algorithms.removeAllFiles(r.file); - if (activity != null) { - activity.getContextMenu().close(); - activity.getMapView().refreshMap(); + if (mapActivity != null) { + mapActivity.getContextMenu().close(); + mapActivity.getMapView().refreshMap(); } } @@ -1217,7 +1218,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { public boolean onMapActivityKeyEvent(KeyEvent key) { if (KeyEvent.KEYCODE_CAMERA == key.getKeyCode()) { - defaultAction(activity); + defaultAction(mapActivity); return true; } return false; From 19d5054fdf0f8583db88f6ad4fa0b7f83886ec7f Mon Sep 17 00:00:00 2001 From: josep constanti Date: Wed, 2 Dec 2015 13:14:12 +0100 Subject: [PATCH 6/7] Translated using Weblate (Catalan) Currently translated at 80.0% (1871 of 2337 strings) --- OsmAnd/res/values-ca/phrases.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/OsmAnd/res/values-ca/phrases.xml b/OsmAnd/res/values-ca/phrases.xml index 4380e5aa03..d4ed3c10f4 100644 --- a/OsmAnd/res/values-ca/phrases.xml +++ b/OsmAnd/res/values-ca/phrases.xml @@ -2037,4 +2037,16 @@ Vigilància: sí Amb botiga + Amb ascensor + Sense ascensor + + Monument tècnic + + Oficina del càmping + Aeròdrom de modelisme + Oficina dels guies + Despatx de consultors + Oficina de la cooperativa + Rectoria + Equipament social: taller From 854a66b52455f8c6b2bf0ca741a0189d89f22d35 Mon Sep 17 00:00:00 2001 From: Adriano Rosa Date: Wed, 2 Dec 2015 13:45:09 +0100 Subject: [PATCH 7/7] Translated using Weblate (Portuguese (Brazil)) Currently translated at 80.1% (1873 of 2337 strings) --- OsmAnd/res/values-pt-rBR/phrases.xml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-pt-rBR/phrases.xml b/OsmAnd/res/values-pt-rBR/phrases.xml index c57f649dda..7eaecc705c 100644 --- a/OsmAnd/res/values-pt-rBR/phrases.xml +++ b/OsmAnd/res/values-pt-rBR/phrases.xml @@ -392,7 +392,7 @@ Paço Municipal Agência de empregos Pesquisa - TI + Escritório de TI Jornal Arquiteto Agência de publicidade @@ -2033,4 +2033,14 @@ Área de escape Cultivo: arroz + Veículo leve sobre trilhos + Tipo: guincho de veículos + Balneário + Organização Governamental quase Autônoma + Escritório de silvicultura + Escritório de logística + Secretaria paroquial + Combustível 91UL + Combustível 100LL + Autogás (GPL)