Merge branch 'master' into markers_export_fixes

This commit is contained in:
Vitaliy 2020-11-20 14:08:50 +02:00
commit a098ce87ff
48 changed files with 1028 additions and 259 deletions

View file

@ -12,7 +12,7 @@ Existing issues often contain information about workarounds, resolution, or prog
GitHub is our main development tool for our developers. There are hundreds of requests a month and there are relatively few developers.
So by opening an issue, please know that your issue will be sent out to all developers and acknowledge that it could be closed without explanation or with just a brief message.
Comments on the closed issues are also sent to all developers, so you will definitely will be heard.
Comments on the closed issues are also sent to all developers, so you definitely will be heard.
However, there is no guarantee that a developer will pick up the issue to work on it.
Please be sure to read our [FAQ](https://osmand.net/help-online) before creating an issue here.

View file

@ -11,8 +11,6 @@ import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.osmand.Collator;
import net.osmand.CollatorStringMatcher;
@ -576,13 +574,12 @@ public class BinaryMapPoiReaderAdapter {
}
}
if (!matches) {
Map<String, String> lt = am.getAdditionalInfo();
for (Entry<String, String> e : lt.entrySet()) {
if(!e.getKey().contains("_name") &&
!e.getKey().equals("brand")) {
for (String key : am.getAdditionalInfoKeys()) {
if(!key.contains("_name") &&
!key.equals("brand")) {
continue;
}
matches = matcher.matches(e.getValue());
matches = matcher.matches(am.getAdditionalInfo(key));
if (matches) {
break;
}
@ -812,7 +809,6 @@ public class BinaryMapPoiReaderAdapter {
}
private boolean checkCategories(SearchRequest<Amenity> req, PoiRegion region) throws IOException {
StringBuilder subType = new StringBuilder();
while (true) {
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);

View file

@ -1,17 +1,7 @@
package net.osmand.data;
import net.osmand.Location;
import net.osmand.osm.MapPoiTypes;
import net.osmand.osm.PoiCategory;
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.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
@ -21,9 +11,14 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
import java.util.zip.GZIPInputStream;
import org.json.JSONObject;
import gnu.trove.list.array.TIntArrayList;
import net.osmand.Location;
import net.osmand.osm.MapPoiTypes;
import net.osmand.osm.PoiCategory;
import net.osmand.util.Algorithms;
public class Amenity extends MapObject {
@ -96,12 +91,46 @@ public class Amenity extends MapObject {
}
public Map<String, String> getAdditionalInfo() {
// this method should be used carefully
public Map<String, String> getInternalAdditionalInfoMap() {
if (additionalInfo == null) {
return Collections.emptyMap();
}
return additionalInfo;
}
public Collection<String> getAdditionalInfoValues(boolean excludeZipped) {
if (additionalInfo == null) {
return Collections.emptyList();
}
boolean zipped = false;
for(String v : additionalInfo.values()) {
if(isContentZipped(v)) {
zipped = true;
break;
}
}
if(zipped) {
List<String> r = new ArrayList<>(additionalInfo.size());
for(String str : additionalInfo.values()) {
if(excludeZipped && isContentZipped(str)) {
} else {
r.add(unzipContent(str));
}
}
return r;
} else {
return additionalInfo.values();
}
}
public Collection<String> getAdditionalInfoKeys() {
if (additionalInfo == null) {
return Collections.emptyList();
}
return additionalInfo.keySet();
}
public void setAdditionalInfo(Map<String, String> additionalInfo) {
this.additionalInfo = null;
@ -182,7 +211,7 @@ public class Amenity extends MapObject {
}
int maxLen = 0;
String lng = defLang;
for (String nm : getAdditionalInfo().keySet()) {
for (String nm : getAdditionalInfoKeys()) {
if (nm.startsWith(tag + ":")) {
String key = nm.substring(tag.length() + 1);
String cnt = getAdditionalInfo(tag + ":" + key);
@ -204,7 +233,7 @@ public class Amenity extends MapObject {
public List<String> getNames(String tag, String defTag) {
List<String> l = new ArrayList<String>();
for (String nm : getAdditionalInfo().keySet()) {
for (String nm : getAdditionalInfoKeys()) {
if (nm.startsWith(tag + ":")) {
l.add(nm.substring(tag.length() + 1));
} else if (nm.equals(tag)) {
@ -229,7 +258,7 @@ public class Amenity extends MapObject {
if (!Algorithms.isEmpty(enName)) {
return enName;
}
for (String nm : getAdditionalInfo().keySet()) {
for (String nm : getAdditionalInfoKeys()) {
if (nm.startsWith(tag + ":")) {
return getAdditionalInfo(nm);
}
@ -345,4 +374,6 @@ public class Amenity extends MapObject {
}
return a;
}
}

View file

@ -13,7 +13,6 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@ -351,8 +350,8 @@ public abstract class MapObject implements Comparable<MapObject> {
return json;
}
public String unzipContent(String str) {
if (str != null && str.startsWith(" gz ")) {
String unzipContent(String str) {
if (isContentZipped(str)) {
try {
int ind = 4;
byte[] bytes = new byte[str.length() - ind];
@ -369,6 +368,10 @@ public abstract class MapObject implements Comparable<MapObject> {
}
br.close();
str = bld.toString();
// ugly fix of temporary problem of map generation
if(isContentZipped(str)) {
str = unzipContent(str);
}
} catch (IOException e) {
e.printStackTrace();
}
@ -376,6 +379,10 @@ public abstract class MapObject implements Comparable<MapObject> {
return str;
}
boolean isContentZipped(String str) {
return str != null && str.startsWith(" gz ");
}
protected static void parseJSON(JSONObject json, MapObject o) {
if (json.has("name")) {
o.name = json.getString("name");

View file

@ -741,7 +741,7 @@ public class SearchUICore {
}
}
if (Algorithms.isEmpty(object.alternateName) && object.object instanceof Amenity) {
for (String value : ((Amenity) object.object).getAdditionalInfo().values()) {
for (String value : ((Amenity) object.object).getAdditionalInfoValues(true)) {
if (phrase.getFirstUnknownNameStringMatcher().matches(value)) {
object.alternateName = value;
break;

View file

@ -602,7 +602,7 @@ public class SearchCoreFactory {
sr.localeName = object.getName(phrase.getSettings().getLang(),
phrase.getSettings().isTransliterate());
if (!nm.matches(sr.localeName) && !nm.matches(sr.otherNames)
&& !nm.matches(object.getAdditionalInfo().values())) {
&& !nm.matches(object.getAdditionalInfoValues(false))) {
return false;
}
sr.object = object;
@ -1059,7 +1059,7 @@ public class SearchCoreFactory {
if (!poiAdditionals.isEmpty()) {
boolean found = false;
for (String add : poiAdditionals) {
if(object.getAdditionalInfo().containsKey(add)) {
if (object.getAdditionalInfoKeys().contains(add)) {
found = true;
break;
}

View file

@ -250,7 +250,7 @@
<string name="set_time_timeline_descr">Elige la hora de visualización</string>
<string name="start_end_date">Fecha de Inicio — Fin</string>
<string name="saved_messages">Mensajes guardados</string>
<string name="time_zone_descr">Seleccione la zona horaria que desea mostrar en los mensajes de ubicación.</string>
<string name="time_zone_descr">Seleccione la zona horaria a mostrar en sus mensajes de ubicación.</string>
<string name="time_zone">Zona horaria</string>
<string name="units_and_formats">Unidades y formatos</string>
<string name="unit_of_length_descr">Cambia las unidades de longitud.</string>

View file

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M22,12C22,17.5228 17.5228,22 12,22C6.4771,22 2,17.5228 2,12C2,6.4771 6.4771,2 12,2C17.5228,2 22,6.4771 22,12Z"
android:fillColor="#000000"
android:fillAlpha="0.1"
android:fillType="evenOdd"/>
<path
android:pathData="M21,12C21,16.9706 16.9706,21 12,21C7.0294,21 3,16.9706 3,12C3,7.0294 7.0294,3 12,3C16.9706,3 21,7.0294 21,12Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M12,17C14.7614,17 17,14.7614 17,12C17,9.2386 14.7614,7 12,7C9.2386,7 7,9.2386 7,12C7,14.7614 9.2386,17 12,17ZM12,19C15.866,19 19,15.866 19,12C19,8.134 15.866,5 12,5C8.134,5 5,8.134 5,12C5,15.866 8.134,19 12,19Z"
android:fillColor="#237BFF"
android:fillType="evenOdd"/>
</vector>

View file

@ -1,15 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:background="@color/color_white"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"
android:clickable="true"
<RelativeLayout 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:layout_height="match_parent"
android:background="?attr/bg_color"
android:clickable="true"
android:focusable="true"
android:orientation="vertical">
<LinearLayout
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_height="@dimen/toolbar_height"
android:layout_marginTop="@dimen/dialog_content_margin">
<androidx.appcompat.widget.AppCompatImageView
@ -19,77 +21,85 @@
android:layout_height="match_parent"
android:layout_gravity="start"
android:contentDescription="@string/shared_string_back"
app:tint="@color/icon_color_default_light"
app:srcCompat="@drawable/ic_arrow_back"/>
app:srcCompat="@drawable/ic_arrow_back"
app:tint="@color/icon_color_default_light" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/opr_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/shared_string_back"
app:srcCompat="@drawable/ic_img_logo_openplacereview"/>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar"
android:layout_above="@id/buttons">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding"
android:textColor="@color/color_black"
android:textSize="20sp"
android:lineSpacingExtra="5sp"
android:textAlignment="center"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginTop="@dimen/content_padding"
android:layout_marginBottom="@dimen/dashPadding"
android:text="@string/register_on_openplacereviews"
android:gravity="center_horizontal"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/opr_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/shared_string_back"
app:srcCompat="@drawable/ic_img_logo_openplacereview" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/start_opr_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dashPadding"
android:layout_marginLeft="@dimen/content_padding"
android:lineSpacingExtra="5sp"
android:textColor="@color/color_black"
android:textColorLink="@color/icon_color_active_light"
android:layout_marginRight="@dimen/content_padding"
android:text="@string/register_on_openplacereviews_desc"/>
<net.osmand.plus.widgets.TextViewEx
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginTop="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginBottom="@dimen/dashPadding"
android:gravity="center_horizontal"
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier"
android:text="@string/register_on_openplacereviews"
android:textAlignment="center"
android:textColor="?android:textColorPrimary"
android:textSize="20sp"
app:typeface="@string/font_roboto_medium" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/start_opr_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginTop="@dimen/dashPadding"
android:layout_marginRight="@dimen/content_padding"
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier"
app:typeface="@string/font_roboto_regular"
android:text="@string/register_on_openplacereviews_desc"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_list_text_size"
android:textColorLink="@color/icon_color_active_light" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout
android:gravity="bottom"
android:orientation="vertical"
android:layout_marginBottom="@dimen/content_padding_small"
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginTop="@dimen/content_padding_small"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginBottom="@dimen/content_padding_small"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatButton
<include
android:id="@+id/register_opr_create_account"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginBottom="@dimen/dashPadding"
android:text="@string/register_opr_create_new_account"
android:textColor="@color/color_white"
android:layout_marginTop="@dimen/content_padding_small"
android:background="@color/icon_color_active_light"
layout="@layout/bottom_sheet_dialog_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:layout_height="@dimen/dialog_button_height"
android:layout_marginBottom="@dimen/content_padding_small" />
<androidx.appcompat.widget.AppCompatButton
<include
android:id="@+id/register_opr_have_account"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginTop="@dimen/dashPadding"
android:layout_gravity="bottom"
android:text="@string/register_opr_have_account"
android:textColor="@color/icon_color_active_light"
android:background="@color/activity_background_color_light"
layout="@layout/bottom_sheet_dialog_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:layout_height="@dimen/dialog_button_height" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:osmand="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/add_photos_icon"
android:layout_width="@dimen/favorites_icon_outline_size"
android:layout_height="@dimen/favorites_icon_outline_size"
android:layout_marginTop="@dimen/bottom_sheet_icon_margin"
android:layout_gravity="center"
osmand:srcCompat="@drawable/ic_action_photo_upload_colored" />
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/add_photos_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/content_padding_small"
android:layout_marginBottom="@dimen/content_padding_small"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/dialog_header_text_size"
osmand:typeface="@string/font_roboto_medium"
android:text="@string/shared_string_add_photos" />
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/add_photos_descr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginBottom="@dimen/text_margin_small"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_list_text_size"
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier"
osmand:typeface="@string/font_roboto_regular"
android:text="@string/add_photos_descr" />
</LinearLayout>

View file

@ -471,7 +471,7 @@
<string name="index_name_africa">إفريقيا</string>
<string name="index_name_asia">آسيا</string>
<string name="index_name_oceania">أستراليا و أوقيانوسيا</string>
<string name="routing_settings">الملاحة</string>
<string name="routing_settings">التوجيه مع الطرق</string>
<string name="routing_settings_descr">ضبط خاص لكل وضع من أوضاع الملاحة.</string>
<string name="index_settings">إدارة بيانات الخرائط</string>
<string name="general_settings">إعدادات عامة</string>
@ -1153,7 +1153,7 @@
<string name="action_delete">حذف إجراء</string>
<string name="osm_edits">التعديلات</string>
<string name="parking_place_limited">وقت وقوف السيارات يقتصر على</string>
<string name="shared_string_collapse">أقل</string>
<string name="shared_string_collapse">تدلي</string>
<string name="drawer">قائمة منبسطة</string>
<string name="osm_settings">تعديل OSM</string>
<string name="free">فارغ %1$s</string>
@ -3329,7 +3329,7 @@
<string name="routing_attr_piste_type_skitour_name">جولة تزلج</string>
<string name="routing_attr_piste_type_skitour_description">طرق لجولات التزلج.</string>
<string name="routing_attr_piste_type_sled_name">تزلج</string>
<string name="routing_attr_piste_type_sled_description">منحدرات للاستخدام الزلاجات.</string>
<string name="routing_attr_piste_type_sled_description">منحدرات لاستخدام الزلاجات.</string>
<string name="routing_attr_allow_intermediate_name">السماح بالمسارات المتوسطة</string>
<string name="routing_attr_allow_intermediate_description">طرق أكثر صعوبة مع أقسام أكثر حدة. بعض العقبات التي ينبغي تجنبها.</string>
<string name="routing_attr_allow_advanced_name">السماح للطرق المتقدمة</string>
@ -3909,10 +3909,10 @@
<string name="complex_routing_descr">التوجيه على مرحلتين لملاحة السيارة.</string>
<string name="use_native_pt">تطوير النقل العام المحلي</string>
<string name="use_native_pt_desc">قم بالتبديل إلى Java (الآمن) حساب توجيه النقل العام</string>
<string name="perform_oauth_authorization_description">قم بتسجيل الدخول إلى OAuth لاستخدام ميزات osmedit</string>
<string name="perform_oauth_authorization_description">سجّل الدخول باستخدام OAuth لاستخدام ميزات osmedit</string>
<string name="perform_oauth_authorization">تسجيل الدخول عبر OAuth</string>
<string name="clear_osm_token">مسح رمز OpenStreetMap OAuth</string>
<string name="osm_edit_logout_success">تسجيل الخروج بنجاح</string>
<string name="osm_edit_logout_success">تم تسجيل الخروج</string>
<string name="file_already_imported">تم استيراد الملف بالفعل في أوسماند</string>
<string name="use_two_phase_routing">استخدام خوارزمية توجيه من مرحلتين A*</string>
<string name="message_need_calculate_route_before_show_graph">%1$s البيانات المتوفرة فقط على الطرق ، تحتاج إلى حساب طريق باستخدام \"الطريق بين النقاط\" للحصول عليها.</string>
@ -3940,32 +3940,44 @@
<string name="subscription_expired_title">انتهت صلاحية اشتراك OsmAnd Live</string>
<string name="subscription_paused_title">تم إيقاف اشتراك OsmAnd Live مؤقتًا</string>
<string name="subscription_on_hold_title">اشتراك OsmAnd Live معلق</string>
<string name="login_open_street_map">تسجيل الدخول إلى خريطة الشارع المفتوح</string>
<string name="login_open_street_map">تسجيل الدخول ل OpenStreetMap</string>
<string name="login_open_street_map_org">تسجيل الدخول إلى OpenStreetMap.org</string>
<string name="open_street_map_login_mode">تحتاج إلى تسجيل الدخول لرفع التغييرات الجديدة أو المعدلة.
<string name="open_street_map_login_mode">قم بتسجيل الدخول لرفع التغييرات الجديدة أو المعدلة.
\n
\nيمكنك تسجيل الدخول باستخدام طريقة التفويض الآمنة أو استخدام تسجيل الدخول وكلمة المرور.</string>
<string name="use_login_password">استخدام تسجيل الدخول وكلمة المرور</string>
\nإما باستخدام OAuth أو باستخدام اسم المستخدم وكلمة المرور.</string>
<string name="use_login_password">سجل الدخول باسم المستخدم وكلمة المرور</string>
<string name="login_account">الحساب</string>
<string name="user_login">تسجيل الدخول</string>
<string name="user_login">اسم المستخدم</string>
<string name="gpx_upload_trackable_visibility_descr">\"إمكانية التتبع\" تعني أن التتبع لا يظهر في أي قوائم عامة ولكن نقاط التتبع المعالجة مع طوابع زمنية صادرة عنها(التي لا يمكن أن تكون مرتبطة بك مباشرة) ستظهر خلال التنزيلات من واجهة برمجة التطبيقات GPS API العامة.</string>
<string name="markers_history">سجل تاريخ العلامات</string>
<string name="send_files_to_openstreetmap">أرسل ملف GPX إلى OpenStreetMap</string>
<string name="enter_text_separated">أدخل العلامات مفصولة بفاصلة.</string>
<string name="gpx_upload_private_visibility_descr">\"خاص\"يعني أن التتبع لن يظهر في أي قوائم عامة ، ولكن نقاط التتبع الصادرة عنه ستظل متاحة من خلال واجهة برمجة تطبيقات GPS API العامة بدون طوابع زمنية ولكن لن يتم ترتيبها ترتيبًا زمنيًا.</string>
<string name="sign_in_with_open_street_map">قم بتسجيل الدخول باستخدام OpenStreetMap</string>
<string name="sign_in_with_open_street_map">سجّل الدخول باستخدام OpenStreetMap</string>
<string name="gpx_upload_public_visibility_descr">عام يعني أنه سيتم عرض التتبع بشكل عام في تتبعات GPS الخاصة بك وفي قوائم تتبع GPS العامة. البيانات المقدمة عبر API لا تشير إلى صفحة التتبع الخاصة بك. الطوابع الزمنية لنقاط التتبع غير متاحة من خلال واجهة برمجة تطبيقات GPS API العامة، والنقاط غير مرتبة ترتيبًا زمنيًا. ومع ذلك، لا يزال المستخدمون الآخرون قادرين على تنزيل التتبع الأولي من قائمة التتبع العامة وأي طوابع زمنية مضمنة فيه.</string>
<string name="gpx_upload_identifiable_visibility_descr">متعرف عليه يعني أنه سيتم عرض التتبع بشكل عام في تتبعات GPS الخاصة بك وفي قوائم تتبع GPS العامة، أي سيتمكن المستخدمون الآخرون من تنزيل التتبع الأولي وربطه باسم المستخدم الخاص بك. ستشير البيانات التي يتم تقديمها عبر API نقاط التتبع إلى صفحة التتبع الأصلية الخاصة بك. الطوابع الزمنية لنقاط التتبع متاحة من خلال واجهة برمجة تطبيقات GPS API العامة.</string>
<string name="osm_edit_close_note">أغلاق ملاحظة OSM</string>
<string name="osm_edit_comment_note">تعليق ملاحظة OSM</string>
<string name="osm_login_descr">يمكنك تسجيل الدخول باستخدام طريقة OAuth الآمنة أو استخدام تسجيل الدخول وكلمة المرور الخاصة بك.</string>
<string name="osm_login_descr">قم بتسجيل الدخول باستخدام طريقة OAuth الآمنة أو استخدم اسم المستخدم وكلمة المرور.</string>
<string name="shared_string_add_photo">إضافة صورة</string>
<string name="register_on_openplacereviews">سجل في
\nOpenPlaceReviews.org</string>
<string name="register_on_openplacereviews_desc">يتم توفير الصور من خلال مشروع البيانات المفتوحة OpenPlaceReviews.org. من أجل رفع الصور الخاصة بك، تحتاج إلى الاشتراك بالموقع.</string>
<string name="register_on_openplacereviews_desc">قم بتسجيل الدخول إلى موقع مشروع البيانات المفتوحة OpenPlaceReviews.org لرفع المزيد من الصور.</string>
<string name="register_opr_create_new_account">إنشاء حساب جديد</string>
<string name="register_opr_have_account">لدي حساب بالفعل</string>
<string name="app_mode_kayak">كاياك (قوارب صغيرة فردية)</string>
<string name="app_mode_motorboat">زورق</string>
<string name="shared_string_search_history">سجل البحث</string>
<string name="export_not_enough_space_descr">جهازك يحتوي على %1$s فقط متاحة . الرجاء إخلاء بعض المساحة أو إلغاء تحديد بعض العناصر للتصدير.</string>
<string name="shared_string_resources">المصادر</string>
<string name="approximate_file_size">حجم الملف التقريبي</string>
<string name="select_data_to_export">حدد البيانات التي سيتم تصديرها إلى الملف.</string>
<string name="file_size_needed_for_import">مطلوب للاستيراد</string>
<string name="export_not_enough_space">لا يوجد مساحة كافية</string>
<string name="add_to_mapillary">أضف إلى مابيلاي</string>
<string name="add_to_opr">إضافة إلى OpenPlaceReviews</string>
<string name="add_photos_descr">ويعرض صورًا من عدة مصادر:
\nOpenPlaceReviews - صور POI ؛
\nMapillary - صور على مستوى الشارع ؛
\nالويب / ويكيميديا - صور POI المحددة في بيانات OpenStreetMap.</string>
</resources>

View file

@ -3808,7 +3808,7 @@
<string name="poi_booth">Stand type</string>
<string name="poi_video_yes">Ja</string>
<string name="poi_video_no">Nej</string>
<string name="poi_internet_access_fee_customers">Signal for at finde stangen</string>
<string name="poi_internet_access_fee_customers">Internetadgang: kunder</string>
<string name="poi_traffic_signals_sound_locate">Kun når det er tilladt at gå</string>
<string name="poi_tactile_paving_contrasted">Kontrast</string>
<string name="poi_tactile_paving_primitive">Primitiv</string>
@ -3852,4 +3852,32 @@
<string name="poi_recycling_small_electrical_appliances">Små elektriske apparater</string>
<string name="poi_departures_board">Afgangstavle</string>
<string name="poi_drinking_water_refill">Genopfyldning af drikkevand</string>
<string name="poi_diplomatic_services_citizen_services_no">Nej</string>
<string name="poi_diplomatic_services_citizen_services_yes">Ja</string>
<string name="poi_diplomatic_services_immigrant_visas_no">Nej</string>
<string name="poi_diplomatic_services_immigrant_visas_yes">Ja</string>
<string name="poi_diplomatic_services_non_immigrant_visas_no">Nej</string>
<string name="poi_diplomatic_services_non_immigrant_visas_yes">Ja</string>
<string name="poi_liaison_representative_office">Repræsentantkontor</string>
<string name="poi_liaison_liaison_office">Kontor</string>
<string name="poi_consulate_honorary_consul">Honorærkonsul</string>
<string name="poi_consulate_consulate_general">Generalkonsulat</string>
<string name="poi_consulate_consular_agency">Konsulært agentur</string>
<string name="poi_consulate_yes">Ledet af en konsul</string>
<string name="poi_embassy_residence">Bopæl</string>
<string name="poi_embassy_high_commission">Højkommissær</string>
<string name="poi_embassy_delegation">Delegation</string>
<string name="poi_embassy_branch_embassy">Afdeling</string>
<string name="poi_embassy_yes">Ledet af en ambassadør</string>
<string name="poi_diplomatic_liaison">Forbindelsesofficerer</string>
<string name="poi_diplomatic_embassy">Ambassade</string>
<string name="poi_radar_tower">Radartårn</string>
<string name="poi_parking_rooftop">Tagterrasse</string>
<string name="poi_gpx_point">GPX-punkt</string>
<string name="poi_diplomatic_services_citizen_services_filter">Borgerservice</string>
<string name="poi_diplomatic_services_immigrant_visas_filter">Immigrant visum</string>
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Ikke-immigrant visum</string>
<string name="poi_liaison_filter">Forbindelsesofficerer</string>
<string name="poi_consulate_filter">Konsulat</string>
<string name="poi_embassy_filter">Ambassade</string>
</resources>

View file

@ -3488,7 +3488,7 @@
<string name="shared_string_angle_param">Vinkel: %s°</string>
<string name="shared_string_angle">Vinkel</string>
<string name="shared_string_preparing">Forbereder</string>
<string name="shared_string_poi_types">IP typer</string>
<string name="shared_string_poi_types">IP-typer</string>
<string name="shared_string_nothing_selected">Intet valgt</string>
<string name="shared_string_quick_actions">Genveje</string>
<string name="shared_string_profiles">Profiler</string>
@ -3549,9 +3549,9 @@
<string name="import_profile_dialog_description">Den importerede profil indeholder yderligere data. Klik på Importer for kun at importere profildata, eller vælg yderligere data, der skal importeres.</string>
<string name="route_recalculation_dist_descr">Ruten vil blive genberegnet, hvis afstanden til ruten er længere end angivet parameter</string>
<string name="route_recalculation_dist_title">Mindste afstand for at genberegne ruten</string>
<string name="import_duplicates_description">OsmAnd har allerede elementer med de samme navne, som dem, der importeres.
\n
\nVælg en aktion.</string>
<string name="import_duplicates_description">OsmAnd har allerede elementer med de samme navne som de importerede.
\n
\nVælg en handling.</string>
<string name="listed_exist">Det angivne %1$s findes allerede.</string>
<string name="recalc_angle_dialog_title">Mindste vinkel mellem placering og rute</string>
<string name="recalc_angle_dialog_descr">Ekstra lige segment mellem placering og den beregnede rute vises, indtil ruten genberegnes</string>
@ -3790,4 +3790,6 @@
<string name="start_finish_icons">Start-/slutikoner</string>
<string name="ltr_or_rtl_combine_via_dash">%1$s — %2$s</string>
<string name="app_mode_gap">Hul</string>
<string name="export_not_enough_space">Der er ikke plads nok</string>
<string name="routing_attr_length_name">Længdegrænse</string>
</resources>

View file

@ -3857,4 +3857,34 @@
<string name="poi_parking_rooftop">Azotea</string>
<string name="poi_gpx_point">Punto GPX</string>
<string name="poi_radar_tower">Torre de radar</string>
<string name="poi_diplomatic_services_citizen_services_no">No</string>
<string name="poi_diplomatic_services_citizen_services_yes"></string>
<string name="poi_diplomatic_services_immigrant_visas_no">No</string>
<string name="poi_diplomatic_services_immigrant_visas_yes"></string>
<string name="poi_diplomatic_services_non_immigrant_visas_no">No</string>
<string name="poi_diplomatic_services_non_immigrant_visas_yes"></string>
<string name="poi_liaison_subnational">Subnacional</string>
<string name="poi_liaison_representative_office">Oficina representativa</string>
<string name="poi_liaison_liaison_office">Oficina</string>
<string name="poi_consulate_honorary_consul">Cónsul honorario</string>
<string name="poi_consulate_consulate_general">Consulado general</string>
<string name="poi_consulate_consular_office">Oficina consular</string>
<string name="poi_consulate_consular_agency">Agencia consular</string>
<string name="poi_consulate_yes">Dirigido por un cónsul</string>
<string name="poi_embassy_residence">Residencia</string>
<string name="poi_embassy_nunciature">Nunciatura</string>
<string name="poi_embassy_mission">Misión</string>
<string name="poi_embassy_interests_section">Sección de intereses</string>
<string name="poi_embassy_high_commission">Alto comisionado</string>
<string name="poi_embassy_delegation">Delegación</string>
<string name="poi_embassy_branch_embassy">Sucursal;Ramal</string>
<string name="poi_embassy_yes">Dirigido por un embajador</string>
<string name="poi_diplomatic_liaison">Enlace</string>
<string name="poi_diplomatic_embassy">Embajada</string>
<string name="poi_diplomatic_services_citizen_services_filter">Servicios al ciudadano</string>
<string name="poi_diplomatic_services_immigrant_visas_filter">Visas de inmigrante</string>
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Visas de no inmigrante</string>
<string name="poi_liaison_filter">Enlace</string>
<string name="poi_consulate_filter">Consulado</string>
<string name="poi_embassy_filter">Embajada</string>
</resources>

View file

@ -3927,7 +3927,7 @@
<string name="use_native_pt">Desarrollo nativo del transporte público</string>
<string name="use_native_pt_desc">Cambiar al cálculo de ruta Java (seguro) del transporte público</string>
<string name="what_is_new">Novedades</string>
<string name="perform_oauth_authorization_description">Inicia sesión con OAuth para usar las funciones de edición de OSM</string>
<string name="perform_oauth_authorization_description">Ingresar con OAuth para usar las funciones de edición de OSM</string>
<string name="perform_oauth_authorization">Ingresar a través de OAuth</string>
<string name="clear_osm_token">Vaciar llave OAuth de OpenStreetMap</string>
<string name="osm_edit_logout_success">Sesión finalizada</string>
@ -3958,13 +3958,13 @@
<string name="subscription_paused_title">La suscripción a OsmAnd Live se ha pausado</string>
<string name="subscription_on_hold_title">La suscripción a OsmAnd Live está en espera</string>
<string name="login_open_street_map">Iniciar sesión en OpenStreetMap</string>
<string name="login_open_street_map_org">Ingresar a OpenStreetMap.org</string>
<string name="open_street_map_login_mode">Debes iniciar sesión para subir cambios nuevos o modificados.
<string name="login_open_street_map_org">Ingresar en OpenStreetMap.org</string>
<string name="open_street_map_login_mode">Inicia sesión para subir los cambios nuevos o modificados,
\n
\nPuedes ingresar usando el método seguro de OAuth o usar el nombre de usuario y contraseña.</string>
<string name="use_login_password">Usar nombre de usuario y contraseña</string>
\nya sea con OAuth o usando el nombre de usuario y contraseña.</string>
<string name="use_login_password">Ingresar nombre de usuario y contraseña</string>
<string name="login_account">Cuenta</string>
<string name="user_login">Iniciar sesión</string>
<string name="user_login">Nombre de usuario</string>
<string name="sign_in_with_open_street_map">Ingresar con OpenStreetMap</string>
<string name="markers_history">Historial de marcadores</string>
<string name="send_files_to_openstreetmap">Enviar archivo GPX a OpenStreetMap</string>
@ -3975,14 +3975,26 @@
<string name="gpx_upload_identifiable_visibility_descr">«Identificable» significa que la traza se mostrará públicamente en tu listado de trazas y en el listado de trazas GPS públicas, es decir que otros usuarios podrán descargar la traza en bruto y asociarla con su nombre de usuario. Los datos servidos a través de la API de conjunto de puntos hará referencia a la página original de la traza.</string>
<string name="osm_edit_close_note">Cerrar nota de OSM</string>
<string name="osm_edit_comment_note">Comentar nota de OSM</string>
<string name="osm_login_descr">Puedes iniciar sesión con el método seguro de OAuth o usar el nombre de usuario y contraseña.</string>
<string name="osm_login_descr">Ingresa usando el método seguro de OAuth o usa el nombre de usuario y contraseña.</string>
<string name="shared_string_add_photo">Añadir foto</string>
<string name="register_on_openplacereviews">Registrarse en
\nOpenPlaceReviews.org</string>
<string name="register_on_openplacereviews_desc">Las fotos son provistas por el proyecto de datos abiertos OpenPlaceReviews.org. Para subir fotos debes registrarte en el sitio web.</string>
<string name="register_on_openplacereviews_desc">Ingresa en el sitio web del proyecto de datos abiertos OpenPlaceReviews.org para subir más fotos.</string>
<string name="register_opr_create_new_account">Crear nueva cuenta</string>
<string name="register_opr_have_account">Ya tengo cuenta</string>
<string name="shared_string_search_history">Historial de búsqueda</string>
<string name="app_mode_kayak">Kayak</string>
<string name="app_mode_motorboat">Lancha a motor</string>
<string name="shared_string_resources">Recursos</string>
<string name="approximate_file_size">Tamaño aproximado del archivo</string>
<string name="select_data_to_export">Marca los datos que serán exportados al archivo.</string>
<string name="file_size_needed_for_import">Necesario para importar</string>
<string name="export_not_enough_space_descr">El dispositivo sólo tiene %1$s libre. Por favor, libera algo de espacio o desmarca algunos elementos a exportar.</string>
<string name="export_not_enough_space">Sin espacio suficiente</string>
<string name="add_to_mapillary">Añadir a Mapillary</string>
<string name="add_to_opr">Añadir a OpenPlaceReviews</string>
<string name="add_photos_descr">OsmAnd muestra fotos de varios repositorios:
\nOpenPlaceReviews (fotos de PDI);
\nMapillary (imágenes a nivel de calle);
\nWeb / Wikimedia (fotos de PDI incluidas en los datos de OpenStreetMap).</string>
</resources>

View file

@ -3857,4 +3857,34 @@
<string name="poi_parking_rooftop">Azotea</string>
<string name="poi_parking_layby">Apartadero</string>
<string name="poi_gpx_point">Punto GPX</string>
<string name="poi_liaison_subnational">Subnacional</string>
<string name="poi_liaison_representative_office">Oficina representativa</string>
<string name="poi_liaison_liaison_office">Oficina</string>
<string name="poi_liaison_filter">Enlace</string>
<string name="poi_embassy_yes">Dirigido por un embajador</string>
<string name="poi_embassy_residence">Residencia</string>
<string name="poi_embassy_nunciature">Nunciatura</string>
<string name="poi_embassy_mission">Misión</string>
<string name="poi_embassy_interests_section">Sección de intereses</string>
<string name="poi_embassy_high_commission">Alto comisionado</string>
<string name="poi_embassy_filter">Embajada</string>
<string name="poi_embassy_delegation">Delegación</string>
<string name="poi_embassy_branch_embassy">Sucursal;Ramal</string>
<string name="poi_diplomatic_services_non_immigrant_visas_yes"></string>
<string name="poi_diplomatic_services_non_immigrant_visas_no">No</string>
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Visas de no inmigrante</string>
<string name="poi_diplomatic_services_immigrant_visas_yes"></string>
<string name="poi_diplomatic_services_immigrant_visas_no">No</string>
<string name="poi_diplomatic_services_immigrant_visas_filter">Visas de inmigrante</string>
<string name="poi_diplomatic_services_citizen_services_yes"></string>
<string name="poi_diplomatic_services_citizen_services_no">No</string>
<string name="poi_diplomatic_services_citizen_services_filter">Servicios al ciudadano</string>
<string name="poi_diplomatic_liaison">Enlace</string>
<string name="poi_diplomatic_embassy">Embajada</string>
<string name="poi_consulate_yes">Dirigido por un cónsul</string>
<string name="poi_consulate_honorary_consul">Cónsul honorario</string>
<string name="poi_consulate_filter">Consulado</string>
<string name="poi_consulate_consulate_general">Consulado general</string>
<string name="poi_consulate_consular_office">Oficina consular</string>
<string name="poi_consulate_consular_agency">Agencia consular</string>
</resources>

View file

@ -1921,7 +1921,7 @@
<string name="full_report">Informe completo</string>
<string name="open_street_map_login_and_pass">Nombre de usuario y contraseña de OSM</string>
<string name="report">Informe</string>
<string name="file_name_containes_illegal_char">El nombre del archivo contiene caracteres ilegales</string>
<string name="file_name_containes_illegal_char">Carácter ilegal en el nombre del archivo</string>
<string name="no_map_markers_found">Añade marcadores a través del mapa</string>
<string name="no_waypoints_found">No se encontraron puntos de referencia</string>
<string name="rendering_value_thin_name">Fino</string>
@ -2462,7 +2462,7 @@
<string name="measurement_tool_action_bar">Navega por el mapa y añade puntos</string>
<string name="measurement_tool">Medir distancia</string>
<string name="none_point_error">Añadir al menos un punto.</string>
<string name="enter_gpx_name">Nombre del GPX:</string>
<string name="enter_gpx_name">Nombre del archivo GPX:</string>
<string name="show_on_map_after_saving">Mostrar en el mapa al guardar</string>
<string name="add_waypoint">Añadir punto de referencia</string>
<string name="save_gpx_waypoint">Guardar punto GPX</string>
@ -3085,9 +3085,9 @@
<string name="zoom_by_wunderlinq_descr">Cambia el zoom del mapa desplazando la rueda hacia arriba y abajo. La tecla «Escape» retrocede a la aplicación WunderLINQ.</string>
<string name="zoom_by_wunderlinq">Controlar con WunderLINQ</string>
<string name="quick_action_need_to_add_item_to_list">Añadir al menos un elemento a la lista en los ajustes de «Acción rápida»</string>
<string name="routing_attr_piste_type_downhill_name">Esquí alpino o de descenso</string>
<string name="routing_attr_piste_type_downhill_name">Esquí alpino y de descenso</string>
<string name="routing_attr_piste_type_downhill_description">Pistas de esquí alpino o de descenso y acceso a remontes mecánicos.</string>
<string name="routing_attr_piste_type_nordic_name">Esquí de travesía o nórdico</string>
<string name="routing_attr_piste_type_nordic_name">Esquí de travesía y nórdico</string>
<string name="routing_attr_piste_type_nordic_description">Senderos para esquí nórdico o de travesía.</string>
<string name="routing_attr_piste_type_skitour_name">Esquí de travesía</string>
<string name="routing_attr_piste_type_skitour_description">Rutas para esquí de travesía.</string>
@ -3368,7 +3368,7 @@
<string name="default_speed_dialog_msg">Estima el tiempo de llegada para los tipos de caminos desconocidos, y limita la velocidad para todos los caminos (puede afectar a la ruta)</string>
<string name="file_imported_successfully">«%1$s» importado(s).</string>
<string name="track_saved">Traza guardada</string>
<string name="empty_filename">Nombre del archivo vacío</string>
<string name="empty_filename">Nombre de archivo vacío</string>
<string name="shared_string_revert">Revertir</string>
<string name="quick_action_directions_from_desc">Un botón para hacer que la pantalla se centre en el punto de partida. Luego define el destino o activa el cálculo de la ruta.</string>
<string name="rendering_attr_showCycleNodeNetworkRoutes_name">Mostrar nodo de la red de rutas ciclistas</string>
@ -3835,7 +3835,7 @@
<string name="select_another_track">Elegir otra traza</string>
<string name="save_track_to_gpx_globally">Guardar traza en archivo GPX</string>
<string name="save_track_to_gpx">Grabar la traza automáticamente al navegar</string>
<string name="save_global_track_interval_descr">Intervalo de registro para la grabación general de trazas (activar mediante el widget de grabación de viaje sobre el mapa).</string>
<string name="save_global_track_interval_descr">Intervalo de registro para la grabación general de trazas (activado desde el widget «Grabación de viaje» en el mapa).</string>
<string name="save_as_new_track">Guardar como nueva traza</string>
<string name="route_between_points_whole_track_button_desc">Recalcular toda la traza usando el perfil elegido.</string>
<string name="route_between_points_warning_desc">A continuación, ajusta la traza al camino permitido más cercano con un perfil de navegación.</string>
@ -3890,7 +3890,7 @@
<string name="shared_string_redo">Rehacer</string>
<string name="release_3_8">• Se ha actualizado la función «Planificar ruta»: permite utilizar diferentes tipos de navegación por segmento y la inclusión de trazas
\n
\n • Nuevo menú con el aspecto de las trazas: elegir el color, el grosor, mostrar las flechas de dirección y los iconos de inicio/fin.
\n • Nuevo menú con el aspecto de las trazas: elegir el color, el grosor, mostrar las flechas de dirección y los iconos de inicio y fin.
\n
\n • Mejoras en la visibilidad de los nodos de bicicleta.
\n
@ -3906,7 +3906,7 @@
<string name="sort_name_descending">Nombre: Z A</string>
<string name="sort_name_ascending">Nombre: A Z</string>
<string name="sort_last_modified">Último modificado</string>
<string name="start_finish_icons">Iconos de inicio/fin</string>
<string name="start_finish_icons">Iconos de inicio y fin</string>
<string name="contour_lines_thanks">Gracias por comprar las «Curvas de nivel»</string>
<string name="osm_live_payment_desc_hw">La suscripción se cobra por el período elegido. Puedes cancelarlo en cualquier momento en AppGallery.</string>
<string name="osm_live_payment_subscription_management_hw">El pago será cargado a la cuenta de AppGallery al confirmar la compra.
@ -3922,7 +3922,7 @@
<string name="use_live_routing">Datos de «OsmAnd Live»</string>
<string name="use_live_public_transport">Datos de «OsmAnd Live»</string>
<string name="use_complex_routing">Navegación compleja</string>
<string name="perform_oauth_authorization_description">Inicia sesión con OAuth para usar las funciones de edición de OSM</string>
<string name="perform_oauth_authorization_description">Ingresar con OAuth para usar las funciones de edición de OSM</string>
<string name="perform_oauth_authorization">Ingresar a través de OAuth</string>
<string name="osm_edit_logout_success">Sesión finalizada</string>
<string name="development">Desarrollo</string>
@ -3948,35 +3948,50 @@
<string name="icon_group_emergency">Emergencia</string>
<string name="icon_group_amenity">Comodidad</string>
<string name="file_already_imported">El archivo ya fue importado en OsmAnd</string>
<string name="user_login">Iniciar sesión</string>
<string name="use_login_password">Usar nombre de usuario y contraseña</string>
<string name="user_login">Nombre de usuario</string>
<string name="use_login_password">Ingresar nombre de usuario y contraseña</string>
<string name="subscription_payment_issue_title">Hay un problema con la suscripción. Pulsa el botón para ir a los ajustes de la suscripción de Google Play y corregir el método de pago.</string>
<string name="subscription_paused_title">La suscripción a OsmAnd Live se ha pausado</string>
<string name="subscription_on_hold_title">La suscripción a OsmAnd Live está en espera</string>
<string name="subscription_expired_title">La suscripción a OsmAnd Live ha caducado</string>
<string name="sign_in_with_open_street_map">Ingresar con OpenStreetMap</string>
<string name="send_files_to_openstreetmap">Enviar archivo GPX a OpenStreetMap</string>
<string name="open_street_map_login_mode">Debes iniciar sesión para subir cambios nuevos o modificados.
<string name="open_street_map_login_mode">Inicia sesión para subir los cambios nuevos o modificados,
\n
\nPuedes ingresar usando el método seguro de OAuth o usar el nombre de usuario y contraseña.</string>
\nya sea con OAuth o usando el nombre de usuario y contraseña.</string>
<string name="message_you_need_add_two_points_to_show_graphs">Debes añadir al menos dos puntos</string>
<string name="markers_history">Historial de marcadores</string>
<string name="manage_subscription">Gestionar suscripción</string>
<string name="login_open_street_map_org">Ingresar a OpenStreetMap.org</string>
<string name="login_open_street_map_org">Ingresar en OpenStreetMap.org</string>
<string name="login_open_street_map">Iniciar sesión en OpenStreetMap</string>
<string name="login_account">Cuenta</string>
<string name="gpx_upload_trackable_visibility_descr">Trazable significa que la traza no aparecerá en ninguna lista pública pero el conjunto de puntos estarán disponibles a través de la API pública de GPS y con marcas de tiempo. Otros usuarios sólo podrán descargar el conjunto de puntos procesados de su traza que no se pueden asociar directamente con usted.</string>
<string name="gpx_upload_public_visibility_descr">Público significa que la traza se mostrará públicamente en tu listado de trazas y en los listados de trazas GPS públicas. Los datos servidos a través de la API no harán referencia a su página de trazas. Las marcas de tiempo de los puntos de la traza no estarán disponible a través de la API pública de GPS, aunque los puntos se ordenan cronológicamente. Sin embargo, otros usuarios podrán descargar la traza en bruto de la lista de trazas públicas y las marcas de tiempo que contiene.</string>
<string name="gpx_upload_private_visibility_descr">Privado significa que la traza no aparecerá en ninguna lista pública, pero el conjunto de puntos seguirá estando disponible en orden cronológico a través de la API pública de GPS y sin marcas de tiempo.</string>
<string name="gpx_upload_identifiable_visibility_descr">Identificable significa que la traza se mostrará públicamente en tu listado de trazas y en el listado de trazas GPS públicas, es decir que otros usuarios podrán descargar la traza en bruto y asociarla con su nombre de usuario. Los datos servidos a través de la API de conjunto de puntos hará referencia a la página original de la traza. Las marcas de tiempo de los puntos de la traza estarán disponibles a través de la API pública de GPS.</string>
<string name="gpx_upload_trackable_visibility_descr">«Trazable» significa que la traza no aparece en ninguna lista pública, pero el conjunto de puntos procesados con marcas de tiempo (no se pueden asociar directamente con usted) estarán disponibles a través de la API pública de GPS.</string>
<string name="gpx_upload_public_visibility_descr">«Público» significa que la traza se mostrará públicamente en tu listado de trazas y en los listados de trazas GPS públicas con marcas de tiempo en bruto. Los datos servidos a través de la API no harán referencia a su página de trazas. Las marcas de tiempo de los puntos de la traza no estarán disponible a través de la API pública de GPS, aunque los puntos se ordenan cronológicamente.</string>
<string name="gpx_upload_private_visibility_descr">«Privado» significa que la traza no aparecerá en ninguna lista pública, pero el conjunto de puntos seguirá estando disponible en orden cronológico a través de la API pública de GPS y sin marcas de tiempo.</string>
<string name="gpx_upload_identifiable_visibility_descr">«Identificable» significa que la traza se mostrará públicamente en tu listado de trazas y en el listado de trazas GPS públicas, es decir que otros usuarios podrán descargar la traza en bruto y asociarla con su nombre de usuario. Los datos servidos a través de la API de conjunto de puntos hará referencia a la página original de la traza.</string>
<string name="enter_text_separated">Ingresa etiquetas separadas por comas.</string>
<string name="shared_string_add_photo">Añadir foto</string>
<string name="register_opr_have_account">Ya tengo cuenta</string>
<string name="register_opr_create_new_account">Crear nueva cuenta</string>
<string name="register_on_openplacereviews_desc">Las fotos son provistas por el proyecto de datos abiertos OpenPlaceReviews.org. Para subir fotos debes registrarte en el sitio web.</string>
<string name="register_on_openplacereviews_desc">Ingresa en el sitio web del proyecto de datos abiertos OpenPlaceReviews.org para subir más fotos.</string>
<string name="register_on_openplacereviews">Registrarse en
\nOpenPlaceReviews.org</string>
<string name="osm_login_descr">Puedes iniciar sesión con el método seguro de OAuth o usar el nombre de usuario y contraseña.</string>
<string name="osm_login_descr">Ingresa usando el método seguro de OAuth o usa el nombre de usuario y contraseña.</string>
<string name="osm_edit_comment_note">Comentar nota de OSM</string>
<string name="osm_edit_close_note">Cerrar nota de OSM</string>
<string name="shared_string_search_history">Historial de búsqueda</string>
<string name="shared_string_resources">Recursos</string>
<string name="select_data_to_export">Marca los datos que serán exportados al archivo.</string>
<string name="file_size_needed_for_import">Necesario para importar</string>
<string name="export_not_enough_space_descr">El dispositivo sólo tiene %1$s libre. Por favor, libera algo de espacio o desmarca algunos elementos a exportar.</string>
<string name="export_not_enough_space">Sin espacio suficiente</string>
<string name="approximate_file_size">Tamaño aproximado del archivo</string>
<string name="app_mode_motorboat">Lancha a motor</string>
<string name="app_mode_kayak">Kayak</string>
<string name="add_to_opr">Añadir a OpenPlaceReviews</string>
<string name="add_to_mapillary">Añadir a Mapillary</string>
<string name="add_photos_descr">OsmAnd muestra fotos de varios repositorios:
\nOpenPlaceReviews (fotos de PDI);
\nMapillary (imágenes a nivel de calle);
\nWeb / Wikimedia (fotos de PDI incluidas en los datos de OpenStreetMap).</string>
</resources>

View file

@ -3897,4 +3897,48 @@
<string name="sort_last_modified">Último modificado</string>
<string name="sort_name_descending">Nombre: Z A</string>
<string name="sort_name_ascending">Nombre: A - Z</string>
<string name="navigate_point_mgrs">MGRS</string>
<string name="what_is_new">Novedades</string>
<string name="navigate_point_format_mgrs">MGRS</string>
<string name="mgrs_format_descr">OsmAnd usa MGRS, que es similar al formato UTM NATO.</string>
<string name="start_finish_icons">Iconos de inicio y fin</string>
<string name="development">Desarollo</string>
<string name="file_already_imported">El fichero ya está importado en OsmAnd</string>
<string name="shared_string_local_maps">Mapas locales</string>
<string name="ltr_or_rtl_combine_via_dash">%1$s — %2$s</string>
<string name="icon_group_amenity">Servicio</string>
<string name="icon_group_special">Especial</string>
<string name="icon_group_transport">Transporte</string>
<string name="icon_group_service">Servicio</string>
<string name="icon_group_symbols">Símbolos</string>
<string name="icon_group_sport">Deporte</string>
<string name="icon_group_emergency">Emergencia</string>
<string name="icon_group_travel">Viajar</string>
<string name="message_you_need_add_two_points_to_show_graphs">Necesita añadir al menos dos puntos</string>
<string name="login_account">Cuenta</string>
<string name="user_login">Nombre de usuario</string>
<string name="manage_subscription">Gestionar suscripción</string>
<string name="send_files_to_openstreetmap">Enviar fichero GPX a OpenStreetMap</string>
<string name="enter_text_separated">Introduzca las etiquetas separadas por una coma.</string>
<string name="osm_edit_close_note">Cerrar Nota de OSM</string>
<string name="osm_edit_comment_note">Comentar Nota de OSM</string>
<string name="shared_string_add_photo">Añadir foto</string>
<string name="register_on_openplacereviews">Registrar en
\nOpenPlaceReviews.org</string>
<string name="register_opr_create_new_account">Crear cuenta nueva</string>
<string name="register_opr_have_account">Ya tengo una cuenta</string>
<string name="shared_string_search_history">Historial de búsqueda</string>
<string name="app_mode_kayak">Kayak</string>
<string name="app_mode_motorboat">Lancha a motor</string>
<string name="add_to_mapillary">Añadir a Mapillary</string>
<string name="add_to_opr">Añadir a OpenPlaceReviews</string>
<string name="add_photos_descr">OsmAnd muestra fotos de diferentes fuentes:
\nOpenPlaceReviews - fotos POI;
\nMapillary - imágenes a nivel de calle;
\nWeb / Wikimedia - fotos POI especificadas en los datos de OpenStreetMap.</string>
<string name="shared_string_resources">Recursos</string>
<string name="approximate_file_size">Tamaño de fichero aproximado</string>
<string name="select_data_to_export">Seleccione los datos para exportar al fichero.</string>
<string name="file_size_needed_for_import">Necesario para importar</string>
<string name="export_not_enough_space">No hay espacio suficiente</string>
</resources>

View file

@ -3832,4 +3832,9 @@
<string name="poi_parking_sheds">Parkimine varjualustes</string>
<string name="poi_parking_rooftop">Parkla katusel</string>
<string name="poi_radar_tower">Radarimast</string>
<string name="poi_embassy_residence">Residents</string>
<string name="poi_embassy_nunciature">Nuntsiatuur</string>
<string name="poi_diplomatic_embassy">Saatkond</string>
<string name="poi_consulate_filter">Konsulaat</string>
<string name="poi_embassy_filter">Saatkond</string>
</resources>

View file

@ -3799,4 +3799,17 @@ Area honi dagokio: %1$s x %2$s</string>
<string name="navigation_profile">Nabigazio profila</string>
<string name="route_between_points_add_track_desc">Hautatu zein arrasto fitxategiari gehituko zaion segmentu berria.</string>
<string name="set_working_days_to_continue">Ezarri behar dituzu lanegunak jarraitzeko</string>
<string name="shared_string_add_photo">Gehitu argazkia</string>
<string name="register_opr_create_new_account">Sortu kontu berria</string>
<string name="register_opr_have_account">Kontu bat daukat dagoeneko</string>
<string name="shared_string_search_history">Bilaketa-historia</string>
<string name="app_mode_kayak">Kayak</string>
<string name="app_mode_motorboat">Motor itsasontzia</string>
<string name="add_to_mapillary">Gehitu Mapillary-ra</string>
<string name="shared_string_resources">Baliabideak</string>
<string name="approximate_file_size">Fitxategiaren tamaina gutxi gorabehera</string>
<string name="select_data_to_export">Hautatu fitxategira esportatuko diren datuak.</string>
<string name="file_size_needed_for_import">Inportatzeko beharrezkoa da</string>
<string name="export_not_enough_space_descr">Zure gailuak %1$s soilik ditu libre. Mesedez, askatu espazioa edo desautatu esportatzeko elementu batzuk.</string>
<string name="export_not_enough_space">Ez dago espazio nahikorik</string>
</resources>

View file

@ -3899,7 +3899,7 @@
<string name="use_native_pt">Développement du transport public autochtone</string>
<string name="perform_oauth_authorization">Connectez-vous avec OAuth</string>
<string name="clear_osm_token">Supprimer le jeton OAuth d\'OpenStreetMap</string>
<string name="osm_edit_logout_success">Déconnexion réussie</string>
<string name="osm_edit_logout_success">Déconnecté</string>
<string name="file_already_imported">Le fichier est déjà importé dans OsmAnd</string>
<string name="use_two_phase_routing">Utiliser un algorithme de routage A* à 2 phases</string>
<string name="osm_live_payment_subscription_management_hw">Le paiement sera débité de votre compte AppGallery dès confirmation de l\'achat.
@ -3930,10 +3930,10 @@
<string name="subscription_on_hold_title">L\'abonnement OsmAnd Live est en attente</string>
<string name="subscription_expired_title">Labonnement OsmAnd Live a expiré</string>
<string name="subscription_paused_title">L\'abonnement OsmAnd Live a été suspendu</string>
<string name="login_open_street_map">Se connecter à OpenStreetMap</string>
<string name="login_open_street_map_org">Se connecter à OpenStreetMap.org</string>
<string name="login_open_street_map">Se connecter pour OpenStreetMap</string>
<string name="login_open_street_map_org">Se connecter pour OpenStreetMap.org</string>
<string name="user_login">Identifiant</string>
<string name="use_login_password">Utiliser un identifiant et un mot de passe</string>
<string name="use_login_password">Se connecter avec un identifiant et un mot de passe</string>
<string name="login_account">Compte</string>
<string name="manage_subscription">Gérer l\'abonnement</string>
<string name="sign_in_with_open_street_map">Se connecter avec OpenStreetMap</string>
@ -3948,11 +3948,20 @@
\nOpenPlaceReviews.org</string>
<string name="register_opr_create_new_account">Créer un nouveau compte</string>
<string name="register_opr_have_account">J\'ai déjà un compte</string>
<string name="open_street_map_login_mode">Vous devez vous connecter pour envoyer vos modifications.
<string name="open_street_map_login_mode">Connectez-vous pour envoyer vos modifications,
\n
\nVous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe.</string>
\nsoit avec OAuth soit avec votre identifiant et mot de passe.</string>
<string name="osm_login_descr">Vous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe.</string>
<string name="register_on_openplacereviews_desc">Les photos sont fournies par le projet open data OpenPlaceReviews.org. Pour envoyer vos photos, vous devez au préalable être inscrit sur ce site Web.</string>
<string name="shared_string_search_history">Historique de recherche</string>
<string name="app_mode_kayak">Kayak</string>
<string name="export_not_enough_space_descr">Votre appareil n\'a que %1$s disponible. Veuillez libérer de l\'espace ou désélectionner l\'export pour certains éléments.</string>
<string name="app_mode_motorboat">Bateau à moteur</string>
<string name="shared_string_resources">Ressources</string>
<string name="approximate_file_size">Taille approximative du fichier</string>
<string name="select_data_to_export">Sélectionnez les données à exporter dans le fichier.</string>
<string name="file_size_needed_for_import">Nécessaire pour l\'import</string>
<string name="export_not_enough_space">L\'espace disponible est insuffisant</string>
<string name="add_to_mapillary">Ajouter à Mapillary</string>
<string name="add_to_opr">Ajouter à OpenPlaceReviews</string>
</resources>

View file

@ -3843,4 +3843,34 @@
<string name="poi_parking_rooftop">Terrazo</string>
<string name="poi_gpx_point">Punto GPX</string>
<string name="poi_radar_tower">Torre de radar</string>
<string name="poi_diplomatic_services_citizen_services_no">Non</string>
<string name="poi_diplomatic_services_citizen_services_yes">Si</string>
<string name="poi_diplomatic_services_immigrant_visas_no">Non</string>
<string name="poi_diplomatic_services_immigrant_visas_yes">Si</string>
<string name="poi_diplomatic_services_non_immigrant_visas_no">Non</string>
<string name="poi_diplomatic_services_non_immigrant_visas_yes">Si</string>
<string name="poi_liaison_subnational">Subnacional</string>
<string name="poi_liaison_representative_office">Oficina representativa</string>
<string name="poi_liaison_liaison_office">Oficina</string>
<string name="poi_consulate_honorary_consul">Cónsul honorario</string>
<string name="poi_consulate_consulate_general">Consulado xeral</string>
<string name="poi_consulate_consular_office">Oficina consular</string>
<string name="poi_consulate_consular_agency">Axencia consular</string>
<string name="poi_consulate_yes">Dirixido por un cónsul</string>
<string name="poi_embassy_residence">Residencia</string>
<string name="poi_embassy_nunciature">Nunciatura</string>
<string name="poi_embassy_mission">Misión</string>
<string name="poi_embassy_interests_section">Sección de intereses</string>
<string name="poi_embassy_high_commission">Alto comisionado</string>
<string name="poi_embassy_delegation">Delegación</string>
<string name="poi_embassy_branch_embassy">Sucursal</string>
<string name="poi_embassy_yes">Dirixido por un embaixador</string>
<string name="poi_diplomatic_liaison">Ligazón</string>
<string name="poi_diplomatic_embassy">Embaixada</string>
<string name="poi_diplomatic_services_citizen_services_filter">Servizos ó cidadán</string>
<string name="poi_diplomatic_services_immigrant_visas_filter">Visados de inmigrante</string>
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Visados de non inmigrante</string>
<string name="poi_liaison_filter">Ligazón</string>
<string name="poi_consulate_filter">Consulado</string>
<string name="poi_embassy_filter">Embaixada</string>
</resources>

View file

@ -3946,7 +3946,7 @@ Lon %2$s</string>
<string name="use_native_pt">Desenvolvemento do transporte público nativo</string>
<string name="use_native_pt_desc">Activar cálculo de enrutamento de transporte público do Java (seguro)</string>
<string name="what_is_new">Novidades</string>
<string name="perform_oauth_authorization_description">Inicia sesión co OAuth para empregar as funcións de edición do OSM</string>
<string name="perform_oauth_authorization_description">Inicia a sesión co OAuth para empregar as funcións de edición do OSM</string>
<string name="perform_oauth_authorization">Entrar polo OAuth</string>
<string name="clear_osm_token">Limpar token do OpenStreetMap OAuth</string>
<string name="osm_edit_logout_success">Sesión rematada</string>
@ -3978,15 +3978,15 @@ Lon %2$s</string>
<string name="subscription_paused_title">A subscrición do OsmAnd Live foi detida</string>
<string name="subscription_on_hold_title">A subscrición do OsmAnd Live está en espera</string>
<string name="gpx_upload_public_visibility_descr">\"Público\" significa que a pista amosarase de xeito público na túa listaxe de pistas e nas listaxes de pistas GPS públicas con marcas de tempo en bruto. Os datos servidos a través da API no farán referencia á túa pácina de pistas. As marcaxes de tempo dos puntos da pista non estarán dispoñíbeis a través da API pública de GPS, aínda que os puntos son ordenados de xeito cronolóxico.</string>
<string name="login_open_street_map">Iniciar sesión no OpenStreetMap</string>
<string name="login_open_street_map_org">Entrar ó OpenStreetMap.org</string>
<string name="sign_in_with_open_street_map">Entrar co OpenStreetMap</string>
<string name="open_street_map_login_mode">Precisas iniciar sesión para subir modificacións novas.
<string name="login_open_street_map">Iniciar a sesión no OpenStreetMap</string>
<string name="login_open_street_map_org">Iniciar a sesión no OpenStreetMap.org</string>
<string name="sign_in_with_open_street_map">Iniciar a sesión co OpenStreetMap</string>
<string name="open_street_map_login_mode">Inicia a sesión para subir as modificacións novas,
\n
\nPodes iniciar sesión empregando o método seguro de OAuth ou empregar o nome de usuario e contrasinal.</string>
<string name="use_login_password">Empregar nome de usuario e contrasinal</string>
\nxa sexa co OAuth ou empregando o teu nome de usuario e contrasinal.</string>
<string name="use_login_password">Iniciar a sesión co nome de usuario e contrasinal</string>
<string name="login_account">Conta</string>
<string name="user_login">Iniciar sesión</string>
<string name="user_login">Nome de usuario</string>
<string name="markers_history">Historial de marcaxes</string>
<string name="send_files_to_openstreetmap">Enviar ficheiro GPX ó OpenStreetMap</string>
<string name="enter_text_separated">Insire etiquetas separadas por comas.</string>
@ -3995,14 +3995,20 @@ Lon %2$s</string>
<string name="gpx_upload_identifiable_visibility_descr">\"Identificábel\" significa que a pista amosarase de xeito público na túa listaxe de pistas e na listaxe de pistas GPS públicas, é dicir que outros usuarios poderán baixar a pista en bruto e asociala co seu nome de usuario. Os datos servidos a través da API de conxunto de puntos fará referencia á páxina orixinal da pista.</string>
<string name="osm_edit_close_note">Pechar nota do OSM</string>
<string name="osm_edit_comment_note">Comentar nota do OSM</string>
<string name="osm_login_descr">Podes iniciar a sesión co método seguro do OAuth ou empregar o nome de usuario e contrasinal.</string>
<string name="osm_login_descr">Inicia a sesión co método seguro do OAuth ou emprega o nome de usuario e contrasinal.</string>
<string name="shared_string_add_photo">Engadir imaxe</string>
<string name="register_on_openplacereviews">Rexistrarse no
\nOpenPlaceReviews.org</string>
<string name="register_on_openplacereviews_desc">As imaxes son fornecidas polo proxecto de datos abertos OpenPlaceReviews.org. Para subir imaxes tes que rexistrarte no sitio web.</string>
<string name="register_on_openplacereviews_desc">Inicia a sesión no sitio web do proxecto de datos abertos do OpenPlaceReviews.org para subir máis imaxes.</string>
<string name="register_opr_create_new_account">Crear nova conta</string>
<string name="register_opr_have_account">Xa teño unha conta</string>
<string name="shared_string_search_history">Historial de procura</string>
<string name="app_mode_kayak">Caiac</string>
<string name="app_mode_motorboat">Lancha a motor</string>
<string name="shared_string_resources">Recursos</string>
<string name="approximate_file_size">Tamaño aproximado do ficheiro</string>
<string name="select_data_to_export">Marca os datos que serán exportados ó ficheiro.</string>
<string name="file_size_needed_for_import">Necesario para importar</string>
<string name="export_not_enough_space_descr">O teu dispositivo só ten %1$s libre. Por favor, libera algo de espazo ou desmarca algúns elementos a exportar.</string>
<string name="export_not_enough_space">Sen espazo dabondo</string>
</resources>

View file

@ -3842,4 +3842,5 @@
<string name="poi_internet_access_fee_customers">Internetcsatlakozás: ügyfeleknek</string>
<string name="poi_radar_tower">Radartorony</string>
<string name="poi_gpx_point">GPX-pont</string>
<string name="poi_diplomatic_services_citizen_services_filter">Állampolgári szolgáltatások</string>
</resources>

View file

@ -3989,4 +3989,10 @@
<string name="file_size_needed_for_import">נדרש לייבוא</string>
<string name="export_not_enough_space_descr">במכשיר שלך יש רק %1$s פנויים. נא לפנות מקום או לבטל כמה מהפריטים לייצוא.</string>
<string name="export_not_enough_space">אין מספיק מקום</string>
<string name="add_to_mapillary">הוספה ל־Mapillary</string>
<string name="add_to_opr">הוספה ל־OpenPlaceReviews</string>
<string name="add_photos_descr">OsmAnd מציג תמונות ממגוון מקורות:
\nOpenPlaceReviews - תמונות של נקודות עניין;
\nMapillary - תמונות ברמת הרחוב;
\nאינטרנט / ויקימדיה - תמונות נקודות עניין שמצוינות בנתונים של OpenStreetMap.</string>
</resources>

View file

@ -1922,7 +1922,7 @@
<string name="osm_live_header">Subskrypcja umożliwia cogodzinne aktualizacje wszystkich map na całym świecie.
\n Część dochodów wraca do społeczności OSM i jest wypłacana za każdy wkład OSM.
\n Jeśli kochasz OsmAnd i OSM i chcesz je wspierać i wspierać, jest to idealny sposób, aby to zrobić.</string>
<string name="file_name_containes_illegal_char">Nazwa pliku zawiera niedozwolony znak</string>
<string name="file_name_containes_illegal_char">Niedozwolony znak w nazwie pliku</string>
<string name="access_default_color">Domyślny kolor</string>
<string name="access_category_choice">Wybierz kategorię</string>
<string name="access_hint_enter_category">Proszę wprowadzić kategorię</string>
@ -2526,7 +2526,7 @@
<string name="last_intermediate_dest_description">Dodaje cel pośredni</string>
<string name="first_intermediate_dest_description">Dodaje pierwszy cel pośredni</string>
<string name="show_closed_notes">Wyświetl zamknięte uwagi</string>
<string name="switch_osm_notes_visibility_desc">Pokaż/ukryj uwagi OSM na mapie.</string>
<string name="switch_osm_notes_visibility_desc">Pokaż lub ukryj uwagi OSM na mapie.</string>
<string name="gpx_file_desc">GPX - odpowiedni do eksportowania danych do JOSM i innych edytorów OSM.</string>
<string name="osc_file_desc">OSC - odpowiedni do eksportowania danych do OSM.</string>
<string name="shared_string_gpx_file">Plik GPX</string>
@ -3087,7 +3087,7 @@
<string name="zoom_by_wunderlinq">Użyj WunderLINQ do kontroli</string>
<string name="quick_action_need_to_add_item_to_list">Dodaj co najmniej jeden element do listy w ustawieniach \"Szybkiej Akcji\"</string>
<string name="routing_attr_piste_type_downhill_description">Stoki narciarskie do narciarstwa alpejskiego i zjazdowego oraz dostęp do wyciągów narciarskich.</string>
<string name="routing_attr_piste_type_nordic_name">Narty biegowe/nordic ski</string>
<string name="routing_attr_piste_type_nordic_name">Biegi narciarskie i narciarstwo klasyczne</string>
<string name="routing_attr_piste_type_nordic_description">Trasy do narciarstwa klasycznego lub biegowego.</string>
<string name="routing_attr_piste_type_skitour_name">Turystyka narciarska</string>
<string name="routing_attr_piste_type_skitour_description">Trasy wycieczek narciarskich.</string>
@ -3570,7 +3570,7 @@
<string name="quick_action_terrain_descr">Przycisk do wyświetlania lub ukrywania warstwy terenu na mapie.</string>
<string name="quick_action_terrain_show">Pokaż teren</string>
<string name="quick_action_terrain_hide">Ukryj teren</string>
<string name="quick_action_show_hide_terrain">Pokaż / ukryj teren</string>
<string name="quick_action_show_hide_terrain">Pokaż lub ukryj teren</string>
<string name="download_slope_maps">Nachylenie</string>
<string name="terrain_empty_state_text">Włącz, aby wyświetlić cieniowanie wzniesień lub stoków. Możesz przeczytać więcej o tego rodzaju mapach na naszej stronie.</string>
<string name="shared_string_legend">Legenda</string>
@ -3700,9 +3700,9 @@
<string name="back_to_editing">Powrót do edycji</string>
<string name="quick_action_transport_hide">Ukryj transport publiczny</string>
<string name="quick_action_transport_show">Pokaż transport publiczny</string>
<string name="quick_action_show_hide_transport">Pokaż/ukryj transport publiczny</string>
<string name="create_edit_poi">Utwórz / Edytuj użyteczne miejsce</string>
<string name="add_edit_favorite">Dodaj / Edytuj Ulubione</string>
<string name="quick_action_show_hide_transport">Pokaż lub ukryj transport publiczny</string>
<string name="create_edit_poi">Utwórz lub edytuj użyteczne miejsce</string>
<string name="add_edit_favorite">Dodaj lub edytuj ulubione miejsce</string>
<string name="quick_action_switch_profile_descr">Przycisk akcji przełącza między wybranymi profilami.</string>
<string name="shared_string_add_profile">Dodaj profil</string>
<string name="change_application_profile">Zmiana profilu aplikacji</string>
@ -3910,7 +3910,7 @@
<string name="sort_name_descending">Nazwa: Z A</string>
<string name="sort_name_ascending">Nazwa: A Z</string>
<string name="what_is_new">Co nowego</string>
<string name="start_finish_icons">Ikony start/koniec</string>
<string name="start_finish_icons">Ikony startu i końca</string>
<string name="contour_lines_thanks">Dziękujemy za zakup \"Linii konturowych\"</string>
<string name="osm_live_payment_desc_hw">Subskrypcja naliczona za wybrany okres. Anuluj ją w AppGallery w dowolnym momencie.</string>
<string name="osm_live_payment_subscription_management_hw">Płatność zostanie pobrana z konta AppGallery po potwierdzeniu zakupu.
@ -3958,14 +3958,14 @@
<string name="message_you_need_add_two_points_to_show_graphs">Musisz dodać co najmniej dwa punkty</string>
<string name="subscription_payment_issue_title">Wystąpił problem z Twoją subskrypcją. Kliknij przycisk, aby przejść do ustawień subskrypcji Google Play i naprawić metodę płatności.</string>
<string name="subscription_on_hold_title">Subskrypcja OsmAnd Live jest wstrzymana</string>
<string name="user_login">Login</string>
<string name="user_login">Nazwa użytkownika</string>
<string name="login_open_street_map">Zaloguj się do OpenStreetMap</string>
<string name="login_open_street_map_org">Zaloguj się do OpenStreetMap.org</string>
<string name="sign_in_with_open_street_map">Zaloguj się za pomocą OpenStreetMap</string>
<string name="open_street_map_login_mode">Musisz się zalogować, aby przesłać nowe lub zmodyfikowane zmiany.
\n
\nMożesz zalogować się za pomocą bezpiecznej metody autoryzacji OAuth lub użyć swojego loginu i hasła.</string>
<string name="use_login_password">Użyj loginu i hasła</string>
<string name="use_login_password">Zaloguj się za pomocą nazwy użytkownika i hasła</string>
<string name="login_account">Konto</string>
<string name="osm_edit_close_note">Zamknij uwagę OSM</string>
<string name="osm_edit_comment_note">Skomentuj uwagę OSM</string>
@ -3973,7 +3973,7 @@
<string name="send_files_to_openstreetmap">Wyślij plik GPX do OpenStreetMap</string>
<string name="enter_text_separated">Wpisz tagi oddzielone przecinkami.</string>
<string name="gpx_upload_trackable_visibility_descr">Możliwość śledzenia oznacza, że ślad nie pojawi się na żadnej publicznej liście, ale punkty śledzenia będą nadal dostępne za pośrednictwem publicznego API GPS ze znacznikami czasu. Inni użytkownicy będą mogli pobrać tylko te przetworzone punkty śledzenia z Twojego śladu, których nie można powiązać bezpośrednio z Tobą.</string>
<string name="osm_login_descr">Możesz zalogować się przy użyciu bezpiecznej metody OAuth lub użyć swojego loginu i hasła.</string>
<string name="osm_login_descr">Zaloguj się przy użyciu bezpiecznej metody autoryzacji OAuth lub użyj swojej nazwy użytkownika i hasła.</string>
<string name="shared_string_add_photo">Dodaj zdjęcie</string>
<string name="register_on_openplacereviews">Zarejestruj się w
\nOpenPlaceReviews.org</string>

View file

@ -3835,4 +3835,34 @@
<string name="poi_gpx_point">Ponto GPX</string>
<string name="poi_radar_tower">Torre de radar</string>
<string name="poi_parking_layby">Área de repouso</string>
<string name="poi_diplomatic_services_citizen_services_no">Não</string>
<string name="poi_diplomatic_services_citizen_services_yes">Sim</string>
<string name="poi_diplomatic_services_immigrant_visas_no">Não</string>
<string name="poi_diplomatic_services_immigrant_visas_yes">Sim</string>
<string name="poi_diplomatic_services_non_immigrant_visas_no">Não</string>
<string name="poi_diplomatic_services_non_immigrant_visas_yes">Sim</string>
<string name="poi_liaison_subnational">Subnacional</string>
<string name="poi_liaison_representative_office">Escritório de representação</string>
<string name="poi_liaison_liaison_office">Escritório</string>
<string name="poi_consulate_honorary_consul">Cônsul honorário</string>
<string name="poi_consulate_consulate_general">Consulado-geral</string>
<string name="poi_consulate_consular_office">Escritório consular</string>
<string name="poi_consulate_consular_agency">Agência consular</string>
<string name="poi_consulate_yes">Liderado por um cônsul</string>
<string name="poi_embassy_residence">Residência</string>
<string name="poi_embassy_nunciature">Nunciatura</string>
<string name="poi_embassy_mission">Missão</string>
<string name="poi_embassy_interests_section">Secção de interesses</string>
<string name="poi_embassy_high_commission">Alta comissão</string>
<string name="poi_embassy_delegation">Delegação</string>
<string name="poi_embassy_branch_embassy">Secção</string>
<string name="poi_embassy_yes">Liderado por um embaixador</string>
<string name="poi_diplomatic_liaison">Ligação</string>
<string name="poi_diplomatic_embassy">Embaixada</string>
<string name="poi_diplomatic_services_citizen_services_filter">Serviços ao cidadão</string>
<string name="poi_diplomatic_services_immigrant_visas_filter">Vistos de imigrantes</string>
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Vistos de não-imigrantes</string>
<string name="poi_liaison_filter">Ligação</string>
<string name="poi_consulate_filter">Consulado</string>
<string name="poi_embassy_filter">Embaixada</string>
</resources>

View file

@ -3980,4 +3980,13 @@
<string name="register_on_openplacereviews_desc">As fotos são fornecidas pelo projeto de dados abertos OpenPlaceReviews.org. Para enviar as suas fotos precisa cadastrar-se no site.</string>
<string name="register_opr_create_new_account">Criar uma conta</string>
<string name="register_opr_have_account">Já tenho uma conta</string>
<string name="shared_string_search_history">Histórico de pesquisa</string>
<string name="app_mode_kayak">Caiaque</string>
<string name="app_mode_motorboat">Barco a motor</string>
<string name="shared_string_resources">Recursos</string>
<string name="approximate_file_size">Tamanho aproximado do ficheiro</string>
<string name="select_data_to_export">Selecione os dados a serem exportados para o ficheiro.</string>
<string name="file_size_needed_for_import">Necessário para a importação</string>
<string name="export_not_enough_space_descr">O seu aparelho só tem %1$s livre. Por favor, libere algum espaço ou desmarque alguns itens para exportar.</string>
<string name="export_not_enough_space">Não há espaço suficiente</string>
</resources>

View file

@ -3969,4 +3969,16 @@
<string name="register_opr_have_account">У меня уже есть аккаунт</string>
<string name="shared_string_search_history">История поиска</string>
<string name="app_mode_motorboat">Моторная лодка</string>
<string name="add_to_opr">Добавить в OpenPlaceReviews</string>
<string name="add_to_mapillary">Добавить в Mapillary</string>
<string name="add_photos_descr">OsmAnd показывает фотографии из нескольких источников:
\nOpenPlaceReviews — фотогорафии POI;
\nMapillary — изображения улиц;
\nWeb / Wikimedia — фотографии POI, указанные в данных OpenStreetMap.</string>
<string name="shared_string_resources">Ресурсы</string>
<string name="approximate_file_size">Примерный размер файла</string>
<string name="file_size_needed_for_import">Требуется для импорта</string>
<string name="select_data_to_export">Выберите данные для экспорта в файл.</string>
<string name="export_not_enough_space_descr">На устройстве свободно только %1$s. Освободите место в хранилище или снимите выбор с некоторых экспортируемых элементов.</string>
<string name="export_not_enough_space">Недостаточно места</string>
</resources>

View file

@ -3964,15 +3964,30 @@
<string name="enter_text_separated">Inserta sas etichetas iscrobadas dae vìrgulas.</string>
<string name="gpx_upload_public_visibility_descr">Pùblica cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Sos datos frunidos pro mèdiu de s\'API non sunt ligados a sa pàgina de sa rasta tua. Sas datas integradas in sos puntos de rasta no ant a èssere a disponimentu pro mèdiu de s\'API GPS, e sos puntos no ant a èssere ordinados in manera cronològica. Nointames custu sos àteros impreadores ant a pòdere iscarrigare sa rasta su matessi dae sa lista pùblica de sas rastas cun totu sas datas e sas oras integradas.</string>
<string name="gpx_upload_private_visibility_descr">Privada cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista, ma sos puntos suos ant a èssere a disponimentu su matessi pro mèdiu de s\'API GPS pùblicu chene datas e oras ma no ant a èssere ordinados in manera cronològica.</string>
<string name="gpx_upload_identifiable_visibility_descr">Identificàbile cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Est a nàrrere chi àteros impreadores ant a pòdere iscarrigare sa rasta e l\'ant a pòdere assotziare a su nùmene de impreadore tuo. Sos datos frunidos pro mèdiu de s\'API de sos puntos de sas rastas ant a èssere ligados a sa pàgina de sa rasta originale tua. Sas datas e sas oras de sos puntos ant a èssere a disponimentu pro mèdiu de s\'API GPS pùblicu.</string>
<string name="gpx_upload_trackable_visibility_descr">Arrastàbile cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista pùblica ma sos puntos suos ant a èssere a disponimentu su matessi pro mèdiu de s\'API GPS pùblicu cun sas datas. Àteros impreadores ant a pòdere iscarrigare petzi puntos de rasta protzessados dae sa rasta tua chi no ant a èssere assotziados diretamente cun tie.</string>
<string name="gpx_upload_identifiable_visibility_descr">\"Identificàbile\" cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Est a nàrrere chi àteros impreadores ant a pòdere iscarrigare sa rasta e l\'ant a pòdere assotziare a su nùmene de impreadore tuo. Sos puntos de rastas cun datas e oras dae s\'API GPS frunidos pro mèdiu de s\'API de sos puntos de sas rastas ant a èssere ligados a sa pàgina de sa rasta originale tua.</string>
<string name="gpx_upload_trackable_visibility_descr">\"Arrastàbile\" cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista pùblica, ma sos puntos suos cun sas datas (no ant a èssere assotziados diretamente cun tie) l\'ant a èssere pro mèdiu de iscarrigamentos dae s\'API GPS pùblica.</string>
<string name="osm_edit_close_note">Serra sa nota de OSM</string>
<string name="osm_edit_comment_note">Cummenta sa nota de OSM</string>
<string name="osm_login_descr">Podes intrare impreende su mètodu seguru OAuth o cun su nùmene tuo e sa crae de intrada tua.</string>
<string name="osm_login_descr">Intra impreende su mètodu seguru OAuth o cun su nùmene de impreadore tuo e sa crae de intrada tua.</string>
<string name="shared_string_add_photo">Annanghe una fotografia</string>
<string name="register_on_openplacereviews">Registra·ti in
\nOpenPlaceReviews.org</string>
<string name="register_on_openplacereviews_desc">Sas fotografias benint frunidas dae su progetu a datos abertos OpenPlaceReviews.org. Pro pòdere carrigare sas fotografias tuas ti depes registrare in su situ.</string>
<string name="register_on_openplacereviews_desc">Intra in su situ de su progetu a datos abertos OpenPlaceReviews.org. pro carrigare fintzas àteras fotografias.</string>
<string name="register_opr_create_new_account">Crea unu contu nou</string>
<string name="register_opr_have_account">Tèngio giai unu contu</string>
<string name="shared_string_search_history">Cronologia de chirca</string>
<string name="app_mode_kayak">Kàyak</string>
<string name="app_mode_motorboat">Motoscafu</string>
<string name="add_to_mapillary">Annanghe a Mapillary</string>
<string name="add_to_opr">Annanghe a OpenPlaceReviews</string>
<string name="add_photos_descr">OsmAnd ammustrat fotografias dae fontes medas:
\nOpenPlaceReviews - fotografias de sos PDI;
\nMapillary - immàgines a livellu de su caminu;
\nWeb / Wikimedia - fotografias de sos PDI dillindadas in sos datos de OpenStreetMap.</string>
<string name="shared_string_resources">Risursas</string>
<string name="approximate_file_size">Mannària aprossimativa de su documentu</string>
<string name="select_data_to_export">Ischerta sos datos de esportare in su documentu.</string>
<string name="file_size_needed_for_import">Netzessàriu pro s\'importatzione</string>
<string name="export_not_enough_space_descr">Su dispositivu tuo tenet petzi %1$s a disponimentu. Lìbera unu pagu de memòria o boga s\'ischerta a unos cantos elementos de esportare.</string>
<string name="export_not_enough_space">Non b\'at logu bastante</string>
</resources>

View file

@ -3838,4 +3838,34 @@
<string name="poi_parking_rooftop">Дах</string>
<string name="poi_gpx_point">Точка GPX</string>
<string name="poi_radar_tower">Радіолокаційна вежа</string>
<string name="poi_liaison_subnational">Багатонаціональне</string>
<string name="poi_embassy_nunciature">Нунціатура</string>
<string name="poi_embassy_interests_section">Розділ інтересів</string>
<string name="poi_diplomatic_liaison">Зв\'язок</string>
<string name="poi_diplomatic_services_citizen_services_filter">Послуги для громадян</string>
<string name="poi_diplomatic_services_immigrant_visas_filter">Імміграційні візи</string>
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Неімміграційні візи</string>
<string name="poi_liaison_filter">Зв\'язок</string>
<string name="poi_diplomatic_services_citizen_services_no">Ні</string>
<string name="poi_diplomatic_services_citizen_services_yes">Так</string>
<string name="poi_diplomatic_services_immigrant_visas_no">Ні</string>
<string name="poi_diplomatic_services_immigrant_visas_yes">Так</string>
<string name="poi_diplomatic_services_non_immigrant_visas_no">Ні</string>
<string name="poi_diplomatic_services_non_immigrant_visas_yes">Так</string>
<string name="poi_liaison_representative_office">Представництво</string>
<string name="poi_liaison_liaison_office">Офіс</string>
<string name="poi_consulate_honorary_consul">Почесний консул</string>
<string name="poi_consulate_consulate_general">Генеральне консульство</string>
<string name="poi_consulate_consular_office">Консульський офіс</string>
<string name="poi_consulate_consular_agency">Консульський орган</string>
<string name="poi_consulate_yes">Очолює консул</string>
<string name="poi_embassy_residence">Резиденція</string>
<string name="poi_embassy_mission">Місія</string>
<string name="poi_embassy_high_commission">Верховний комісаріат</string>
<string name="poi_embassy_delegation">Делегація</string>
<string name="poi_embassy_branch_embassy">Відділення</string>
<string name="poi_embassy_yes">Очолює посол</string>
<string name="poi_diplomatic_embassy">Посольство</string>
<string name="poi_consulate_filter">Консульство</string>
<string name="poi_embassy_filter">Посольство</string>
</resources>

View file

@ -3914,10 +3914,10 @@
<string name="complex_routing_descr">Двофазна маршрутизація для автомобільної навігації.</string>
<string name="use_native_pt">Розвиток власного громадського транспорту</string>
<string name="use_native_pt_desc">Перемкнутися на розрахунок маршруту громадським транспортом за допомогою Java (безпечний)</string>
<string name="perform_oauth_authorization_description">Виконати вхід OAuth для користування функцією osmedit</string>
<string name="perform_oauth_authorization_description">Увійти за допомогою OAuth для користування функцією osmedit</string>
<string name="perform_oauth_authorization">Увійти через OAuth</string>
<string name="clear_osm_token">Очистити токен OAuth OpenStreetMap</string>
<string name="osm_edit_logout_success">Ви успішно вийшли</string>
<string name="osm_edit_logout_success">Ви вийшли</string>
<string name="use_live_public_transport">OsmAnd дані в реальному часі</string>
<string name="routing_attr_avoid_footways_description">Уникати пішохідних шляхів</string>
<string name="routing_attr_avoid_footways_name">Уникати пішохідних шляхів</string>
@ -3951,10 +3951,10 @@
<string name="subscription_on_hold_title">Передплата OsmAnd Live на утриманні</string>
<string name="login_open_street_map">Увійти до OpenStreetMap.org</string>
<string name="login_open_street_map_org">Увійти до OpenStreetMap.org</string>
<string name="open_street_map_login_mode">Увійдіть, щоб вивантажити нові або внесені зміни.
<string name="open_street_map_login_mode">Увійдіть, щоб вивантажити нові або внесені зміни,
\n
\nВи можете увійти, за допомогою безпечного методу OAuth, або скористатися своїм ім\'ям та паролем.</string>
<string name="use_login_password">Використовувати ім\'я і пароль</string>
\nабо за допомогою безпечного методу OAuth або свого ім\'я та паролю.</string>
<string name="use_login_password">Увійти за допомогою імені користувача і паролю</string>
<string name="login_account">Обліковий запис</string>
<string name="user_login">Ім\'я користувача</string>
<string name="sign_in_with_open_street_map">Увійти за допомогою OpenStreetMap</string>
@ -3967,14 +3967,26 @@
<string name="gpx_upload_trackable_visibility_descr">«Відстежуваний» означає, що трек не з\'явиться в жодному загальнодоступному списку, але обробка точок з позначками часу від нього (які не можуть бути безпосередньо пов’язані з вами) виконується за допомогою завантажень із загальнодоступного API GPS.</string>
<string name="osm_edit_close_note">Закрити примітку OSM</string>
<string name="osm_edit_comment_note">Коментувати примітку OSM</string>
<string name="osm_login_descr">Ви можете увійти за допомогою безпечного методу OAuth або застосувавши свої ім\'я користувача й пароль.</string>
<string name="osm_login_descr">Увійдіть за допомогою безпечного методу OAuth або застосувавши свої ім\'я користувача й пароль.</string>
<string name="shared_string_add_photo">Додати світлини</string>
<string name="register_on_openplacereviews">Зареєструватися на
\nOpenPlaceReviews.org</string>
<string name="register_on_openplacereviews_desc">Світлини надаються проєктом відкритих даних OpenPlaceReviews.org. Щоб завантажити світлини зареєструйтеся на сайті.</string>
<string name="register_on_openplacereviews_desc">Увійдіть на вебсайт проєкту відкритих даних OpenPlaceReviews.org, щоб завантажити ще більше світлин.</string>
<string name="register_opr_create_new_account">Створити обліковий запис</string>
<string name="register_opr_have_account">У мене вже є обліковий запис</string>
<string name="shared_string_search_history">Журнал пошуку</string>
<string name="app_mode_kayak">Каяк</string>
<string name="app_mode_motorboat">Моторний човен</string>
<string name="shared_string_resources">Ресурси</string>
<string name="approximate_file_size">Приблизний розмір файлу</string>
<string name="select_data_to_export">Виберіть дані, які потрібно експортувати до файлу.</string>
<string name="file_size_needed_for_import">Необхідно для імпорту</string>
<string name="export_not_enough_space_descr">На вашому пристрої лише %1$s вільного простору. Звільніть місце або приберіть позначки з деяких елементів для експорту.</string>
<string name="export_not_enough_space">Бракує простору</string>
<string name="add_to_mapillary">Додати до Mapillary</string>
<string name="add_to_opr">Додати до OpenPlaceReviews</string>
<string name="add_photos_descr">OsmAnd демонструє світлини з кількох джерел:
\nOpenPlaceReviews — світлини POI;
\nMapillary - зображення вулиць;
\nМережа / Вікімедіа — світлини POI, вказані в даних OpenStreetMap.</string>
</resources>

View file

@ -3849,4 +3849,34 @@
<string name="poi_parking_rooftop">屋頂</string>
<string name="poi_gpx_point">GPX 點</string>
<string name="poi_radar_tower">雷達塔</string>
<string name="poi_diplomatic_services_citizen_services_no"></string>
<string name="poi_diplomatic_services_citizen_services_yes"></string>
<string name="poi_diplomatic_services_immigrant_visas_no"></string>
<string name="poi_diplomatic_services_immigrant_visas_yes"></string>
<string name="poi_diplomatic_services_non_immigrant_visas_no"></string>
<string name="poi_diplomatic_services_non_immigrant_visas_yes"></string>
<string name="poi_liaison_subnational">準外交</string>
<string name="poi_liaison_representative_office">代表處</string>
<string name="poi_liaison_liaison_office">辦公室</string>
<string name="poi_consulate_honorary_consul">名譽領事</string>
<string name="poi_consulate_consulate_general">總領事館</string>
<string name="poi_consulate_consular_office">領事館</string>
<string name="poi_consulate_consular_agency">領事機構</string>
<string name="poi_consulate_yes">由領事率領</string>
<string name="poi_embassy_residence">住宅</string>
<string name="poi_embassy_nunciature">代表駐地</string>
<string name="poi_embassy_mission">代表機構</string>
<string name="poi_embassy_interests_section">利益代表處</string>
<string name="poi_embassy_high_commission">高級專員</string>
<string name="poi_embassy_delegation">代表團</string>
<string name="poi_embassy_branch_embassy">分處</string>
<string name="poi_embassy_yes">由大使率領</string>
<string name="poi_diplomatic_liaison">聯絡處</string>
<string name="poi_diplomatic_embassy">大使館</string>
<string name="poi_diplomatic_services_citizen_services_filter">公民服務</string>
<string name="poi_diplomatic_services_immigrant_visas_filter">移民簽證</string>
<string name="poi_diplomatic_services_non_immigrant_visas_filter">非移民簽證</string>
<string name="poi_liaison_filter">聯絡處</string>
<string name="poi_consulate_filter">領事館</string>
<string name="poi_embassy_filter">大使館</string>
</resources>

View file

@ -3917,10 +3917,10 @@
<string name="use_native_pt">原生公共運輸發展</string>
<string name="use_native_pt_desc">切換到 Java安全公共運輸路線計算</string>
<string name="what_is_new">有什麼新鮮事</string>
<string name="perform_oauth_authorization_description">執行 OAuth 登入以使用 osmedit 功能</string>
<string name="perform_oauth_authorization_description"> OAuth 登入以使用 osmedit 功能</string>
<string name="perform_oauth_authorization">透過 OAuth 登入</string>
<string name="clear_osm_token">清除 OpenStreetMap OAuth 權杖</string>
<string name="osm_edit_logout_success">成功登出</string>
<string name="osm_edit_logout_success">登出</string>
<string name="snowmobile_render_descr">適用於有專用道路與軌道的雪地摩托車駕駛。</string>
<string name="file_already_imported">檔案已在 OsmAnd 匯入</string>
<string name="use_two_phase_routing">使用 2 相的 A* 路線演算法</string>
@ -3948,14 +3948,14 @@
<string name="subscription_expired_title">OsmAnd Live 訂閱已過期</string>
<string name="subscription_paused_title">OsmAnd Live 訂閱已暫停</string>
<string name="subscription_on_hold_title">OsmAnd Live 訂閱已暫停</string>
<string name="login_open_street_map">登入 OpenStreetMap</string>
<string name="login_open_street_map_org">登入 OpenStreetMap.org</string>
<string name="open_street_map_login_mode">您必須登入以上傳新的或修正過的變更。
<string name="login_open_street_map">登入 OpenStreetMap</string>
<string name="login_open_street_map_org">登入 OpenStreetMap.org</string>
<string name="open_street_map_login_mode">登入以上傳新的或修正過的變更,
\n
\n您可以使用安全的 OAuth 方法或使用您的登入與密碼來登入。</string>
<string name="use_login_password">使用登入與密碼</string>
\n以 OAuth 或使用您的使用者名稱與密碼來登入。</string>
<string name="use_login_password">以使用者名稱與密碼登入</string>
<string name="login_account">帳號</string>
<string name="user_login">登入</string>
<string name="user_login">使用者名稱</string>
<string name="sign_in_with_open_street_map">使用 OpenStreetMap 登入</string>
<string name="markers_history">標記歷史</string>
<string name="send_files_to_openstreetmap">傳送 GPX 檔案到 OpenStreetMap</string>
@ -3966,14 +3966,26 @@
<string name="gpx_upload_trackable_visibility_descr">「可追蹤」代表軌跡不會在任何公開的清單中顯示,但帶有時間戳(這並不會與您直接相關聯)的已處理追蹤點可從公開的 GPS API 下載。</string>
<string name="osm_edit_close_note">關閉 OSM 註記</string>
<string name="osm_edit_comment_note">評論 OSM 註記</string>
<string name="osm_login_descr">您可以使用安全的 OAuth 方式或是使用您的帳號與密碼來登入。</string>
<string name="osm_login_descr">使用安全的 OAuth 方式或是使用您的使用者名稱與密碼來登入。</string>
<string name="shared_string_add_photo">新增照片</string>
<string name="register_on_openplacereviews">註冊於
\nOpenPlaceReviews.org</string>
<string name="register_on_openplacereviews_desc">照片由開放資料專案 OpenPlaceReviews.org 提供。為了上傳您的照片,您必須在網站上註冊</string>
<string name="register_on_openplacereviews_desc">登入開放資料專案網站 OpenPlaceReviews.org 以上傳更多照片</string>
<string name="register_opr_create_new_account">建立新帳號</string>
<string name="register_opr_have_account">我已經有帳號了</string>
<string name="shared_string_search_history">搜尋歷史紀錄</string>
<string name="app_mode_kayak">皮艇</string>
<string name="app_mode_motorboat">快艇</string>
<string name="add_to_mapillary">新增到 Mapillary</string>
<string name="add_to_opr">新增到 OpenPlaceReviews</string>
<string name="add_photos_descr">OsmAnd 從多個來源顯示照片:
\nOpenPlaceReviews - POI 照片;
\nMapillary - 街景;
\n網路維基媒體 - 特定 OpenStreetMap 資料的 POI 照片。</string>
<string name="shared_string_resources">資源</string>
<string name="approximate_file_size">大約檔案大小</string>
<string name="select_data_to_export">選取要匯出到檔案的資料。</string>
<string name="file_size_needed_for_import">匯入需要</string>
<string name="export_not_enough_space_descr">您的裝置僅剩 %1$s 可用空間。請釋出一些空間或取消選取要匯出的部份檔案。</string>
<string name="export_not_enough_space">空間不足</string>
</resources>

View file

@ -289,6 +289,7 @@
<dimen name="bottom_sheet_info_spacing_multiplier" format="float">1.5</dimen>
<dimen name="bottom_sheet_big_item_height">128dp</dimen>
<dimen name="bottom_sheet_top_shadow_height">8dp</dimen>
<dimen name="bottom_sheet_button_divider_height">28dp</dimen>
<dimen name="action_bar_image_width_land">236dp</dimen>
<dimen name="action_bar_image_top_margin_land">68dp</dimen>

View file

@ -17,6 +17,9 @@
<string name="select_data_to_export">Select the data to be exported to the file.</string>
<string name="approximate_file_size">Approximate file size</string>
<string name="shared_string_resources">Resources</string>
<string name="add_photos_descr">OsmAnd shows photos from several sources:\nOpenPlaceReviews - POI photos;\nMapillary - street-level imagery;\nWeb / Wikimedia - POI photos specified in OpenStreetMap data.</string>
<string name="add_to_opr">Add to OpenPlaceReviews</string>
<string name="add_to_mapillary">Add to Mapillary</string>
<string name="app_mode_motorboat">Motorboat</string>
<string name="app_mode_kayak">Kayak</string>
<string name="shared_string_search_history">Search history</string>

View file

@ -14,11 +14,11 @@ import net.osmand.osm.AbstractPoiType;
import net.osmand.osm.MapPoiTypes;
import net.osmand.osm.PoiCategory;
import net.osmand.osm.PoiType;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.helpers.enums.AngularConstants;
import net.osmand.plus.helpers.enums.MetricsConstants;
import net.osmand.plus.helpers.enums.SpeedConstants;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.util.Algorithms;
import java.text.DateFormatSymbols;
@ -30,7 +30,6 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.Map.Entry;
import static net.osmand.data.PointDescription.getLocationOlcName;
@ -417,7 +416,7 @@ public class OsmAndFormatter {
String typeName = amenity.getSubType();
if (pt != null) {
typeName = pt.getTranslation();
} else if(typeName != null){
} else if (typeName != null) {
typeName = Algorithms.capitalizeFirstLetterAndLowercase(typeName.replace('_', ' '));
}
List<String> res = new ArrayList<>();
@ -426,7 +425,7 @@ public class OsmAndFormatter {
for (String name : amenity.getAllNames(true)) {
addPoiString(typeName, name, res);
}
for (String name : amenity.getAdditionalInfo().values()) {
for (String name : amenity.getAdditionalInfoValues(false)) {
addPoiString(typeName, name, res);
}
return res;
@ -444,36 +443,34 @@ public class OsmAndFormatter {
public static String getAmenityDescriptionContent(OsmandApplication ctx, Amenity amenity, boolean shortDescription) {
StringBuilder d = new StringBuilder();
if(amenity.getType().isWiki()) {
if (amenity.getType().isWiki()) {
return "";
}
MapPoiTypes poiTypes = ctx.getPoiTypes();
for(Entry<String, String> e : amenity.getAdditionalInfo().entrySet()) {
String key = e.getKey();
String vl = e.getValue();
if(key.startsWith("name:")) {
for (String key : amenity.getAdditionalInfoKeys()) {
String vl = amenity.getAdditionalInfo(key);
if (key.startsWith("name:")) {
continue;
} else if(vl.length() >= 150) {
if(shortDescription) {
} else if (vl.length() >= 150) {
if (shortDescription) {
continue;
}
} else if(Amenity.OPENING_HOURS.equals(key)) {
} else if (Amenity.OPENING_HOURS.equals(key)) {
d.append(ctx.getString(R.string.opening_hours) + ": ");
} else if(Amenity.PHONE.equals(key)) {
} else if (Amenity.PHONE.equals(key)) {
d.append(ctx.getString(R.string.phone) + ": ");
} else if(Amenity.WEBSITE.equals(key)) {
} else if (Amenity.WEBSITE.equals(key)) {
d.append(ctx.getString(R.string.website) + ": ");
} else {
AbstractPoiType pt = poiTypes.getAnyPoiAdditionalTypeByKey(e.getKey());
AbstractPoiType pt = poiTypes.getAnyPoiAdditionalTypeByKey(key);
if (pt != null) {
if(pt instanceof PoiType && !((PoiType) pt).isText()) {
if (pt instanceof PoiType && !((PoiType) pt).isText()) {
vl = pt.getTranslation();
} else {
vl = pt.getTranslation() + ": " + amenity.unzipContent(e.getValue());
vl = pt.getTranslation() + ": " + vl;
}
} else {
vl = Algorithms.capitalizeFirstLetterAndLowercase(e.getKey()) +
": " + amenity.unzipContent(e.getValue());
vl = Algorithms.capitalizeFirstLetterAndLowercase(key) + ": " + vl;
}
}
d.append(vl).append('\n');

View file

@ -46,7 +46,7 @@ import net.osmand.plus.mapcontextmenu.builders.cards.ImageCard;
import net.osmand.plus.mapcontextmenu.builders.cards.ImageCard.GetImageCardsTask;
import net.osmand.plus.mapcontextmenu.builders.cards.NoImagesCard;
import net.osmand.plus.mapcontextmenu.controllers.TransportStopController;
import net.osmand.plus.openplacereviews.OprStartFragment;
import net.osmand.plus.openplacereviews.AddPhotosBottomSheetDialogFragment;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.render.RenderingIcons;
import net.osmand.plus.transport.TransportStopRoute;
@ -316,7 +316,7 @@ public class MenuBuilder {
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
OprStartFragment.showInstance(mapActivity.getSupportFragmentManager());
AddPhotosBottomSheetDialogFragment.showInstance(mapActivity.getSupportFragmentManager());
}
});
b.setTypeface(FontCache.getRobotoRegular(context));
@ -337,7 +337,7 @@ public class MenuBuilder {
b.setText(context.getResources().getString(R.string.shared_string_add_photo));
b.setBackgroundResource(R.drawable.btn_border_light);
//TODO This feature is under development
b.setVisibility(View.GONE);
b.setVisibility(View.VISIBLE);
b.setTextColor(ContextCompat.getColor(context, R.color.preference_category_title));
return b;
}

View file

@ -32,11 +32,11 @@ import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.helpers.FontCache;
import net.osmand.plus.helpers.enums.MetricsConstants;
import net.osmand.plus.mapcontextmenu.CollapsableView;
import net.osmand.plus.mapcontextmenu.MenuBuilder;
import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.helpers.enums.MetricsConstants;
import net.osmand.plus.views.layers.POIMapLayer;
import net.osmand.plus.widgets.TextViewEx;
import net.osmand.plus.widgets.tools.ClickableSpanTouchListener;
@ -344,12 +344,11 @@ public class AmenityMenuBuilder extends MenuBuilder {
boolean osmEditingEnabled = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class) != null;
for (Map.Entry<String, String> e : amenity.getAdditionalInfo().entrySet()) {
for (String key : amenity.getAdditionalInfoKeys()) {
int iconId = 0;
Drawable icon = null;
int textColor = 0;
String key = e.getKey();
String vl = e.getValue();
String vl = amenity.getAdditionalInfo(key);
if (key.equals("image")
|| key.equals("mapillary")
@ -460,7 +459,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
isCuisine = true;
iconId = R.drawable.ic_action_cuisine;
StringBuilder sb = new StringBuilder();
for (String c : e.getValue().split(";")) {
for (String c : vl.split(";")) {
if (sb.length() > 0) {
sb.append(", ");
sb.append(poiTypes.getPoiTranslation("cuisine_" + c).toLowerCase());
@ -502,7 +501,6 @@ public class AmenityMenuBuilder extends MenuBuilder {
isText = true;
isDescription = iconId == R.drawable.ic_action_note_dark;
textPrefix = pType.getTranslation();
vl = amenity.unzipContent(e.getValue());
if (needIntFormatting) {
vl = getFormattedInt(vl);
}
@ -519,8 +517,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
} else if (poiType != null) {
collectedPoiTypes.add(poiType);
} else {
textPrefix = Algorithms.capitalizeFirstLetterAndLowercase(e.getKey());
vl = amenity.unzipContent(e.getValue());
textPrefix = Algorithms.capitalizeFirstLetterAndLowercase(key);
}
}
@ -782,11 +779,10 @@ public class AmenityMenuBuilder extends MenuBuilder {
@Override
protected Map<String, String> getAdditionalCardParams() {
Map<String, String> params = new HashMap<>();
Map<String, String> additionalInfo = amenity.getAdditionalInfo();
String imageValue = additionalInfo.get("image");
String mapillaryValue = additionalInfo.get("mapillary");
String wikidataValue = additionalInfo.get(Amenity.WIKIDATA);
String wikimediaValue = additionalInfo.get(Amenity.WIKIMEDIA_COMMONS);
String imageValue = amenity.getAdditionalInfo("image");
String mapillaryValue = amenity.getAdditionalInfo("mapillary");
String wikidataValue = amenity.getAdditionalInfo(Amenity.WIKIDATA);
String wikimediaValue = amenity.getAdditionalInfo(Amenity.WIKIMEDIA_COMMONS);
if (!Algorithms.isEmpty(imageValue)) {
params.put("osm_image", imageValue);
}

View file

@ -12,13 +12,13 @@ import net.osmand.data.TransportStop;
import net.osmand.osm.PoiCategory;
import net.osmand.osm.PoiFilter;
import net.osmand.osm.PoiType;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.MenuBuilder;
import net.osmand.plus.mapcontextmenu.MenuController;
import net.osmand.plus.mapcontextmenu.builders.AmenityMenuBuilder;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.render.RenderingIcons;
import net.osmand.plus.transport.TransportStopRoute;
import net.osmand.plus.wikipedia.WikipediaDialogFragment;
@ -26,7 +26,6 @@ import net.osmand.util.Algorithms;
import net.osmand.util.OpeningHoursParser;
import java.util.List;
import java.util.Map;
public class AmenityMenuController extends MenuController {
@ -160,12 +159,9 @@ public class AmenityMenuController extends MenuController {
String preferredLang = OsmandPlugin.onGetMapObjectPreferredLang(amenity,
getPreferredMapAppLang(), getPreferredMapLang());
String name = amenity.getName(preferredLang, isTransliterateNames());
Map<String, String> additionalInfo = amenity.getAdditionalInfo();
if (additionalInfo != null) {
String ref = additionalInfo.get("ref");
if (!TextUtils.isEmpty(ref) && !ref.equals(name)) {
return name + " (" + ref + ")";
}
String ref = amenity.getAdditionalInfo("ref");
if (!TextUtils.isEmpty(ref) && !ref.equals(name)) {
return name + " (" + ref + ")";
}
if (Algorithms.isEmpty(name) && amenity.getSubType().equalsIgnoreCase("atm")) {
String operator = amenity.getAdditionalInfo("operator");
@ -247,12 +243,9 @@ public class AmenityMenuController extends MenuController {
@Override
public Drawable getRightIcon() {
Map<String, String> addTypes = amenity.getAdditionalInfo();
if (addTypes != null) {
String region = addTypes.get("subway_region");
if (region != null) {
return RenderingIcons.getBigIcon(getMapActivity(), "subway_" + region);
}
String region = amenity.getAdditionalInfo("subway_region");
if (region != null) {
return RenderingIcons.getBigIcon(getMapActivity(), "subway_" + region);
}
return null;
}

View file

@ -60,6 +60,8 @@ public class FavoritesActivity extends TabActivity {
private int tabSize;
private ImportHelper importHelper;
private ViewPager viewPager;
private Bundle intentParams = null;
@Override
@ -80,7 +82,7 @@ public class FavoritesActivity extends TabActivity {
List<TabItem> mTabs = getTabItems();
setTabs(mTabs);
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
viewPager = findViewById(R.id.pager);
if (savedInstanceState == null) {
Intent intent = getIntent();
if (intent != null && intent.hasExtra(MapActivity.INTENT_PARAMS)) {
@ -93,7 +95,7 @@ public class FavoritesActivity extends TabActivity {
break;
}
}
mViewPager.setCurrentItem(pagerItem, false);
viewPager.setCurrentItem(pagerItem, false);
}
}
}
@ -191,6 +193,17 @@ public class FavoritesActivity extends TabActivity {
return mTabs;
}
public Bundle storeCurrentState() {
int currentItem = viewPager.getCurrentItem();
if (currentItem >= 0 && currentItem < fragList.size()) {
FavoritesFragmentStateHolder stateHolder = fragList.get(currentItem).get();
if (stateHolder != null) {
return stateHolder.storeState();
}
}
return null;
}
@Override
public void onAttachFragment(Fragment fragment) {
if (fragment instanceof FavoritesFragmentStateHolder) {

View file

@ -0,0 +1,143 @@
package net.osmand.plus.openplacereviews;
import android.content.Context;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.UiUtilities.DialogButtonType;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem;
import net.osmand.plus.helpers.FontCache;
import net.osmand.plus.mapillary.MapillaryPlugin;
import net.osmand.plus.widgets.style.CustomTypefaceSpan;
import org.apache.commons.logging.Log;
public class AddPhotosBottomSheetDialogFragment extends MenuBottomSheetDialogFragment {
public static final String TAG = AddPhotosBottomSheetDialogFragment.class.getSimpleName();
private static final Log LOG = PlatformUtil.getLog(AddPhotosBottomSheetDialogFragment.class);
public static final String OPEN_PLACE_REVIEWS = "OpenPlaceReviews";
public static final String MAPILLARY = "Mapillary";
public static final String WEB_WIKIMEDIA = "Web / Wikimedia";
public static final String OPEN_STREET_MAP = "OpenStreetMap";
@Override
public void createMenuItems(Bundle savedInstanceState) {
OsmandApplication app = getMyApplication();
if (app == null) {
return;
}
View view = View.inflate(UiUtilities.getThemedContext(app, nightMode),
R.layout.opr_add_photo, null);
setDescriptionSpan(view);
items.add(new SimpleBottomSheetItem.Builder()
.setCustomView(view)
.create());
items.add(new DividerSpaceItem(app, app.getResources().getDimensionPixelSize(R.dimen.text_margin_small)));
}
private void setDescriptionSpan(View view) {
String desc = requireContext().getString(R.string.add_photos_descr);
BoldSpannableString ss = new BoldSpannableString(desc, view.getContext());
ss.setBold(OPEN_PLACE_REVIEWS);
ss.setBold(MAPILLARY);
ss.setBold(WEB_WIKIMEDIA);
ss.setBold(OPEN_STREET_MAP);
view.<TextView>findViewById(R.id.add_photos_descr).setText(ss);
}
static class BoldSpannableString extends SpannableString {
Context ctx;
public BoldSpannableString(CharSequence source, Context ctx) {
super(source);
this.ctx = ctx;
}
public void setBold(String boldText) {
String source = toString();
setSpan(new CustomTypefaceSpan(FontCache.getRobotoMedium(ctx)),
source.indexOf(boldText), source.indexOf(boldText) + boldText.length(),
Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}
}
@Override
protected int getThirdBottomButtonTextId() {
return R.string.add_to_opr;
}
@Override
protected DialogButtonType getThirdBottomButtonType() {
return DialogButtonType.SECONDARY;
}
@Override
protected int getFirstDividerHeight() {
return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_button_divider_height);
}
@Override
protected void onThirdBottomButtonClick() {
FragmentActivity activity = getActivity();
if (activity != null) {
OprStartFragment.showInstance(activity.getSupportFragmentManager());
}
dismiss();
}
@Override
protected int getRightBottomButtonTextId() {
return R.string.add_to_mapillary;
}
@Override
protected DialogButtonType getRightBottomButtonType() {
return DialogButtonType.SECONDARY;
}
@Override
protected void onRightBottomButtonClick() {
FragmentActivity activity = getActivity();
if (activity != null) {
MapillaryPlugin.openMapillary(activity, null);
}
dismiss();
}
@Override
protected int getSecondDividerHeight() {
return getResources().getDimensionPixelSize(R.dimen.content_padding_small);
}
@Override
protected int getDismissButtonTextId() {
return R.string.shared_string_cancel;
}
public static void showInstance(@NonNull FragmentManager fm) {
try {
if (!fm.isStateSaved()) {
AddPhotosBottomSheetDialogFragment fragment = new AddPhotosBottomSheetDialogFragment();
fragment.show(fm, TAG);
}
} catch (RuntimeException e) {
LOG.error("showInstance", e);
}
}
}

View file

@ -1,6 +1,7 @@
package net.osmand.plus.openplacereviews;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
@ -11,23 +12,41 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import net.osmand.PlatformUtil;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.base.BaseOsmAndFragment;
import org.apache.commons.logging.Log;
public class OprStartFragment extends BaseOsmAndFragment {
private static final String TAG = "fragment_oprstart";
private static final String TAG = OprStartFragment.class.getSimpleName();
private static final Log LOG = PlatformUtil.getLog(OprStartFragment.class);
private static final String openPlaceReviewsUrl = "OpenPlaceReviews.org";
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
boolean nightMode = getMyApplication().getDaynightHelper().isNightModeForMapControls();
View v = inflater.inflate(R.layout.fragment_opr_login, container, false);
v.findViewById(R.id.register_opr_create_account).setOnClickListener(new View.OnClickListener() {
View createAccount = v.findViewById(R.id.register_opr_create_account);
v.findViewById(R.id.back_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentActivity activity = getActivity();
if (activity != null) {
activity.getSupportFragmentManager().popBackStack();
}
}
});
UiUtilities.setupDialogButton(nightMode, createAccount, UiUtilities.DialogButtonType.PRIMARY,
R.string.register_opr_create_new_account);
createAccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(requireContext(), OPRWebviewActivity.class);
@ -36,13 +55,10 @@ public class OprStartFragment extends BaseOsmAndFragment {
startActivity(i);
}
});
v.findViewById(R.id.back_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getActivity().getSupportFragmentManager().popBackStack();
}
});
v.findViewById(R.id.register_opr_have_account).setOnClickListener(new View.OnClickListener() {
View haveAccount = v.findViewById(R.id.register_opr_have_account);
UiUtilities.setupDialogButton(nightMode, haveAccount, UiUtilities.DialogButtonType.SECONDARY,
R.string.register_opr_have_account);
haveAccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(requireContext(), OPRWebviewActivity.class);
@ -71,9 +87,10 @@ public class OprStartFragment extends BaseOsmAndFragment {
}
@Override
public void updateDrawState(TextPaint ds) {
public void updateDrawState(@NonNull TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
ds.setTypeface(Typeface.DEFAULT_BOLD);
}
}

View file

@ -21,7 +21,6 @@ import org.apache.commons.logging.Log;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static net.osmand.osm.edit.Entity.POI_TYPE_TAG;
@ -136,12 +135,12 @@ public class OpenstreetmapLocalUtil implements OpenstreetmapUtil {
if (!Algorithms.isEmpty(amenity.getOpeningHours())) {
entity.putTagNoLC(OSMTagKey.OPENING_HOURS.getValue(), amenity.getOpeningHours());
}
for (Map.Entry<String, String> entry : amenity.getAdditionalInfo().entrySet()) {
AbstractPoiType abstractPoi = MapPoiTypes.getDefault().getAnyPoiAdditionalTypeByKey(entry.getKey());
if (abstractPoi != null && abstractPoi instanceof PoiType) {
for (String key : amenity.getAdditionalInfoKeys()) {
AbstractPoiType abstractPoi = MapPoiTypes.getDefault().getAnyPoiAdditionalTypeByKey(key);
if (abstractPoi instanceof PoiType) {
PoiType p = (PoiType) abstractPoi;
if (!p.isNotEditableOsm() && !Algorithms.isEmpty(p.getEditOsmTag())) {
entity.putTagNoLC(p.getEditOsmTag(), entry.getValue());
entity.putTagNoLC(p.getEditOsmTag(), amenity.getAdditionalInfo(key));
}
}
}

View file

@ -9,6 +9,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import androidx.activity.OnBackPressedCallback;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
@ -50,6 +52,17 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
authorizationAdapter = app.getOsmOAuthHelper().getAuthorizationAdapter();
FragmentActivity activity = requireMyActivity();
activity.getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
public void handleOnBackPressed() {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
mapActivity.launchPrevActivityIntent();
}
dismiss();
}
});
}
@Override

View file

@ -1,10 +1,16 @@
package net.osmand.plus.osmedit.dialogs;
import android.graphics.Rect;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.annotation.NonNull;
@ -21,21 +27,26 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.UiUtilities.DialogButtonType;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter;
import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionAdapterListener;
import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionItem;
import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo;
import net.osmand.plus.myplaces.FavoritesActivity;
import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.osmedit.OsmEditingPlugin.UploadVisibility;
import net.osmand.plus.osmedit.UploadGPXFilesTask;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
import net.osmand.util.Algorithms;
import java.util.ArrayList;
import java.util.List;
import static net.osmand.plus.settings.fragments.BaseSettingsFragment.SettingsScreenType.OPEN_STREET_MAP_EDITING;
public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment {
public static final String TAG = SendGpxBottomSheetFragment.class.getSimpleName();
@ -45,6 +56,7 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment {
private TextInputEditText tagsField;
private TextInputEditText messageField;
private int contentHeightPrevious = 0;
public void setGpxInfos(GpxInfo[] gpxInfos) {
this.gpxInfos = gpxInfos;
@ -57,6 +69,7 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment {
LayoutInflater themedInflater = UiUtilities.getInflater(app, nightMode);
View sendOsmPoiView = themedInflater.inflate(R.layout.send_gpx_fragment, null);
sendOsmPoiView.getViewTreeObserver().addOnGlobalLayoutListener(getOnGlobalLayoutListener());
tagsField = sendOsmPoiView.findViewById(R.id.tags_field);
messageField = sendOsmPoiView.findViewById(R.id.message_field);
@ -95,9 +108,18 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment {
visibilityDescription.setText(selectedUploadVisibility.getDescriptionId());
horizontalSelectionAdapter.notifyDataSetChanged();
}
});
LinearLayout account = sendOsmPoiView.findViewById(R.id.account_container);
account.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentActivity activity = getActivity();
if (activity != null) {
showOpenStreetMapScreen(activity);
}
dismiss();
}
});
RecyclerView iconCategoriesRecyclerView = sendOsmPoiView.findViewById(R.id.description_view);
iconCategoriesRecyclerView.setAdapter(horizontalSelectionAdapter);
iconCategoriesRecyclerView.setLayoutManager(new LinearLayoutManager(app, RecyclerView.HORIZONTAL, false));
@ -109,6 +131,53 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment {
items.add(titleItem);
}
private ViewTreeObserver.OnGlobalLayoutListener getOnGlobalLayoutListener() {
return new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect visibleDisplayFrame = new Rect();
int buttonsHeight = getResources().getDimensionPixelSize(R.dimen.dialog_button_ex_max_width);
int shadowHeight = getResources().getDimensionPixelSize(R.dimen.bottom_sheet_top_shadow_height);
final ScrollView scrollView = getView().findViewById(R.id.scroll_view);
scrollView.getWindowVisibleDisplayFrame(visibleDisplayFrame);
int height = scrollView.getHeight();
int contentHeight = visibleDisplayFrame.bottom - visibleDisplayFrame.top - buttonsHeight;
if (contentHeightPrevious != contentHeight || contentHeight < height) {
if (scrollView.getHeight() + shadowHeight > contentHeight) {
scrollView.getLayoutParams().height = contentHeight;
} else {
scrollView.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
}
scrollView.requestLayout();
int delay = Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP ? 300 : 1000;
scrollView.postDelayed(new Runnable() {
public void run() {
scrollView.scrollTo(0, scrollView.getHeight());
}
}, delay);
contentHeightPrevious = contentHeight;
}
}
};
}
protected static void showOpenStreetMapScreen(@NonNull FragmentActivity activity) {
if (activity instanceof MapActivity) {
BaseSettingsFragment.showInstance(activity, OPEN_STREET_MAP_EDITING);
} else {
Bundle prevIntentParams = null;
if (activity instanceof FavoritesActivity) {
prevIntentParams = ((FavoritesActivity) activity).storeCurrentState();
} else if (activity.getIntent() != null) {
prevIntentParams = activity.getIntent().getExtras();
}
Bundle params = new Bundle();
params.putString(BaseSettingsFragment.OPEN_SETTINGS, OPEN_STREET_MAP_EDITING.name());
MapActivity.launchMapActivityMoveToTop(activity, prevIntentParams, null, params);
}
}
@Override
protected DialogButtonType getRightBottomButtonType() {
return DialogButtonType.PRIMARY;

View file

@ -14,6 +14,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.SwitchCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.google.android.material.textfield.TextInputLayout;
@ -40,6 +41,7 @@ import org.apache.commons.logging.Log;
import static net.osmand.plus.UiUtilities.setupDialogButton;
import static net.osmand.plus.osmedit.OsmEditingFragment.OSM_LOGIN_DATA;
import static net.osmand.plus.osmedit.ValidateOsmLoginDetailsTask.ValidateOsmLoginListener;
import static net.osmand.plus.osmedit.dialogs.SendGpxBottomSheetFragment.showOpenStreetMapScreen;
import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.OPENSTREETMAP_POINT;
import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.ProgressDialogPoiUploader;
import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.SimpleProgressDialogPoiUploader;
@ -129,6 +131,17 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen
uploadAnonymously.setPadding(paddingSmall, 0, paddingSmall, 0);
}
});
LinearLayout account = accountBlockView.findViewById(R.id.account_container);
account.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentActivity activity = getActivity();
if (activity != null) {
showOpenStreetMapScreen(activity);
}
dismiss();
}
});
final SimpleBottomSheetItem bottomSheetItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder()
.setCustomView(sendOsmNoteView)
.create();

View file

@ -6,10 +6,12 @@ import android.view.ContextThemeWrapper;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.SwitchCompat;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import net.osmand.PlatformUtil;
@ -31,7 +33,10 @@ import org.apache.commons.logging.Log;
import java.util.HashMap;
import java.util.Map;
import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.*;
import static net.osmand.plus.osmedit.dialogs.SendGpxBottomSheetFragment.showOpenStreetMapScreen;
import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.OPENSTREETMAP_POINT;
import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.ProgressDialogPoiUploader;
import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.SimpleProgressDialogPoiUploader;
public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment {
@ -84,6 +89,17 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment {
closeChangeSet.setPadding(paddingSmall, 0, paddingSmall, 0);
}
});
LinearLayout account = sendOsmPoiView.findViewById(R.id.account_container);
account.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentActivity activity = getActivity();
if (activity != null) {
showOpenStreetMapScreen(activity);
}
dismiss();
}
});
final SimpleBottomSheetItem titleItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder()
.setCustomView(sendOsmPoiView)
.create();