mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
Compare commits
5 Commits
main
...
map-per-co
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21c9a58173 | ||
|
|
8007c0df53 | ||
|
|
02ac1d8977 | ||
|
|
3c2e77f59e | ||
|
|
c1760bbc37 |
@@ -10,7 +10,6 @@ CoMaps contributors:
|
||||
Bastian Greshake Tzovaras
|
||||
clover sage
|
||||
Harry Bond <me@hbond.xyz>
|
||||
NoelClick
|
||||
thesupertechie
|
||||
vikiawv
|
||||
Yannik Bloscheck
|
||||
|
||||
@@ -18,7 +18,6 @@ import android.location.Location;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.CallSuper;
|
||||
@@ -26,15 +25,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.core.view.ViewCompat;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.progressindicator.LinearProgressIndicator;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import app.organicmaps.base.BaseMwmFragmentActivity;
|
||||
import app.organicmaps.dialog.CustomMapServerDialog;
|
||||
import app.organicmaps.downloader.MapManagerHelper;
|
||||
import app.organicmaps.intent.Factory;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
@@ -47,7 +38,11 @@ import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.progressindicator.LinearProgressIndicator;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -59,7 +54,6 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
private MaterialTextView mTvMessage;
|
||||
private LinearProgressIndicator mProgress;
|
||||
private MaterialButton mBtnDownload;
|
||||
private MaterialButton mBtnAdvanced;
|
||||
private MaterialCheckBox mChbDownloadCountry;
|
||||
|
||||
private String mCurrentCountry;
|
||||
@@ -273,14 +267,6 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
mProgress = findViewById(R.id.progressbar);
|
||||
mBtnDownload = findViewById(R.id.btn_download_resources);
|
||||
mChbDownloadCountry = findViewById(R.id.chb_download_country);
|
||||
mBtnAdvanced = findViewById(R.id.btn_advanced);
|
||||
|
||||
mBtnAdvanced.setOnClickListener(v -> {
|
||||
CustomMapServerDialog.show(this, url -> {
|
||||
prepareFilesDownload(false);
|
||||
});
|
||||
});
|
||||
mBtnAdvanced.setEnabled(true);
|
||||
|
||||
mBtnListeners = new View.OnClickListener[BTN_COUNT];
|
||||
mBtnNames = new String[BTN_COUNT];
|
||||
@@ -305,11 +291,6 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
mBtnDownload.setOnClickListener(mBtnListeners[action]);
|
||||
mBtnDownload.setText(mBtnNames[action]);
|
||||
|
||||
// Allow changing server only when idle or after an error.
|
||||
boolean advancedEnabled = (action == DOWNLOAD || action == TRY_AGAIN || action == RESUME);
|
||||
mBtnAdvanced.setEnabled(advancedEnabled);
|
||||
mBtnAdvanced.setAlpha(advancedEnabled ? 1f : 0.5f);
|
||||
}
|
||||
|
||||
private void doDownload()
|
||||
@@ -378,9 +359,6 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
|
||||
private void finishFilesDownload(int result)
|
||||
{
|
||||
mBtnAdvanced.setEnabled(true);
|
||||
mBtnAdvanced.setAlpha(1f);
|
||||
|
||||
if (result == ERR_NO_MORE_FILES)
|
||||
{
|
||||
// World and WorldCoasts has been downloaded, we should register maps again to correctly add them to the model.
|
||||
@@ -450,16 +428,12 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
.setTitle(titleId)
|
||||
.setMessage(messageId)
|
||||
.setCancelable(true)
|
||||
.setOnCancelListener((dialog) -> setAction(RESUME))
|
||||
.setOnCancelListener((dialog) -> setAction(PAUSE))
|
||||
.setPositiveButton(R.string.try_again,
|
||||
(dialog, which) -> {
|
||||
setAction(TRY_AGAIN);
|
||||
onTryAgainClicked();
|
||||
})
|
||||
.setNegativeButton(R.string.cancel,
|
||||
(dialog, which) -> {
|
||||
setAction(RESUME);
|
||||
})
|
||||
.setOnDismissListener(dialog -> mAlertDialog = null)
|
||||
.show();
|
||||
}
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
package app.organicmaps.dialog;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
|
||||
public final class CustomMapServerDialog
|
||||
{
|
||||
public interface OnUrlAppliedListener
|
||||
{
|
||||
void onUrlApplied(@NonNull String url);
|
||||
}
|
||||
|
||||
private CustomMapServerDialog() {}
|
||||
|
||||
public static void show(@NonNull Context context,
|
||||
@Nullable OnUrlAppliedListener listener)
|
||||
{
|
||||
View dialogView = LayoutInflater.from(context)
|
||||
.inflate(R.layout.dialog_custom_map_server, null);
|
||||
TextInputLayout til = dialogView.findViewById(R.id.til_custom_map_server);
|
||||
TextInputEditText edit = dialogView.findViewById(R.id.edit_custom_map_server);
|
||||
|
||||
SharedPreferences prefs =
|
||||
PreferenceManager.getDefaultSharedPreferences(context);
|
||||
String current = prefs.getString(context.getString(R.string.pref_custom_map_download_url), "");
|
||||
edit.setText(current);
|
||||
|
||||
MaterialAlertDialogBuilder builder =
|
||||
new MaterialAlertDialogBuilder(context, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.download_resources_custom_url_title)
|
||||
.setMessage(R.string.download_resources_custom_url_message)
|
||||
.setView(dialogView)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.save, null);
|
||||
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.setOnShowListener(dlg -> {
|
||||
Button ok = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
|
||||
ok.setOnClickListener(v -> {
|
||||
String url = edit.getText() != null ? edit.getText().toString().trim() : "";
|
||||
|
||||
if (!url.isEmpty()
|
||||
&& !url.startsWith("http://")
|
||||
&& !url.startsWith("https://"))
|
||||
{
|
||||
til.setError(context.getString(R.string.download_resources_custom_url_error_scheme));
|
||||
return;
|
||||
}
|
||||
|
||||
til.setError(null);
|
||||
|
||||
String normalizedUrl = Framework.normalizeServerUrl(url);
|
||||
|
||||
prefs.edit()
|
||||
.putString(context.getString(R.string.pref_custom_map_download_url), normalizedUrl)
|
||||
.apply();
|
||||
|
||||
// Apply to native
|
||||
Framework.applyCustomMapDownloadUrl(context, normalizedUrl);
|
||||
|
||||
if (listener != null)
|
||||
listener.onUrlApplied(normalizedUrl);
|
||||
|
||||
dialog.dismiss();
|
||||
});
|
||||
});
|
||||
|
||||
dialog.show();
|
||||
}
|
||||
}
|
||||
@@ -4,23 +4,16 @@ import static app.organicmaps.leftbutton.LeftButtonsHolder.DISABLE_BUTTON_CODE;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.preference.TwoStatePreference;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.dialog.CustomMapServerDialog;
|
||||
import app.organicmaps.downloader.OnmapDownloader;
|
||||
import app.organicmaps.editor.LanguagesFragment;
|
||||
import app.organicmaps.editor.ProfileActivity;
|
||||
@@ -42,7 +35,7 @@ import app.organicmaps.sdk.util.SharedPropertiesUtils;
|
||||
import app.organicmaps.sdk.util.log.LogsManager;
|
||||
import app.organicmaps.util.ThemeSwitcher;
|
||||
import app.organicmaps.util.Utils;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -80,7 +73,6 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
initScreenSleepEnabledPrefsCallbacks();
|
||||
initShowOnLockScreenPrefsCallbacks();
|
||||
initLeftButtonPrefs();
|
||||
initCustomMapDownloadUrlPrefsCallbacks();
|
||||
}
|
||||
|
||||
private void initLeftButtonPrefs()
|
||||
@@ -543,34 +535,6 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
});
|
||||
}
|
||||
|
||||
private void initCustomMapDownloadUrlPrefsCallbacks()
|
||||
{
|
||||
Preference customUrlPref = getPreference(getString(R.string.pref_custom_map_download_url));
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(requireContext());
|
||||
|
||||
String current = prefs.getString(getString(R.string.pref_custom_map_download_url), "");
|
||||
String normalizedUrl = Framework.normalizeServerUrl(current);
|
||||
|
||||
// Initial summary
|
||||
customUrlPref.setSummary(normalizedUrl.isEmpty()
|
||||
? getString(R.string.download_resources_custom_url_summary_none)
|
||||
: normalizedUrl);
|
||||
|
||||
// Sync native
|
||||
Framework.applyCustomMapDownloadUrl(requireContext(), normalizedUrl);
|
||||
|
||||
// Show dialog
|
||||
customUrlPref.setOnPreferenceClickListener(preference -> {
|
||||
CustomMapServerDialog.show(requireContext(), url -> {
|
||||
preference.setSummary(url.isEmpty()
|
||||
? getString(R.string.download_resources_custom_url_summary_none)
|
||||
: url);
|
||||
});
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void removePreference(@NonNull String categoryKey, @NonNull Preference preference)
|
||||
{
|
||||
final PreferenceCategory category = getPreference(categoryKey);
|
||||
|
||||
@@ -700,27 +700,22 @@ public class PlacePageView extends Fragment
|
||||
|
||||
if (shouldEnableEditPlace)
|
||||
{
|
||||
mTvEditPlace.setEnabled(true);
|
||||
mTvAddPlace.setEnabled(true);
|
||||
mTvEditPlace.setOnClickListener(this);
|
||||
mTvAddPlace.setOnClickListener(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
mTvEditPlace.setOnClickListener((v) -> {
|
||||
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
|
||||
});
|
||||
mTvAddPlace.setOnClickListener((v) -> {
|
||||
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
|
||||
});
|
||||
|
||||
String countryId = MapManager.nativeGetSelectedCountry();
|
||||
|
||||
if (countryId != null && MapManager.nativeIsMapTooOldToEdit(countryId))
|
||||
if (countryId != null)
|
||||
{
|
||||
// map editing is disabled because the map is too old
|
||||
mTvEditPlace.setEnabled(true);
|
||||
mTvAddPlace.setEnabled(true);
|
||||
mTvEditPlace.setOnClickListener((v) -> {
|
||||
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
|
||||
});
|
||||
mTvAddPlace.setOnClickListener((v) -> {
|
||||
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
|
||||
});
|
||||
|
||||
CountryItem map = CountryItem.fill(countryId);
|
||||
|
||||
if (map.status == CountryItem.STATUS_UPDATABLE || map.status == CountryItem.STATUS_DONE
|
||||
@@ -745,12 +740,6 @@ public class PlacePageView extends Fragment
|
||||
mapTooOldDescription.setText(R.string.place_page_app_too_old_description);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// map editing is disabled for other reasons
|
||||
mTvEditPlace.setEnabled(false);
|
||||
mTvAddPlace.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
final int editButtonColor =
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
<shape
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/bg_window"/>
|
||||
<solid android:color="@color/bg_panel"/>
|
||||
<corners android:radius="100dp"/>
|
||||
</shape>
|
||||
@@ -2,5 +2,5 @@
|
||||
<shape
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval">
|
||||
<solid android:color="@color/bg_window"/>
|
||||
<solid android:color="@color/bg_panel"/>
|
||||
</shape>
|
||||
@@ -1,11 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:tint="?colorControlNormal"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportHeight="960"
|
||||
android:viewportWidth="960">
|
||||
|
||||
<path android:fillColor="@android:color/white"
|
||||
android:pathData="M260,800Q169,800 104.5,737Q40,674 40,583Q40,505 87,444Q134,383 210,366Q227,294 295,229Q363,164 440,164Q473,164 496.5,187.5Q520,211 520,244L520,486L584,424L640,480L480,640L320,480L376,424L440,486L440,244Q364,258 322,317.5Q280,377 280,440L260,440Q202,440 161,481Q120,522 120,580Q120,638 161,679Q202,720 260,720L740,720Q782,720 811,691Q840,662 840,620Q840,578 811,549Q782,520 740,520L680,520L680,440Q680,392 658,350.5Q636,309 600,280L600,187Q674,222 717,290.5Q760,359 760,440L760,440L760,440Q829,448 874.5,499.5Q920,551 920,620Q920,695 867.5,747.5Q815,800 740,800L260,800ZM480,442Q480,442 480,442Q480,442 480,442L480,442Q480,442 480,442Q480,442 480,442L480,442Q480,442 480,442Q480,442 480,442L480,442Q480,442 480,442Q480,442 480,442Q480,442 480,442Q480,442 480,442L480,442Q480,442 480,442Q480,442 480,442Q480,442 480,442Q480,442 480,442L480,442L480,442Q480,442 480,442Q480,442 480,442Z"/>
|
||||
|
||||
</vector>
|
||||
@@ -11,18 +11,6 @@
|
||||
android:layout_height="match_parent"
|
||||
android:layout_above="@+id/button_container"
|
||||
android:layout_gravity="center">
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn_advanced"
|
||||
style="@style/Widget.Material3.Button.IconButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:icon="@drawable/ic_settings"
|
||||
app:iconTint="?iconTint"
|
||||
android:contentDescription="@string/download_resources_custom_url_title"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_margin="@dimen/margin_half" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/til_custom_map_server"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="@dimen/margin_base"
|
||||
android:paddingEnd="@dimen/margin_base"
|
||||
android:paddingTop="@dimen/margin_base"
|
||||
android:paddingBottom="@dimen/margin_half"
|
||||
android:hint="@string/download_resources_custom_url_title"
|
||||
app:placeholderText="@string/download_resources_custom_url_hint"
|
||||
app:endIconMode="clear_text">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/edit_custom_map_server"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="textUri"
|
||||
android:singleLine="true" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
@@ -24,7 +24,7 @@
|
||||
android:id="@+id/items_frame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?windowBackgroundForced">
|
||||
android:background="?panel">
|
||||
<include
|
||||
layout="@layout/item_missed_map"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
android:id="@+id/items_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?windowBackgroundForced"
|
||||
android:background="?panel"
|
||||
android:listSelector="?clickableBackground"
|
||||
android:drawSelectorOnTop="true"/>
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
android:layout_below="@id/tv__bookmark_set_title"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="@dimen/margin_quadruple"
|
||||
android:background="?selectableItemBackground"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:paddingTop="@dimen/margin_quarter_plus"
|
||||
android:paddingBottom="@dimen/margin_half_plus"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:background="?cardBackground"
|
||||
android:background="?attr/cardBackground"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
@@ -11,6 +11,7 @@
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?colorPrimary"
|
||||
android:gravity="end|center_vertical"
|
||||
android:theme="@style/MwmWidget.ToolbarTheme">
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
app:srcCompat="@drawable/ic_done"
|
||||
android:layout_width="?actionBarSize"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:layout_gravity="end|center_vertical"
|
||||
android:scaleType="centerInside"
|
||||
android:contentDescription="@string/save" />
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
<FrameLayout
|
||||
android:id="@+id/fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
android:layout_height="match_parent"
|
||||
android:background="?panel"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?colorPrimary"
|
||||
android:gravity="end|center_vertical"
|
||||
android:theme="@style/MwmWidget.ToolbarTheme">
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
<ScrollView
|
||||
android:id="@+id/scrollView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:background="?panel">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
android:id="@+id/app_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?colorPrimary"
|
||||
android:background="?attr/colorPrimary"
|
||||
android:elevation="@dimen/dp_0"
|
||||
app:elevation="@dimen/dp_0">
|
||||
<include
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
android:paddingStart="0dp"
|
||||
android:paddingEnd="@dimen/altitude_chart_container_padding_left">
|
||||
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/divider_height"
|
||||
android:background="?dividerHorizontal"/>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?windowBackgroundForced"
|
||||
android:background="?panel"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/margin_half_plus"
|
||||
android:layout_marginBottom="@dimen/margin_quarter"
|
||||
android:background="?selectableItemBackground"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="@dimen/margin_quarter"
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?cardBackground"
|
||||
android:background="?panel"
|
||||
android:padding="@dimen/margin_base"
|
||||
android:text="@string/editor_focus_map_on_location"
|
||||
app:layout_constraintTop_toBottomOf="@+id/toolbar_point_chooser" />
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
android:id="@+id/pp_buttons_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?windowBackgroundForced"
|
||||
android:background="?ppButtonsBackground"
|
||||
android:orientation="horizontal"
|
||||
android:layout_gravity="bottom">
|
||||
<include layout="@layout/item_divider" />
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
android:layout_width="?attr/actionBarSize"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:layout_alignParentStart="true"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
app:srcCompat="?homeAsUpIndicator"
|
||||
android:scaleType="center"
|
||||
tools:src="@drawable/ic_expand_more" />
|
||||
@@ -143,7 +143,7 @@
|
||||
android:id="@+id/driving_options_btn_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?drivingOptionsViewBg"
|
||||
android:background="?attr/drivingOptionsViewBg"
|
||||
android:foreground="@drawable/shadow_top"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
@@ -151,7 +151,7 @@
|
||||
android:id="@+id/driving_options_btn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:gravity="center"
|
||||
android:minHeight="@dimen/height_block_base">
|
||||
<LinearLayout
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
android:id="@+id/back"
|
||||
android:layout_width="?attr/actionBarSize"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
app:srcCompat="?homeAsUpIndicator"
|
||||
android:scaleType="center"
|
||||
tools:src="@drawable/ic_expand_more"
|
||||
@@ -52,7 +52,7 @@
|
||||
android:layout_height="?actionBarSize"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="0"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/clear_the_search"
|
||||
android:scaleType="center"
|
||||
app:srcCompat="@drawable/ic_close"/>
|
||||
@@ -63,7 +63,7 @@
|
||||
android:layout_height="?actionBarSize"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="0"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@null"
|
||||
android:scaleType="center"
|
||||
app:srcCompat="@drawable/ic_mic_white"
|
||||
|
||||
@@ -502,7 +502,7 @@
|
||||
<string name="placepage_edit_bookmark_button">Lesezeichen bearbeiten</string>
|
||||
<string name="placepage_personal_notes_hint">Persönliche Notizen (Text oder html)</string>
|
||||
<string name="editor_reset_edits_message">Alle lokalen Änderungen verwerfen?</string>
|
||||
<string name="editor_reset_edits_button">Änderungen verwerfen</string>
|
||||
<string name="editor_reset_edits_button">Verwerfen</string>
|
||||
<string name="editor_remove_place_message">Hinzugefügtes Objekt löschen?</string>
|
||||
<string name="editor_remove_place_button">Löschen</string>
|
||||
<string name="editor_place_doesnt_exist">Dieser Ort existiert nicht</string>
|
||||
@@ -902,17 +902,9 @@
|
||||
<item quantity="other">%d min</item>
|
||||
</plurals>
|
||||
<string name="editor_business_vacant_button">Geschäft steht leer</string>
|
||||
<string name="editor_mark_business_vacant_title">Geschäft auf leerstehend setzen</string>
|
||||
<string name="editor_mark_business_vacant_title">Geschäft als leerstehend markieren</string>
|
||||
<string name="editor_submit">Absenden</string>
|
||||
<string name="editor_mark_business_vacant_description">Verwenden Sie diese Option, wenn das Geschäft ausgezogen ist und ein neues Geschäft die leerstehenden Räume übernehmen könnte.</string>
|
||||
<string name="editor_mark_business_vacant_description">Wenn das Unternehmen ausgezogen ist und die Fläche leer und bereit für die nächste Miete ist.</string>
|
||||
<string name="charge_socket_schuko">Schuko</string>
|
||||
<string name="power_management">Energiemanagement</string>
|
||||
<string name="place_page_map_too_old_title">Kartendaten veraltet</string>
|
||||
<string name="place_page_map_too_old_description">Die aktuellen Kartendaten sind sehr alt, bitte aktualisiere die Karte.</string>
|
||||
<string name="place_page_app_too_old_description">Die aktuellen Kartendaten sind sehr alt, bitte aktualisiere die CoMaps-App.</string>
|
||||
<string name="place_page_update_too_old_map">Kartenregion aktualisieren</string>
|
||||
<string name="place_page_too_old_to_edit">OpenStreetMap-Bearbeitung ist deaktiviert, da die Kartendaten zu alt sind.</string>
|
||||
<string name="prefs_speed_cameras_information">Blitzerwarnungen sind in Ländern deaktiviert, in denen Warnungen durch lokale Gesetze verboten sind.</string>
|
||||
<string name="navigation_start_tts_message">"Navigation wird gestartet, Sprache der Sprachansagen: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Sprachansagen deaktiviert: TTS-Engine nicht verfügbar</string>
|
||||
</resources>
|
||||
|
||||
@@ -42,15 +42,15 @@
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_proposition_3">• آفلاین، چابک و جمع و جور</string>
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_developed_by_enthusiasts">ویدابُن بُوَندگ، نه ازبرای سود، وزیریدن اود تیسهای مالی رو راست.</string>
|
||||
<string name="about_developed_by_enthusiasts">منبع کاملا باز، نه برای سود، تصمیم گیری شفاف و امور مالی شفاف.</string>
|
||||
<!-- The button that opens system location settings -->
|
||||
<string name="location_settings">پیکربندیهای گیاگ</string>
|
||||
<string name="close">بستن</string>
|
||||
<string name="unsupported_phone">برنامه به OpenGL نیازمند است.شوربختانه، از دستگاه شما پشتیبانی نمیشود.</string>
|
||||
<string name="unsupported_phone">متأسفانه دستگاه شما از آن پشتیبانی نمیکندبرنامه برای اجرا به OpenGL نیازمند است.</string>
|
||||
<string name="download">بارگیری</string>
|
||||
<!-- Used in DownloadResources startup screen -->
|
||||
<string name="not_enough_free_space_on_sdcard">لطفا پیش از بکارگیری برنامه، نخست کمی جا در کارت SD/ویر USB آزاد کنید</string>
|
||||
<string name="download_resources">پیش از بکارگیری برنامه, لطفا نقشه پیشنمایش جهانی را بر روی دستگاه خویش بارگیری کنید.\nاندازه %s از ویر شما را میگیرد.</string>
|
||||
<string name="not_enough_free_space_on_sdcard">لطفا مقداری از فضای ذخیرهسازی را آزاد نمایید</string>
|
||||
<string name="download_resources">قبل از استفاده از اپلیکیشن, اجازه دهید تا ما نقشه جهانی را بر روی موبایل شما دانلود کنیم. \nمقدار %s از حافظه شما اشغال می شود.</string>
|
||||
<string name="download_resources_continue">برو به نقشه</string>
|
||||
<string name="downloading_country_can_proceed">بارگیری میشود %1$s (%2$s). شما اکنون میتوانید\nبه نقشه بروید.</string>
|
||||
<string name="download_country_ask">بارگیری %1$s؟ (%2$s)</string>
|
||||
@@ -64,7 +64,7 @@
|
||||
<!-- "Add new bookmark list" dialog title -->
|
||||
<string name="add_new_set">افزودن پهرستی نو</string>
|
||||
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
|
||||
<string name="bookmarks">نشانگها</string>
|
||||
<string name="bookmarks">نشانهها</string>
|
||||
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
|
||||
<string name="bookmarks_and_tracks">نشانهها و مسیر ها</string>
|
||||
<!-- Add bookmark dialog - bookmark name -->
|
||||
@@ -138,7 +138,7 @@
|
||||
<!-- Notes field in Bookmarks view -->
|
||||
<string name="description">یادداشتها</string>
|
||||
<!-- message title of loading file -->
|
||||
<string name="load_kmz_title">بارگذاری نشانگها</string>
|
||||
<string name="load_kmz_title">در حال بارگیری نشانهها</string>
|
||||
<!-- Kmz file successful loading -->
|
||||
<string name="load_kmz_successful">نشانهها با موفقیت بارگذاری شد!شما می توانید آنها را در نقشه یا بخش مدیریت نشانهها بیابید.</string>
|
||||
<!-- Kml file loading failed -->
|
||||
@@ -784,6 +784,4 @@
|
||||
<string name="backup_interval_every_week">هفتگی</string>
|
||||
<string name="backup_interval_manual_only">خاموش (تنها به شیوه دستی)</string>
|
||||
<string name="backup_interval_every_day">روزانه</string>
|
||||
<string name="disconnect_usb_cable">برای بکارگیری CoMaps، لطفا USB را بگسلانید یا کارتویر را اندرون گذارید.</string>
|
||||
<string name="bookmark_set_name">نام پهرست نشانگها</string>
|
||||
</resources>
|
||||
|
||||
@@ -373,6 +373,4 @@
|
||||
<string name="offline_explanation_title">Mappys Dhywarlinen</string>
|
||||
<string name="category_shopping">Gwerthjiow</string>
|
||||
<string name="edit">Golegi</string>
|
||||
<string name="downloader_no_space_title">Nyns eus lowr dalghuster</string>
|
||||
<string name="translated_om_site_url">https://comaps.app/</string>
|
||||
</resources>
|
||||
|
||||
@@ -503,7 +503,7 @@
|
||||
<string name="placepage_edit_bookmark_button">Rediger bokmerke</string>
|
||||
<string name="placepage_personal_notes_hint">Personlige notater (tekst eller html)</string>
|
||||
<string name="editor_reset_edits_message">Forkaste alle lokale endringer?</string>
|
||||
<string name="editor_reset_edits_button">Forkast endringer</string>
|
||||
<string name="editor_reset_edits_button">Forkast</string>
|
||||
<string name="editor_remove_place_message">Slette tillagt sted?</string>
|
||||
<string name="editor_remove_place_button">Slett</string>
|
||||
<string name="editor_place_doesnt_exist">Sted finnes ikke</string>
|
||||
@@ -906,10 +906,4 @@
|
||||
<string name="place_page_too_old_to_edit">OpenStreetMap-redigering er deaktivert fordi kartdataene er for gamle.</string>
|
||||
<string name="osm_note_hint">Alternativt, så kan du legge til et notat i OpenStreetMap, slik at noen andre kan redigere eller legge til stedet.</string>
|
||||
<string name="osm_note_toast">Notatet vil bli sendt til OpenStreetMap</string>
|
||||
<string name="advanced">Avansert</string>
|
||||
<string name="download_resources_custom_url_summary_none">Ikke angitt</string>
|
||||
<string name="download_resources_custom_url_error_scheme">Angi en fullstendig nettadresse som starter med https:// og slutter med /</string>
|
||||
<string name="download_resources_custom_url_hint">https://cdn-fi-1.comaps.app/</string>
|
||||
<string name="download_resources_custom_url_message">Overstyr standardserveren som brukes til nedlasting av kart. La det stå tomt for å bruke CoMaps standardserver.</string>
|
||||
<string name="download_resources_custom_url_title">Tilpasset kartserver</string>
|
||||
</resources>
|
||||
|
||||
@@ -88,6 +88,19 @@
|
||||
<item name="android:textAppearanceSmall">@style/TextAppearance.Small</item>
|
||||
<item name="android:textAppearanceMedium">@style/TextAppearance.Medium</item>
|
||||
<item name="android:textAppearanceLarge">@style/TextAppearance.Large</item>
|
||||
<item name="fontHeadline1">@style/TextAppearance.Headline1</item>
|
||||
<item name="fontHeadline2">@style/TextAppearance.Headline2</item>
|
||||
<item name="fontHeadline3">@style/TextAppearance.Headline3</item>
|
||||
<item name="fontHeadline4">@style/TextAppearance.Headline4</item>
|
||||
<item name="fontHeadline5">@style/TextAppearance.MaterialComponents.Headline5</item>
|
||||
<item name="fontHeadline6">@style/TextAppearance.Headline6</item>
|
||||
<item name="fontSubtitle1">@style/TextAppearance.Subtitle1</item>
|
||||
<item name="fontSubtitle2">@style/TextAppearance.Subtitle2</item>
|
||||
<item name="fontBody1">@style/TextAppearance.Body1</item>
|
||||
<item name="fontBody2">@style/TextAppearance.Body2</item>
|
||||
<item name="fontButton">@style/TextAppearance.Button</item>
|
||||
<item name="fontCaption">@style/TextAppearance.Caption</item>
|
||||
<item name="fontOverline">@style/TextAppearance.Overline</item>
|
||||
<item name="drivingOptionsViewBg">@color/bg_primary_dark</item>
|
||||
<item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item>
|
||||
<item name="elevationProfilePropIconTint">@color/white_secondary</item>
|
||||
|
||||
@@ -909,10 +909,4 @@
|
||||
<string name="prefs_speed_cameras_information">Avisos de câmaras de velocidade estão desativados em países onde alertas estão proibidos por lei.</string>
|
||||
<string name="navigation_start_tts_message">"Iniciando Navegação, idioma das instruções por voz: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instruções por voz desativadas: nenhum motor de TTS disponível</string>
|
||||
<string name="advanced">Avançadas</string>
|
||||
<string name="download_resources_custom_url_title">Servidor de Mapa Personalizado</string>
|
||||
<string name="download_resources_custom_url_message">Substitui o servidor de download de mapas normal. Deixe em branco para usar o servidor do CoMaps padrão.</string>
|
||||
<string name="download_resources_custom_url_hint">https://cdn-fi-1.comaps.app/</string>
|
||||
<string name="download_resources_custom_url_summary_none">Indefinido</string>
|
||||
<string name="download_resources_custom_url_error_scheme">Por favor insira um URL inteiro começando com https:// e acabando com /</string>
|
||||
</resources>
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
<!-- Preference title -->
|
||||
<string name="google_play_services">Serviciul de Localizare Fuzionat Google</string>
|
||||
<!-- Preference text -->
|
||||
<string name="pref_use_google_play">Un serviciu proprietar care combină GPS, Wi-Fi, rețelele celulare etc. pentru a-ți determina locația mai precis. Se poate conecta la serverele Google.</string>
|
||||
<string name="pref_use_google_play">Un serviciu proprietar care combină GPS, Wi-Fi, rețelele celulare etc. pentru a-ți determina locația mai precisă. Se poate conecta la serverele Google.</string>
|
||||
<!-- Preference title -->
|
||||
<!-- Preference description -->
|
||||
<!-- Text for routing error dialog -->
|
||||
@@ -460,7 +460,7 @@
|
||||
<string name="osm_presentation">Date OpenStreetMap create de comunitate la data de %s. Aflați mai multe despre cum să editați și să actualizați harta la OpenStreetMap.org</string>
|
||||
<!-- OSM explanation on Android login screen -->
|
||||
<string name="login_osm_presentation">OpenStreetMap.org (OSM) este un proiect comunitar pentru construirea unei hărți libere și deschise. Este principala sursă de date cartografice în CoMaps și funcționează similar cu Wikipedia. Puteți adăuga sau edita locuri, iar acestea devin disponibile pentru milioane de utilizatori din întreaga lume. \nAlăturați-vă comunității și ajutați la crearea unei hărți mai bune pentru toată lumea!</string>
|
||||
<string name="login_to_make_edits_visible">Creați un cont OpenStreetMap sau conectați-vă pentru a vă publica editările hărții pentru întreaga lume</string>
|
||||
<string name="login_to_make_edits_visible">Creați un cont OpenStreetMap sau conectați-vă pentru a vă publica edițiile de hartă în întreaga lume</string>
|
||||
<!-- Downloaded 10 **of** 20 <- it is that "of" -->
|
||||
<string name="downloader_of">%1$d din %2$d</string>
|
||||
<string name="download_over_mobile_header">Vrei să descarci prin rețeaua de telefonie mobilă?</string>
|
||||
@@ -475,7 +475,7 @@
|
||||
<!-- Hint of the input field in the OSM note section of the editor -->
|
||||
<string name="editor_note_hint">Descrieți erorile de pe hartă sau lucrurile care nu pot fi editate cu CoMaps</string>
|
||||
<!-- Information about OSM at the top of the editing page -->
|
||||
<string name="editor_about_osm">Editările dvs. sunt încărcate în baza de date publică <a href="https://wiki.openstreetmap.org/wiki/About_OpenStreetMap">OpenStreetMap</a>. Vă rugăm să nu adăugați informații personale sau protejate prin drepturi de autor.</string>
|
||||
<string name="editor_about_osm">Edițiile dvs. sunt încărcate în baza de date publică <a href="https://wiki.openstreetmap.org/wiki/About_OpenStreetMap">OpenStreetMap</a>. Vă rugăm să nu adăugați informații personale sau protejate prin drepturi de autor.</string>
|
||||
<string name="editor_more_about_osm">Mai multe despre OpenStreetMap</string>
|
||||
<string name="editor_osm_history">Istoricul dvs. de editare</string>
|
||||
<string name="editor_osm_notes">Note privind datele hărții dvs</string>
|
||||
@@ -889,13 +889,4 @@
|
||||
<string name="list_description_empty">Editează lista ca să adaugi o descriere</string>
|
||||
<string name="charging_station_available_sockets">Conectori</string>
|
||||
<string name="charge_socket_unknown_other">Alte tipuri necunoscute</string>
|
||||
<string name="place_page_map_too_old_title">Harta este prea veche</string>
|
||||
<string name="place_page_map_too_old_description">Harta dvs. este foarte veche, vă rugăm actualizați-o.</string>
|
||||
<string name="place_page_app_too_old_description">Harta dvs. este foarte veche, vă rugăm actualizați CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Actualizează harta</string>
|
||||
<string name="place_page_too_old_to_edit">Editarea OpenStreetMap este dezactivată pentru că harta descărcată este prea veche.</string>
|
||||
<string name="prefs_speed_cameras_information">Avertizările pentru radare sunt dezactivate unde avertizarea este interzisă de legea locală.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instrucțiuni vocale dezactivate: Nu este disponibil niciun sistem TTS</string>
|
||||
<string name="charge_socket_count">Număr</string>
|
||||
<string name="unknown_count">Necunoscut</string>
|
||||
</resources>
|
||||
|
||||
@@ -893,5 +893,4 @@
|
||||
<string name="unknown_count">bilinmiyor</string>
|
||||
<string name="error_value_must_be_positive">Değer pozitif olmalıdır</string>
|
||||
<string name="error_invalid_number">Geçersiz sayı</string>
|
||||
<string name="avoid_paved">Asfalt yollardan kaçın</string>
|
||||
</resources>
|
||||
|
||||
@@ -43,8 +43,6 @@
|
||||
<string name="pref_backup" translatable="false">Backup</string>
|
||||
<string name="pref_left_button" translatable="false">LeftButton</string>
|
||||
<string name="pref_power" translatable="false">pref_power</string>
|
||||
<string name="pref_custom_map_download_url" translatable="false">CustomMapDownloadUrl</string>
|
||||
<string name="pref_advanced" translatable="false">pref_advanced</string>
|
||||
|
||||
<string name="notification_ticker_ltr" translatable="false">%1$s: %2$s</string>
|
||||
<string name="notification_ticker_rtl" translatable="false">%2$s :%1$s</string>
|
||||
|
||||
@@ -544,7 +544,7 @@
|
||||
<string name="placepage_edit_bookmark_button">Edit Bookmark</string>
|
||||
<string name="placepage_personal_notes_hint">Personal notes (text or html)</string>
|
||||
<string name="editor_reset_edits_message">Discard all local changes?</string>
|
||||
<string name="editor_reset_edits_button">Discard changes</string>
|
||||
<string name="editor_reset_edits_button">Discard</string>
|
||||
<string name="editor_remove_place_message">Delete added place?</string>
|
||||
<string name="editor_remove_place_button">Delete</string>
|
||||
<string name="editor_place_doesnt_exist">Place does not exist</string>
|
||||
@@ -966,12 +966,4 @@
|
||||
<string name="offline_explanation_title">Offline Maps</string>
|
||||
<string name="offline_explanation_text">A map needs to be downloaded to view and navigate the area.\nDownload maps for areas you want to travel.</string>
|
||||
<string name="list_description_empty">Edit the list to add a description</string>
|
||||
<!-- Settings: Advanced group -->
|
||||
<string name="advanced">Advanced</string>
|
||||
<!-- Custom Download URL -->
|
||||
<string name="download_resources_custom_url_title">Custom Map Server</string>
|
||||
<string name="download_resources_custom_url_message">Override the default map download server used for map downloads. Leave empty to use CoMaps default server.</string>
|
||||
<string name="download_resources_custom_url_hint">https://cdn-fi-1.comaps.app/</string>
|
||||
<string name="download_resources_custom_url_summary_none">Not set</string>
|
||||
<string name="download_resources_custom_url_error_scheme">Please enter a full URL starting with https:// and ending with /</string>
|
||||
</resources>
|
||||
|
||||
@@ -69,4 +69,19 @@
|
||||
<attr name="elevationProfileSelectedPointTriangle" format="reference" />
|
||||
<attr name="elevationProfileFloatingTriangle" format="reference" />
|
||||
</declare-styleable>
|
||||
<declare-styleable name="ThemeAttrs.Fonts">
|
||||
<attr name="fontHeadline1" format="reference" />
|
||||
<attr name="fontHeadline2" format="reference" />
|
||||
<attr name="fontHeadline3" format="reference" />
|
||||
<attr name="fontHeadline4" format="reference" />
|
||||
<attr name="fontHeadline5" format="reference" />
|
||||
<attr name="fontHeadline6" format="reference" />
|
||||
<attr name="fontSubtitle1" format="reference" />
|
||||
<attr name="fontSubtitle2" format="reference" />
|
||||
<attr name="fontBody1" format="reference" />
|
||||
<attr name="fontBody2" format="reference" />
|
||||
<attr name="fontButton" format="reference" />
|
||||
<attr name="fontCaption" format="reference" />
|
||||
<attr name="fontOverline" format="reference" />
|
||||
</declare-styleable>
|
||||
</resources>
|
||||
|
||||
@@ -93,6 +93,19 @@
|
||||
<item name="android:textAppearanceSmallInverse">@style/TextAppearance.Small.Inverse</item>
|
||||
<item name="android:textAppearanceMediumInverse">@style/TextAppearance.Medium.Inverse</item>
|
||||
<item name="android:textAppearanceLargeInverse">@style/TextAppearance.Large.Inverse</item>
|
||||
<item name="fontHeadline1">@style/TextAppearance.Headline1</item>
|
||||
<item name="fontHeadline2">@style/TextAppearance.Headline2</item>
|
||||
<item name="fontHeadline3">@style/TextAppearance.Headline3</item>
|
||||
<item name="fontHeadline4">@style/TextAppearance.Headline4</item>
|
||||
<item name="fontHeadline5">@style/TextAppearance.MaterialComponents.Headline5</item>
|
||||
<item name="fontHeadline6">@style/TextAppearance.Headline6</item>
|
||||
<item name="fontSubtitle1">@style/TextAppearance.Subtitle1</item>
|
||||
<item name="fontSubtitle2">@style/TextAppearance.Subtitle2</item>
|
||||
<item name="fontBody1">@style/TextAppearance.Body1</item>
|
||||
<item name="fontBody2">@style/TextAppearance.Body2</item>
|
||||
<item name="fontButton">@style/TextAppearance.Button</item>
|
||||
<item name="fontCaption">@style/TextAppearance.Caption</item>
|
||||
<item name="fontOverline">@style/TextAppearance.Overline</item>
|
||||
<item name="drivingOptionsViewBg">@color/bg_primary_dark</item>
|
||||
<item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item>
|
||||
<item name="elevationProfilePropIconTint">@color/black_secondary</item>
|
||||
|
||||
@@ -144,8 +144,7 @@
|
||||
</intent>
|
||||
</PreferenceScreen>
|
||||
</androidx.preference.PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
<PreferenceCategory
|
||||
android:key="@string/pref_power"
|
||||
android:title="@string/power_management"
|
||||
android:order="4">
|
||||
@@ -191,8 +190,7 @@
|
||||
android:defaultValue="true"
|
||||
android:widgetLayout="@layout/preference_switch"
|
||||
android:order="5"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceCategory>
|
||||
<androidx.preference.PreferenceCategory
|
||||
android:key="@string/pref_privacy"
|
||||
android:title="@string/privacy"
|
||||
@@ -214,18 +212,5 @@
|
||||
android:defaultValue="true"
|
||||
android:widgetLayout="@layout/preference_switch"
|
||||
android:order="2"/>
|
||||
|
||||
</androidx.preference.PreferenceCategory>
|
||||
|
||||
<androidx.preference.PreferenceCategory
|
||||
android:key="@string/pref_advanced"
|
||||
android:title="@string/advanced"
|
||||
android:order="6">
|
||||
<Preference
|
||||
android:key="@string/pref_custom_map_download_url"
|
||||
android:title="@string/download_resources_custom_url_title"
|
||||
app:icon="@drawable/ic_cloud_download"
|
||||
android:order="1" />
|
||||
</androidx.preference.PreferenceCategory>
|
||||
|
||||
</androidx.preference.PreferenceScreen>
|
||||
|
||||
@@ -124,7 +124,6 @@ dependencies {
|
||||
implementation libs.androidx.lifecycle.process
|
||||
implementation libs.androidx.media
|
||||
implementation libs.androidx.recyclerview
|
||||
implementation libs.androidx.preference
|
||||
implementation libs.android.material
|
||||
|
||||
testImplementation libs.junit
|
||||
|
||||
1
android/sdk/src/main/assets/mapcss-mapping.csv
Symbolic link
1
android/sdk/src/main/assets/mapcss-mapping.csv
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../data/mapcss-mapping.csv
|
||||
|
@@ -42,16 +42,12 @@ using namespace std::placeholders;
|
||||
|
||||
namespace
|
||||
{
|
||||
std::unique_ptr<MapFilesDownloader> & LegacyDownloader()
|
||||
{
|
||||
static auto downloader = storage::GetDownloader();
|
||||
return downloader;
|
||||
}
|
||||
|
||||
static std::vector<platform::CountryFile> g_filesToDownload;
|
||||
static int g_totalDownloadedBytes;
|
||||
static int g_totalBytesToDownload;
|
||||
static std::shared_ptr<HttpRequest> g_currentRequest;
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C"
|
||||
@@ -156,11 +152,11 @@ JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_
|
||||
return ERR_NO_MORE_FILES;
|
||||
|
||||
/// @todo One downloader instance with cached servers. All this routine will be refactored some time.
|
||||
auto & downloader = LegacyDownloader();
|
||||
static auto downloader = storage::GetDownloader();
|
||||
storage::Storage const & storage = g_framework->GetStorage();
|
||||
downloader->SetDataVersion(storage.GetCurrentDataVersion());
|
||||
|
||||
downloader->EnsureMetaConfigReady([&storage, ptr = jni::make_global_ref(listener), &downloader]()
|
||||
downloader->EnsureMetaConfigReady([&storage, ptr = jni::make_global_ref(listener)]()
|
||||
{
|
||||
auto const & curFile = g_filesToDownload.back();
|
||||
auto const fileName = curFile.GetFileName(MapFileType::Map);
|
||||
@@ -181,12 +177,4 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_
|
||||
LOG(LDEBUG, ("cancelCurrentFile, currentRequest=", g_currentRequest));
|
||||
g_currentRequest.reset();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_nativeResetMetaConfig(JNIEnv *,
|
||||
jclass)
|
||||
{
|
||||
auto & downloader = LegacyDownloader();
|
||||
if (downloader)
|
||||
downloader->ResetMetaConfig();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1505,22 +1505,6 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeGet3dMode(JNIEnv
|
||||
env->SetBooleanField(result, buildingsField, buildings);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeSetCustomMapDownloadUrl(JNIEnv * env, jclass,
|
||||
jstring url)
|
||||
{
|
||||
std::string nativeUrl = jni::ToNativeString(env, url);
|
||||
GetPlatform().SetCustomMapServerUrl(nativeUrl);
|
||||
|
||||
if (g_framework)
|
||||
{
|
||||
frm()->GetStorage().ResetMapDownloadMetaConfig();
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(LINFO, ("nativeSetCustomMapDownloadUrl: framework not created yet, skipping ResetMapDownloadMetaConfig"));
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeSetAutoZoomEnabled(JNIEnv * env, jclass,
|
||||
jboolean enabled)
|
||||
{
|
||||
|
||||
@@ -587,11 +587,4 @@ JNIEXPORT jstring JNICALL Java_app_organicmaps_sdk_downloader_MapManager_nativeG
|
||||
storage::CountryId const & res = g_framework->GetPlacePageInfo().GetCountryId();
|
||||
return (res == storage::kInvalidCountryId ? nullptr : jni::ToJavaString(env, res));
|
||||
}
|
||||
|
||||
// static native boolean nativeIsMapTooOldToEdit(String countryId);
|
||||
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_downloader_MapManager_nativeIsMapTooOldToEdit(JNIEnv *env, jclass clazz,
|
||||
jstring country_id)
|
||||
{
|
||||
return GetStorage().IsMapTooOldToEdit(jni::ToNativeString(env, country_id));
|
||||
}
|
||||
} // extern "C"
|
||||
|
||||
@@ -27,5 +27,4 @@ public class DownloadResourcesLegacyActivity
|
||||
public static native int nativeGetBytesToDownload();
|
||||
public static native int nativeStartNextFileDownload(Listener listener);
|
||||
public static native void nativeCancelCurrentFile();
|
||||
public static native void nativeResetMetaConfig();
|
||||
}
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
package app.organicmaps.sdk;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.Size;
|
||||
|
||||
import app.organicmaps.sdk.api.ParsedRoutingData;
|
||||
import app.organicmaps.sdk.api.ParsedSearchRequest;
|
||||
import app.organicmaps.sdk.api.RequestType;
|
||||
@@ -26,7 +23,6 @@ import app.organicmaps.sdk.routing.RoutingRecommendationListener;
|
||||
import app.organicmaps.sdk.routing.TransitRouteInfo;
|
||||
import app.organicmaps.sdk.settings.SpeedCameraMode;
|
||||
import app.organicmaps.sdk.util.Constants;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
@@ -352,20 +348,4 @@ public class Framework
|
||||
|
||||
public static native void nativeMemoryWarning();
|
||||
public static native void nativeSaveRoute();
|
||||
public static native void nativeSetCustomMapDownloadUrl(String url);
|
||||
|
||||
public static void applyCustomMapDownloadUrl(@NonNull Context context, @Nullable String url)
|
||||
{
|
||||
nativeSetCustomMapDownloadUrl(normalizeServerUrl(url));
|
||||
// Reset the legacy downloader too (world/coasts).
|
||||
app.organicmaps.sdk.DownloadResourcesLegacyActivity.nativeResetMetaConfig();
|
||||
}
|
||||
|
||||
public static String normalizeServerUrl(@Nullable String url)
|
||||
{
|
||||
String out = url != null ? url.trim() : "";
|
||||
if (!out.isEmpty() && !out.endsWith("/"))
|
||||
out = out + "/";
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,13 +2,10 @@ package app.organicmaps.sdk;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.DefaultLifecycleObserver;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.lifecycle.ProcessLifecycleOwner;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.sdk.bookmarks.data.Icon;
|
||||
import app.organicmaps.sdk.downloader.Android7RootCertificateWorkaround;
|
||||
@@ -28,7 +25,6 @@ import app.organicmaps.sdk.util.SharedPropertiesUtils;
|
||||
import app.organicmaps.sdk.util.StorageUtils;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import app.organicmaps.sdk.util.log.LogsManager;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public final class OrganicMaps implements DefaultLifecycleObserver
|
||||
@@ -171,11 +167,6 @@ public final class OrganicMaps implements DefaultLifecycleObserver
|
||||
/* isTablet */ false);
|
||||
Config.setStoragePath(writablePath);
|
||||
|
||||
// Use the same prefs as SettingsPrefsFragment
|
||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
final String savedUrl = prefs.getString(mContext.getString(R.string.pref_custom_map_download_url), "");
|
||||
Framework.nativeSetCustomMapDownloadUrl(savedUrl.trim());
|
||||
|
||||
mPlatformInitialized = true;
|
||||
Logger.i(TAG, "Platform initialized");
|
||||
}
|
||||
|
||||
@@ -261,9 +261,4 @@ public final class MapManager
|
||||
* Returns country ID which the current PP object points to, or {@code null}.
|
||||
*/
|
||||
public static native @Nullable String nativeGetSelectedCountry();
|
||||
|
||||
/**
|
||||
* Returns true when the map exists and is too old for map editing.
|
||||
*/
|
||||
public static native boolean nativeIsMapTooOldToEdit(String countryId);
|
||||
}
|
||||
|
||||
@@ -707,7 +707,7 @@
|
||||
<string name="type.natural.beach.sand">Playa de arena</string>
|
||||
<string name="type.natural.beach.gravel">Playa de grava</string>
|
||||
<string name="type.natural.cape">Cabo</string>
|
||||
<string name="type.natural.cave_entrance">Entrada de cueva</string>
|
||||
<string name="type.natural.cave_entrance">Cueva</string>
|
||||
<string name="type.natural.cliff">Acantilado</string>
|
||||
<string name="type.natural.earth_bank">Talud de tierra</string>
|
||||
<string name="type.man_made.embankment">Terraplén</string>
|
||||
@@ -743,7 +743,7 @@
|
||||
<string name="type.natural.wetland.marsh">Ciénaga</string>
|
||||
<string name="type.noexit">Sin salida</string>
|
||||
<string name="type.office">Oficina</string>
|
||||
<string name="type.office.company">Oficina de compañía</string>
|
||||
<string name="type.office.company">Oficina</string>
|
||||
<string name="type.office.estate_agent">Agente inmobiliario</string>
|
||||
<string name="type.office.government">Oficina gubernamental</string>
|
||||
<string name="type.office.insurance">Oficina de seguros</string>
|
||||
@@ -784,13 +784,13 @@
|
||||
<string name="type.place.state">Estado</string>
|
||||
<string name="type.place.state.USA">Estado</string>
|
||||
<!-- Named part of a city or town, bigger than place=quarter (Wiki: https://wiki.openstreetmap.org/wiki/Tag:place%3Dsuburb) -->
|
||||
<string name="type.place.suburb">Suburbio</string>
|
||||
<string name="type.place.suburb">Barrio</string>
|
||||
<string name="type.place.town">Pueblo</string>
|
||||
<string name="type.place.village">Pueblo</string>
|
||||
<string name="type.power">Energía</string>
|
||||
<string name="type.power.generator">Generador</string>
|
||||
<string name="type.power.generator.solar">Generador solar</string>
|
||||
<string name="type.power.generator.wind">Aerogenerador</string>
|
||||
<string name="type.power.generator.wind">Generador de viento</string>
|
||||
<string name="type.power.generator.gas">Planta termoeléctrica de gas</string>
|
||||
<string name="type.power.generator.hydro">Planta hidroeléctrica</string>
|
||||
<string name="type.power.line">Línea eléctrica</string>
|
||||
@@ -849,10 +849,10 @@
|
||||
<string name="type.railway.station">Estación de tren</string>
|
||||
<string name="type.railway.station.funicular">Funicular</string>
|
||||
<string name="type.railway.station.light_rail">Estación de tren</string>
|
||||
<string name="type.railway.station.light_rail.berlin">Estación de tren (S-Bahn)</string>
|
||||
<string name="type.railway.station.light_rail.berlin">Estación de tren</string>
|
||||
<string name="type.railway.station.light_rail.london">Estación de tren</string>
|
||||
<string name="type.railway.station.light_rail.porto">Estación de metro</string>
|
||||
<string name="type.railway.station.monorail">Estación de monoriel</string>
|
||||
<string name="type.railway.station.light_rail.porto">Estación de tren</string>
|
||||
<string name="type.railway.station.monorail">Estación de tren</string>
|
||||
<string name="type.railway.station.subway">Estación de metro</string>
|
||||
<string name="type.railway.station.subway.adana">Estación de metro</string>
|
||||
<string name="type.railway.station.subway.algiers">Estación de metro</string>
|
||||
@@ -1207,7 +1207,7 @@
|
||||
<string name="type.shop.tobacco">Tabaco</string>
|
||||
<string name="type.shop.trade">Suministros comerciales</string>
|
||||
<string name="type.shop.watches">Relojes</string>
|
||||
<string name="type.shop.wholesale">Tienda al por mayor</string>
|
||||
<string name="type.shop.wholesale">Almacén al por mayor</string>
|
||||
<string name="type.sport">Deporte</string>
|
||||
<string name="type.sport.american_football">Fútbol americano</string>
|
||||
<string name="type.sport.archery">Tiro al arco</string>
|
||||
@@ -1247,7 +1247,7 @@
|
||||
<string name="type.tourism.aquarium">Acuario</string>
|
||||
<!-- Typically serviced, staff is present and food is available (compared to wilderness_hut). -->
|
||||
<string name="type.tourism.alpine_hut">Albergue de montaña</string>
|
||||
<string name="type.tourism.apartment">Apartamento vacacional</string>
|
||||
<string name="type.tourism.apartment">Apartamento de vacaciones</string>
|
||||
<string name="type.tourism.artwork">Obra de arte</string>
|
||||
<string name="type.tourism.artwork.architecture">Arte arquitectónico</string>
|
||||
<string name="type.tourism.artwork.painting">Pintura</string>
|
||||
|
||||
@@ -1494,5 +1494,4 @@
|
||||
<string name="type.spherical_buoy.safe_water">Faarvaatri kerapoi</string>
|
||||
<string name="type.man_made.mast.communication">Sidemast</string>
|
||||
<string name="type.shop.beauty.nails">Küünestuudio</string>
|
||||
<string name="type.amenity.hydrant">Kastmishüdrant</string>
|
||||
</resources>
|
||||
|
||||
@@ -1500,5 +1500,4 @@
|
||||
<string name="type.shop.beauty.nails">Nagelsalon</string>
|
||||
<string name="type.amenity.food_sharing">Voedsel delen</string>
|
||||
<string name="type.amenity.give_box">Giftenkist</string>
|
||||
<string name="type.amenity.hydrant">Watertappunt|waterkraan</string>
|
||||
</resources>
|
||||
|
||||
@@ -1501,5 +1501,4 @@
|
||||
<string name="type.natural.tree">Árvore</string>
|
||||
<string name="type.shop.beauty.nails">Salão de Unhas</string>
|
||||
<string name="type.xmas.tree">Árvore de Natal</string>
|
||||
<string name="type.amenity.hydrant">Boca de Rega</string>
|
||||
</resources>
|
||||
|
||||
@@ -369,92 +369,4 @@
|
||||
<string name="type.cuisine.breakfast">Zajtrk</string>
|
||||
<string name="type.cuisine.bubble_tea">Čaj s tapiokinimi kroglicami (\'Bubble Tea\')</string>
|
||||
<string name="type.cuisine.chicken">Piščanec</string>
|
||||
<string name="type.cuisine.greek">Grška kuhinja</string>
|
||||
<string name="type.cuisine.hungarian">Madžarska kuhinja</string>
|
||||
<string name="type.cuisine.ice_cream">Sladoled</string>
|
||||
<string name="type.cuisine.indian">Indijska kuhinja</string>
|
||||
<string name="type.cuisine.indonesian">Indonezijska kuhinja</string>
|
||||
<string name="type.cuisine.international">Mednarodna kuhinja</string>
|
||||
<string name="type.cuisine.irish">Irska kuhinja</string>
|
||||
<string name="type.cuisine.italian">Italijanska kuhinja</string>
|
||||
<string name="type.cuisine.italian_pizza">Italijanska kuhinja, pica</string>
|
||||
<string name="type.cuisine.japanese">Japonska kuhinja</string>
|
||||
<string name="type.cuisine.korean">Korejska kuhinja</string>
|
||||
<string name="type.cuisine.lao">Laoška kuhinja</string>
|
||||
<string name="type.cuisine.lebanese">Libanonska kuhinja</string>
|
||||
<string name="type.cuisine.local">Krajevna kuhinja</string>
|
||||
<string name="type.cuisine.malaysian">Malezijska kuhinja</string>
|
||||
<string name="type.cuisine.mediterranean">Sredozemska kuhinja</string>
|
||||
<string name="type.cuisine.mexican">Mehiška kuhinja</string>
|
||||
<string name="type.cuisine.moroccan">Maroška kuhinja</string>
|
||||
<string name="type.cuisine.oriental">Orientalska kuhinja</string>
|
||||
<string name="type.cuisine.pancake">Palačinke</string>
|
||||
<string name="type.cuisine.pasta">Testenine</string>
|
||||
<string name="type.cuisine.persian">Perzijska kuhinja</string>
|
||||
<string name="type.cuisine.peruvian">Perujska kuhinja</string>
|
||||
<string name="type.cuisine.pizza">Pica</string>
|
||||
<string name="type.cuisine.polish">Poljska kuhinja</string>
|
||||
<string name="type.cuisine.portuguese">Portugalska kuhinja</string>
|
||||
<string name="type.cuisine.russian">Ruska kuhinja</string>
|
||||
<string name="type.cuisine.sandwich">Sendvič</string>
|
||||
<string name="type.cuisine.sausage">Salama</string>
|
||||
<string name="type.cuisine.savory_pancakes">Slane palačinke</string>
|
||||
<string name="type.cuisine.seafood">Morska hrana</string>
|
||||
<string name="type.cuisine.soba">Soba (ajdovi rezanci)</string>
|
||||
<string name="type.cuisine.spanish">Španska kuhinja</string>
|
||||
<string name="type.cuisine.steak_house">Zrezkarnica</string>
|
||||
<string name="type.cuisine.sushi">Suši</string>
|
||||
<string name="type.cuisine.tea">Čaj</string>
|
||||
<string name="type.cuisine.turkish">Turška kuhinja</string>
|
||||
<string name="type.cuisine.vegan">Veganska kuhinja</string>
|
||||
<string name="type.cuisine.vegetarian">Vegetarijanska kuhinja</string>
|
||||
<string name="type.cuisine.vietnamese">Vietnamska kuhinja</string>
|
||||
<string name="type.emergency">V sili</string>
|
||||
<string name="type.emergency.access_point">Reševalno mesto</string>
|
||||
<string name="type.emergency.assembly_point">Zbirno mesto</string>
|
||||
<string name="type.emergency.life_ring">Reševalni obroč</string>
|
||||
<string name="type.emergency.defibrillator">Defibrilator</string>
|
||||
<string name="type.emergency.fire_hydrant">Požarni hidrant</string>
|
||||
<string name="type.amenity.hydrant">Namakalni hidrant</string>
|
||||
<string name="type.emergency.phone">Telefon v sili</string>
|
||||
<string name="type.emergency.lifeguard">Reševalec</string>
|
||||
<string name="type.beacon.cardinal.east">Glavni usmerjevalni znak</string>
|
||||
<string name="type.beacon.cardinal.north">Glavni usmerjevalni znak</string>
|
||||
<string name="type.beacon.cardinal.south">Glavni usmerjevalni znak</string>
|
||||
<string name="type.beacon.cardinal.west">Glavni usmerjevalni znak</string>
|
||||
<string name="type.beacon.isolated_danger">Usmerjevalni znak ločene nevarnosti</string>
|
||||
<string name="type.craft.caterer">Ponudnik cateringa</string>
|
||||
<string name="type.cuisine.balkan">Balkanska kuhinja</string>
|
||||
<string name="type.cuisine.barbecue">Jedi na žaru</string>
|
||||
<string name="type.cuisine.bavarian">Bavarska kuhinja</string>
|
||||
<string name="type.cuisine.brazilian">Brazilska kuhinja</string>
|
||||
<string name="type.cuisine.burger">Burger</string>
|
||||
<string name="type.cuisine.buschenschank">Vinotoč (Buschenschank)</string>
|
||||
<string name="type.cuisine.deli">Delkatesa</string>
|
||||
<string name="type.cuisine.regional">Regionalna kuhinja</string>
|
||||
<string name="type.cuisine.tapas">Tapas (španski prigrizki)</string>
|
||||
<string name="type.cuisine.thai">Tajska kuhinja</string>
|
||||
<string name="type.beacon.lateral.port">Bočni usmerjevalni znak</string>
|
||||
<string name="type.beacon.lateral.starboard">Bočni usmerjevalni znak</string>
|
||||
<string name="type.beacon.safe_water">Znak varne plovne poti</string>
|
||||
<string name="type.beacon.special_purpose">Usmerjevalni znak posebnega namena</string>
|
||||
<string name="type.buoy.cardinal.east">Glavna boja</string>
|
||||
<string name="type.buoy.cardinal.north">Glavna boja</string>
|
||||
<string name="type.buoy.cardinal.south">Glavna boja</string>
|
||||
<string name="type.buoy.cardinal.west">Glavna boja</string>
|
||||
<string name="type.lateral.port">Pristanišče</string>
|
||||
<string name="type.cardinal.east">Vzhod</string>
|
||||
<string name="type.cardinal.north">Sever</string>
|
||||
<string name="type.cardinal.south">Jug</string>
|
||||
<string name="type.cardinal.west">Zahod</string>
|
||||
<string name="type.emergency.mountain_rescue">Postaja gorskih reševalcev</string>
|
||||
<string name="type.entrance">Vhod</string>
|
||||
<string name="type.entrance.main">Glavni vhod</string>
|
||||
<string name="type.entrance.house">Vhod hiše</string>
|
||||
<string name="type.entrance.garage">Vhod garaže</string>
|
||||
<string name="type.entrance.service">Servisni vhod</string>
|
||||
<string name="type.entrance.entry">Vstop (samo)</string>
|
||||
<string name="type.entrance.exit">Izhod (samo)</string>
|
||||
<string name="type.healthcare.laboratory">Zdravstveni laboratorij</string>
|
||||
<string name="type.healthcare.psychotherapist">Psihoterapevt</string>
|
||||
</resources>
|
||||
|
||||
@@ -1399,5 +1399,4 @@
|
||||
<string name="type.amenity.ranger_station">Orman Bekçisi</string>
|
||||
<string name="type.amenity.bench.backless">Sırtı Açık Bank</string>
|
||||
<string name="type.amenity.charging_station.motorcar.small">Araç Şarj Noktası</string>
|
||||
<string name="type.amenity.sailing_school">Denizcilik Okulu</string>
|
||||
</resources>
|
||||
|
||||
@@ -3,5 +3,4 @@
|
||||
<string name="pref_file_name" translatable="false">OrganicMapsPrefs</string>
|
||||
<string name="pref_enable_logging" translatable="false">EnableLogging</string>
|
||||
<string name="pref_emulate_bad_external_storage" translatable="false">EmulateBadExternalStorage</string>
|
||||
<string name="pref_custom_map_download_url" translatable="false">CustomMapDownloadUrl</string>
|
||||
</resources>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"shop-farm|@category_food|@shop": "Farm food",
|
||||
"shop-garden_centre|@shop": "4Garden Centre|U+1F3E1",
|
||||
"shop-grocery|@category_food|@shop": "Grocery",
|
||||
"shop-health_food|@category_food|@shop": "7Health food|7Healthy food|healthfood|organic",
|
||||
"shop-health_food|@category_food|@shop": "7Health food|7Healthy food|healthfood|organic|vegan|vegetarian",
|
||||
"shop-hearing_aids|@shop": "7Hearing Aids",
|
||||
"shop-mobile_phone|@shop": "4Cell Phones|4Mobile Phones|6smartphones|electronics store|U+1F4F1|U+1F4F2",
|
||||
"shop-florist|@shop": "4Florist|U+1F337|U+1F338|U+1F339|U+1F33A|U+1F33B|U+1F33C|U+1F490|U+1F33E|4flowers|flower shop|floral shop|floral arrangements|same day flowers|bouquet",
|
||||
|
||||
@@ -220,13 +220,13 @@
|
||||
"tourism-motel|@category_hotel": "3Motel|auberge de jeunesse",
|
||||
"tourism-alpine_hut|@category_hotel": "Refuge de montagne|auberge de jeunesse|cabane alpine",
|
||||
"shop-hairdresser": "3Coiffeur|salon de coiffure",
|
||||
"aeroway-aerodrome": "3Aéroport|3aérodrome|3avion|3aérogare",
|
||||
"aeroway-aerodrome": "3Aéroport|3aérodrome|3avion",
|
||||
"leisure-stadium": "4Stade|4sport",
|
||||
"leisure-playground|@category_children": "Terrain de jeu|aire de jeu|parc de jeux|espace de jeu",
|
||||
"leisure-sports_centre|leisure-sports_centre-sport-american_football|leisure-sports_centre-sport-archery|leisure-sports_centre-sport-athletics|leisure-sports_centre-sport-australian_football|leisure-sports_centre-sport-badminton|leisure-sports_centre-sport-baseball|leisure-sports_centre-sport-basketball|leisure-sports_centre-sport-beachvolleyball|leisure-sports_centre-sport-bowls|leisure-sports_centre-sport-climbing|leisure-sports_centre-sport-cricket|leisure-sports_centre-sport-curling|leisure-sports_centre-sport-equestrian|leisure-sports_centre-sport-field_hockey|leisure-sports_centre-sport-futsal|leisure-sports_centre-sport-golf|leisure-sports_centre-sport-gymnastics|leisure-sports_centre-sport-handball|leisure-sports_centre-sport-ice_hockey|leisure-sports_centre-sport-multi|leisure-sports_centre-sport-padel|leisure-sports_centre-sport-pelota|leisure-sports_centre-sport-scuba_diving|leisure-sports_centre-sport-shooting|leisure-sports_centre-sport-skateboard|leisure-sports_centre-sport-skiing|leisure-sports_centre-sport-soccer|leisure-sports_centre-sport-table_tennis|leisure-sports_centre-sport-tennis|leisure-sports_centre-sport-volleyball|leisure-sports_centre-sport-yoga": "Centre sportif|salle omnisports|complexe sportif|sport",
|
||||
"leisure-playground|@category_children": "Terrain de jeu|aire de jeu",
|
||||
"leisure-sports_centre|leisure-sports_centre-sport-american_football|leisure-sports_centre-sport-archery|leisure-sports_centre-sport-athletics|leisure-sports_centre-sport-australian_football|leisure-sports_centre-sport-badminton|leisure-sports_centre-sport-baseball|leisure-sports_centre-sport-basketball|leisure-sports_centre-sport-beachvolleyball|leisure-sports_centre-sport-bowls|leisure-sports_centre-sport-climbing|leisure-sports_centre-sport-cricket|leisure-sports_centre-sport-curling|leisure-sports_centre-sport-equestrian|leisure-sports_centre-sport-field_hockey|leisure-sports_centre-sport-futsal|leisure-sports_centre-sport-golf|leisure-sports_centre-sport-gymnastics|leisure-sports_centre-sport-handball|leisure-sports_centre-sport-ice_hockey|leisure-sports_centre-sport-multi|leisure-sports_centre-sport-padel|leisure-sports_centre-sport-pelota|leisure-sports_centre-sport-scuba_diving|leisure-sports_centre-sport-shooting|leisure-sports_centre-sport-skateboard|leisure-sports_centre-sport-skiing|leisure-sports_centre-sport-soccer|leisure-sports_centre-sport-table_tennis|leisure-sports_centre-sport-tennis|leisure-sports_centre-sport-volleyball|leisure-sports_centre-sport-yoga": "Centre sportif|sport",
|
||||
"leisure-golf_course": "Terrain de golf|Parcours de golf",
|
||||
"leisure-miniature_golf": "Minigolf",
|
||||
"leisure-escape_game": "Salle d'évasion|escape game",
|
||||
"leisure-escape_game": "Salle d'évasion",
|
||||
"leisure-pitch": "Terrain de sport|sport",
|
||||
"leisure-swimming_pool": "4Piscine|sport",
|
||||
"sport-american_football": "Football américain",
|
||||
@@ -245,12 +245,12 @@
|
||||
"sport-gymnastics": "Gymnastique",
|
||||
"sport-handball": "Handball",
|
||||
"sport-scuba_diving": "Plongée sous-marine",
|
||||
"sport-shooting": "Stand de tir|Centre de tir|champ de tir|salle de tir",
|
||||
"sport-shooting": "Stand de tir|Centre de tir",
|
||||
"sport-skateboard": "Skateboard",
|
||||
"sport-skiing": "Ski",
|
||||
"sport-soccer": "Football",
|
||||
"sport-swimming": "Piscine|Natation",
|
||||
"sport-table_tennis": "Tennis de table|Ping Pong",
|
||||
"sport-table_tennis": "Tennis de table",
|
||||
"sport-tennis": "Tennis",
|
||||
"sport-padel": "Padel",
|
||||
"sport-volleyball": "Volley-ball",
|
||||
@@ -272,27 +272,27 @@
|
||||
"natural-water-pond|@waterbody": "Étang|bassin",
|
||||
"natural-water-lake|@waterbody": "Lac",
|
||||
"natural-water-reservoir|landuse-reservoir|@waterbody": "5Réservoir",
|
||||
"waterway-river|waterway-stream|natural-water-river": "Rivière|fleuve|ruisseau|cours d'eau|torrent",
|
||||
"waterway-river|waterway-stream|natural-water-river": "Rivière|fleuve",
|
||||
"waterway-canal": "Canal",
|
||||
"shop-car_repair": "3Réparation d'automobiles|3garage|4station service|voiture|auto|garagiste|mécano|mécanicien automobile",
|
||||
"tourism-camp_site|@category_hotel": "4Camping|terrain de camping",
|
||||
"tourism-caravan_site|@category_rv||@category_hotel": "4Parc caravanier|VR|caravane|camping-car",
|
||||
"office": "Bureau|compagnie",
|
||||
"office-company": "Bureaux d'entreprise",
|
||||
"office-government": "Administration publique|service public|fonction publique|service civil|services administratifs",
|
||||
"office-lawyer": "Cabinet d'avocat|bureau d'avocat",
|
||||
"office-government": "Administration publique",
|
||||
"office-lawyer": "Cabinet d'avocat",
|
||||
"office-telecommunication": "Opérateur mobile",
|
||||
"craft-beekeeper": "Apiculteur",
|
||||
"craft-blacksmith": "Forgeron",
|
||||
"craft-brewery": "Brasserie artisanale|Brasseur|micro-brasserie",
|
||||
"craft-brewery": "Brasserie artisanale|Brasseur",
|
||||
"craft-caterer": "Traiteur",
|
||||
"craft-carpenter": "Menuisier|charpentier",
|
||||
"craft-confectionery": "Confiseur",
|
||||
"craft-electrician": "4Électricien",
|
||||
"craft-electronics_repair": "Réparation d'appareils électroniques",
|
||||
"craft-gardener": "Paysagiste|jardinier",
|
||||
"craft-gardener": "Paysagiste",
|
||||
"craft-grinding_mill": "Moulin",
|
||||
"craft-handicraft": "Artisanat|fait-main|métiers d'art",
|
||||
"craft-handicraft": "Artisanat",
|
||||
"craft-hvac": "Chauffage, ventilation et climatisation",
|
||||
"craft-metal_construction": "5Métallo|métallurgiste",
|
||||
"craft-key_cutter": "Reproduction de clé",
|
||||
@@ -302,7 +302,7 @@
|
||||
"craft-plumber": "Plombier",
|
||||
"craft-sawmill": "Scierie",
|
||||
"craft-shoemaker": "Cordonnier",
|
||||
"craft-winery": "Chai|établissement vinicole",
|
||||
"craft-winery": "Chai",
|
||||
"craft-tailor": "5Tailleur",
|
||||
"area:highway-footway|area:highway-pedestrian|area:highway-steps|place-square": "Place",
|
||||
"place-sea": "Mer",
|
||||
@@ -320,11 +320,11 @@
|
||||
"shop-copyshop": "Boutique de photocopies|5Imprimerie",
|
||||
"shop-photo|@shop": "5Matériel de photographie|5Photographie|Cadres",
|
||||
"shop-camera|@shop": "Boutique d'appareils photo",
|
||||
"shop-travel_agency": "Agence de voyages|Voyages organisés|agence de tourisme|voyagiste",
|
||||
"shop-travel_agency": "Agence de voyages|Voyages organisés",
|
||||
"shop-outdoor|@shop": "Matériel de loisirs de plein air|Randonnée|Escalade|Camping",
|
||||
"shop-dry_cleaning": "Nettoyage à sec|Pressing|Lavage",
|
||||
"shop-tyres|@shop": "Pneu|Pneus",
|
||||
"amenity-car_wash": "Station de lavage|lavage-auto|lavage de voiture",
|
||||
"amenity-car_wash": "Station de lavage|lavage-autp",
|
||||
"amenity-veterinary": "Docteur vétérinaire|véto|Clinique vétérinaire",
|
||||
"@charging_station": "Borne de recharge|station de recharge|4voiture électrique|4recharge|IRVE",
|
||||
"amenity-charging_station-bicycle|@charging_station": "Chargement des vélos",
|
||||
@@ -332,14 +332,14 @@
|
||||
"amenity-bicycle_parking": "Parking à vélo|Stationnement vélo",
|
||||
"amenity-waste_basket": "Poubelle",
|
||||
"emergency-phone": "3Téléphone d'urgence",
|
||||
"leisure-fitness_centre": "Centre fitness|salle de gym|salle de sport|centre de remise en forme",
|
||||
"leisure-fitness_centre": "Centre fitness|salle de gym|salle de sport",
|
||||
"leisure-sauna": "3Sauna",
|
||||
"shop-car_repair-tyres|shop-car_repair": "Réparation de pneus",
|
||||
"shop-chemist|@shop": "4Droguerie",
|
||||
"shop-pet|@shop": "5Animalerie|magasin d'animaux",
|
||||
"tourism-zoo|@category_tourism|@category_children": "Zoo|Parc Animalier|ménagerie|parc zoologique",
|
||||
"shop-pet|@shop": "5Animalerie",
|
||||
"tourism-zoo|@category_tourism|@category_children": "Zoo|Parc Animalier",
|
||||
"attraction-animal": "Enclos pour animaux",
|
||||
"tourism-information-office|amenity-ranger_station|@category_tourism": "Office de tourisme|syndicat d'initiative|bureau d'information touristique",
|
||||
"tourism-information-office|amenity-ranger_station|@category_tourism": "Office de tourisme|syndicat d'initiative",
|
||||
"tourism-information-visitor_centre|amenity-ranger_station|@category_tourism": "centre de visite",
|
||||
"amenity-community_centre": "Centre communautaire|Salle polyvalente|Salle des fêtes",
|
||||
"amenity-compressed_air": "Air comprimé",
|
||||
@@ -350,14 +350,14 @@
|
||||
"amenity-vending_machine-drinks": "Distributeur de boissons|cannettes",
|
||||
"amenity-vending_machine-food|@category_food": "Distributeur d'aliments|Aliments",
|
||||
"amenity-vending_machine-parking_tickets|@category_parking": "Horodateur|parcmètre",
|
||||
"amenity-vending_machine-public_transport_tickets|@category_transport": "Distributeur de billets de transport en commun|ticket de bus|ticket de tram|ticket de métro",
|
||||
"amenity-vending_machine-public_transport_tickets|@category_transport": "Distributeur de billets de transport en commun|ticket de bus",
|
||||
"amenity-vending_machine-newspapers": "Distributeur de journaux|Journaux",
|
||||
"amenity-vending_machine-sweets": "Distributeur de bonbons|Bonbons",
|
||||
"amenity-vending_machine-excrement_bags": "5Distributeur de sacs à excréments",
|
||||
"amenity-parcel_locker|@category_post": "Consigne automatique pour colis|3locker",
|
||||
"shop-outpost": "Point de retrait",
|
||||
"building-garage": "Garage",
|
||||
"highway-rest_area|highway-services": "Aire de repos|Aire de service|relais routier",
|
||||
"highway-rest_area|highway-services": "Aire de repos|Aire de service",
|
||||
"man_made-chimney": "Cheminée",
|
||||
"man_made-tower|man_made-flare": "Tour",
|
||||
"shop-bookmaker|@gambling": "Bookmaker",
|
||||
@@ -371,12 +371,12 @@
|
||||
"tourism-information-board": "Panneau d'informations",
|
||||
"tourism-information-map": "Carte touristique|Plan",
|
||||
"aerialway-station": "Remontées mécaniques",
|
||||
"aeroway-helipad": "Hélisurface|zone d'atterrissage pour hélicoptères",
|
||||
"barrier-border_control": "Contrôle aux frontières|contrôle frontalier",
|
||||
"aeroway-helipad": "Hélisurface",
|
||||
"barrier-border_control": "Contrôle aux frontières",
|
||||
"leisure-water_park|@category_tourism|@category_children": "Centre aquatique|Parc aquatique",
|
||||
"man_made-water_tower": "Château d'eau",
|
||||
"man_made-windmill": "Moulin",
|
||||
"natural-cave_entrance": "4Grotte|caverne",
|
||||
"natural-cave_entrance": "4Grotte",
|
||||
"natural-volcano|@mountain": "4Volcan",
|
||||
"office-estate_agent": "Agence immobilière|agent immobilier",
|
||||
"waterway-lock_gate": "Écluse",
|
||||
@@ -387,24 +387,24 @@
|
||||
"leisure-resort|@category_hotel": "Complexe touristique",
|
||||
"amenity-biergarten|@category_eat|@category_nightlife": "5Biergarten",
|
||||
"amenity-driving_school": "4Auto-école|École de conduite",
|
||||
"amenity-music_school": "École de musique|conservatoire de musique",
|
||||
"amenity-music_school": "École de musique",
|
||||
"amenity-language_school": "École de langue",
|
||||
"amenity-ice_cream": "Stand de crème glacée|Marchand de glaces|Glacier",
|
||||
"amenity-internet_cafe": "5Cybercafé",
|
||||
"amenity-motorcycle_parking": "Parking moto|Stationnement moto",
|
||||
"amenity-parking_space-disabled|@category_parking": "Place de stationnement handicapé|Stationnement PMR|Parking PMR",
|
||||
"amenity-nursing_home": "Maison de retraite|résidence pour personnes âgées|EHPAD",
|
||||
"amenity-nursing_home": "Maison de retraite|résidence pour personnes âgées",
|
||||
"amenity-payment_terminal": "Terminal de paiement",
|
||||
"amenity-public_bath": "Bain public",
|
||||
"amenity-shower": "Douche",
|
||||
"emergency-assembly_point": "Point de rassemblement d'urgence",
|
||||
"emergency-defibrillator": "4Défibrillateur|DAE",
|
||||
"emergency-fire_hydrant": "Bouche d’incendie|borne d’incendie|Poteau d’incendie|Hydrant",
|
||||
"amenity-hydrant": "Bouche de puisage|borne de puisage|Hydrant",
|
||||
"emergency-lifeguard": "Sauveteur d’urgence",
|
||||
"emergency-fire_hydrant": "Bouche d’incendie|bouche de incendie|borne d’incendie|borne de incendie|Borne hydratante|Poteau d’incendie|Hydrant|Hydrante",
|
||||
"amenity-hydrant": "Bouche d’puisage|bouche de puisage|borne d’puisage|bourne de puisage|Hydrant|Hydrante",
|
||||
"emergency-lifeguard": "Sauveteur d’urgence|Sauveteur",
|
||||
"emergency-mountain_rescue": "Sauveteurs en montagne d’urgence",
|
||||
"leisure-fitness_station": "Station de fitness|Parcours de santé",
|
||||
"office-insurance": "Bureau d’assurance|assureur|Agent d'assurance|courtier en assurance|compagnie d'assurance",
|
||||
"office-insurance": "Bureau d’assurance|assureur|Agent d'assurance",
|
||||
"office-ngo": "Bureau d'ONG|organisation non gouvernementale|Bureau ONG",
|
||||
"shop-erotic|@shop": "Boutique érotique",
|
||||
"shop-massage": "Salon de massage",
|
||||
@@ -416,10 +416,10 @@
|
||||
"shop-tattoo": "Salon de tatouage|tatoueur",
|
||||
"shop-variety_store|@category_shopping|@shop": "Bazar",
|
||||
"shop-video|@shop": "Boutique de vidéos|videostore",
|
||||
"shop-video_games|@shop": "Boutique de jeux vidéos",
|
||||
"shop-video_games|@shop": "Boutique de jeux vidéo",
|
||||
"tourism-wilderness_hut|@category_hotel": "Refuge non gardé|Refuge-bivouac",
|
||||
"tourism-gallery|@category_tourism": "3Galerie d'art|musée d'art|galerie de peinture",
|
||||
"tourism-theme_park|@category_tourism|@category_children": "Parc d'attractions|Parc de loisirs|parc à thèmes",
|
||||
"tourism-gallery|@category_tourism": "3Galerie d'art|musée d'art",
|
||||
"tourism-theme_park|@category_tourism|@category_children": "Parc d'attractions|Parc de loisirs",
|
||||
"boundary-national_park|@category_tourism": "Parc national",
|
||||
"leisure-nature_reserve|@category_tourism": "Réserve naturelle",
|
||||
"natural-cape": "Cap",
|
||||
@@ -447,7 +447,7 @@
|
||||
"shop-medical_supply|@shop": "Materiel médical",
|
||||
"shop-nutrition_supplements|@shop": "Suppléments nutritionnels",
|
||||
"shop-paint|@shop": "Magasin de peinture",
|
||||
"shop-perfumery|@category_shopping|@shop": "Parfumerie|boutique de parfum",
|
||||
"shop-perfumery|@category_shopping|@shop": "Parfumerie",
|
||||
"shop-sewing|@shop": "Mercerie|Couture",
|
||||
"shop-storage_rental": "Location de stockage",
|
||||
"shop-tobacco|@shop": "Bureau de tabac",
|
||||
@@ -462,19 +462,19 @@
|
||||
"amenity-social_facility": "Établissement de services sociaux",
|
||||
"leisure-sports_hall": "Salle de sport",
|
||||
"amenity-arts_centre|@category_tourism": "Centre artistique",
|
||||
"amenity-prison": "prison|centre pénitentiaire|centre de détention",
|
||||
"amenity-prison": "prison",
|
||||
"amenity-exhibition_centre": "Centre d'exposition",
|
||||
"shop-bathroom_furnishing|@shop": "Mobilier de salle de bain",
|
||||
"shop-bed|@shop": "Magasin de literie",
|
||||
"shop-boutique|@shop": "Boutique",
|
||||
"amenity-food_court": "Aire de restauration|foodcourt",
|
||||
"amenity-food_court": "Aire de restauration",
|
||||
"shop-curtain|@shop": "Magasin de rideaux",
|
||||
"shop-gas|@shop": "Vente de gaz|bouteille de gaz",
|
||||
"shop-gas|@shop": "Vente de gaz",
|
||||
"shop-pet_grooming": "Salon de toilettage",
|
||||
"shop-hifi|@shop": "Matériel Hi-Fi",
|
||||
"amenity-conference_centre": "Centre de conférence",
|
||||
"shop-herbalist|@shop": "Herboristerie",
|
||||
"shop-appliance|@shop": "Magasin d'électroménager|boutique d'électroménager",
|
||||
"shop-appliance|@shop": "Magasin d'électroménager",
|
||||
"shop-agrarian|@shop": "Magasin d'agriculture",
|
||||
"shop-fashion_accessories|@shop": "Boutique d'accessoires de mode",
|
||||
"amenity-waste_transfer_station": "Station de transfert de déchets",
|
||||
@@ -489,7 +489,7 @@
|
||||
"amenity-charging_station-motorcar|amenity-charging_station-motorcar-small|@charging_station": "Chargeur automobile|Chargeur de voiture|Chargeur",
|
||||
"shop-lighting|@shop": "4Lumières|Luminaires|4Lampes",
|
||||
"office-security": "Bureau de sécurité",
|
||||
"building-guardhouse": "Garde|poste de sécurité|poste de gardiennage",
|
||||
"building-guardhouse": "Garde",
|
||||
"leisure-dance|@category_entertainment": "4Danse|École de danse",
|
||||
"shop-money_lender": "Prêteur d'argent",
|
||||
"attraction-amusement_ride|attraction-carousel|attraction-roller_coaster|attraction-maze|attraction-historic|attraction-big_wheel|attraction-bumper_car|@category_children": "Attraction|Labyrinthe",
|
||||
|
||||
@@ -550,7 +550,7 @@
|
||||
"Italy_Emilia-Romagna_Forli-Cesena":"Покрајина Форли-Чезена",
|
||||
"Italy_Emilia-Romagna_Modena":"Покрајина Модена",
|
||||
"Italy_Emilia-Romagna_Parma":"Покрајина Парма",
|
||||
"Italy_Emilia-Romagna_Piacenza":"Покрајина Пјаченца",
|
||||
"Italy_Emilia-Romagna_Piacenza":"Покрајина Пјаћенца",
|
||||
"Italy_Emilia-Romagna_Ravenna":"Покрајина Равена",
|
||||
"Italy_Emilia-Romagna_Reggio Emilia":"Покрајина Ређо Емилија",
|
||||
"Italy_Emilia-Romagna_Rimini":"Покрајина Римини",
|
||||
@@ -1881,7 +1881,7 @@
|
||||
"Italy_Veneto_Treviso Description":"Тревизо, Конелијано, Кастелфранко Венето",
|
||||
"Italy_Veneto_Venezia Description":"Венеција, Местре, Кјоџа",
|
||||
"Italy_Veneto_Verona Description":"Верона, Вилафранка ди Верона, Лењаго",
|
||||
"Italy_Veneto_Vicenza Description":"Виченца, Басано дел Грапа, Скио",
|
||||
"Italy_Veneto_Vicenza Description":"Вићенца, Басано дел Грапа, Скио",
|
||||
"Jamaica Description":"Кингстон, Монтего Беј, Спениш Таун",
|
||||
"Japan_Chubu Region_Aichi_Nagoya Description":"Нагоја, Цушима, Кијосу",
|
||||
"Japan_Chubu Region_Aichi_Toyohashi Description":"Тахара, Гамагори, Нишио",
|
||||
|
||||
@@ -394,32 +394,25 @@
|
||||
<type id="amenity-pharmacy" group="shop">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-buddhist" can_add="no">
|
||||
<type id="amenity-place_of_worship-buddhist">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-christian" can_add="no">
|
||||
<type id="amenity-place_of_worship-christian">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-hindu" can_add="no">
|
||||
<type id="amenity-place_of_worship-hindu">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-jewish" can_add="no">
|
||||
<type id="amenity-place_of_worship-jewish">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-muslim" can_add="no">
|
||||
<type id="amenity-place_of_worship-muslim">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-shinto" can_add="no">
|
||||
<type id="amenity-place_of_worship-shinto">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="amenity-place_of_worship-taoist" can_add="no">
|
||||
<type id="amenity-place_of_worship-taoist">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="amenity-place_of_worship">
|
||||
@@ -705,6 +698,9 @@
|
||||
<type id="leisure-resort">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-sport-swimming">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
@@ -1115,6 +1111,7 @@
|
||||
<type id="tourism-artwork">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<!-- Not addable because OSM category is too broad and due to vandalism problems -->
|
||||
<type id="tourism-attraction" can_add="no">
|
||||
<include group="poi_internet" />
|
||||
<!-- <include field="wikipedia" />-->
|
||||
@@ -1144,26 +1141,22 @@
|
||||
<include group="poi_internet" />
|
||||
<include field="self_service" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-office" can_add="no">
|
||||
<type id="tourism-information-office">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-visitor_centre" can_add="no">
|
||||
<type id="tourism-information-visitor_centre">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-board" can_add="no">
|
||||
<type id="tourism-information-board">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-map" can_add="no">
|
||||
<type id="tourism-information-map">
|
||||
<include field="name" />
|
||||
</type>
|
||||
<!-- Can not be added because it is a complex type -->
|
||||
<type id="tourism-information-guidepost" can_add="no">
|
||||
<type id="tourism-information-guidepost">
|
||||
</type>
|
||||
<type id="tourism-information">
|
||||
<!-- Too generic to add -->
|
||||
<type id="tourism-information" can_add="no">
|
||||
<include group="poi" />
|
||||
</type>
|
||||
<type id="amenity-ranger_station">
|
||||
@@ -1509,67 +1502,50 @@
|
||||
<type id="leisure-escape_game">
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<!-- Uncomment this after our editor core supports complex types
|
||||
<type id="amenity-vending_machine-parking_tickets">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-public_transport_tickets">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-cigarettes">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="cigarettes" />
|
||||
<include field="operator" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-coffee">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="coffee" />
|
||||
<include field="operator" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-condoms">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="condoms" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-drinks">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="drinks" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-excrement_bags">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-coffee">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-condoms">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-food">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="food" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-newspapers">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="newspapers" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="amenity-vending_machine-sweets">
|
||||
<tag k="amenity" v="vending_machine" />
|
||||
<tag k="vending" v="sweets" />
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="shop-car_repair-tyres">
|
||||
<tag k="shop" v="car_repair" />
|
||||
<tag k="service" v="tyres" />
|
||||
<include group="poi_internet" />
|
||||
<type id="amenity-vending_machine">
|
||||
<include field="operator" />
|
||||
<include field="level" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-climbing">
|
||||
<tag k="leisure" v="sports_centre" />
|
||||
<tag k="sport" v="climbing" />
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-shooting">
|
||||
<tag k="leisure" v="sports_centre" />
|
||||
<tag k="sport" v="shooting" />
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-swimming">
|
||||
<tag k="leisure" v="sports_centre" />
|
||||
<tag k="sport" v="swimming" />
|
||||
<include group="poi_internet" />
|
||||
</type>
|
||||
<type id="leisure-sports_centre-yoga">
|
||||
<tag k="leisure" v="sports_centre" />
|
||||
<tag k="sport" v="yoga" />
|
||||
<include group="poi_internet" />
|
||||
</type-->
|
||||
<!-- Not addable as mapping as a node is uncommon -->
|
||||
<type id="natural-beach" can_add="no">
|
||||
<include field="name" />
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# highway|bus_stop;[highway=bus_stop];;name;int_name;22;
|
||||
# It contains:
|
||||
# - type name: "highway|bus_stop" ("|" is converted to "-" internally)
|
||||
# - mapcss selectors for tags: "[highway=bus_stop]", multiple selectors are separated with commas
|
||||
# - mapcss selectors for tags: "[highway=bus_stop]", multiple selectors are separated with commas, best practice tagging for OSM editor is listed first
|
||||
# - "x" for a deprecated type or an empty cell otherwise
|
||||
# - primary title tag (usually "name")
|
||||
# - secondary title tag (usually "int_name")
|
||||
@@ -626,7 +626,7 @@ highway|trunk_link|tunnel;[highway=trunk_link][tunnel?];;name;int_name;503;
|
||||
drinking_water|yes;[drinking_water=yes],[drinking_water=treated],[drinking_water:refill=yes];;;;504;
|
||||
drinking_water|no;505;
|
||||
amenity|sailing_school;[amenity=sailing_school],[education=sailing_school];;name;int_name;506;
|
||||
amenity|flight_school;[amenity=sailing_school],[education=flight_school];;name;int_name;507;
|
||||
amenity|flight_school;[amenity=flight_school],[education=flight_school];;name;int_name;507;
|
||||
amenity|prep_school;[amenity=prep_school],[education=prep_school];;name;int_name;508;
|
||||
amenity|car_pooling;509;
|
||||
social_facility|soup_kitchen;510;
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 7 and column 16.
|
@@ -28,7 +28,7 @@
|
||||
"take_exit_number":"Nehmen Sie die Ausfahrt auf",
|
||||
"take_exit_number_street_verb":"NULL",
|
||||
"route_recalculating":"Neuberechnung der Route",
|
||||
"destination":"erreichen Sie ihr Ziel.",
|
||||
"destination":"Werden Sie ankommen.",
|
||||
"you_have_reached_the_destination":"Sie haben Ihr Ziel erreicht.",
|
||||
"in_50_meters":"In fünfzig Metern",
|
||||
"in_100_meters":"In einhundert Metern",
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
{
|
||||
"make_a_slight_right_turn":"Rechts aanhouden.",
|
||||
"make_a_slight_right_turn_street":"een flauwe bocht naar rechts",
|
||||
"make_a_slight_right_turn_street":"flauwe bocht naar rechts",
|
||||
"make_a_right_turn":"Sla rechtsaf.",
|
||||
"make_a_right_turn_street":"Sla rechtsaf",
|
||||
"make_a_sharp_right_turn":"Scherp rechtsaf.",
|
||||
"make_a_sharp_right_turn_street":"scherp naar rechts afslaan",
|
||||
"enter_the_roundabout":"Rij de rotonde op.",
|
||||
"enter_the_roundabout_street":"de rotonde op",
|
||||
"enter_the_roundabout_street_verb":"Rij",
|
||||
"enter_the_roundabout_street":"de rotonde",
|
||||
"enter_the_roundabout_street_verb":"Rijd",
|
||||
"leave_the_roundabout":"Verlaat de rotonde.",
|
||||
"leave_the_roundabout_street":"de rotonde",
|
||||
"leave_the_roundabout_street_verb":"Verlaat",
|
||||
"make_a_slight_left_turn":"Links aanhouden.",
|
||||
"make_a_slight_left_turn_street":"een flauwe bocht naar links",
|
||||
"make_a_slight_left_turn_street":"de flauwe bocht naar links",
|
||||
"make_a_slight_left_turn_street_verb":"Neem",
|
||||
"make_a_left_turn":"Sla linksaf.",
|
||||
"make_a_left_turn_street":"Sla linksaf",
|
||||
"make_a_left_turn_street":"naar links afslaan",
|
||||
"make_a_sharp_left_turn":"Scherp linksaf.",
|
||||
"make_a_sharp_left_turn_street":"scherp naar links afslaan",
|
||||
"make_a_u_turn":"Keer om.",
|
||||
"make_a_u_turn_street":"om",
|
||||
"make_a_u_turn_street_verb":"Keer",
|
||||
"make_a_u_turn_street":"NULL",
|
||||
"make_a_u_turn_street_verb":"NULL",
|
||||
"go_straight":"Rij rechtdoor.",
|
||||
"exit":"Verlaat.",
|
||||
"onto":"naar",
|
||||
"take_exit_number":"Verlaat naar",
|
||||
"take_exit_number_street_verb":"Neem",
|
||||
"route_recalculating":"Route herberekenen",
|
||||
"route_recalculating":"De route herberekenen",
|
||||
"destination":"Arriveert u.",
|
||||
"you_have_reached_the_destination":"Bestemming bereikt.",
|
||||
"in_50_meters":"Over vijftig meter",
|
||||
@@ -104,5 +104,5 @@
|
||||
"in_1_5_miles":"Over anderhalve mijl",
|
||||
"in_2_miles":"Over twee mijl",
|
||||
"unknown_camera":"Camera in zicht",
|
||||
"make_a_slight_right_turn_street_verb":"Neem"
|
||||
"make_a_slight_right_turn_street_verb":"NULL"
|
||||
}
|
||||
|
||||
@@ -685,7 +685,7 @@
|
||||
"editor_edits_sent_message" = "Ihre Notiz wird an OpenStreetMap gesendet";
|
||||
"editor_comment_hint" = "Kommentar…";
|
||||
"editor_reset_edits_message" = "Alle lokalen Korrekturen verwerfen?";
|
||||
"editor_reset_edits_button" = "Änderungen verwerfen";
|
||||
"editor_reset_edits_button" = "Verwerfen";
|
||||
"editor_remove_place_message" = "Hinzugefügtes Objekt löschen?";
|
||||
"editor_remove_place_button" = "Löschen";
|
||||
"editor_place_doesnt_exist" = "Dieser Ort existiert nicht";
|
||||
|
||||
@@ -730,7 +730,7 @@
|
||||
"editor_edits_sent_message" = "Your note will be sent to OpenStreetMap";
|
||||
"editor_comment_hint" = "Comment…";
|
||||
"editor_reset_edits_message" = "Discard all local changes?";
|
||||
"editor_reset_edits_button" = "Discard changes";
|
||||
"editor_reset_edits_button" = "Discard";
|
||||
"editor_remove_place_message" = "Delete added place?";
|
||||
"editor_remove_place_button" = "Delete";
|
||||
"editor_place_doesnt_exist" = "Place does not exist";
|
||||
|
||||
@@ -779,7 +779,7 @@
|
||||
"type.natural.beach.sand" = "Playa de arena";
|
||||
"type.natural.beach.gravel" = "Playa de grava";
|
||||
"type.natural.cape" = "Cabo";
|
||||
"type.natural.cave_entrance" = "Entrada de cueva";
|
||||
"type.natural.cave_entrance" = "Cueva";
|
||||
"type.natural.cliff" = "Acantilado";
|
||||
"type.natural.earth_bank" = "Talud de tierra";
|
||||
"type.man_made.embankment" = "Terraplén";
|
||||
@@ -815,7 +815,7 @@
|
||||
"type.natural.wetland.marsh" = "Ciénaga";
|
||||
"type.noexit" = "Sin salida";
|
||||
"type.office" = "Oficina";
|
||||
"type.office.company" = "Oficina de compañía";
|
||||
"type.office.company" = "Oficina";
|
||||
"type.office.estate_agent" = "Agente inmobiliario";
|
||||
"type.office.government" = "Oficina gubernamental";
|
||||
"type.office.insurance" = "Oficina de seguros";
|
||||
@@ -859,13 +859,13 @@
|
||||
"type.place.state.USA" = "Estado";
|
||||
|
||||
/* Named part of a city or town, bigger than place=quarter (Wiki: https://wiki.openstreetmap.org/wiki/Tag:place%3Dsuburb) */
|
||||
"type.place.suburb" = "Suburbio";
|
||||
"type.place.suburb" = "Barrio";
|
||||
"type.place.town" = "Pueblo";
|
||||
"type.place.village" = "Pueblo";
|
||||
"type.power" = "Energía";
|
||||
"type.power.generator" = "Generador";
|
||||
"type.power.generator.solar" = "Generador solar";
|
||||
"type.power.generator.wind" = "Aerogenerador";
|
||||
"type.power.generator.wind" = "Generador de viento";
|
||||
"type.power.generator.gas" = "Planta termoeléctrica de gas";
|
||||
"type.power.generator.hydro" = "Planta hidroeléctrica";
|
||||
"type.power.line" = "Línea eléctrica";
|
||||
@@ -947,10 +947,10 @@
|
||||
"type.railway.station" = "Estación de tren";
|
||||
"type.railway.station.funicular" = "Funicular";
|
||||
"type.railway.station.light_rail" = "Estación de tren";
|
||||
"type.railway.station.light_rail.berlin" = "Estación de tren (S-Bahn)";
|
||||
"type.railway.station.light_rail.berlin" = "Estación de tren";
|
||||
"type.railway.station.light_rail.london" = "Estación de tren";
|
||||
"type.railway.station.light_rail.porto" = "Estación de metro";
|
||||
"type.railway.station.monorail" = "Estación de monoriel";
|
||||
"type.railway.station.light_rail.porto" = "Estación de tren";
|
||||
"type.railway.station.monorail" = "Estación de tren";
|
||||
"type.railway.station.subway" = "Estación de metro";
|
||||
"type.railway.station.subway.adana" = "Estación de metro";
|
||||
"type.railway.station.subway.algiers" = "Estación de metro";
|
||||
@@ -1306,7 +1306,7 @@
|
||||
"type.shop.tobacco" = "Tabaco";
|
||||
"type.shop.trade" = "Suministros comerciales";
|
||||
"type.shop.watches" = "Relojes";
|
||||
"type.shop.wholesale" = "Tienda al por mayor";
|
||||
"type.shop.wholesale" = "Almacén al por mayor";
|
||||
"type.sport" = "Deporte";
|
||||
"type.sport.american_football" = "Fútbol americano";
|
||||
"type.sport.archery" = "Tiro al arco";
|
||||
@@ -1348,7 +1348,7 @@
|
||||
|
||||
/* Typically serviced, staff is present and food is available (compared to wilderness_hut). */
|
||||
"type.tourism.alpine_hut" = "Albergue de montaña";
|
||||
"type.tourism.apartment" = "Apartamento vacacional";
|
||||
"type.tourism.apartment" = "Apartamento de vacaciones";
|
||||
"type.tourism.artwork" = "Obra de arte";
|
||||
"type.tourism.artwork.architecture" = "Arte arquitectónico";
|
||||
"type.tourism.artwork.painting" = "Pintura";
|
||||
|
||||
@@ -1585,4 +1585,3 @@
|
||||
"type.spherical_buoy.safe_water" = "Faarvaatri kerapoi";
|
||||
"type.man_made.mast.communication" = "Sidemast";
|
||||
"type.shop.beauty.nails" = "Küünestuudio";
|
||||
"type.amenity.hydrant" = "Kastmishüdrant";
|
||||
|
||||
@@ -57,13 +57,13 @@
|
||||
"add_new_set" = "افزودن پهرستی نو";
|
||||
|
||||
/* Add Bookmark list dialog - hint when the list name is empty */
|
||||
"bookmark_set_name" = "نام پهرست نشانگها";
|
||||
"bookmark_set_name" = "Bookmark List Name";
|
||||
|
||||
/* "Bookmark Lists" dialog title */
|
||||
"bookmark_sets" = "Bookmark Lists";
|
||||
|
||||
/* Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. */
|
||||
"bookmarks" = "نشانگها";
|
||||
"bookmarks" = "نشانهها";
|
||||
|
||||
/* "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt */
|
||||
"bookmarks_and_tracks" = "نشانهها و مسیر ها";
|
||||
@@ -151,7 +151,7 @@
|
||||
"share_bookmarks_email_body" = "Hello!\n\nAttached are my bookmarks; please open them in CoMaps. If you don't have it installed you can download it here: https://www.comaps.app/download/\n\nEnjoy travelling with CoMaps!";
|
||||
|
||||
/* message title of loading file */
|
||||
"load_kmz_title" = "بارگذاری نشانگها";
|
||||
"load_kmz_title" = "در حال بارگیری نشانهها";
|
||||
|
||||
/* Kmz file successful loading */
|
||||
"load_kmz_successful" = "نشانهها با موفقیت بارگذاری شد!شما می توانید آنها را در نقشه یا بخش مدیریت نشانهها بیابید.";
|
||||
|
||||
@@ -680,7 +680,7 @@
|
||||
"editor_edits_sent_message" = "Notatet ditt vil bli sendt til OpenStreetMap";
|
||||
"editor_comment_hint" = "Kommentar…";
|
||||
"editor_reset_edits_message" = "Forkaste alle lokale endringer?";
|
||||
"editor_reset_edits_button" = "Forkast endringer";
|
||||
"editor_reset_edits_button" = "Forkast";
|
||||
"editor_remove_place_message" = "Slette tillagt sted?";
|
||||
"editor_remove_place_button" = "Slett";
|
||||
"editor_place_doesnt_exist" = "Sted finnes ikke";
|
||||
|
||||
@@ -1591,4 +1591,3 @@
|
||||
"type.shop.beauty.nails" = "Nagelsalon";
|
||||
"type.amenity.food_sharing" = "Voedsel delen";
|
||||
"type.amenity.give_box" = "Giftenkist";
|
||||
"type.amenity.hydrant" = "Watertappunt|waterkraan";
|
||||
|
||||
@@ -1591,4 +1591,3 @@
|
||||
"type.natural.tree" = "Árvore";
|
||||
"type.shop.beauty.nails" = "Salão de Unhas";
|
||||
"type.xmas.tree" = "Árvore de Natal";
|
||||
"type.amenity.hydrant" = "Boca de Rega";
|
||||
|
||||
@@ -543,7 +543,7 @@
|
||||
|
||||
/* OpenStreetMap Profile */
|
||||
"osm_profile" = "Profil OpenStreetMap";
|
||||
"osm_profile_promt" = "Creați un cont OpenStreetMap sau conectați-vă pentru a vă publica editările hărții pentru întreaga lume.";
|
||||
"osm_profile_promt" = "Creați un cont OpenStreetMap sau conectați-vă pentru a vă publica edițiile de hartă în întreaga lume.";
|
||||
"osm_profile_explanation" = "[OpenStreetMap.org](https://openstreetmap.org) (OSM) este un proiect comunitar pentru construirea unei hărți libere și deschise. Este principala sursă de date cartografice în CoMaps și funcționează similar cu Wikipedia. Puteți adăuga sau edita locuri, iar acestea devin disponibile pentru milioane de utilizatori din întreaga lume. \nAlăturați-vă comunității și ajutați la crearea unei hărți mai bune pentru toată lumea!";
|
||||
"osm_profile_login" = "Conectează-te la contul OpenStreetMap";
|
||||
"osm_profile_reauthorize_promt" = "Contul OpenStreetMap a fost deconectat de la această aplicație";
|
||||
|
||||
@@ -368,91 +368,3 @@
|
||||
"type.cuisine.bubble_tea" = "Čaj s tapiokinimi kroglicami ('Bubble Tea')";
|
||||
"type.cuisine.breakfast" = "Zajtrk";
|
||||
"type.cuisine.chicken" = "Piščanec";
|
||||
"type.amenity.hydrant" = "Namakalni hidrant";
|
||||
"type.cuisine.greek" = "Grška kuhinja";
|
||||
"type.cuisine.hungarian" = "Madžarska kuhinja";
|
||||
"type.cuisine.ice_cream" = "Sladoled";
|
||||
"type.cuisine.indian" = "Indijska kuhinja";
|
||||
"type.cuisine.indonesian" = "Indonezijska kuhinja";
|
||||
"type.cuisine.international" = "Mednarodna kuhinja";
|
||||
"type.cuisine.irish" = "Irska kuhinja";
|
||||
"type.cuisine.italian" = "Italijanska kuhinja";
|
||||
"type.cuisine.italian_pizza" = "Italijanska kuhinja, pica";
|
||||
"type.cuisine.japanese" = "Japonska kuhinja";
|
||||
"type.cuisine.korean" = "Korejska kuhinja";
|
||||
"type.cuisine.lao" = "Laoška kuhinja";
|
||||
"type.cuisine.lebanese" = "Libanonska kuhinja";
|
||||
"type.cuisine.local" = "Krajevna kuhinja";
|
||||
"type.cuisine.malaysian" = "Malezijska kuhinja";
|
||||
"type.cuisine.mediterranean" = "Sredozemska kuhinja";
|
||||
"type.cuisine.mexican" = "Mehiška kuhinja";
|
||||
"type.cuisine.moroccan" = "Maroška kuhinja";
|
||||
"type.cuisine.oriental" = "Orientalska kuhinja";
|
||||
"type.cuisine.pancake" = "Palačinke";
|
||||
"type.cuisine.pasta" = "Testenine";
|
||||
"type.cuisine.persian" = "Perzijska kuhinja";
|
||||
"type.cuisine.peruvian" = "Perujska kuhinja";
|
||||
"type.cuisine.pizza" = "Pica";
|
||||
"type.cuisine.polish" = "Poljska kuhinja";
|
||||
"type.cuisine.portuguese" = "Portugalska kuhinja";
|
||||
"type.cuisine.russian" = "Ruska kuhinja";
|
||||
"type.cuisine.sandwich" = "Sendvič";
|
||||
"type.cuisine.sausage" = "Salama";
|
||||
"type.cuisine.savory_pancakes" = "Slane palačinke";
|
||||
"type.cuisine.seafood" = "Morska hrana";
|
||||
"type.cuisine.soba" = "Soba (ajdovi rezanci)";
|
||||
"type.cuisine.spanish" = "Španska kuhinja";
|
||||
"type.cuisine.steak_house" = "Zrezkarnica";
|
||||
"type.cuisine.sushi" = "Suši";
|
||||
"type.cuisine.tea" = "Čaj";
|
||||
"type.cuisine.turkish" = "Turška kuhinja";
|
||||
"type.cuisine.vegan" = "Veganska kuhinja";
|
||||
"type.cuisine.vegetarian" = "Vegetarijanska kuhinja";
|
||||
"type.cuisine.vietnamese" = "Vietnamska kuhinja";
|
||||
"type.emergency" = "V sili";
|
||||
"type.emergency.access_point" = "Reševalno mesto";
|
||||
"type.emergency.assembly_point" = "Zbirno mesto";
|
||||
"type.emergency.life_ring" = "Reševalni obroč";
|
||||
"type.emergency.defibrillator" = "Defibrilator";
|
||||
"type.emergency.fire_hydrant" = "Požarni hidrant";
|
||||
"type.emergency.phone" = "Telefon v sili";
|
||||
"type.emergency.lifeguard" = "Reševalec";
|
||||
"type.beacon.cardinal.east" = "Glavni usmerjevalni znak";
|
||||
"type.beacon.cardinal.north" = "Glavni usmerjevalni znak";
|
||||
"type.beacon.cardinal.south" = "Glavni usmerjevalni znak";
|
||||
"type.beacon.cardinal.west" = "Glavni usmerjevalni znak";
|
||||
"type.beacon.isolated_danger" = "Usmerjevalni znak ločene nevarnosti";
|
||||
"type.cuisine.burger" = "Burger";
|
||||
"type.craft.caterer" = "Ponudnik cateringa";
|
||||
"type.cuisine.balkan" = "Balkanska kuhinja";
|
||||
"type.cuisine.barbecue" = "Jedi na žaru";
|
||||
"type.cuisine.bavarian" = "Bavarska kuhinja";
|
||||
"type.cuisine.brazilian" = "Brazilska kuhinja";
|
||||
"type.cuisine.buschenschank" = "Vinotoč (Buschenschank)";
|
||||
"type.cuisine.deli" = "Delkatesa";
|
||||
"type.cuisine.regional" = "Regionalna kuhinja";
|
||||
"type.cuisine.tapas" = "Tapas (španski prigrizki)";
|
||||
"type.cuisine.thai" = "Tajska kuhinja";
|
||||
"type.beacon.lateral.port" = "Bočni usmerjevalni znak";
|
||||
"type.beacon.lateral.starboard" = "Bočni usmerjevalni znak";
|
||||
"type.beacon.safe_water" = "Znak varne plovne poti";
|
||||
"type.beacon.special_purpose" = "Usmerjevalni znak posebnega namena";
|
||||
"type.buoy.cardinal.east" = "Glavna boja";
|
||||
"type.buoy.cardinal.north" = "Glavna boja";
|
||||
"type.buoy.cardinal.south" = "Glavna boja";
|
||||
"type.buoy.cardinal.west" = "Glavna boja";
|
||||
"type.lateral.port" = "Pristanišče";
|
||||
"type.cardinal.east" = "Vzhod";
|
||||
"type.cardinal.north" = "Sever";
|
||||
"type.cardinal.south" = "Jug";
|
||||
"type.cardinal.west" = "Zahod";
|
||||
"type.emergency.mountain_rescue" = "Postaja gorskih reševalcev";
|
||||
"type.entrance" = "Vhod";
|
||||
"type.entrance.main" = "Glavni vhod";
|
||||
"type.entrance.house" = "Vhod hiše";
|
||||
"type.entrance.garage" = "Vhod garaže";
|
||||
"type.entrance.service" = "Servisni vhod";
|
||||
"type.entrance.entry" = "Vstop (samo)";
|
||||
"type.entrance.exit" = "Izhod (samo)";
|
||||
"type.healthcare.laboratory" = "Zdravstveni laboratorij";
|
||||
"type.healthcare.psychotherapist" = "Psihoterapevt";
|
||||
|
||||
@@ -1101,4 +1101,3 @@
|
||||
"offline_explanation_title" = "Çevrimdışı Haritalar";
|
||||
"avoid_steps" = "Merdivenlerden kaçın";
|
||||
"editor_place_doesnt_exist_description" = "OpeenStreetMap topluluğuna bir hata notu göndermek için şimdi mekanın nasıl gözüktüğünü tarif et";
|
||||
"avoid_paved" = "Asfalt yollardan kaçın";
|
||||
|
||||
@@ -1491,4 +1491,3 @@
|
||||
"type.shop.lighting" = "Aydınlatma dükkanı";
|
||||
"type.amenity.charging_station.motorcar.small" = "Araç Şarj Noktası";
|
||||
"type.amenity.bench.backless" = "Sırtı Açık Bank";
|
||||
"type.amenity.sailing_school" = "Denizcilik Okulu";
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
27AF18562E1DB63000CD41E2 /* PowerSavingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */; };
|
||||
27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18572E1DB63900CD41E2 /* Appearance.swift */; };
|
||||
27AF185A2E1DB64500CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */; };
|
||||
27FDBF212EEEFC830045621D /* mapcss-mapping.csv in Resources */ = {isa = PBXBuildFile; fileRef = 27FDBF202EEEFC830045621D /* mapcss-mapping.csv */; };
|
||||
3304306D21D4EAFB00317CA3 /* SearchCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3304306C21D4EAFB00317CA3 /* SearchCategoryCell.swift */; };
|
||||
33046832219C57180041F3A8 /* CategorySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33046831219C57180041F3A8 /* CategorySettingsViewController.swift */; };
|
||||
337F98A621D37B7400C8AC27 /* SearchTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337F98A521D37B7400C8AC27 /* SearchTabViewController.swift */; };
|
||||
@@ -789,6 +790,7 @@
|
||||
27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowerSavingMode.swift; sourceTree = "<group>"; };
|
||||
27AF18572E1DB63900CD41E2 /* Appearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Appearance.swift; sourceTree = "<group>"; };
|
||||
27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncingSpeedTrapsWhileVoiceRouting.swift; sourceTree = "<group>"; };
|
||||
27FDBF202EEEFC830045621D /* mapcss-mapping.csv */ = {isa = PBXFileReference; lastKnownFileType = text; name = "mapcss-mapping.csv"; path = "/Users/yannikbloscheck/Apps/CoMaps/Code/data/mapcss-mapping.csv"; sourceTree = "<absolute>"; };
|
||||
28A0AB4B0D9B1048005BE974 /* Maps_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Maps_Prefix.pch; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
29B97316FDCFA39411CA2CEA /* main.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 2; path = main.mm; sourceTree = "<group>"; tabWidth = 2; };
|
||||
30034C5C2B3F0B74005D961A /* az */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = az; path = az.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
@@ -3948,6 +3950,7 @@
|
||||
6B9978341C89A316003B8AA0 /* editor.config */,
|
||||
978D4A30199A11E600D72CA7 /* faq.html */,
|
||||
BB7626B41E8559980031D71C /* icudt75l.dat */,
|
||||
27FDBF202EEEFC830045621D /* mapcss-mapping.csv */,
|
||||
F623DA6A1C9C2731006A3436 /* opening_hours_how_to_edit.html */,
|
||||
FA85F632145DDDC20090E1A0 /* packed_polygons.bin */,
|
||||
451950391B7A3E070085DA05 /* patterns.txt */,
|
||||
@@ -4201,6 +4204,7 @@
|
||||
34F73F9F1E082FF800AC1FD6 /* Localizable.strings in Resources */,
|
||||
340E1EF21E2F614400CE49BF /* Main.storyboard in Resources */,
|
||||
F6E2FE521E097BA00083EBEC /* MWMActionBarButton.xib in Resources */,
|
||||
27FDBF212EEEFC830045621D /* mapcss-mapping.csv in Resources */,
|
||||
EDBD68072B625724005DD151 /* LocationServicesDisabledAlert.xib in Resources */,
|
||||
993DF0CA23F6BD0600AC231A /* ElevationDetailsViewController.xib in Resources */,
|
||||
F623DA6F1C9C2E62006A3436 /* MWMAddPlaceNavigationBar.xib in Resources */,
|
||||
|
||||
@@ -2,7 +2,7 @@ Una aplicación de mapas gratuita y de código abierto, liderada por la comunida
|
||||
|
||||
‣ Simple y elegante: funciones esenciales, fáciles de usar y que simplemente funcionan.
|
||||
‣ Funciona sin conexión: Planifica y navega tu viaje al extranjero sin necesidad de cobertura móvil, busca puntos de referencia durante una excursión, etc. Todas las funciones de la aplicación están diseñadas para funcionar sin conexión.
|
||||
‣ Respeto a la privacidad: La aplicación está diseñada pensando en la privacidad, no identifica a las personas, no rastrea ni recopila información personal. Sin anuncios.
|
||||
‣ Respeto a la privacidad: La aplicación está diseñada pensando en la privacidad: no identifica a las personas, no rastrea ni recopila información personal. Sin anuncios.
|
||||
‣ Ahorra batería y espacio: No consume mucha batería como otras aplicaciones de navegación. Los mapas compactos ahorran el valioso espacio en tu teléfono.
|
||||
‣ Gratuita y desarrollada por la comunidad: Personas como tú ayudaron a desarrollar la aplicación añadiendo lugares a OpenStreetMap, probando y compartiendo sus comentarios sobre las funciones, y aportando sus habilidades de desarrollo y su dinero.
|
||||
‣ Toma de decisiones y finanzas abiertas y transparentes, sin fines de lucro y totalmente de código abierto.
|
||||
@@ -25,4 +25,4 @@ Características principales:
|
||||
• Compatibilidad con CarPlay
|
||||
|
||||
La libertad está aquí
|
||||
¡Descubre tu camino y navega por el mundo priorizando la privacidad y la comunidad!
|
||||
¡Descubre tu camino y navega por el mundo priorizando la privacidad y la comunidad!
|
||||
@@ -1 +1 @@
|
||||
comaps,mapas,openstreetmap,osm,viajes,senderismo,bicicleta,conducción,sin conexión,privacidad,gps
|
||||
comaps,mapas,openstreetmap,osm,viajes,senderismo,bicicleta,conducción,sin conexión,privacidad,gps
|
||||
@@ -1 +1 @@
|
||||
https://comaps.app/es/
|
||||
https://comaps.app/es/
|
||||
@@ -1 +1 @@
|
||||
https://comaps.app/es/privacy
|
||||
https://comaps.app/es/privacy
|
||||
@@ -1 +1 @@
|
||||
Navega con privacidad
|
||||
Navega con privacidad
|
||||
@@ -1 +1 @@
|
||||
https://codeberg.org/comaps/comaps/issues
|
||||
https://codeberg.org/comaps/comaps/issues
|
||||
@@ -81,7 +81,7 @@ public:
|
||||
QPainter painter(device);
|
||||
painter.fillRect(QRectF(0.0, 0.0, device->width(), device->height()), Qt::white);
|
||||
|
||||
auto const shapedText = m_mng->ShapeText(m_utf8, m_fontPixelSize);
|
||||
auto const shapedText = m_mng->ShapeText(m_utf8, m_fontPixelSize, m_lang);
|
||||
|
||||
std::cout << "Total width: " << shapedText.m_lineWidthInPixels << '\n';
|
||||
std::cout << "Max height: " << shapedText.m_maxLineHeightInPixels << '\n';
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "drape/harfbuzz_shaping.hpp"
|
||||
|
||||
#include "platform/platform.hpp"
|
||||
#include "platform/preferred_languages.hpp"
|
||||
|
||||
#include "coding/hex.hpp"
|
||||
#include "coding/reader.hpp"
|
||||
@@ -329,9 +328,6 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
TUniBlockIter m_lastUsedBlock;
|
||||
std::vector<std::unique_ptr<Font>> m_fonts;
|
||||
|
||||
std::string const lang = languages::GetCurrentOrig();
|
||||
hb_language_t const m_language = hb_language_from_string(lang.data(), static_cast<int>(lang.size()));
|
||||
|
||||
// Required to use std::string_view as a search key for std::unordered_map::find().
|
||||
struct StringHash : public std::hash<std::string_view>
|
||||
{
|
||||
@@ -567,8 +563,21 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
return m_impl->m_fonts[key.m_fontIndex]->GetGlyphImage(key.m_glyphId, pixelHeight, sdf);
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
hb_language_t OrganicMapsLanguageToHarfbuzzLanguage(int8_t lang)
|
||||
{
|
||||
// TODO(AB): can langs be converted faster?
|
||||
auto const svLang = StringUtf8Multilang::GetLangByCode(lang);
|
||||
auto const hbLanguage = hb_language_from_string(svLang.data(), static_cast<int>(svLang.size()));
|
||||
if (hbLanguage == HB_LANGUAGE_INVALID)
|
||||
return hb_language_get_default();
|
||||
return hbLanguage;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
// This method is NOT multithreading-safe.
|
||||
text::TextMetrics GlyphManager::ShapeText(std::string_view utf8, int fontPixelHeight)
|
||||
text::TextMetrics GlyphManager::ShapeText(std::string_view utf8, int fontPixelHeight, int8_t lang)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
static int const fontSize = fontPixelHeight;
|
||||
@@ -582,6 +591,9 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
|
||||
auto const [text, segments] = harfbuzz_shaping::GetTextSegments(utf8);
|
||||
|
||||
// TODO(AB): Optimize language conversion.
|
||||
hb_language_t const hbLanguage = OrganicMapsLanguageToHarfbuzzLanguage(lang);
|
||||
|
||||
text::TextMetrics allGlyphs;
|
||||
// For SplitText it's enough to know if the last visual (first logical) segment is RTL.
|
||||
allGlyphs.m_isRTL = segments.back().m_direction == HB_DIRECTION_RTL;
|
||||
@@ -597,8 +609,7 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
static_cast<int>(text.size()), substring.m_start, substring.m_length);
|
||||
hb_buffer_set_direction(m_impl->m_harfbuzzBuffer, substring.m_direction);
|
||||
hb_buffer_set_script(m_impl->m_harfbuzzBuffer, substring.m_script);
|
||||
// TODO: This property is static, is it possible to set it only once?
|
||||
hb_buffer_set_language(m_impl->m_harfbuzzBuffer, m_impl->m_language);
|
||||
hb_buffer_set_language(m_impl->m_harfbuzzBuffer, hbLanguage);
|
||||
|
||||
auto u32CharacterIter{text.begin() + substring.m_start};
|
||||
auto const end{u32CharacterIter + substring.m_length};
|
||||
@@ -635,4 +646,10 @@ FreetypeError constexpr g_FT_Errors[] =
|
||||
|
||||
return allGlyphs;
|
||||
}
|
||||
|
||||
text::TextMetrics GlyphManager::ShapeText(std::string_view utf8, int fontPixelHeight, char const * lang)
|
||||
{
|
||||
return ShapeText(utf8, fontPixelHeight, StringUtf8Multilang::GetLangIndex(lang));
|
||||
}
|
||||
|
||||
} // namespace dp
|
||||
|
||||
@@ -73,7 +73,8 @@ public:
|
||||
int GetFontIndex(strings::UniChar unicodePoint);
|
||||
int GetFontIndex(std::u16string_view sv);
|
||||
|
||||
text::TextMetrics ShapeText(std::string_view utf8, int fontPixelHeight);
|
||||
text::TextMetrics ShapeText(std::string_view utf8, int fontPixelHeight, int8_t lang);
|
||||
text::TextMetrics ShapeText(std::string_view utf8, int fontPixelHeight, char const * lang);
|
||||
|
||||
GlyphImage GetGlyphImage(GlyphFontAndId key, int pixelHeight, bool sdf) const;
|
||||
|
||||
|
||||
@@ -372,7 +372,7 @@ void TextureManager::Init(ref_ptr<dp::GraphicsContext> context, Params const & p
|
||||
m_maxGlypsCount = static_cast<uint32_t>(ceil(kGlyphAreaCoverage * textureSquare / averageGlyphSquare));
|
||||
|
||||
std::string_view constexpr kSpace{" "};
|
||||
m_spaceGlyph = m_glyphManager->ShapeText(kSpace, dp::kBaseFontSizePixels).m_glyphs.front().m_key;
|
||||
m_spaceGlyph = m_glyphManager->ShapeText(kSpace, dp::kBaseFontSizePixels, "en").m_glyphs.front().m_key;
|
||||
|
||||
LOG(LDEBUG, ("Glyphs texture size =", kGlyphsTextureSize, "with max glyphs count =", m_maxGlypsCount));
|
||||
|
||||
@@ -467,7 +467,8 @@ text::TextMetrics TextureManager::ShapeSingleTextLine(float fontPixelHeight, std
|
||||
// TODO(AB): Is this mutex too slow?
|
||||
std::lock_guard lock(m_calcGlyphsMutex);
|
||||
|
||||
auto textMetrics = m_glyphManager->ShapeText(utf8, fontPixelHeight);
|
||||
// TODO(AB): Fix hard-coded lang.
|
||||
auto textMetrics = m_glyphManager->ShapeText(utf8, fontPixelHeight, "en");
|
||||
|
||||
auto const & glyphs = textMetrics.m_glyphs;
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ set(SRC
|
||||
edits_migration.hpp
|
||||
feature_matcher.cpp
|
||||
feature_matcher.hpp
|
||||
feature_type_to_osm.cpp
|
||||
feature_type_to_osm.hpp
|
||||
new_feature_categories.cpp
|
||||
new_feature_categories.hpp
|
||||
opening_hours_ui.cpp
|
||||
|
||||
@@ -34,7 +34,7 @@ std::string_view constexpr kVowels = "aeiouy";
|
||||
|
||||
std::string_view constexpr kMainTags[] = {"amenity", "shop", "tourism", "historic", "craft", "emergency",
|
||||
"barrier", "highway", "office", "leisure", "waterway", "natural",
|
||||
"place", "entrance", "man_made", "healthcare", "attraction"};
|
||||
"place", "entrance", "building", "man_made", "healthcare", "attraction"};
|
||||
|
||||
std::string GetTypeForFeature(editor::XMLFeature const & node)
|
||||
{
|
||||
@@ -46,7 +46,7 @@ std::string GetTypeForFeature(editor::XMLFeature const & node)
|
||||
std::string value = node.GetTagValue(key);
|
||||
if (value == "yes")
|
||||
return std::string{key};
|
||||
else if (key == "shop" || key == "office" || key == "entrance" || key == "attraction")
|
||||
else if (key == "shop" || key == "office" || key == "building" || key == "entrance" || key == "attraction")
|
||||
return value.append(" ").append(key); // "convenience shop"
|
||||
else if (!value.empty() && value.back() == 's')
|
||||
// Remove 's' from the tail: "toilets" -> "toilet".
|
||||
@@ -60,12 +60,6 @@ std::string GetTypeForFeature(editor::XMLFeature const & node)
|
||||
if (node.HasTag("disused:shop") || node.HasTag("disused:amenity"))
|
||||
return "vacant business";
|
||||
|
||||
if (node.HasTag("building"))
|
||||
{
|
||||
std::string value = node.GetTagValue("building");
|
||||
return value == "yes" ? "building" : value.append(" building");
|
||||
}
|
||||
|
||||
if (node.HasTag("addr:housenumber") || node.HasTag("addr:street") || node.HasTag("addr:postcode"))
|
||||
return "address";
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ set(SRC
|
||||
editor_config_test.cpp
|
||||
editor_notes_test.cpp
|
||||
feature_matcher_test.cpp
|
||||
feature_type_to_osm_test.cpp
|
||||
match_by_geometry_test.cpp
|
||||
new_feature_categories_test.cpp
|
||||
opening_hours_ui_test.cpp
|
||||
|
||||
224
libs/editor/editor_tests/feature_type_to_osm_test.cpp
Normal file
224
libs/editor/editor_tests/feature_type_to_osm_test.cpp
Normal file
@@ -0,0 +1,224 @@
|
||||
#include "testing/testing.hpp"
|
||||
|
||||
#include "editor/feature_type_to_osm.hpp"
|
||||
|
||||
#include "indexer/classificator.hpp"
|
||||
#include "indexer/classificator_loader.hpp"
|
||||
|
||||
using namespace editor;
|
||||
|
||||
UNIT_TEST(simpleType)
|
||||
{
|
||||
std::string data =
|
||||
"amenity|restaurant;61;\n"
|
||||
"amenity|bicycle_parking;1071;\n";
|
||||
|
||||
classificator::Load();
|
||||
|
||||
TypeToOSMTranslator translator(false);
|
||||
std::stringstream s(data);
|
||||
translator.LoadFromStream(s);
|
||||
|
||||
uint32_t type = classif().GetTypeByReadableObjectName("amenity-restaurant");
|
||||
std::vector<OSMTag> result = translator.OsmTagsFromType(type);
|
||||
TEST_EQUAL(result.size(), 1, ());
|
||||
TEST_EQUAL(result[0].key, "amenity", ());
|
||||
TEST_EQUAL(result[0].value, "restaurant", ());
|
||||
}
|
||||
|
||||
UNIT_TEST(simpleTypeWithTags)
|
||||
{
|
||||
std::string data =
|
||||
"building;[building];;addr:housenumber;name;1;\n"
|
||||
"amenity|school;[amenity=school],[education=school];;name;int_name;36;\n"
|
||||
"amenity|doctors;[amenity=doctors][healthcare=doctor],[amenity=doctors],[healthcare=doctor];;name;int_name;207;\n";
|
||||
|
||||
classificator::Load();
|
||||
|
||||
TypeToOSMTranslator translator(false);
|
||||
std::stringstream s(data);
|
||||
translator.LoadFromStream(s);
|
||||
|
||||
uint32_t buildingType = classif().GetTypeByReadableObjectName("building");
|
||||
std::vector<OSMTag> buildingResult = translator.OsmTagsFromType(buildingType);
|
||||
TEST_EQUAL(buildingResult.size(), 1, ());
|
||||
TEST_EQUAL(buildingResult[0].key, "building", ());
|
||||
TEST_EQUAL(buildingResult[0].value, "yes", ());
|
||||
|
||||
uint32_t schoolType = classif().GetTypeByReadableObjectName("amenity-school");
|
||||
std::vector<OSMTag> schoolResult = translator.OsmTagsFromType(schoolType);
|
||||
TEST_EQUAL(schoolResult.size(), 1, ());
|
||||
TEST_EQUAL(schoolResult[0].key, "amenity", ());
|
||||
TEST_EQUAL(schoolResult[0].value, "school", ());
|
||||
|
||||
uint32_t doctorType = classif().GetTypeByReadableObjectName("amenity-doctors");
|
||||
std::vector<OSMTag> doctorResult = translator.OsmTagsFromType(doctorType);
|
||||
TEST_EQUAL(doctorResult.size(), 2, ());
|
||||
TEST_EQUAL(doctorResult[0].key, "amenity", ());
|
||||
TEST_EQUAL(doctorResult[0].value, "doctors", ());
|
||||
TEST_EQUAL(doctorResult[1].key, "healthcare", ());
|
||||
TEST_EQUAL(doctorResult[1].value, "doctor", ());
|
||||
}
|
||||
|
||||
UNIT_TEST(complexType)
|
||||
{
|
||||
std::string data =
|
||||
"building;[building];;addr:housenumber;name;1;\n"
|
||||
" # comment that should be ignored\n"
|
||||
"\n"
|
||||
"amenity|restaurant;61;\n"
|
||||
"tourism|information|office;[tourism=information][information=office];;name;int_name;313;\n"
|
||||
"historic|castle|fortress;[historic=castle][castle_type=fortress],[historic=fortress];;name;int_name;1144;\n"
|
||||
"#comment\n"
|
||||
"amenity|place_of_worship|christian|mormon;[amenity=place_of_worship][religion=christian][denomination=mormon];;name;int_name;1572;\n";
|
||||
|
||||
classificator::Load();
|
||||
|
||||
TypeToOSMTranslator translator(false);
|
||||
std::stringstream s(data);
|
||||
translator.LoadFromStream(s);
|
||||
|
||||
uint32_t officeType = classif().GetTypeByReadableObjectName("tourism-information-office");
|
||||
std::vector<OSMTag> officeResult = translator.OsmTagsFromType(officeType);
|
||||
TEST_EQUAL(officeResult.size(), 2, ());
|
||||
TEST_EQUAL(officeResult[0].key, "tourism", ());
|
||||
TEST_EQUAL(officeResult[0].value, "information", ());
|
||||
TEST_EQUAL(officeResult[1].key, "information", ());
|
||||
TEST_EQUAL(officeResult[1].value, "office", ());
|
||||
|
||||
uint32_t fortressType = classif().GetTypeByReadableObjectName("historic-castle-fortress");
|
||||
std::vector<OSMTag> fortressResult = translator.OsmTagsFromType(fortressType);
|
||||
TEST_EQUAL(fortressResult.size(), 2, ());
|
||||
TEST_EQUAL(fortressResult[0].key, "historic", ());
|
||||
TEST_EQUAL(fortressResult[0].value, "castle", ());
|
||||
TEST_EQUAL(fortressResult[1].key, "castle_type", ());
|
||||
TEST_EQUAL(fortressResult[1].value, "fortress", ());
|
||||
|
||||
uint32_t mormonType = classif().GetTypeByReadableObjectName("amenity-place_of_worship-christian-mormon");
|
||||
std::vector<OSMTag> mormonResult = translator.OsmTagsFromType(mormonType);
|
||||
TEST_EQUAL(mormonResult.size(), 3, ());
|
||||
TEST_EQUAL(mormonResult[0].key, "amenity", ());
|
||||
TEST_EQUAL(mormonResult[0].value, "place_of_worship", ());
|
||||
TEST_EQUAL(mormonResult[1].key, "religion", ());
|
||||
TEST_EQUAL(mormonResult[1].value, "christian", ());
|
||||
TEST_EQUAL(mormonResult[2].key, "denomination", ());
|
||||
TEST_EQUAL(mormonResult[2].value, "mormon", ());
|
||||
}
|
||||
|
||||
UNIT_TEST(mandatorySelector)
|
||||
{
|
||||
std::string data =
|
||||
"amenity|parking|fee;[amenity=parking][fee];;name;int_name;125;\n"
|
||||
"highway|track|bridge;[highway=track][bridge?];;name;int_name;193;\n"
|
||||
"shop;[shop?];;name;int_name;943;\n"
|
||||
"disusedbusiness;[disused:shop?],[disused:amenity=restaurant],[disused:amenity=fast_food],[disused:amenity=cafe],[disused:amenity=pub],[disused:amenity=bar];;;;1237;\n";
|
||||
|
||||
classificator::Load();
|
||||
|
||||
TypeToOSMTranslator translator(false);
|
||||
std::stringstream s(data);
|
||||
translator.LoadFromStream(s);
|
||||
|
||||
uint32_t parkingType = classif().GetTypeByReadableObjectName("amenity-parking-fee");
|
||||
std::vector<OSMTag> parkingResult = translator.OsmTagsFromType(parkingType);
|
||||
TEST_EQUAL(parkingResult.size(), 2, ());
|
||||
TEST_EQUAL(parkingResult[0].key, "amenity", ());
|
||||
TEST_EQUAL(parkingResult[0].value, "parking", ());
|
||||
TEST_EQUAL(parkingResult[1].key, "fee", ());
|
||||
TEST_EQUAL(parkingResult[1].value, "yes", ());
|
||||
|
||||
uint32_t trackType = classif().GetTypeByReadableObjectName("highway-track-bridge");
|
||||
std::vector<OSMTag> trackResult = translator.OsmTagsFromType(trackType);
|
||||
TEST_EQUAL(trackResult.size(), 2, ());
|
||||
TEST_EQUAL(trackResult[0].key, "highway", ());
|
||||
TEST_EQUAL(trackResult[0].value, "track", ());
|
||||
TEST_EQUAL(trackResult[1].key, "bridge", ());
|
||||
TEST_EQUAL(trackResult[1].value, "yes", ());
|
||||
|
||||
uint32_t shopType = classif().GetTypeByReadableObjectName("shop");
|
||||
std::vector<OSMTag> shopResult = translator.OsmTagsFromType(shopType);
|
||||
TEST_EQUAL(shopResult.size(), 1, ());
|
||||
TEST_EQUAL(shopResult[0].key, "shop", ());
|
||||
TEST_EQUAL(shopResult[0].value, "yes", ());
|
||||
|
||||
uint32_t disusedType = classif().GetTypeByReadableObjectName("disusedbusiness");
|
||||
std::vector<OSMTag> disusedResult = translator.OsmTagsFromType(disusedType);
|
||||
TEST_EQUAL(disusedResult.size(), 1, ());
|
||||
TEST_EQUAL(disusedResult[0].key, "disused:shop", ());
|
||||
TEST_EQUAL(disusedResult[0].value, "yes", ());
|
||||
}
|
||||
|
||||
UNIT_TEST(forbiddenSelector)
|
||||
{
|
||||
std::string data =
|
||||
"amenity|lounger;[amenity=lounger][!seasonal];;name;int_name;153;\n"
|
||||
"amenity|charging_station|motorcar|small;[amenity=charging_station][motorcar?][!capacity],[amenity=charging_station][motorcar?][capacity=1],[amenity=charging_station][motorcar?][capacity=2];;name;int_name;201;\n";
|
||||
|
||||
classificator::Load();
|
||||
|
||||
TypeToOSMTranslator translator(false);
|
||||
std::stringstream s(data);
|
||||
translator.LoadFromStream(s);
|
||||
|
||||
uint32_t loungerType = classif().GetTypeByReadableObjectName("amenity-lounger");
|
||||
std::vector<OSMTag> loungerResult = translator.OsmTagsFromType(loungerType);
|
||||
TEST_EQUAL(loungerResult.size(), 1, ());
|
||||
TEST_EQUAL(loungerResult[0].key, "amenity", ());
|
||||
TEST_EQUAL(loungerResult[0].value, "lounger", ());
|
||||
|
||||
uint32_t chargingType = classif().GetTypeByReadableObjectName("amenity-charging_station-motorcar-small");
|
||||
std::vector<OSMTag> chargingResult = translator.OsmTagsFromType(chargingType);
|
||||
TEST_EQUAL(chargingResult.size(), 2, ());
|
||||
TEST_EQUAL(chargingResult[0].key, "amenity", ());
|
||||
TEST_EQUAL(chargingResult[0].value, "charging_station", ());
|
||||
TEST_EQUAL(chargingResult[1].key, "motorcar", ());
|
||||
TEST_EQUAL(chargingResult[1].value, "yes", ());
|
||||
}
|
||||
|
||||
UNIT_TEST(ignoreComments)
|
||||
{
|
||||
std::string data =
|
||||
"building;[building];;addr:housenumber;name;1;\n"
|
||||
" # comment that should be ignored\n"
|
||||
"\n"
|
||||
"deprecated:waterway|riverbank:05.2024;52;x\n"
|
||||
"amenity|restaurant;61;\n"
|
||||
"moved:amenity|telephone:05.2024;122;amenity|telephone\n"
|
||||
"natural|lake;564;natural|water|lake\n"; // moved type, should be ignored
|
||||
|
||||
classificator::Load();
|
||||
|
||||
TypeToOSMTranslator translator(false);
|
||||
std::stringstream s(data);
|
||||
translator.LoadFromStream(s);
|
||||
}
|
||||
|
||||
UNIT_TEST(loadConfigFile)
|
||||
{
|
||||
TypeToOSMTranslator translator(false);
|
||||
translator.LoadConfigFile();
|
||||
|
||||
size_t size = translator.GetStorage().size();
|
||||
LOG(LINFO, ("Size of feature type storage:", size));
|
||||
ASSERT(size > 1300, ());
|
||||
ASSERT(size < 1700, ());
|
||||
}
|
||||
|
||||
UNIT_TEST(testWithRealFile)
|
||||
{
|
||||
classificator::Load();
|
||||
|
||||
uint32_t restaurantType = classif().GetTypeByReadableObjectName("amenity-restaurant");
|
||||
std::vector<OSMTag> restaurantResult = GetOSMTranslator().OsmTagsFromType(restaurantType);
|
||||
TEST_EQUAL(restaurantResult.size(), 1, ());
|
||||
TEST_EQUAL(restaurantResult[0].key, "amenity", ());
|
||||
TEST_EQUAL(restaurantResult[0].value, "restaurant", ());
|
||||
|
||||
uint32_t officeType = classif().GetTypeByReadableObjectName("tourism-information-office");
|
||||
std::vector<OSMTag> officeResult = GetOSMTranslator().OsmTagsFromType(officeType);
|
||||
TEST_EQUAL(officeResult.size(), 2, ());
|
||||
TEST_EQUAL(officeResult[0].key, "tourism", ());
|
||||
TEST_EQUAL(officeResult[0].value, "information", ());
|
||||
TEST_EQUAL(officeResult[1].key, "information", ());
|
||||
TEST_EQUAL(officeResult[1].value, "office", ());
|
||||
}
|
||||
166
libs/editor/feature_type_to_osm.cpp
Normal file
166
libs/editor/feature_type_to_osm.cpp
Normal file
@@ -0,0 +1,166 @@
|
||||
#include "editor/feature_type_to_osm.hpp"
|
||||
|
||||
#include "base/assert.hpp"
|
||||
#include "coding/reader_streambuf.hpp"
|
||||
#include "indexer/classificator.hpp"
|
||||
#include "platform/platform.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace editor
|
||||
{
|
||||
TypeToOSMTranslator::TypeToOSMTranslator(bool initialize)
|
||||
{
|
||||
if (initialize)
|
||||
LoadConfigFile();
|
||||
}
|
||||
|
||||
void TypeToOSMTranslator::LoadConfigFile()
|
||||
{
|
||||
Platform & p = GetPlatform();
|
||||
std::unique_ptr<ModelReader> reader = p.GetReader("mapcss-mapping.csv");
|
||||
ReaderStreamBuf buffer(std::move(reader));
|
||||
std::istream s(&buffer);
|
||||
|
||||
LoadFromStream(s);
|
||||
}
|
||||
|
||||
void TypeToOSMTranslator::LoadFromStream(std::istream & s)
|
||||
{
|
||||
m_storage.clear();
|
||||
|
||||
std::string line;
|
||||
while (s.good())
|
||||
{
|
||||
getline(s, line);
|
||||
strings::Trim(line);
|
||||
|
||||
// skip empty lines, comments, deprecated and moved types
|
||||
if (line.empty() || line.front() == '#' || line.starts_with("deprecated") || line.starts_with("moved") ||
|
||||
line.back() != ';')
|
||||
continue;
|
||||
|
||||
std::vector<std::string_view> const rowTokens = strings::Tokenize(line, ";");
|
||||
if (rowTokens.size() < 2)
|
||||
{
|
||||
ASSERT(false, ("Invalid feature type definition:", line));
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get internal feature type
|
||||
std::vector<std::string_view> const featureTypeTokens = strings::Tokenize(rowTokens[0], "|");
|
||||
uint32_t const type = classif().GetTypeByPathSafe(featureTypeTokens);
|
||||
ASSERT(type != IndexAndTypeMapping::INVALID_TYPE, ("Feature with invalid type:", line));
|
||||
|
||||
if (rowTokens.size() == 2)
|
||||
{
|
||||
// Derive OSM tags from type name
|
||||
ASSERT(featureTypeTokens.size() <= 2, ("OSM tags can not be inferred from name:", line));
|
||||
|
||||
OSMTag osmTag;
|
||||
|
||||
// e.g. "amenity-restaurant"
|
||||
if (featureTypeTokens.size() >= 2)
|
||||
{
|
||||
osmTag.key = featureTypeTokens[0];
|
||||
osmTag.value = featureTypeTokens[1];
|
||||
}
|
||||
// e.g. "building"
|
||||
else if (featureTypeTokens.size() == 1)
|
||||
{
|
||||
osmTag.key = featureTypeTokens[0];
|
||||
osmTag.value = "yes";
|
||||
}
|
||||
|
||||
m_storage.insert({type, {osmTag}});
|
||||
}
|
||||
else
|
||||
{
|
||||
// OSM tags are listed in the feature type entry
|
||||
std::vector<std::string_view> const osmTagTokens = strings::Tokenize(rowTokens[1], ",");
|
||||
|
||||
// First entry is the best practice way to tag a feature
|
||||
std::string_view const osmTagList = osmTagTokens[0];
|
||||
|
||||
// Process OSM tag list (e.g. "[tourism=information][information=office]")
|
||||
std::vector<OSMTag> osmTags;
|
||||
size_t pos = 0;
|
||||
|
||||
while ((pos = osmTagList.find('[', pos)) != std::string::npos)
|
||||
{
|
||||
size_t end = osmTagList.find(']', pos);
|
||||
|
||||
if (end == std::string::npos)
|
||||
{
|
||||
ASSERT(false, ("Bracket not closed in OSM tag:", line));
|
||||
break;
|
||||
}
|
||||
|
||||
std::string_view keyValuePair = osmTagList.substr(pos + 1, end - pos - 1);
|
||||
|
||||
if (keyValuePair.empty())
|
||||
{
|
||||
ASSERT(false, ("Key value pair is empty:", line));
|
||||
break;
|
||||
}
|
||||
|
||||
size_t equalSign = keyValuePair.find('=');
|
||||
if (equalSign != std::string::npos)
|
||||
{
|
||||
// Tags in key=value format
|
||||
OSMTag osmTag;
|
||||
osmTag.key = keyValuePair.substr(0, equalSign);
|
||||
osmTag.value = keyValuePair.substr(equalSign + 1);
|
||||
|
||||
// mapcss-mapping.csv uses 'not' instead of 'no' as a workaround for the rendering engine
|
||||
if (osmTag.value == "not")
|
||||
osmTag.value = "no";
|
||||
|
||||
osmTags.push_back(osmTag);
|
||||
}
|
||||
else if (keyValuePair.front() == '!')
|
||||
{
|
||||
// Tags with "forbidden" selector '!' are skipped
|
||||
}
|
||||
else
|
||||
{
|
||||
// Tags with optional "mandatory" selector '?'
|
||||
if (keyValuePair.back() == '?')
|
||||
keyValuePair.remove_suffix(1);
|
||||
|
||||
OSMTag osmTag;
|
||||
osmTag.key = keyValuePair;
|
||||
osmTag.value = "yes";
|
||||
|
||||
osmTags.push_back(osmTag);
|
||||
}
|
||||
|
||||
pos = end + 1;
|
||||
}
|
||||
|
||||
ASSERT(!osmTags.empty(), ("No OSM tags found for feature:", line));
|
||||
|
||||
m_storage.insert({type, osmTags});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<OSMTag> const & TypeToOSMTranslator::OsmTagsFromType(uint32_t type) const
|
||||
{
|
||||
auto it = m_storage.find(type);
|
||||
|
||||
if (it == m_storage.end())
|
||||
{
|
||||
ASSERT(false, ("OSM tags for type", type, "could not be found"));
|
||||
return kEmptyResult;
|
||||
}
|
||||
|
||||
return it->second;
|
||||
}
|
||||
|
||||
TypeToOSMTranslator const & GetOSMTranslator()
|
||||
{
|
||||
static TypeToOSMTranslator translator;
|
||||
return translator;
|
||||
}
|
||||
} // namespace editor
|
||||
36
libs/editor/feature_type_to_osm.hpp
Normal file
36
libs/editor/feature_type_to_osm.hpp
Normal file
@@ -0,0 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
namespace editor
|
||||
{
|
||||
|
||||
struct OSMTag
|
||||
{
|
||||
std::string key;
|
||||
std::string value;
|
||||
};
|
||||
|
||||
class TypeToOSMTranslator
|
||||
{
|
||||
public:
|
||||
std::vector<OSMTag> static constexpr kEmptyResult = {};
|
||||
|
||||
TypeToOSMTranslator() : TypeToOSMTranslator(true) {}
|
||||
explicit TypeToOSMTranslator(bool initialize);
|
||||
|
||||
void LoadConfigFile();
|
||||
void LoadFromStream(std::istream & s);
|
||||
std::vector<OSMTag> const & OsmTagsFromType(uint32_t type) const;
|
||||
|
||||
std::unordered_map<uint32_t, std::vector<OSMTag>> const & GetStorage() const { return m_storage; }
|
||||
|
||||
private:
|
||||
std::unordered_map<uint32_t, std::vector<OSMTag>> m_storage;
|
||||
};
|
||||
|
||||
TypeToOSMTranslator const & GetOSMTranslator();
|
||||
|
||||
} // namespace editor
|
||||
@@ -1,4 +1,6 @@
|
||||
#include "editor/xml_feature.hpp"
|
||||
|
||||
#include "editor/feature_type_to_osm.hpp"
|
||||
#include "editor/keys_to_remove.hpp"
|
||||
|
||||
#include "indexer/classificator.hpp"
|
||||
@@ -640,36 +642,16 @@ void XMLFeature::RemoveTag(string_view key)
|
||||
|
||||
void XMLFeature::SetOSMTagsForType(uint32_t type)
|
||||
{
|
||||
if (ftypes::IsRecyclingCentreChecker::Instance()(type))
|
||||
{
|
||||
SetTagValue("amenity", "recycling");
|
||||
SetTagValue("recycling_type", "centre");
|
||||
}
|
||||
else if (ftypes::IsRecyclingContainerChecker::Instance()(type))
|
||||
{
|
||||
SetTagValue("amenity", "recycling");
|
||||
SetTagValue("recycling_type", "container");
|
||||
}
|
||||
else if (ftypes::IsAddressChecker::Instance()(type))
|
||||
if (ftypes::IsAddressChecker::Instance()(type))
|
||||
{
|
||||
// Addresses don't have a category tag
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
string const strType = classif().GetReadableObjectName(type);
|
||||
strings::SimpleTokenizer iter(strType, "-");
|
||||
string_view const k = *iter;
|
||||
|
||||
if (++iter)
|
||||
{
|
||||
// Main type is stored as "k=amenity v=restaurant"
|
||||
SetTagValue(k, *iter);
|
||||
}
|
||||
else {
|
||||
// Main type is stored as "k=building v=yes"
|
||||
SetTagValue(k, kYes);
|
||||
}
|
||||
}
|
||||
std::vector<OSMTag> const & osmTags = GetOSMTranslator().OsmTagsFromType(type);
|
||||
|
||||
for (auto const & osmTag : osmTags)
|
||||
SetTagValue(osmTag.key, osmTag.value);
|
||||
}
|
||||
|
||||
void XMLFeature::UpdateOSMTag(std::string_view key, std::string_view value)
|
||||
|
||||
@@ -65,7 +65,6 @@ static std::pair<UniString, UniString> const kPreprocessReplacements[] = {
|
||||
{MakeUniString("ff. cc."), MakeUniString("ferrocarrís")},
|
||||
{MakeUniString("f.ta"), MakeUniString("fondamenta")},
|
||||
{MakeUniString("g.n.r."), MakeUniString("guarda nacional republicana")},
|
||||
{MakeUniString("g-ral"), MakeUniString("general")},
|
||||
{MakeUniString("g. v."), MakeUniString("gran vía")},
|
||||
{MakeUniString("i.d."), MakeUniString("in der")},
|
||||
{MakeUniString("k/s"), MakeUniString("khách sạn")},
|
||||
|
||||
@@ -150,17 +150,6 @@ std::string Platform::ReadPathForFile(std::string const & file, std::string sear
|
||||
"\nr: ", m_resourcesDir, "\ns: ", m_settingsDir));
|
||||
}
|
||||
|
||||
void Platform::SetCustomMapServerUrl(std::string & url)
|
||||
{
|
||||
strings::Trim(url);
|
||||
m_customMapServerUrl = std::move(url);
|
||||
}
|
||||
|
||||
std::string const & Platform::CustomMapServerUrl() const
|
||||
{
|
||||
return m_customMapServerUrl;
|
||||
}
|
||||
|
||||
std::string Platform::MetaServerUrl() const
|
||||
{
|
||||
return METASERVER_URL;
|
||||
|
||||
@@ -268,10 +268,6 @@ public:
|
||||
/// @return integer version in yyMMdd format.
|
||||
int32_t IntVersion() const;
|
||||
|
||||
/// Set custom map server url to allow user-defined download servers
|
||||
void SetCustomMapServerUrl(std::string & url);
|
||||
std::string const & CustomMapServerUrl() const;
|
||||
|
||||
/// @return url for clients to download maps
|
||||
std::string MetaServerUrl() const;
|
||||
|
||||
@@ -343,8 +339,6 @@ private:
|
||||
void ShutdownThreads();
|
||||
|
||||
void GetSystemFontNames(FilesList & res) const;
|
||||
|
||||
std::string m_customMapServerUrl;
|
||||
};
|
||||
|
||||
std::string DebugPrint(Platform::EError err);
|
||||
|
||||
@@ -244,12 +244,12 @@ void NotificationManager::SetLengthUnits(measurement_utils::Units units)
|
||||
switch (units)
|
||||
{
|
||||
case measurement_utils::Units::Metric:
|
||||
m_settings.SetState(30 /* notificationTimeSeconds */, 200 /* minNotificationDistanceUnits */,
|
||||
m_settings.SetState(30 /* notificationTimeSeconds */, 400 /* minNotificationDistanceUnits */,
|
||||
2000 /* maxNotificationDistanceUnits */, GetSoundedDistMeters() /* soundedDistancesUnits */,
|
||||
measurement_utils::Units::Metric /* lengthUnits */);
|
||||
return;
|
||||
case measurement_utils::Units::Imperial:
|
||||
m_settings.SetState(30 /* notificationTimeSeconds */, 500 /* minNotificationDistanceUnits */,
|
||||
m_settings.SetState(30 /* notificationTimeSeconds */, 1000 /* minNotificationDistanceUnits */,
|
||||
5000 /* maxNotificationDistanceUnits */, GetSoundedDistFeet() /* soundedDistancesUnits */,
|
||||
measurement_utils::Units::Imperial /* lengthUnits */);
|
||||
return;
|
||||
|
||||
@@ -93,13 +93,11 @@ public:
|
||||
|
||||
ForEachIndexImpl(intervals, scale, [&](uint32_t index)
|
||||
{
|
||||
std::unique_ptr<FeatureType> ft = GetFeature(index, ignoreEditedStatus);
|
||||
if (ft)
|
||||
fn(*ft);
|
||||
fn(*GetFeature(index, ignoreEditedStatus));
|
||||
});
|
||||
}
|
||||
|
||||
// Returns empty unique_ptr if feature was deleted by user.
|
||||
// Returns false if feature was deleted by user.
|
||||
std::unique_ptr<FeatureType> GetFeature(uint32_t index, bool ignoreEditedStatus = false) const;
|
||||
|
||||
[[nodiscard]] inline bool GetCenter(uint32_t index, m2::PointD & center) { return m_centers.Get(index, center); }
|
||||
|
||||
@@ -725,7 +725,7 @@ unordered_map<string, vector<string>> const kSynonyms = {
|
||||
{"low", {"lower"}},
|
||||
{"lp", {"loop"}},
|
||||
{"lr", {"lower"}},
|
||||
{"lt", {"lote", "lieutenant", "little", "locotelent"}},
|
||||
{"lt", {"lote", "lieutenant", "little"}},
|
||||
{"lug", {"lugar"}},
|
||||
{"luit", {"luitenant"}},
|
||||
{"lung", {"lungsod"}},
|
||||
@@ -1111,7 +1111,6 @@ unordered_map<string, vector<string>> const kSynonyms = {
|
||||
{"seventh", {"7th"}},
|
||||
{"sexta", {"6", "6a"}},
|
||||
{"sexto", {"6", "6o"}},
|
||||
{"sf", {"sfântul", "sfânta", "sfinții"}},
|
||||
{"sgda", {"sagrada"}},
|
||||
{"sg", {"schottergrube", "sungai", "sandgrube"}},
|
||||
{"sgt", {"sagrat", "sergeant"}},
|
||||
@@ -1391,7 +1390,6 @@ unordered_map<string, vector<string>> const kSynonyms = {
|
||||
{"б", {"большая", "большой"}},
|
||||
{"бл", {"блок"}},
|
||||
{"бол", {"большая", "большой"}},
|
||||
{"буд", {"будинок"}},
|
||||
{"бул", {"булевард", "бульвар"}},
|
||||
{"вул", {"вулиця"}},
|
||||
{"вх", {"вход"}},
|
||||
@@ -1404,7 +1402,7 @@ unordered_map<string, vector<string>> const kSynonyms = {
|
||||
{"кв", {"квартал"}},
|
||||
{"мал", {"малый", "малая"}},
|
||||
{"мит", {"митрополит"}},
|
||||
{"м", {"малый", "малая", "місто"}},
|
||||
{"м", {"малый", "малая"}},
|
||||
{"наб", {"набережная", "набережна", "набярэжная"}},
|
||||
{"нов", {"новый", "новая"}},
|
||||
{"обл", {"область"}},
|
||||
@@ -1418,7 +1416,6 @@ unordered_map<string, vector<string>> const kSynonyms = {
|
||||
{"с", {"село"}},
|
||||
{"стар", {"старая", "старый"}},
|
||||
{"туп", {"тупик", "тупік"}},
|
||||
{"узв", {"узвіз"}},
|
||||
{"ул", {"улица"}},
|
||||
{"ш", {"шаша", "шосе", "шоссе"}},
|
||||
{"اثنان", {"2"}},
|
||||
|
||||
@@ -156,18 +156,6 @@ std::string GetAcceptLanguage()
|
||||
MetaConfig MapFilesDownloader::LoadMetaConfig()
|
||||
{
|
||||
Platform & pl = GetPlatform();
|
||||
|
||||
// If user sets a custom download server, skip metaserver entirely.
|
||||
std::string const customServer = pl.CustomMapServerUrl();
|
||||
if (!customServer.empty())
|
||||
{
|
||||
LOG(LINFO, ("Using custom map server URL:", customServer));
|
||||
|
||||
MetaConfig metaConfig;
|
||||
metaConfig.m_serversList = {customServer};
|
||||
return metaConfig;
|
||||
}
|
||||
|
||||
std::string const metaServerUrl = pl.MetaServerUrl();
|
||||
std::string httpResult;
|
||||
|
||||
@@ -182,7 +170,7 @@ MetaConfig MapFilesDownloader::LoadMetaConfig()
|
||||
request.RunHttpRequest(httpResult);
|
||||
}
|
||||
|
||||
auto metaConfig = downloader::ParseMetaConfig(httpResult);
|
||||
std::optional<MetaConfig> metaConfig = downloader::ParseMetaConfig(httpResult);
|
||||
if (!metaConfig)
|
||||
{
|
||||
metaConfig = downloader::ParseMetaConfig(pl.DefaultUrlsJSON());
|
||||
@@ -193,7 +181,6 @@ MetaConfig MapFilesDownloader::LoadMetaConfig()
|
||||
{
|
||||
LOG(LINFO, ("Got servers list:", metaConfig->m_serversList));
|
||||
}
|
||||
|
||||
CHECK(!metaConfig->m_serversList.empty(), ());
|
||||
return *metaConfig;
|
||||
}
|
||||
@@ -203,10 +190,4 @@ void MapFilesDownloader::GetMetaConfig(MetaConfigCallback const & callback)
|
||||
callback(LoadMetaConfig());
|
||||
}
|
||||
|
||||
void MapFilesDownloader::ResetMetaConfig()
|
||||
{
|
||||
m_serversList.clear();
|
||||
m_isMetaConfigRequested = false;
|
||||
}
|
||||
|
||||
} // namespace storage
|
||||
|
||||
@@ -66,9 +66,6 @@ public:
|
||||
void SetDownloadingPolicy(DownloadingPolicy * policy);
|
||||
void SetDataVersion(int64_t version) { m_dataVersion = version; }
|
||||
|
||||
/// Reset after changes, e.g. map download URL.
|
||||
void ResetMetaConfig();
|
||||
|
||||
/// @name Legacy functions for Android resources downloading routine (initial World download).
|
||||
/// @{
|
||||
void EnsureMetaConfigReady(std::function<void()> && callback);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user