Compare commits

..

31 Commits

Author SHA1 Message Date
Jean-Baptiste
c1aef8980f [doc] Create an security markdown file
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-27 09:21:00 +01:00
Yannik Bloscheck
4398e492b8 [iOS] Added new editor files to their Xcode projects
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-12-19 19:45:31 +01:00
map-per
1907e039e3 [editor] Support complex POI types in the editor (#2855)
Signed-off-by: map-per <map-per@gmx.de>
2025-12-19 19:45:31 +01:00
map-per
26bad5dffb [editor] 'discard' and 'delete' buttons only available when nothing was uploaded to OSM
Signed-off-by: map-per <map-per@gmx.de>
2025-12-19 17:37:36 +01:00
Konstantin Pastbin
4f2b479b2c December R2 release notes
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-19 16:38:10 +01:00
Viktor Govako
a972552155 [drape] Refactor UpdateVisualScale.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
2025-12-19 16:26:51 +01:00
Konstantin Pastbin
dc54c45482 [planet] Update map data to 251217
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-19 16:01:17 +01:00
Codeberg Translate
1975b6a0f0 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: ERYpTION <eryption@noreply.codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Outbreak2096 <outbreak2096@noreply.codeberg.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-12-19 12:49:54 +00:00
map-per
8683853f46 [search] Check for empty/nullptr to fix editor crash (#2904)
Signed-off-by: map-per <map-per@gmx.de>
2025-12-19 13:49:30 +01:00
Yannik Bloscheck
d7e34c2685 [search] Fix search for vegan and vegetarian places
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-12-19 13:11:05 +01:00
Konstantin Pastbin
0028306b26 [search] Fix compilation (add missing comma)
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-19 12:36:51 +07:00
x7z4w
b5354fd1e3 [search] Add synonyms
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-12-19 04:12:12 +01:00
x7z4w
964f82510a [drape] Set Harfbuzz language to map language
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-12-19 04:09:13 +01:00
Konstantin Pastbin
faf49fc574 [tts] Revert values changes done in #2752 4f739d98b
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-19 09:25:00 +07:00
Jean-Baptiste
60b1ad232a [android] Clean background color in views
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-18 21:31:25 +01:00
Jean-Baptiste
1bac0fd4fc [search] Improve search terms in french
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-18 20:35:30 +01:00
Codeberg Translate
ed6dcc5cb2 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@noreply.codeberg.org>
Co-authored-by: Stzyxh <stzyxh@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: aoxa <aoxa@noreply.codeberg.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: map-per <map-per@noreply.codeberg.org>
Co-authored-by: metehan <metehan@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Co-authored-by: teletext <teletext@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/Countries and regions names
Translation: CoMaps/Voice announcements for navigation (TTS)
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-12-18 14:24:02 +00:00
Jean-Baptiste
33b440dd71 [android] Remove custom attrs fonts styles
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-18 15:23:52 +01:00
map-per
6a20269819 [editor] Rename button to 'Discard changes'
Signed-off-by: map-per <map-per@gmx.de>
2025-12-18 11:52:47 +01:00
NoelClick
8cd1b41cd2 [android] Update connection failure dialog cancellation behavior
- Update the connection failure dialog in the world download view based on reviewers' feedback.

Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
NoelClick
2b630964d0 [android] Unify custom map server dialog logic and UI
- Add setting icon for custom map server download option.
- Extract shared custom map server dialog helper.
- Clean up based on reviewers' feedback.

Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
NoelClick
76ecd8209e [android] Improve custom map server dialog UX
Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
NoelClick
82d2932ba0 [android] Add validation for custom map download URL
- Add validation for custom map download URL.
- Re-enable advanced server button after failed or paused downloads.

Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
NoelClick
85540133b3 [android] Clarify custom map download URL strings
Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
NoelClick
6ded75de9c [core] Treat custom map download URL as CDN base, not meta server
- Update `MapFilesDownloader::LoadMetaConfig()` to skip the metaserver when a
  custom base URL is set and build MetaConfig with that URL as the only server.
- Keep the existing metaserver-based behavior when no custom base URL is set.

Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
NoelClick
08e8ebd434 [android] Add custom world map download URL option
- Allow setting a custom map download URL in the "world-download" screen.

Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
NoelClick
6c92264fb0 [android] Add custom map download URL setting
Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
NoelClick
4ba0fc51a5 [android] Make it possible to set a custom map download URL
Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
NoelClick
29c363a581 [core] Allow overriding map metaserver URL and reset downloader cache
- Add custom meta server API.
- Implement override.
- Add reset hook and implement reset.
- Expose reset from Storage.
- Let JNI set URL and reset cache.

Signed-off-by: NoelClick <dev@noel.click>
2025-12-18 09:41:55 +01:00
map-per
4973f4fed2 [editor] Lower priority for building in changeset comments
Signed-off-by: map-per <map-per@gmx.de>
2025-12-18 07:53:52 +01:00
map-per
8cffa508f3 [android] Use separate function to check for MapTooOldToEdit
Signed-off-by: map-per <map-per@gmx.de>
2025-12-17 21:07:12 +01:00
142 changed files with 3888 additions and 2872 deletions

View File

@@ -10,6 +10,7 @@ CoMaps contributors:
Bastian Greshake Tzovaras Bastian Greshake Tzovaras
clover sage clover sage
Harry Bond <me@hbond.xyz> Harry Bond <me@hbond.xyz>
NoelClick
thesupertechie thesupertechie
vikiawv vikiawv
Yannik Bloscheck Yannik Bloscheck

17
SECURITY.md Normal file
View File

@@ -0,0 +1,17 @@
## Reporting Vulnerabilities
You can report a security vulnerability by creating an issue or send mail to security@comaps.app
## Verifying Fingerprints
To [verify](https://developer.android.com/studio/command-line/apksigner#usage-verify) the APK, use the following signing certificate fingerprints:
```
SHA-256: 4894e8e6963627ef660031d8593fe77297f835acb4e23810003e926135023b4c
SHA-1: 8b7b5739f917e9f7c681671ced0c9c8562123ade
MD5: 9cce0ffea281dc2f0e0a154d6d2e281e
```
To verify CoMaps via [AppVerifier](https://github.com/soupslurpr/AppVerifier), use the following signing certificate fingerprint:
```
app.comaps
48:94:E8:E6:96:36:27:EF:66:00:31:D8:59:3F:E7:72:97:F8:35:AC:B4:E2:38:10:00:3E:92:61:35:02:3B:4C
```

View File

@@ -1,10 +1,8 @@
• OpenStreetMap-Daten vom 9. Dezember • OpenStreetMap Daten vom 17. Dezember
• Material 3 Design • Map download server nun wählbar
Im OSM-Editor können nun Ladestationen hinzugefügt werden Warnung über veraltete Karten hinzugefügt + Knopf zum updaten
Schuko und Typ E Ladestationen hinzugefügt Vermeidung von Parkplatzwegen im Routing
Verbesserte Suchvorschläge Neuer Zoombutton
Litauische und lettische Sprachankündigungen Verbesserte Französchische Suchsynonme
Die Fahranweisungen wurden vergrößert OSM editor: Maximale Länge für OSM-Tags werden nun geprüft
• Der Zoomlevel passt sich an die Distanz zur nächsten Abbiegung an Mehr auf codeberg.org/comaps/comaps/releases
• Neue Anordnung der Einstellungen
Weitere Einzelheiten auf codeberg.org/comaps/comaps/releases

View File

@@ -1,10 +1,8 @@
• OpenStreetMap data as of December 9 • OpenStreetMap data as of December 17
Use Material 3 themes Make map download server configurable
Support charging sockets in OSM Editor Added info about outdated maps and an update button to the selected place info card
• Added schuko/type-E charge sockets • Avoid using parking aisles for routing
Improved search results ranking Changed shape of zoom buttons
Enabled Lithuanian and Latvian in voice announcements Improved French search synonyms
Improved size of driving indications OSM editor: check length limit for OSM tags in value validation
• Base zoom level on distance to next turn
• Reordered settings
More details on codeberg.org/comaps/comaps/releases More details on codeberg.org/comaps/comaps/releases

View File

@@ -1,11 +0,0 @@
• Datos de OpenStreetMap a fecha 9/12.
• Uso de temas Material 3.
• Compatibilidad con enchufes de recarga en Editor.
• Se añaden enchufes de recarga schuko/tipo E.
• Se mejora la búsqueda.
• Se habilitan el lituano y el letón en las indicaciones de voz.
• Se aumenta el tamaño de las indicaciones de conducción.
• Nivel de zoom base según la distancia al siguiente giro.
• Se han reordenado los ajustes.
Más detalles en codeberg.org/comaps/comaps/releases

View File

@@ -1,10 +1,8 @@
• Données OpenStreetMap du 9 Décembre • Données OpenStreetMap du 17 décembre
Utilisation de Material 3 Serveur de téléchargement de cartes configurable
Support de l'édition des bornes de recharge dans l'éditeur OSM Ajout d'un message d'avertissement pour les cartes trop anciennes
Ajout du type de prise schuko/type-E Évitement des allées de parking dans les itinéraires
Amélioration de l'ordre des résultats de recherche Mise à jour de l'apparence des boutons de zooms
• Ajout du lituanien et du letton dans le guidage vocal • Amélioration des synonymes de recherche en français
Amélioration de la taille des instructions dans la navigation Editeur OSM: vérification de la taille limite des tags OSM
• Niveau de zoom basé sur la distance jusquau prochain virage Plus d'informations sur codeberg.org/comaps/comaps/releases
• Réorganisation des paramètres
Plus de détails sur codeberg.org/comaps/comaps/releases

View File

@@ -1,10 +0,0 @@
• Podaci OpenStreetMap karte od 9. prosinca
• Korištenje Material 3 tema
• Podrška za utičnice za punjenje u OSM Editoru
• Dodane šuko/tip-E utičnice
• Poboljšano rangiranje rezultata pretraživanja
• Omogućeni litvanski i latvijski jezici u glasovnim najavama
• Povećana veličina indikatora vožnje
• Razina zumiranja se mijenja ovisno o udaljenosti do sljedećeg skretanja
• Promijenjen redoslijed postavki
Više detalja na codeberg.org/comaps/comaps/releases

View File

@@ -1,10 +0,0 @@
• Dane OpenStreetMap z 9 grudnia
• Użycie motywów Material 3
• Obsługa gniazd ładowania w Edytorze OSM
• Dodane gniazda ładowania schuko/type-E
• Poprawiony ranking wyników wyszukiwania
• Dodane litewskie i łotewskie komunikaty głosowe
• Poprawiony rozmiar znaków drogowych
• Poziom powiększenia oparty na odległości do następnego manewru
• Zmieniona kolejność ustawień
Więcej szczegółów na codeberg.org/comaps/comaps/releases

View File

@@ -1,10 +1,8 @@
• Dados OpenStreetMap atualizados em 9 de dezembro • Dados OSM de 17/12
Uso do estilo Material 3 Servidor de download de mapas configurável
Suporte para tomadas de carregamento no Editor OSM Adição de informações sobre mapas desatualizados e um botão de atualização ao cartão de informações do local selecionado
Adição de tomadas de carregamento Schuko/Tipo E Evita o uso de corredores de estacionamento para roteamento
Melhoria na classificação dos resultados de busca Formato dos botões de zoom alterado
Adição dos idiomas letão e lituano nas orientações por voz Sinônimos de busca em francês aprimorados
Melhoria no tamanho das indicações de direção Editor OSM: verificação do limite de comprimento das tags do OSM na validação de valores
• Nível de zoom baseado em distância até a próxima curva
• Configurações reordenadas
Mais detalhes em codeberg.org/comaps/comaps/releases Mais detalhes em codeberg.org/comaps/comaps/releases

View File

@@ -0,0 +1,8 @@
• Карты OpenStreetMap от 17 декабря
• Возможность настройки сервера для скачивания карт
• Добавлена ​​информация об устаревании карт и ​​кнопка обновления (при выборе места на карте)
• Парковочные проезды больше не используются для транзитной маршрутизации
• Изменены кнопки масштабирования карты
На карту добавлены ирригационные гидранты
• Редактор OSM: проверка максимальной длины OSM тегов
Подробнее на codeberg.org/comaps/comaps/releases

View File

@@ -18,6 +18,7 @@ import android.location.Location;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.CallSuper; import androidx.annotation.CallSuper;
@@ -25,7 +26,15 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.core.view.ViewCompat; 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.base.BaseMwmFragmentActivity;
import app.organicmaps.dialog.CustomMapServerDialog;
import app.organicmaps.downloader.MapManagerHelper; import app.organicmaps.downloader.MapManagerHelper;
import app.organicmaps.intent.Factory; import app.organicmaps.intent.Factory;
import app.organicmaps.sdk.Framework; import app.organicmaps.sdk.Framework;
@@ -38,11 +47,7 @@ import app.organicmaps.sdk.util.StringUtils;
import app.organicmaps.util.UiUtils; import app.organicmaps.util.UiUtils;
import app.organicmaps.util.Utils; import app.organicmaps.util.Utils;
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener; 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.List;
import java.util.Objects; import java.util.Objects;
@@ -54,6 +59,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
private MaterialTextView mTvMessage; private MaterialTextView mTvMessage;
private LinearProgressIndicator mProgress; private LinearProgressIndicator mProgress;
private MaterialButton mBtnDownload; private MaterialButton mBtnDownload;
private MaterialButton mBtnAdvanced;
private MaterialCheckBox mChbDownloadCountry; private MaterialCheckBox mChbDownloadCountry;
private String mCurrentCountry; private String mCurrentCountry;
@@ -267,6 +273,14 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
mProgress = findViewById(R.id.progressbar); mProgress = findViewById(R.id.progressbar);
mBtnDownload = findViewById(R.id.btn_download_resources); mBtnDownload = findViewById(R.id.btn_download_resources);
mChbDownloadCountry = findViewById(R.id.chb_download_country); 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]; mBtnListeners = new View.OnClickListener[BTN_COUNT];
mBtnNames = new String[BTN_COUNT]; mBtnNames = new String[BTN_COUNT];
@@ -291,6 +305,11 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
{ {
mBtnDownload.setOnClickListener(mBtnListeners[action]); mBtnDownload.setOnClickListener(mBtnListeners[action]);
mBtnDownload.setText(mBtnNames[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() private void doDownload()
@@ -359,6 +378,9 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
private void finishFilesDownload(int result) private void finishFilesDownload(int result)
{ {
mBtnAdvanced.setEnabled(true);
mBtnAdvanced.setAlpha(1f);
if (result == ERR_NO_MORE_FILES) if (result == ERR_NO_MORE_FILES)
{ {
// World and WorldCoasts has been downloaded, we should register maps again to correctly add them to the model. // World and WorldCoasts has been downloaded, we should register maps again to correctly add them to the model.
@@ -428,12 +450,16 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
.setTitle(titleId) .setTitle(titleId)
.setMessage(messageId) .setMessage(messageId)
.setCancelable(true) .setCancelable(true)
.setOnCancelListener((dialog) -> setAction(PAUSE)) .setOnCancelListener((dialog) -> setAction(RESUME))
.setPositiveButton(R.string.try_again, .setPositiveButton(R.string.try_again,
(dialog, which) -> { (dialog, which) -> {
setAction(TRY_AGAIN); setAction(TRY_AGAIN);
onTryAgainClicked(); onTryAgainClicked();
}) })
.setNegativeButton(R.string.cancel,
(dialog, which) -> {
setAction(RESUME);
})
.setOnDismissListener(dialog -> mAlertDialog = null) .setOnDismissListener(dialog -> mAlertDialog = null)
.show(); .show();
} }

View File

@@ -0,0 +1,86 @@
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();
}
}

View File

@@ -948,7 +948,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE); mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE);
if (Editor.nativeIsMapObjectUploaded()) if (Editor.nativeAreSomeFeatureChangesUploaded())
{ {
mReset.setText(R.string.editor_place_doesnt_exist); mReset.setText(R.string.editor_place_doesnt_exist);
return; return;
@@ -966,7 +966,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private void reset() private void reset()
{ {
if (Editor.nativeIsMapObjectUploaded()) if (Editor.nativeAreSomeFeatureChangesUploaded())
{ {
placeDoesntExist(); placeDoesntExist();
return; return;

View File

@@ -4,16 +4,23 @@ import static app.organicmaps.leftbutton.LeftButtonsHolder.DISABLE_BUTTON_CODE;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.preference.ListPreference; import androidx.preference.ListPreference;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceManager;
import androidx.preference.TwoStatePreference; import androidx.preference.TwoStatePreference;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import app.organicmaps.MwmApplication; import app.organicmaps.MwmApplication;
import app.organicmaps.R; import app.organicmaps.R;
import app.organicmaps.dialog.CustomMapServerDialog;
import app.organicmaps.downloader.OnmapDownloader; import app.organicmaps.downloader.OnmapDownloader;
import app.organicmaps.editor.LanguagesFragment; import app.organicmaps.editor.LanguagesFragment;
import app.organicmaps.editor.ProfileActivity; import app.organicmaps.editor.ProfileActivity;
@@ -35,7 +42,7 @@ import app.organicmaps.sdk.util.SharedPropertiesUtils;
import app.organicmaps.sdk.util.log.LogsManager; import app.organicmaps.sdk.util.log.LogsManager;
import app.organicmaps.util.ThemeSwitcher; import app.organicmaps.util.ThemeSwitcher;
import app.organicmaps.util.Utils; import app.organicmaps.util.Utils;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -73,6 +80,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
initScreenSleepEnabledPrefsCallbacks(); initScreenSleepEnabledPrefsCallbacks();
initShowOnLockScreenPrefsCallbacks(); initShowOnLockScreenPrefsCallbacks();
initLeftButtonPrefs(); initLeftButtonPrefs();
initCustomMapDownloadUrlPrefsCallbacks();
} }
private void initLeftButtonPrefs() private void initLeftButtonPrefs()
@@ -535,6 +543,34 @@ 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) private void removePreference(@NonNull String categoryKey, @NonNull Preference preference)
{ {
final PreferenceCategory category = getPreference(categoryKey); final PreferenceCategory category = getPreference(categoryKey);

View File

@@ -700,22 +700,27 @@ public class PlacePageView extends Fragment
if (shouldEnableEditPlace) if (shouldEnableEditPlace)
{ {
mTvEditPlace.setEnabled(true);
mTvAddPlace.setEnabled(true);
mTvEditPlace.setOnClickListener(this); mTvEditPlace.setOnClickListener(this);
mTvAddPlace.setOnClickListener(this); mTvAddPlace.setOnClickListener(this);
} }
else 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(); String countryId = MapManager.nativeGetSelectedCountry();
if (countryId != null) if (countryId != null && MapManager.nativeIsMapTooOldToEdit(countryId))
{ {
// 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); CountryItem map = CountryItem.fill(countryId);
if (map.status == CountryItem.STATUS_UPDATABLE || map.status == CountryItem.STATUS_DONE if (map.status == CountryItem.STATUS_UPDATABLE || map.status == CountryItem.STATUS_DONE
@@ -740,6 +745,12 @@ public class PlacePageView extends Fragment
mapTooOldDescription.setText(R.string.place_page_app_too_old_description); 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 = final int editButtonColor =

View File

@@ -2,6 +2,6 @@
<shape <shape
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> android:shape="rectangle">
<solid android:color="@color/bg_panel"/> <solid android:color="@color/bg_window"/>
<corners android:radius="100dp"/> <corners android:radius="100dp"/>
</shape> </shape>

View File

@@ -2,5 +2,5 @@
<shape <shape
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"> android:shape="oval">
<solid android:color="@color/bg_panel"/> <solid android:color="@color/bg_window"/>
</shape> </shape>

View File

@@ -0,0 +1,11 @@
<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>

View File

@@ -11,6 +11,18 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_above="@+id/button_container" android:layout_above="@+id/button_container"
android:layout_gravity="center"> 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 <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"

View File

@@ -0,0 +1,22 @@
<?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>

View File

@@ -24,7 +24,7 @@
android:id="@+id/items_frame" android:id="@+id/items_frame"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?panel"> android:background="?windowBackgroundForced">
<include <include
layout="@layout/item_missed_map" layout="@layout/item_missed_map"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -26,7 +26,7 @@
android:id="@+id/items_frame" android:id="@+id/items_frame"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?panel" android:background="?windowBackgroundForced"
android:listSelector="?clickableBackground" android:listSelector="?clickableBackground"
android:drawSelectorOnTop="true"/> android:drawSelectorOnTop="true"/>

View File

@@ -60,7 +60,7 @@
android:layout_below="@id/tv__bookmark_set_title" android:layout_below="@id/tv__bookmark_set_title"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/margin_quadruple" android:layout_marginEnd="@dimen/margin_quadruple"
android:background="?attr/selectableItemBackground" android:background="?selectableItemBackground"
android:clickable="true" android:clickable="true"
android:paddingTop="@dimen/margin_quarter_plus" android:paddingTop="@dimen/margin_quarter_plus"
android:paddingBottom="@dimen/margin_half_plus" android:paddingBottom="@dimen/margin_half_plus"

View File

@@ -2,7 +2,7 @@
<LinearLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="?attr/cardBackground" android:background="?cardBackground"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
@@ -11,7 +11,6 @@
style="@style/MwmWidget.ToolbarStyle" style="@style/MwmWidget.ToolbarStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?colorPrimary"
android:gravity="end|center_vertical" android:gravity="end|center_vertical"
android:theme="@style/MwmWidget.ToolbarTheme"> android:theme="@style/MwmWidget.ToolbarTheme">
</com.google.android.material.appbar.MaterialToolbar> </com.google.android.material.appbar.MaterialToolbar>

View File

@@ -18,7 +18,7 @@
app:srcCompat="@drawable/ic_done" app:srcCompat="@drawable/ic_done"
android:layout_width="?actionBarSize" android:layout_width="?actionBarSize"
android:layout_height="?actionBarSize" android:layout_height="?actionBarSize"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
android:layout_gravity="end|center_vertical" android:layout_gravity="end|center_vertical"
android:scaleType="centerInside" android:scaleType="centerInside"
android:contentDescription="@string/save" /> android:contentDescription="@string/save" />

View File

@@ -48,7 +48,6 @@
<FrameLayout <FrameLayout
android:id="@+id/fragment_container" android:id="@+id/fragment_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent" />
android:background="?panel"/>
</LinearLayout> </LinearLayout>

View File

@@ -12,7 +12,6 @@
style="@style/MwmWidget.ToolbarStyle" style="@style/MwmWidget.ToolbarStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?colorPrimary"
android:gravity="end|center_vertical" android:gravity="end|center_vertical"
android:theme="@style/MwmWidget.ToolbarTheme"> android:theme="@style/MwmWidget.ToolbarTheme">
<com.google.android.material.imageview.ShapeableImageView <com.google.android.material.imageview.ShapeableImageView

View File

@@ -22,8 +22,7 @@
<ScrollView <ScrollView
android:id="@+id/scrollView" android:id="@+id/scrollView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:background="?panel">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -15,7 +15,7 @@
android:id="@+id/app_bar" android:id="@+id/app_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/colorPrimary" android:background="?colorPrimary"
android:elevation="@dimen/dp_0" android:elevation="@dimen/dp_0"
app:elevation="@dimen/dp_0"> app:elevation="@dimen/dp_0">
<include <include

View File

@@ -45,7 +45,7 @@
android:paddingStart="0dp" android:paddingStart="0dp"
android:paddingEnd="@dimen/altitude_chart_container_padding_left"> android:paddingEnd="@dimen/altitude_chart_container_padding_left">
<View <com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/divider_height" android:layout_height="@dimen/divider_height"
android:background="?dividerHorizontal"/> android:background="?dividerHorizontal"/>

View File

@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?panel" android:background="?windowBackgroundForced"
android:orientation="vertical"> android:orientation="vertical">

View File

@@ -155,7 +155,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_half_plus" android:layout_marginTop="@dimen/margin_half_plus"
android:layout_marginBottom="@dimen/margin_quarter" android:layout_marginBottom="@dimen/margin_quarter"
android:background="?attr/selectableItemBackground" android:background="?selectableItemBackground"
android:gravity="center" android:gravity="center"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/margin_quarter" android:paddingStart="@dimen/margin_quarter"

View File

@@ -29,7 +29,7 @@
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?panel" android:background="?cardBackground"
android:padding="@dimen/margin_base" android:padding="@dimen/margin_base"
android:text="@string/editor_focus_map_on_location" android:text="@string/editor_focus_map_on_location"
app:layout_constraintTop_toBottomOf="@+id/toolbar_point_chooser" /> app:layout_constraintTop_toBottomOf="@+id/toolbar_point_chooser" />

View File

@@ -4,7 +4,7 @@
android:id="@+id/pp_buttons_layout" android:id="@+id/pp_buttons_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?ppButtonsBackground" android:background="?windowBackgroundForced"
android:orientation="horizontal" android:orientation="horizontal"
android:layout_gravity="bottom"> android:layout_gravity="bottom">
<include layout="@layout/item_divider" /> <include layout="@layout/item_divider" />

View File

@@ -28,7 +28,7 @@
android:layout_width="?attr/actionBarSize" android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
app:srcCompat="?homeAsUpIndicator" app:srcCompat="?homeAsUpIndicator"
android:scaleType="center" android:scaleType="center"
tools:src="@drawable/ic_expand_more" /> tools:src="@drawable/ic_expand_more" />
@@ -143,7 +143,7 @@
android:id="@+id/driving_options_btn_container" android:id="@+id/driving_options_btn_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/drivingOptionsViewBg" android:background="?drivingOptionsViewBg"
android:foreground="@drawable/shadow_top" android:foreground="@drawable/shadow_top"
android:visibility="gone" android:visibility="gone"
tools:visibility="visible"> tools:visibility="visible">
@@ -151,7 +151,7 @@
android:id="@+id/driving_options_btn" android:id="@+id/driving_options_btn"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
android:gravity="center" android:gravity="center"
android:minHeight="@dimen/height_block_base"> android:minHeight="@dimen/height_block_base">
<LinearLayout <LinearLayout

View File

@@ -14,7 +14,7 @@
android:id="@+id/back" android:id="@+id/back"
android:layout_width="?attr/actionBarSize" android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
app:srcCompat="?homeAsUpIndicator" app:srcCompat="?homeAsUpIndicator"
android:scaleType="center" android:scaleType="center"
tools:src="@drawable/ic_expand_more" tools:src="@drawable/ic_expand_more"
@@ -52,7 +52,7 @@
android:layout_height="?actionBarSize" android:layout_height="?actionBarSize"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_weight="0" android:layout_weight="0"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/clear_the_search" android:contentDescription="@string/clear_the_search"
android:scaleType="center" android:scaleType="center"
app:srcCompat="@drawable/ic_close"/> app:srcCompat="@drawable/ic_close"/>
@@ -63,7 +63,7 @@
android:layout_height="?actionBarSize" android:layout_height="?actionBarSize"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_weight="0" android:layout_weight="0"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@null" android:contentDescription="@null"
android:scaleType="center" android:scaleType="center"
app:srcCompat="@drawable/ic_mic_white" app:srcCompat="@drawable/ic_mic_white"

View File

@@ -489,7 +489,7 @@
<string name="placepage_edit_bookmark_button">Rediger bogmærke</string> <string name="placepage_edit_bookmark_button">Rediger bogmærke</string>
<string name="placepage_personal_notes_hint">Personlige notater (tekst eller html)</string> <string name="placepage_personal_notes_hint">Personlige notater (tekst eller html)</string>
<string name="editor_reset_edits_message">Kassér alle lokale ændringer?</string> <string name="editor_reset_edits_message">Kassér alle lokale ændringer?</string>
<string name="editor_reset_edits_button">Kassér</string> <string name="editor_reset_edits_button">Kassér ændringer</string>
<string name="editor_remove_place_message">Slet tilføjet sted?</string> <string name="editor_remove_place_message">Slet tilføjet sted?</string>
<string name="editor_remove_place_button">Slet</string> <string name="editor_remove_place_button">Slet</string>
<string name="editor_place_doesnt_exist">Stedet eksisterer ikke</string> <string name="editor_place_doesnt_exist">Stedet eksisterer ikke</string>

View File

@@ -502,7 +502,7 @@
<string name="placepage_edit_bookmark_button">Lesezeichen bearbeiten</string> <string name="placepage_edit_bookmark_button">Lesezeichen bearbeiten</string>
<string name="placepage_personal_notes_hint">Persönliche Notizen (Text oder html)</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_message">Alle lokalen Änderungen verwerfen?</string>
<string name="editor_reset_edits_button">Verwerfen</string> <string name="editor_reset_edits_button">Änderungen verwerfen</string>
<string name="editor_remove_place_message">Hinzugefügtes Objekt löschen?</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_remove_place_button">Löschen</string>
<string name="editor_place_doesnt_exist">Dieser Ort existiert nicht</string> <string name="editor_place_doesnt_exist">Dieser Ort existiert nicht</string>
@@ -902,9 +902,17 @@
<item quantity="other">%d min</item> <item quantity="other">%d min</item>
</plurals> </plurals>
<string name="editor_business_vacant_button">Geschäft steht leer</string> <string name="editor_business_vacant_button">Geschäft steht leer</string>
<string name="editor_mark_business_vacant_title">Geschäft als leerstehend markieren</string> <string name="editor_mark_business_vacant_title">Geschäft auf leerstehend setzen</string>
<string name="editor_submit">Absenden</string> <string name="editor_submit">Absenden</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="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="charge_socket_schuko">Schuko</string> <string name="charge_socket_schuko">Schuko</string>
<string name="power_management">Energiemanagement</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> </resources>

View File

@@ -497,7 +497,7 @@
<string name="placepage_edit_bookmark_button">Muuda järjehoidjat</string> <string name="placepage_edit_bookmark_button">Muuda järjehoidjat</string>
<string name="placepage_personal_notes_hint">Isiklikud märkmed (tekst või html)</string> <string name="placepage_personal_notes_hint">Isiklikud märkmed (tekst või html)</string>
<string name="editor_reset_edits_message">Kas loobud kõigist kohalikest muudatustest?</string> <string name="editor_reset_edits_message">Kas loobud kõigist kohalikest muudatustest?</string>
<string name="editor_reset_edits_button">Loobu</string> <string name="editor_reset_edits_button">Loobu muudatustest</string>
<string name="editor_remove_place_message">Kas kustutad lisatud koha?</string> <string name="editor_remove_place_message">Kas kustutad lisatud koha?</string>
<string name="editor_remove_place_button">Kustuta</string> <string name="editor_remove_place_button">Kustuta</string>
<string name="editor_place_doesnt_exist">Kohta pole olemas</string> <string name="editor_place_doesnt_exist">Kohta pole olemas</string>
@@ -911,4 +911,10 @@
<string name="place_page_update_too_old_map">Uuenda piirkonna kaardiandmeid</string> <string name="place_page_update_too_old_map">Uuenda piirkonna kaardiandmeid</string>
<string name="place_page_too_old_to_edit">Kuna kaardiandmed on liiga vanad, siis OpenStreetMapi muutmise võimalus on lülitatud välja.</string> <string name="place_page_too_old_to_edit">Kuna kaardiandmed on liiga vanad, siis OpenStreetMapi muutmise võimalus on lülitatud välja.</string>
<string name="navigation_start_tts_disabled_message">Hääljuhiste kasutamine on lülitatud välja: kõnesünteesimootorit pole saadaval</string> <string name="navigation_start_tts_disabled_message">Hääljuhiste kasutamine on lülitatud välja: kõnesünteesimootorit pole saadaval</string>
<string name="download_resources_custom_url_summary_none">Pole määratud</string>
<string name="advanced">Täiendavad seadistused</string>
<string name="download_resources_custom_url_title">Sinu oma kaardiserver</string>
<string name="download_resources_custom_url_message">Kui tahad kasutada oma kaardiserverit, siis lisa ta siia. CoMapsi vaikimisi serveri kasutamiseks jäta tühjaks.</string>
<string name="download_resources_custom_url_hint">https://cdn-fi-1.comaps.app/</string>
<string name="download_resources_custom_url_error_scheme">Palun sisesta täismahuline võrguaadress, mille alguses on https:// ja lõpus /</string>
</resources> </resources>

View File

@@ -42,15 +42,15 @@
<!-- Text in About screen --> <!-- Text in About screen -->
<string name="about_proposition_3">• آفلاین، چابک و جمع و جور</string> <string name="about_proposition_3">• آفلاین، چابک و جمع و جور</string>
<!-- Text in About screen --> <!-- 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 --> <!-- The button that opens system location settings -->
<string name="location_settings">پیکربندی‌های گیاگ</string> <string name="location_settings">پیکربندی‌های گیاگ</string>
<string name="close">بستن</string> <string name="close">بستن</string>
<string name="unsupported_phone">متأسفانه دستگاه شما از آن پشتیبانی نمی‌کندبرنامه برای اجرا به OpenGL نیازمند است.</string> <string name="unsupported_phone">برنامه به OpenGL نیازمند است.شوربختانه، از دستگاه شما پشتیبانی نمی‌شود.</string>
<string name="download">بارگیری</string> <string name="download">بارگیری</string>
<!-- Used in DownloadResources startup screen --> <!-- Used in DownloadResources startup screen -->
<string name="not_enough_free_space_on_sdcard">لطفا مقداری از فضای ذخیره‌سازی را آزاد نمایید</string> <string name="not_enough_free_space_on_sdcard">لطفا پیش از بکارگیری برنامه، نخست کمی جا در کارت SD/ویر USB آزاد کنید</string>
<string name="download_resources">قبل از استفاده از اپلیکیشن, اجازه دهید تا ما نقشه جهانی را بر روی موبایل شما دانلود کنیم. \nمقدار %s از حافظه شما اشغال می شود.</string> <string name="download_resources">پیش از بکارگیری برنامه, لطفا نقشه پیش‌نمایش جهانی را بر روی دستگاه خویش بارگیری کنید.\nاندازه %s از ویر شما را می‌گیرد.</string>
<string name="download_resources_continue">برو به نقشه</string> <string name="download_resources_continue">برو به نقشه</string>
<string name="downloading_country_can_proceed">بارگیری می‌شود %1$s (%2$s). شما اکنون می‌توانید\nبه نقشه بروید.</string> <string name="downloading_country_can_proceed">بارگیری می‌شود %1$s (%2$s). شما اکنون می‌توانید\nبه نقشه بروید.</string>
<string name="download_country_ask">بارگیری %1$s؟ (%2$s)</string> <string name="download_country_ask">بارگیری %1$s؟ (%2$s)</string>
@@ -64,7 +64,7 @@
<!-- "Add new bookmark list" dialog title --> <!-- "Add new bookmark list" dialog title -->
<string name="add_new_set">افزودن پهرستی نو</string> <string name="add_new_set">افزودن پهرستی نو</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. --> <!-- 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 --> <!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">نشانه‌ها و مسیر ها</string> <string name="bookmarks_and_tracks">نشانه‌ها و مسیر ها</string>
<!-- Add bookmark dialog - bookmark name --> <!-- Add bookmark dialog - bookmark name -->
@@ -138,7 +138,7 @@
<!-- Notes field in Bookmarks view --> <!-- Notes field in Bookmarks view -->
<string name="description">یادداشت‌ها</string> <string name="description">یادداشت‌ها</string>
<!-- message title of loading file --> <!-- message title of loading file -->
<string name="load_kmz_title">در حال بارگیری نشانهها</string> <string name="load_kmz_title">بارگذاری نشانگها</string>
<!-- Kmz file successful loading --> <!-- Kmz file successful loading -->
<string name="load_kmz_successful">نشانه‌ها با موفقیت بارگذاری شد!شما می توانید آنها را در نقشه یا بخش مدیریت نشانه‌ها بیابید.</string> <string name="load_kmz_successful">نشانه‌ها با موفقیت بارگذاری شد!شما می توانید آنها را در نقشه یا بخش مدیریت نشانه‌ها بیابید.</string>
<!-- Kml file loading failed --> <!-- Kml file loading failed -->
@@ -784,4 +784,6 @@
<string name="backup_interval_every_week">هفتگی</string> <string name="backup_interval_every_week">هفتگی</string>
<string name="backup_interval_manual_only">خاموش (تنها به شیوه دستی)</string> <string name="backup_interval_manual_only">خاموش (تنها به شیوه دستی)</string>
<string name="backup_interval_every_day">روزانه</string> <string name="backup_interval_every_day">روزانه</string>
<string name="disconnect_usb_cable">برای بکارگیری CoMaps، لطفا USB را بگسلانید یا کارت‌ویر را اندرون گذارید.</string>
<string name="bookmark_set_name">نام پهرست نشانگ‌ها</string>
</resources> </resources>

View File

@@ -373,4 +373,6 @@
<string name="offline_explanation_title">Mappys Dhywarlinen</string> <string name="offline_explanation_title">Mappys Dhywarlinen</string>
<string name="category_shopping">Gwerthjiow</string> <string name="category_shopping">Gwerthjiow</string>
<string name="edit">Golegi</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> </resources>

View File

@@ -851,4 +851,6 @@
<string name="place_page_update_too_old_map">Atjaunināt karšu apgabalu</string> <string name="place_page_update_too_old_map">Atjaunināt karšu apgabalu</string>
<string name="place_page_too_old_to_edit">OpenStreetMap labošana ir atspējota, jo kartes dati ir pārāk veci.</string> <string name="place_page_too_old_to_edit">OpenStreetMap labošana ir atspējota, jo kartes dati ir pārāk veci.</string>
<string name="navigation_start_tts_disabled_message">Balss norādes atspējotas: nav pieejams teksta pārveidošanas runā dzinējs</string> <string name="navigation_start_tts_disabled_message">Balss norādes atspējotas: nav pieejams teksta pārveidošanas runā dzinējs</string>
<string name="prefs_speed_cameras_information">Brīdinājumi par ātruma noteikšanas kamerā ir atspējoti valstīs, kurās šādus brīdinājumus aizliedz vietējais likums.</string>
<string name="navigation_start_tts_message">"Uzsāk navigāciju, balss norāžu valoda: "</string>
</resources> </resources>

View File

@@ -503,7 +503,7 @@
<string name="placepage_edit_bookmark_button">Rediger bokmerke</string> <string name="placepage_edit_bookmark_button">Rediger bokmerke</string>
<string name="placepage_personal_notes_hint">Personlige notater (tekst eller html)</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_message">Forkaste alle lokale endringer?</string>
<string name="editor_reset_edits_button">Forkast</string> <string name="editor_reset_edits_button">Forkast endringer</string>
<string name="editor_remove_place_message">Slette tillagt sted?</string> <string name="editor_remove_place_message">Slette tillagt sted?</string>
<string name="editor_remove_place_button">Slett</string> <string name="editor_remove_place_button">Slett</string>
<string name="editor_place_doesnt_exist">Sted finnes ikke</string> <string name="editor_place_doesnt_exist">Sted finnes ikke</string>
@@ -906,4 +906,10 @@
<string name="place_page_too_old_to_edit">OpenStreetMap-redigering er deaktivert fordi kartdataene er for gamle.</string> <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_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="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> </resources>

View File

@@ -88,19 +88,6 @@
<item name="android:textAppearanceSmall">@style/TextAppearance.Small</item> <item name="android:textAppearanceSmall">@style/TextAppearance.Small</item>
<item name="android:textAppearanceMedium">@style/TextAppearance.Medium</item> <item name="android:textAppearanceMedium">@style/TextAppearance.Medium</item>
<item name="android:textAppearanceLarge">@style/TextAppearance.Large</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="drivingOptionsViewBg">@color/bg_primary_dark</item>
<item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item> <item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item>
<item name="elevationProfilePropIconTint">@color/white_secondary</item> <item name="elevationProfilePropIconTint">@color/white_secondary</item>

View File

@@ -909,4 +909,10 @@
<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="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_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="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> </resources>

View File

@@ -277,7 +277,7 @@
<!-- Preference title --> <!-- Preference title -->
<string name="google_play_services">Serviciul de Localizare Fuzionat Google</string> <string name="google_play_services">Serviciul de Localizare Fuzionat Google</string>
<!-- Preference text --> <!-- 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 title -->
<!-- Preference description --> <!-- Preference description -->
<!-- Text for routing error dialog --> <!-- 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> <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 --> <!-- 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_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 edițiile de hartă în întreaga lume</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>
<!-- Downloaded 10 **of** 20 <- it is that "of" --> <!-- Downloaded 10 **of** 20 <- it is that "of" -->
<string name="downloader_of">%1$d din %2$d</string> <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> <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 --> <!-- 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> <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 --> <!-- Information about OSM at the top of the editing page -->
<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_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_more_about_osm">Mai multe despre OpenStreetMap</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_history">Istoricul dvs. de editare</string>
<string name="editor_osm_notes">Note privind datele hărții dvs</string> <string name="editor_osm_notes">Note privind datele hărții dvs</string>
@@ -889,4 +889,13 @@
<string name="list_description_empty">Editează lista ca să adaugi o descriere</string> <string name="list_description_empty">Editează lista ca să adaugi o descriere</string>
<string name="charging_station_available_sockets">Conectori</string> <string name="charging_station_available_sockets">Conectori</string>
<string name="charge_socket_unknown_other">Alte tipuri necunoscute</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> </resources>

View File

@@ -893,4 +893,5 @@
<string name="unknown_count">bilinmiyor</string> <string name="unknown_count">bilinmiyor</string>
<string name="error_value_must_be_positive">Değer pozitif olmalıdır</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="error_invalid_number">Geçersiz sayı</string>
<string name="avoid_paved">Asfalt yollardan kaçın</string>
</resources> </resources>

View File

@@ -511,7 +511,7 @@
<string name="placepage_edit_bookmark_button">编辑书签</string> <string name="placepage_edit_bookmark_button">编辑书签</string>
<string name="placepage_personal_notes_hint">个人注记(文字或 html</string> <string name="placepage_personal_notes_hint">个人注记(文字或 html</string>
<string name="editor_reset_edits_message">舍弃所有本地更改?</string> <string name="editor_reset_edits_message">舍弃所有本地更改?</string>
<string name="editor_reset_edits_button">舍弃</string> <string name="editor_reset_edits_button">舍弃更改</string>
<string name="editor_remove_place_message">删除已添加的地点?</string> <string name="editor_remove_place_message">删除已添加的地点?</string>
<string name="editor_remove_place_button">删除</string> <string name="editor_remove_place_button">删除</string>
<string name="editor_place_doesnt_exist">该地点不存在</string> <string name="editor_place_doesnt_exist">该地点不存在</string>
@@ -917,4 +917,10 @@
<string name="place_page_app_too_old_description">您当前的地图数据非常旧,请更新 CoMaps 应用。</string> <string name="place_page_app_too_old_description">您当前的地图数据非常旧,请更新 CoMaps 应用。</string>
<string name="place_page_update_too_old_map">更新地图区域</string> <string name="place_page_update_too_old_map">更新地图区域</string>
<string name="place_page_too_old_to_edit">由于地图数据太旧OpenStreetMap 编辑被禁用。</string> <string name="place_page_too_old_to_edit">由于地图数据太旧OpenStreetMap 编辑被禁用。</string>
<string name="download_resources_custom_url_hint">https://cdn-fi-1.comaps.app/</string>
<string name="download_resources_custom_url_summary_none">未设置</string>
<string name="download_resources_custom_url_error_scheme">请输入以 https:// 开头、以 / 结尾的完整 URL</string>
<string name="advanced">高级</string>
<string name="download_resources_custom_url_title">自定义地图服务器</string>
<string name="download_resources_custom_url_message">覆盖用于地图下载的默认地图下载服务器。留空则使用 CoMaps 默认服务器。</string>
</resources> </resources>

View File

@@ -43,6 +43,8 @@
<string name="pref_backup" translatable="false">Backup</string> <string name="pref_backup" translatable="false">Backup</string>
<string name="pref_left_button" translatable="false">LeftButton</string> <string name="pref_left_button" translatable="false">LeftButton</string>
<string name="pref_power" translatable="false">pref_power</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_ltr" translatable="false">%1$s: %2$s</string>
<string name="notification_ticker_rtl" translatable="false">%2$s :%1$s</string> <string name="notification_ticker_rtl" translatable="false">%2$s :%1$s</string>

View File

@@ -544,7 +544,7 @@
<string name="placepage_edit_bookmark_button">Edit Bookmark</string> <string name="placepage_edit_bookmark_button">Edit Bookmark</string>
<string name="placepage_personal_notes_hint">Personal notes (text or html)</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_message">Discard all local changes?</string>
<string name="editor_reset_edits_button">Discard</string> <string name="editor_reset_edits_button">Discard changes</string>
<string name="editor_remove_place_message">Delete added place?</string> <string name="editor_remove_place_message">Delete added place?</string>
<string name="editor_remove_place_button">Delete</string> <string name="editor_remove_place_button">Delete</string>
<string name="editor_place_doesnt_exist">Place does not exist</string> <string name="editor_place_doesnt_exist">Place does not exist</string>
@@ -966,4 +966,12 @@
<string name="offline_explanation_title">Offline Maps</string> <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="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> <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> </resources>

View File

@@ -69,19 +69,4 @@
<attr name="elevationProfileSelectedPointTriangle" format="reference" /> <attr name="elevationProfileSelectedPointTriangle" format="reference" />
<attr name="elevationProfileFloatingTriangle" format="reference" /> <attr name="elevationProfileFloatingTriangle" format="reference" />
</declare-styleable> </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> </resources>

View File

@@ -93,19 +93,6 @@
<item name="android:textAppearanceSmallInverse">@style/TextAppearance.Small.Inverse</item> <item name="android:textAppearanceSmallInverse">@style/TextAppearance.Small.Inverse</item>
<item name="android:textAppearanceMediumInverse">@style/TextAppearance.Medium.Inverse</item> <item name="android:textAppearanceMediumInverse">@style/TextAppearance.Medium.Inverse</item>
<item name="android:textAppearanceLargeInverse">@style/TextAppearance.Large.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="drivingOptionsViewBg">@color/bg_primary_dark</item>
<item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item> <item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item>
<item name="elevationProfilePropIconTint">@color/black_secondary</item> <item name="elevationProfilePropIconTint">@color/black_secondary</item>

View File

@@ -144,7 +144,8 @@
</intent> </intent>
</PreferenceScreen> </PreferenceScreen>
</androidx.preference.PreferenceCategory> </androidx.preference.PreferenceCategory>
<PreferenceCategory
<PreferenceCategory
android:key="@string/pref_power" android:key="@string/pref_power"
android:title="@string/power_management" android:title="@string/power_management"
android:order="4"> android:order="4">
@@ -190,7 +191,8 @@
android:defaultValue="true" android:defaultValue="true"
android:widgetLayout="@layout/preference_switch" android:widgetLayout="@layout/preference_switch"
android:order="5"/> android:order="5"/>
</PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory <androidx.preference.PreferenceCategory
android:key="@string/pref_privacy" android:key="@string/pref_privacy"
android:title="@string/privacy" android:title="@string/privacy"
@@ -212,5 +214,18 @@
android:defaultValue="true" android:defaultValue="true"
android:widgetLayout="@layout/preference_switch" android:widgetLayout="@layout/preference_switch"
android:order="2"/> android:order="2"/>
</androidx.preference.PreferenceCategory> </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> </androidx.preference.PreferenceScreen>

View File

@@ -124,6 +124,7 @@ dependencies {
implementation libs.androidx.lifecycle.process implementation libs.androidx.lifecycle.process
implementation libs.androidx.media implementation libs.androidx.media
implementation libs.androidx.recyclerview implementation libs.androidx.recyclerview
implementation libs.androidx.preference
implementation libs.android.material implementation libs.android.material
testImplementation libs.junit testImplementation libs.junit

View File

@@ -0,0 +1 @@
../../../../../data/mapcss-mapping.csv
1 ../../../../../data/mapcss-mapping.csv

View File

@@ -42,12 +42,16 @@ using namespace std::placeholders;
namespace namespace
{ {
std::unique_ptr<MapFilesDownloader> & LegacyDownloader()
{
static auto downloader = storage::GetDownloader();
return downloader;
}
static std::vector<platform::CountryFile> g_filesToDownload; static std::vector<platform::CountryFile> g_filesToDownload;
static int g_totalDownloadedBytes; static int g_totalDownloadedBytes;
static int g_totalBytesToDownload; static int g_totalBytesToDownload;
static std::shared_ptr<HttpRequest> g_currentRequest; static std::shared_ptr<HttpRequest> g_currentRequest;
} // namespace } // namespace
extern "C" extern "C"
@@ -152,11 +156,11 @@ JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_
return ERR_NO_MORE_FILES; return ERR_NO_MORE_FILES;
/// @todo One downloader instance with cached servers. All this routine will be refactored some time. /// @todo One downloader instance with cached servers. All this routine will be refactored some time.
static auto downloader = storage::GetDownloader(); auto & downloader = LegacyDownloader();
storage::Storage const & storage = g_framework->GetStorage(); storage::Storage const & storage = g_framework->GetStorage();
downloader->SetDataVersion(storage.GetCurrentDataVersion()); downloader->SetDataVersion(storage.GetCurrentDataVersion());
downloader->EnsureMetaConfigReady([&storage, ptr = jni::make_global_ref(listener)]() downloader->EnsureMetaConfigReady([&storage, ptr = jni::make_global_ref(listener), &downloader]()
{ {
auto const & curFile = g_filesToDownload.back(); auto const & curFile = g_filesToDownload.back();
auto const fileName = curFile.GetFileName(MapFileType::Map); auto const fileName = curFile.GetFileName(MapFileType::Map);
@@ -177,4 +181,12 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_
LOG(LDEBUG, ("cancelCurrentFile, currentRequest=", g_currentRequest)); LOG(LDEBUG, ("cancelCurrentFile, currentRequest=", g_currentRequest));
g_currentRequest.reset(); g_currentRequest.reset();
} }
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_nativeResetMetaConfig(JNIEnv *,
jclass)
{
auto & downloader = LegacyDownloader();
if (downloader)
downloader->ResetMetaConfig();
}
} }

View File

@@ -1505,6 +1505,22 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeGet3dMode(JNIEnv
env->SetBooleanField(result, buildingsField, buildings); 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, JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeSetAutoZoomEnabled(JNIEnv * env, jclass,
jboolean enabled) jboolean enabled)
{ {

View File

@@ -587,4 +587,11 @@ JNIEXPORT jstring JNICALL Java_app_organicmaps_sdk_downloader_MapManager_nativeG
storage::CountryId const & res = g_framework->GetPlacePageInfo().GetCountryId(); storage::CountryId const & res = g_framework->GetPlacePageInfo().GetCountryId();
return (res == storage::kInvalidCountryId ? nullptr : jni::ToJavaString(env, res)); 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" } // extern "C"

View File

@@ -580,10 +580,10 @@ JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeGetMapObject
return static_cast<jint>(osm::Editor::Instance().GetFeatureStatus(g_editableMapObject.GetID())); return static_cast<jint>(osm::Editor::Instance().GetFeatureStatus(g_editableMapObject.GetID()));
} }
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeIsMapObjectUploaded(JNIEnv * env, jclass clazz) JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeAreSomeFeatureChangesUploaded(JNIEnv * env, jclass clazz)
{ {
return osm::Editor::Instance().IsFeatureUploaded(g_editableMapObject.GetID().m_mwmId, return osm::Editor::Instance().AreSomeFeatureChangesUploaded(g_editableMapObject.GetID().m_mwmId,
g_editableMapObject.GetID().m_index); g_editableMapObject.GetID().m_index);
} }
// static nativeMakeLocalizedName(String langCode, String name); // static nativeMakeLocalizedName(String langCode, String name);

View File

@@ -27,4 +27,5 @@ public class DownloadResourcesLegacyActivity
public static native int nativeGetBytesToDownload(); public static native int nativeGetBytesToDownload();
public static native int nativeStartNextFileDownload(Listener listener); public static native int nativeStartNextFileDownload(Listener listener);
public static native void nativeCancelCurrentFile(); public static native void nativeCancelCurrentFile();
public static native void nativeResetMetaConfig();
} }

View File

@@ -1,10 +1,13 @@
package app.organicmaps.sdk; package app.organicmaps.sdk;
import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import androidx.annotation.Keep; import androidx.annotation.Keep;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.Size; import androidx.annotation.Size;
import app.organicmaps.sdk.api.ParsedRoutingData; import app.organicmaps.sdk.api.ParsedRoutingData;
import app.organicmaps.sdk.api.ParsedSearchRequest; import app.organicmaps.sdk.api.ParsedSearchRequest;
import app.organicmaps.sdk.api.RequestType; import app.organicmaps.sdk.api.RequestType;
@@ -23,6 +26,7 @@ import app.organicmaps.sdk.routing.RoutingRecommendationListener;
import app.organicmaps.sdk.routing.TransitRouteInfo; import app.organicmaps.sdk.routing.TransitRouteInfo;
import app.organicmaps.sdk.settings.SpeedCameraMode; import app.organicmaps.sdk.settings.SpeedCameraMode;
import app.organicmaps.sdk.util.Constants; import app.organicmaps.sdk.util.Constants;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
@@ -348,4 +352,20 @@ public class Framework
public static native void nativeMemoryWarning(); public static native void nativeMemoryWarning();
public static native void nativeSaveRoute(); 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;
}
} }

View File

@@ -2,10 +2,13 @@ package app.organicmaps.sdk;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner; import androidx.lifecycle.ProcessLifecycleOwner;
import androidx.preference.PreferenceManager;
import app.organicmaps.sdk.bookmarks.data.BookmarkManager; import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
import app.organicmaps.sdk.bookmarks.data.Icon; import app.organicmaps.sdk.bookmarks.data.Icon;
import app.organicmaps.sdk.downloader.Android7RootCertificateWorkaround; import app.organicmaps.sdk.downloader.Android7RootCertificateWorkaround;
@@ -25,6 +28,7 @@ import app.organicmaps.sdk.util.SharedPropertiesUtils;
import app.organicmaps.sdk.util.StorageUtils; import app.organicmaps.sdk.util.StorageUtils;
import app.organicmaps.sdk.util.log.Logger; import app.organicmaps.sdk.util.log.Logger;
import app.organicmaps.sdk.util.log.LogsManager; import app.organicmaps.sdk.util.log.LogsManager;
import java.io.IOException; import java.io.IOException;
public final class OrganicMaps implements DefaultLifecycleObserver public final class OrganicMaps implements DefaultLifecycleObserver
@@ -167,6 +171,11 @@ public final class OrganicMaps implements DefaultLifecycleObserver
/* isTablet */ false); /* isTablet */ false);
Config.setStoragePath(writablePath); 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; mPlatformInitialized = true;
Logger.i(TAG, "Platform initialized"); Logger.i(TAG, "Platform initialized");
} }

View File

@@ -261,4 +261,9 @@ public final class MapManager
* Returns country ID which the current PP object points to, or {@code null}. * Returns country ID which the current PP object points to, or {@code null}.
*/ */
public static native @Nullable String nativeGetSelectedCountry(); 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);
} }

View File

@@ -190,5 +190,5 @@ public final class Editor
@FeatureStatus @FeatureStatus
public static native int nativeGetMapObjectStatus(); public static native int nativeGetMapObjectStatus();
public static native boolean nativeIsMapObjectUploaded(); public static native boolean nativeAreSomeFeatureChangesUploaded();
} }

View File

@@ -707,7 +707,7 @@
<string name="type.natural.beach.sand">Playa de arena</string> <string name="type.natural.beach.sand">Playa de arena</string>
<string name="type.natural.beach.gravel">Playa de grava</string> <string name="type.natural.beach.gravel">Playa de grava</string>
<string name="type.natural.cape">Cabo</string> <string name="type.natural.cape">Cabo</string>
<string name="type.natural.cave_entrance">Cueva</string> <string name="type.natural.cave_entrance">Entrada de cueva</string>
<string name="type.natural.cliff">Acantilado</string> <string name="type.natural.cliff">Acantilado</string>
<string name="type.natural.earth_bank">Talud de tierra</string> <string name="type.natural.earth_bank">Talud de tierra</string>
<string name="type.man_made.embankment">Terraplén</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.natural.wetland.marsh">Ciénaga</string>
<string name="type.noexit">Sin salida</string> <string name="type.noexit">Sin salida</string>
<string name="type.office">Oficina</string> <string name="type.office">Oficina</string>
<string name="type.office.company">Oficina</string> <string name="type.office.company">Oficina de compañía</string>
<string name="type.office.estate_agent">Agente inmobiliario</string> <string name="type.office.estate_agent">Agente inmobiliario</string>
<string name="type.office.government">Oficina gubernamental</string> <string name="type.office.government">Oficina gubernamental</string>
<string name="type.office.insurance">Oficina de seguros</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">Estado</string>
<string name="type.place.state.USA">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) --> <!-- 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">Barrio</string> <string name="type.place.suburb">Suburbio</string>
<string name="type.place.town">Pueblo</string> <string name="type.place.town">Pueblo</string>
<string name="type.place.village">Pueblo</string> <string name="type.place.village">Pueblo</string>
<string name="type.power">Energía</string> <string name="type.power">Energía</string>
<string name="type.power.generator">Generador</string> <string name="type.power.generator">Generador</string>
<string name="type.power.generator.solar">Generador solar</string> <string name="type.power.generator.solar">Generador solar</string>
<string name="type.power.generator.wind">Generador de viento</string> <string name="type.power.generator.wind">Aerogenerador</string>
<string name="type.power.generator.gas">Planta termoeléctrica de gas</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.generator.hydro">Planta hidroeléctrica</string>
<string name="type.power.line">Línea elé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">Estación de tren</string>
<string name="type.railway.station.funicular">Funicular</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">Estación de tren</string>
<string name="type.railway.station.light_rail.berlin">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.london">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 tren</string> <string name="type.railway.station.light_rail.porto">Estación de metro</string>
<string name="type.railway.station.monorail">Estación de tren</string> <string name="type.railway.station.monorail">Estación de monoriel</string>
<string name="type.railway.station.subway">Estación de metro</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.adana">Estación de metro</string>
<string name="type.railway.station.subway.algiers">Estación de metro</string> <string name="type.railway.station.subway.algiers">Estación de metro</string>
@@ -1122,7 +1122,7 @@
<string name="type.shop.doityourself">Tienda de bricolaje</string> <string name="type.shop.doityourself">Tienda de bricolaje</string>
<string name="type.shop.dry_cleaning">Tintorería</string> <string name="type.shop.dry_cleaning">Tintorería</string>
<string name="type.shop.electronics">Electrónica</string> <string name="type.shop.electronics">Electrónica</string>
<string name="type.shop.erotic">Sex Shop</string> <string name="type.shop.erotic">Tienda erótica</string>
<string name="type.shop.fabric">Tienda de telas</string> <string name="type.shop.fabric">Tienda de telas</string>
<string name="type.shop.farm">Tienda de alimentos de granja</string> <string name="type.shop.farm">Tienda de alimentos de granja</string>
<string name="type.shop.fashion_accessories">Accesorios de moda</string> <string name="type.shop.fashion_accessories">Accesorios de moda</string>
@@ -1207,7 +1207,7 @@
<string name="type.shop.tobacco">Tabaco</string> <string name="type.shop.tobacco">Tabaco</string>
<string name="type.shop.trade">Suministros comerciales</string> <string name="type.shop.trade">Suministros comerciales</string>
<string name="type.shop.watches">Relojes</string> <string name="type.shop.watches">Relojes</string>
<string name="type.shop.wholesale">Almacén al por mayor</string> <string name="type.shop.wholesale">Tienda al por mayor</string>
<string name="type.sport">Deporte</string> <string name="type.sport">Deporte</string>
<string name="type.sport.american_football">Fútbol americano</string> <string name="type.sport.american_football">Fútbol americano</string>
<string name="type.sport.archery">Tiro al arco</string> <string name="type.sport.archery">Tiro al arco</string>
@@ -1247,7 +1247,7 @@
<string name="type.tourism.aquarium">Acuario</string> <string name="type.tourism.aquarium">Acuario</string>
<!-- Typically serviced, staff is present and food is available (compared to wilderness_hut). --> <!-- 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.alpine_hut">Albergue de montaña</string>
<string name="type.tourism.apartment">Apartamento de vacaciones</string> <string name="type.tourism.apartment">Apartamento vacacional</string>
<string name="type.tourism.artwork">Obra de arte</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.architecture">Arte arquitectónico</string>
<string name="type.tourism.artwork.painting">Pintura</string> <string name="type.tourism.artwork.painting">Pintura</string>

View File

@@ -1494,4 +1494,5 @@
<string name="type.spherical_buoy.safe_water">Faarvaatri kerapoi</string> <string name="type.spherical_buoy.safe_water">Faarvaatri kerapoi</string>
<string name="type.man_made.mast.communication">Sidemast</string> <string name="type.man_made.mast.communication">Sidemast</string>
<string name="type.shop.beauty.nails">Küünestuudio</string> <string name="type.shop.beauty.nails">Küünestuudio</string>
<string name="type.amenity.hydrant">Kastmishüdrant</string>
</resources> </resources>

View File

@@ -1500,4 +1500,5 @@
<string name="type.shop.beauty.nails">Nagelsalon</string> <string name="type.shop.beauty.nails">Nagelsalon</string>
<string name="type.amenity.food_sharing">Voedsel delen</string> <string name="type.amenity.food_sharing">Voedsel delen</string>
<string name="type.amenity.give_box">Giftenkist</string> <string name="type.amenity.give_box">Giftenkist</string>
<string name="type.amenity.hydrant">Watertappunt|waterkraan</string>
</resources> </resources>

View File

@@ -1501,4 +1501,5 @@
<string name="type.natural.tree">Árvore</string> <string name="type.natural.tree">Árvore</string>
<string name="type.shop.beauty.nails">Salão de Unhas</string> <string name="type.shop.beauty.nails">Salão de Unhas</string>
<string name="type.xmas.tree">Árvore de Natal</string> <string name="type.xmas.tree">Árvore de Natal</string>
<string name="type.amenity.hydrant">Boca de Rega</string>
</resources> </resources>

View File

@@ -369,4 +369,100 @@
<string name="type.cuisine.breakfast">Zajtrk</string> <string name="type.cuisine.breakfast">Zajtrk</string>
<string name="type.cuisine.bubble_tea">Čaj s tapiokinimi kroglicami (\'Bubble Tea\')</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.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>
<string name="type.highway.cycleway.tunnel">Predor</string>
<string name="type.highway.elevator">Dvigalo</string>
<string name="type.highway.footway">Pešpot</string>
<string name="type.highway.footway.sidewalk">Pločnik</string>
<string name="type.highway.footway.crossing">Prehod za pešce</string>
<string name="type.highway.footway.area">Površina za pešce</string>
<string name="type.highway.footway.bridge">Most za pešce</string>
<string name="type.highway.footway.tunnel">Predor za pešce</string>
</resources> </resources>

View File

@@ -1399,4 +1399,5 @@
<string name="type.amenity.ranger_station">Orman Bekçisi</string> <string name="type.amenity.ranger_station">Orman Bekçisi</string>
<string name="type.amenity.bench.backless">Sırtıık Bank</string> <string name="type.amenity.bench.backless">Sırtıık Bank</string>
<string name="type.amenity.charging_station.motorcar.small">Araç Şarj Noktası</string> <string name="type.amenity.charging_station.motorcar.small">Araç Şarj Noktası</string>
<string name="type.amenity.sailing_school">Denizcilik Okulu</string>
</resources> </resources>

View File

@@ -3,4 +3,5 @@
<string name="pref_file_name" translatable="false">OrganicMapsPrefs</string> <string name="pref_file_name" translatable="false">OrganicMapsPrefs</string>
<string name="pref_enable_logging" translatable="false">EnableLogging</string> <string name="pref_enable_logging" translatable="false">EnableLogging</string>
<string name="pref_emulate_bad_external_storage" translatable="false">EmulateBadExternalStorage</string> <string name="pref_emulate_bad_external_storage" translatable="false">EmulateBadExternalStorage</string>
<string name="pref_custom_map_download_url" translatable="false">CustomMapDownloadUrl</string>
</resources> </resources>

View File

@@ -34,7 +34,7 @@
"shop-farm|@category_food|@shop": "Farm food", "shop-farm|@category_food|@shop": "Farm food",
"shop-garden_centre|@shop": "4Garden Centre|U+1F3E1", "shop-garden_centre|@shop": "4Garden Centre|U+1F3E1",
"shop-grocery|@category_food|@shop": "Grocery", "shop-grocery|@category_food|@shop": "Grocery",
"shop-health_food|@category_food|@shop": "7Health food|7Healthy food|healthfood|organic|vegan|vegetarian", "shop-health_food|@category_food|@shop": "7Health food|7Healthy food|healthfood|organic",
"shop-hearing_aids|@shop": "7Hearing Aids", "shop-hearing_aids|@shop": "7Hearing Aids",
"shop-mobile_phone|@shop": "4Cell Phones|4Mobile Phones|6smartphones|electronics store|U+1F4F1|U+1F4F2", "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", "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",

View File

@@ -220,13 +220,13 @@
"tourism-motel|@category_hotel": "3Motel|auberge de jeunesse", "tourism-motel|@category_hotel": "3Motel|auberge de jeunesse",
"tourism-alpine_hut|@category_hotel": "Refuge de montagne|auberge de jeunesse|cabane alpine", "tourism-alpine_hut|@category_hotel": "Refuge de montagne|auberge de jeunesse|cabane alpine",
"shop-hairdresser": "3Coiffeur|salon de coiffure", "shop-hairdresser": "3Coiffeur|salon de coiffure",
"aeroway-aerodrome": "3Aéroport|3aérodrome|3avion", "aeroway-aerodrome": "3Aéroport|3aérodrome|3avion|3aérogare",
"leisure-stadium": "4Stade|4sport", "leisure-stadium": "4Stade|4sport",
"leisure-playground|@category_children": "Terrain de jeu|aire de jeu", "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|sport", "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-golf_course": "Terrain de golf|Parcours de golf", "leisure-golf_course": "Terrain de golf|Parcours de golf",
"leisure-miniature_golf": "Minigolf", "leisure-miniature_golf": "Minigolf",
"leisure-escape_game": "Salle d'évasion", "leisure-escape_game": "Salle d'évasion|escape game",
"leisure-pitch": "Terrain de sport|sport", "leisure-pitch": "Terrain de sport|sport",
"leisure-swimming_pool": "4Piscine|sport", "leisure-swimming_pool": "4Piscine|sport",
"sport-american_football": "Football américain", "sport-american_football": "Football américain",
@@ -245,12 +245,12 @@
"sport-gymnastics": "Gymnastique", "sport-gymnastics": "Gymnastique",
"sport-handball": "Handball", "sport-handball": "Handball",
"sport-scuba_diving": "Plongée sous-marine", "sport-scuba_diving": "Plongée sous-marine",
"sport-shooting": "Stand de tir|Centre de tir", "sport-shooting": "Stand de tir|Centre de tir|champ de tir|salle de tir",
"sport-skateboard": "Skateboard", "sport-skateboard": "Skateboard",
"sport-skiing": "Ski", "sport-skiing": "Ski",
"sport-soccer": "Football", "sport-soccer": "Football",
"sport-swimming": "Piscine|Natation", "sport-swimming": "Piscine|Natation",
"sport-table_tennis": "Tennis de table", "sport-table_tennis": "Tennis de table|Ping Pong",
"sport-tennis": "Tennis", "sport-tennis": "Tennis",
"sport-padel": "Padel", "sport-padel": "Padel",
"sport-volleyball": "Volley-ball", "sport-volleyball": "Volley-ball",
@@ -272,27 +272,27 @@
"natural-water-pond|@waterbody": "Étang|bassin", "natural-water-pond|@waterbody": "Étang|bassin",
"natural-water-lake|@waterbody": "Lac", "natural-water-lake|@waterbody": "Lac",
"natural-water-reservoir|landuse-reservoir|@waterbody": "5Réservoir", "natural-water-reservoir|landuse-reservoir|@waterbody": "5Réservoir",
"waterway-river|waterway-stream|natural-water-river": "Rivière|fleuve", "waterway-river|waterway-stream|natural-water-river": "Rivière|fleuve|ruisseau|cours d'eau|torrent",
"waterway-canal": "Canal", "waterway-canal": "Canal",
"shop-car_repair": "3Réparation d'automobiles|3garage|4station service|voiture|auto|garagiste|mécano|mécanicien automobile", "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-camp_site|@category_hotel": "4Camping|terrain de camping",
"tourism-caravan_site|@category_rv||@category_hotel": "4Parc caravanier|VR|caravane|camping-car", "tourism-caravan_site|@category_rv||@category_hotel": "4Parc caravanier|VR|caravane|camping-car",
"office": "Bureau|compagnie", "office": "Bureau|compagnie",
"office-company": "Bureaux d'entreprise", "office-company": "Bureaux d'entreprise",
"office-government": "Administration publique", "office-government": "Administration publique|service public|fonction publique|service civil|services administratifs",
"office-lawyer": "Cabinet d'avocat", "office-lawyer": "Cabinet d'avocat|bureau d'avocat",
"office-telecommunication": "Opérateur mobile", "office-telecommunication": "Opérateur mobile",
"craft-beekeeper": "Apiculteur", "craft-beekeeper": "Apiculteur",
"craft-blacksmith": "Forgeron", "craft-blacksmith": "Forgeron",
"craft-brewery": "Brasserie artisanale|Brasseur", "craft-brewery": "Brasserie artisanale|Brasseur|micro-brasserie",
"craft-caterer": "Traiteur", "craft-caterer": "Traiteur",
"craft-carpenter": "Menuisier|charpentier", "craft-carpenter": "Menuisier|charpentier",
"craft-confectionery": "Confiseur", "craft-confectionery": "Confiseur",
"craft-electrician": "4Électricien", "craft-electrician": "4Électricien",
"craft-electronics_repair": "Réparation d'appareils électroniques", "craft-electronics_repair": "Réparation d'appareils électroniques",
"craft-gardener": "Paysagiste", "craft-gardener": "Paysagiste|jardinier",
"craft-grinding_mill": "Moulin", "craft-grinding_mill": "Moulin",
"craft-handicraft": "Artisanat", "craft-handicraft": "Artisanat|fait-main|métiers d'art",
"craft-hvac": "Chauffage, ventilation et climatisation", "craft-hvac": "Chauffage, ventilation et climatisation",
"craft-metal_construction": "5Métallo|métallurgiste", "craft-metal_construction": "5Métallo|métallurgiste",
"craft-key_cutter": "Reproduction de clé", "craft-key_cutter": "Reproduction de clé",
@@ -302,7 +302,7 @@
"craft-plumber": "Plombier", "craft-plumber": "Plombier",
"craft-sawmill": "Scierie", "craft-sawmill": "Scierie",
"craft-shoemaker": "Cordonnier", "craft-shoemaker": "Cordonnier",
"craft-winery": "Chai", "craft-winery": "Chai|établissement vinicole",
"craft-tailor": "5Tailleur", "craft-tailor": "5Tailleur",
"area:highway-footway|area:highway-pedestrian|area:highway-steps|place-square": "Place", "area:highway-footway|area:highway-pedestrian|area:highway-steps|place-square": "Place",
"place-sea": "Mer", "place-sea": "Mer",
@@ -320,11 +320,11 @@
"shop-copyshop": "Boutique de photocopies|5Imprimerie", "shop-copyshop": "Boutique de photocopies|5Imprimerie",
"shop-photo|@shop": "5Matériel de photographie|5Photographie|Cadres", "shop-photo|@shop": "5Matériel de photographie|5Photographie|Cadres",
"shop-camera|@shop": "Boutique d'appareils photo", "shop-camera|@shop": "Boutique d'appareils photo",
"shop-travel_agency": "Agence de voyages|Voyages organisés", "shop-travel_agency": "Agence de voyages|Voyages organisés|agence de tourisme|voyagiste",
"shop-outdoor|@shop": "Matériel de loisirs de plein air|Randonnée|Escalade|Camping", "shop-outdoor|@shop": "Matériel de loisirs de plein air|Randonnée|Escalade|Camping",
"shop-dry_cleaning": "Nettoyage à sec|Pressing|Lavage", "shop-dry_cleaning": "Nettoyage à sec|Pressing|Lavage",
"shop-tyres|@shop": "Pneu|Pneus", "shop-tyres|@shop": "Pneu|Pneus",
"amenity-car_wash": "Station de lavage|lavage-autp", "amenity-car_wash": "Station de lavage|lavage-auto|lavage de voiture",
"amenity-veterinary": "Docteur vétérinaire|véto|Clinique vétérinaire", "amenity-veterinary": "Docteur vétérinaire|véto|Clinique vétérinaire",
"@charging_station": "Borne de recharge|station de recharge|4voiture électrique|4recharge|IRVE", "@charging_station": "Borne de recharge|station de recharge|4voiture électrique|4recharge|IRVE",
"amenity-charging_station-bicycle|@charging_station": "Chargement des vélos", "amenity-charging_station-bicycle|@charging_station": "Chargement des vélos",
@@ -332,14 +332,14 @@
"amenity-bicycle_parking": "Parking à vélo|Stationnement vélo", "amenity-bicycle_parking": "Parking à vélo|Stationnement vélo",
"amenity-waste_basket": "Poubelle", "amenity-waste_basket": "Poubelle",
"emergency-phone": "3Téléphone d'urgence", "emergency-phone": "3Téléphone d'urgence",
"leisure-fitness_centre": "Centre fitness|salle de gym|salle de sport", "leisure-fitness_centre": "Centre fitness|salle de gym|salle de sport|centre de remise en forme",
"leisure-sauna": "3Sauna", "leisure-sauna": "3Sauna",
"shop-car_repair-tyres|shop-car_repair": "Réparation de pneus", "shop-car_repair-tyres|shop-car_repair": "Réparation de pneus",
"shop-chemist|@shop": "4Droguerie", "shop-chemist|@shop": "4Droguerie",
"shop-pet|@shop": "5Animalerie", "shop-pet|@shop": "5Animalerie|magasin d'animaux",
"tourism-zoo|@category_tourism|@category_children": "Zoo|Parc Animalier", "tourism-zoo|@category_tourism|@category_children": "Zoo|Parc Animalier|ménagerie|parc zoologique",
"attraction-animal": "Enclos pour animaux", "attraction-animal": "Enclos pour animaux",
"tourism-information-office|amenity-ranger_station|@category_tourism": "Office de tourisme|syndicat d'initiative", "tourism-information-office|amenity-ranger_station|@category_tourism": "Office de tourisme|syndicat d'initiative|bureau d'information touristique",
"tourism-information-visitor_centre|amenity-ranger_station|@category_tourism": "centre de visite", "tourism-information-visitor_centre|amenity-ranger_station|@category_tourism": "centre de visite",
"amenity-community_centre": "Centre communautaire|Salle polyvalente|Salle des fêtes", "amenity-community_centre": "Centre communautaire|Salle polyvalente|Salle des fêtes",
"amenity-compressed_air": "Air comprimé", "amenity-compressed_air": "Air comprimé",
@@ -350,14 +350,14 @@
"amenity-vending_machine-drinks": "Distributeur de boissons|cannettes", "amenity-vending_machine-drinks": "Distributeur de boissons|cannettes",
"amenity-vending_machine-food|@category_food": "Distributeur d'aliments|Aliments", "amenity-vending_machine-food|@category_food": "Distributeur d'aliments|Aliments",
"amenity-vending_machine-parking_tickets|@category_parking": "Horodateur|parcmètre", "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", "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-newspapers": "Distributeur de journaux|Journaux", "amenity-vending_machine-newspapers": "Distributeur de journaux|Journaux",
"amenity-vending_machine-sweets": "Distributeur de bonbons|Bonbons", "amenity-vending_machine-sweets": "Distributeur de bonbons|Bonbons",
"amenity-vending_machine-excrement_bags": "5Distributeur de sacs à excréments", "amenity-vending_machine-excrement_bags": "5Distributeur de sacs à excréments",
"amenity-parcel_locker|@category_post": "Consigne automatique pour colis|3locker", "amenity-parcel_locker|@category_post": "Consigne automatique pour colis|3locker",
"shop-outpost": "Point de retrait", "shop-outpost": "Point de retrait",
"building-garage": "Garage", "building-garage": "Garage",
"highway-rest_area|highway-services": "Aire de repos|Aire de service", "highway-rest_area|highway-services": "Aire de repos|Aire de service|relais routier",
"man_made-chimney": "Cheminée", "man_made-chimney": "Cheminée",
"man_made-tower|man_made-flare": "Tour", "man_made-tower|man_made-flare": "Tour",
"shop-bookmaker|@gambling": "Bookmaker", "shop-bookmaker|@gambling": "Bookmaker",
@@ -371,12 +371,12 @@
"tourism-information-board": "Panneau d'informations", "tourism-information-board": "Panneau d'informations",
"tourism-information-map": "Carte touristique|Plan", "tourism-information-map": "Carte touristique|Plan",
"aerialway-station": "Remontées mécaniques", "aerialway-station": "Remontées mécaniques",
"aeroway-helipad": "Hélisurface", "aeroway-helipad": "Hélisurface|zone d'atterrissage pour hélicoptères",
"barrier-border_control": "Contrôle aux frontières", "barrier-border_control": "Contrôle aux frontières|contrôle frontalier",
"leisure-water_park|@category_tourism|@category_children": "Centre aquatique|Parc aquatique", "leisure-water_park|@category_tourism|@category_children": "Centre aquatique|Parc aquatique",
"man_made-water_tower": "Château d'eau", "man_made-water_tower": "Château d'eau",
"man_made-windmill": "Moulin", "man_made-windmill": "Moulin",
"natural-cave_entrance": "4Grotte", "natural-cave_entrance": "4Grotte|caverne",
"natural-volcano|@mountain": "4Volcan", "natural-volcano|@mountain": "4Volcan",
"office-estate_agent": "Agence immobilière|agent immobilier", "office-estate_agent": "Agence immobilière|agent immobilier",
"waterway-lock_gate": "Écluse", "waterway-lock_gate": "Écluse",
@@ -387,24 +387,24 @@
"leisure-resort|@category_hotel": "Complexe touristique", "leisure-resort|@category_hotel": "Complexe touristique",
"amenity-biergarten|@category_eat|@category_nightlife": "5Biergarten", "amenity-biergarten|@category_eat|@category_nightlife": "5Biergarten",
"amenity-driving_school": "4Auto-école|École de conduite", "amenity-driving_school": "4Auto-école|École de conduite",
"amenity-music_school": "École de musique", "amenity-music_school": "École de musique|conservatoire de musique",
"amenity-language_school": "École de langue", "amenity-language_school": "École de langue",
"amenity-ice_cream": "Stand de crème glacée|Marchand de glaces|Glacier", "amenity-ice_cream": "Stand de crème glacée|Marchand de glaces|Glacier",
"amenity-internet_cafe": "5Cybercafé", "amenity-internet_cafe": "5Cybercafé",
"amenity-motorcycle_parking": "Parking moto|Stationnement moto", "amenity-motorcycle_parking": "Parking moto|Stationnement moto",
"amenity-parking_space-disabled|@category_parking": "Place de stationnement handicapé|Stationnement PMR|Parking PMR", "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", "amenity-nursing_home": "Maison de retraite|résidence pour personnes âgées|EHPAD",
"amenity-payment_terminal": "Terminal de paiement", "amenity-payment_terminal": "Terminal de paiement",
"amenity-public_bath": "Bain public", "amenity-public_bath": "Bain public",
"amenity-shower": "Douche", "amenity-shower": "Douche",
"emergency-assembly_point": "Point de rassemblement d'urgence", "emergency-assembly_point": "Point de rassemblement d'urgence",
"emergency-defibrillator": "4Défibrillateur|DAE", "emergency-defibrillator": "4Défibrillateur|DAE",
"emergency-fire_hydrant": "Bouche dincendie|bouche de incendie|borne dincendie|borne de incendie|Borne hydratante|Poteau dincendie|Hydrant|Hydrante", "emergency-fire_hydrant": "Bouche dincendie|borne dincendie|Poteau dincendie|Hydrant",
"amenity-hydrant": "Bouche dpuisage|bouche de puisage|borne dpuisage|bourne de puisage|Hydrant|Hydrante", "amenity-hydrant": "Bouche de puisage|borne de puisage|Hydrant",
"emergency-lifeguard": "Sauveteur durgence|Sauveteur", "emergency-lifeguard": "Sauveteur durgence",
"emergency-mountain_rescue": "Sauveteurs en montagne durgence", "emergency-mountain_rescue": "Sauveteurs en montagne durgence",
"leisure-fitness_station": "Station de fitness|Parcours de santé", "leisure-fitness_station": "Station de fitness|Parcours de santé",
"office-insurance": "Bureau dassurance|assureur|Agent d'assurance", "office-insurance": "Bureau dassurance|assureur|Agent d'assurance|courtier en assurance|compagnie d'assurance",
"office-ngo": "Bureau d'ONG|organisation non gouvernementale|Bureau ONG", "office-ngo": "Bureau d'ONG|organisation non gouvernementale|Bureau ONG",
"shop-erotic|@shop": "Boutique érotique", "shop-erotic|@shop": "Boutique érotique",
"shop-massage": "Salon de massage", "shop-massage": "Salon de massage",
@@ -416,10 +416,10 @@
"shop-tattoo": "Salon de tatouage|tatoueur", "shop-tattoo": "Salon de tatouage|tatoueur",
"shop-variety_store|@category_shopping|@shop": "Bazar", "shop-variety_store|@category_shopping|@shop": "Bazar",
"shop-video|@shop": "Boutique de vidéos|videostore", "shop-video|@shop": "Boutique de vidéos|videostore",
"shop-video_games|@shop": "Boutique de jeux vidéo", "shop-video_games|@shop": "Boutique de jeux vidéos",
"tourism-wilderness_hut|@category_hotel": "Refuge non gardé|Refuge-bivouac", "tourism-wilderness_hut|@category_hotel": "Refuge non gardé|Refuge-bivouac",
"tourism-gallery|@category_tourism": "3Galerie d'art|musée d'art", "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", "tourism-theme_park|@category_tourism|@category_children": "Parc d'attractions|Parc de loisirs|parc à thèmes",
"boundary-national_park|@category_tourism": "Parc national", "boundary-national_park|@category_tourism": "Parc national",
"leisure-nature_reserve|@category_tourism": "Réserve naturelle", "leisure-nature_reserve|@category_tourism": "Réserve naturelle",
"natural-cape": "Cap", "natural-cape": "Cap",
@@ -447,7 +447,7 @@
"shop-medical_supply|@shop": "Materiel médical", "shop-medical_supply|@shop": "Materiel médical",
"shop-nutrition_supplements|@shop": "Suppléments nutritionnels", "shop-nutrition_supplements|@shop": "Suppléments nutritionnels",
"shop-paint|@shop": "Magasin de peinture", "shop-paint|@shop": "Magasin de peinture",
"shop-perfumery|@category_shopping|@shop": "Parfumerie", "shop-perfumery|@category_shopping|@shop": "Parfumerie|boutique de parfum",
"shop-sewing|@shop": "Mercerie|Couture", "shop-sewing|@shop": "Mercerie|Couture",
"shop-storage_rental": "Location de stockage", "shop-storage_rental": "Location de stockage",
"shop-tobacco|@shop": "Bureau de tabac", "shop-tobacco|@shop": "Bureau de tabac",
@@ -462,19 +462,19 @@
"amenity-social_facility": "Établissement de services sociaux", "amenity-social_facility": "Établissement de services sociaux",
"leisure-sports_hall": "Salle de sport", "leisure-sports_hall": "Salle de sport",
"amenity-arts_centre|@category_tourism": "Centre artistique", "amenity-arts_centre|@category_tourism": "Centre artistique",
"amenity-prison": "prison", "amenity-prison": "prison|centre pénitentiaire|centre de détention",
"amenity-exhibition_centre": "Centre d'exposition", "amenity-exhibition_centre": "Centre d'exposition",
"shop-bathroom_furnishing|@shop": "Mobilier de salle de bain", "shop-bathroom_furnishing|@shop": "Mobilier de salle de bain",
"shop-bed|@shop": "Magasin de literie", "shop-bed|@shop": "Magasin de literie",
"shop-boutique|@shop": "Boutique", "shop-boutique|@shop": "Boutique",
"amenity-food_court": "Aire de restauration", "amenity-food_court": "Aire de restauration|foodcourt",
"shop-curtain|@shop": "Magasin de rideaux", "shop-curtain|@shop": "Magasin de rideaux",
"shop-gas|@shop": "Vente de gaz", "shop-gas|@shop": "Vente de gaz|bouteille de gaz",
"shop-pet_grooming": "Salon de toilettage", "shop-pet_grooming": "Salon de toilettage",
"shop-hifi|@shop": "Matériel Hi-Fi", "shop-hifi|@shop": "Matériel Hi-Fi",
"amenity-conference_centre": "Centre de conférence", "amenity-conference_centre": "Centre de conférence",
"shop-herbalist|@shop": "Herboristerie", "shop-herbalist|@shop": "Herboristerie",
"shop-appliance|@shop": "Magasin d'électroménager", "shop-appliance|@shop": "Magasin d'électroménager|boutique d'électroménager",
"shop-agrarian|@shop": "Magasin d'agriculture", "shop-agrarian|@shop": "Magasin d'agriculture",
"shop-fashion_accessories|@shop": "Boutique d'accessoires de mode", "shop-fashion_accessories|@shop": "Boutique d'accessoires de mode",
"amenity-waste_transfer_station": "Station de transfert de déchets", "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", "amenity-charging_station-motorcar|amenity-charging_station-motorcar-small|@charging_station": "Chargeur automobile|Chargeur de voiture|Chargeur",
"shop-lighting|@shop": "4Lumières|Luminaires|4Lampes", "shop-lighting|@shop": "4Lumières|Luminaires|4Lampes",
"office-security": "Bureau de sécurité", "office-security": "Bureau de sécurité",
"building-guardhouse": "Garde", "building-guardhouse": "Garde|poste de sécurité|poste de gardiennage",
"leisure-dance|@category_entertainment": "4Danse|École de danse", "leisure-dance|@category_entertainment": "4Danse|École de danse",
"shop-money_lender": "Prêteur d'argent", "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", "attraction-amusement_ride|attraction-carousel|attraction-roller_coaster|attraction-maze|attraction-historic|attraction-big_wheel|attraction-bumper_car|@category_children": "Attraction|Labyrinthe",

View File

@@ -550,7 +550,7 @@
"Italy_Emilia-Romagna_Forli-Cesena":"Покрајина Форли-Чезена", "Italy_Emilia-Romagna_Forli-Cesena":"Покрајина Форли-Чезена",
"Italy_Emilia-Romagna_Modena":"Покрајина Модена", "Italy_Emilia-Romagna_Modena":"Покрајина Модена",
"Italy_Emilia-Romagna_Parma":"Покрајина Парма", "Italy_Emilia-Romagna_Parma":"Покрајина Парма",
"Italy_Emilia-Romagna_Piacenza":"Покрајина Пјаћенца", "Italy_Emilia-Romagna_Piacenza":"Покрајина Пјаченца",
"Italy_Emilia-Romagna_Ravenna":"Покрајина Равена", "Italy_Emilia-Romagna_Ravenna":"Покрајина Равена",
"Italy_Emilia-Romagna_Reggio Emilia":"Покрајина Ређо Емилија", "Italy_Emilia-Romagna_Reggio Emilia":"Покрајина Ређо Емилија",
"Italy_Emilia-Romagna_Rimini":"Покрајина Римини", "Italy_Emilia-Romagna_Rimini":"Покрајина Римини",
@@ -1881,7 +1881,7 @@
"Italy_Veneto_Treviso Description":"Тревизо, Конелијано, Кастелфранко Венето", "Italy_Veneto_Treviso Description":"Тревизо, Конелијано, Кастелфранко Венето",
"Italy_Veneto_Venezia Description":"Венеција, Местре, Кјоџа", "Italy_Veneto_Venezia Description":"Венеција, Местре, Кјоџа",
"Italy_Veneto_Verona Description":"Верона, Вилафранка ди Верона, Лењаго", "Italy_Veneto_Verona Description":"Верона, Вилафранка ди Верона, Лењаго",
"Italy_Veneto_Vicenza Description":"Вићенца, Басано дел Грапа, Скио", "Italy_Veneto_Vicenza Description":"Виченца, Басано дел Грапа, Скио",
"Jamaica Description":"Кингстон, Монтего Беј, Спениш Таун", "Jamaica Description":"Кингстон, Монтего Беј, Спениш Таун",
"Japan_Chubu Region_Aichi_Nagoya Description":"Нагоја, Цушима, Кијосу", "Japan_Chubu Region_Aichi_Nagoya Description":"Нагоја, Цушима, Кијосу",
"Japan_Chubu Region_Aichi_Toyohashi Description":"Тахара, Гамагори, Нишио", "Japan_Chubu Region_Aichi_Toyohashi Description":"Тахара, Гамагори, Нишио",

File diff suppressed because it is too large Load Diff

View File

@@ -394,32 +394,25 @@
<type id="amenity-pharmacy" group="shop"> <type id="amenity-pharmacy" group="shop">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="amenity-place_of_worship-buddhist">
<type id="amenity-place_of_worship-buddhist" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="amenity-place_of_worship-christian">
<type id="amenity-place_of_worship-christian" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="amenity-place_of_worship-hindu">
<type id="amenity-place_of_worship-hindu" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="amenity-place_of_worship-jewish">
<type id="amenity-place_of_worship-jewish" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="amenity-place_of_worship-muslim">
<type id="amenity-place_of_worship-muslim" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="amenity-place_of_worship-shinto">
<type id="amenity-place_of_worship-shinto" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="amenity-place_of_worship-taoist">
<type id="amenity-place_of_worship-taoist" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<type id="amenity-place_of_worship"> <type id="amenity-place_of_worship">
@@ -705,6 +698,9 @@
<type id="leisure-resort"> <type id="leisure-resort">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<type id="leisure-sports_centre-sport-swimming">
<include group="poi_internet" />
</type>
<type id="leisure-sports_centre"> <type id="leisure-sports_centre">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
@@ -1115,6 +1111,7 @@
<type id="tourism-artwork"> <type id="tourism-artwork">
<include field="name" /> <include field="name" />
</type> </type>
<!-- Not addable because OSM category is too broad and due to vandalism problems -->
<type id="tourism-attraction" can_add="no"> <type id="tourism-attraction" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
<!-- <include field="wikipedia" />--> <!-- <include field="wikipedia" />-->
@@ -1144,26 +1141,22 @@
<include group="poi_internet" /> <include group="poi_internet" />
<include field="self_service" /> <include field="self_service" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="tourism-information-office">
<type id="tourism-information-office" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="tourism-information-visitor_centre">
<type id="tourism-information-visitor_centre" can_add="no">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="tourism-information-board">
<type id="tourism-information-board" can_add="no">
<include field="name" /> <include field="name" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="tourism-information-map">
<type id="tourism-information-map" can_add="no">
<include field="name" /> <include field="name" />
</type> </type>
<!-- Can not be added because it is a complex type --> <type id="tourism-information-guidepost">
<type id="tourism-information-guidepost" can_add="no">
</type> </type>
<type id="tourism-information"> <!-- Too generic to add -->
<type id="tourism-information" can_add="no">
<include group="poi" /> <include group="poi" />
</type> </type>
<type id="amenity-ranger_station"> <type id="amenity-ranger_station">
@@ -1509,67 +1502,50 @@
<type id="leisure-escape_game"> <type id="leisure-escape_game">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </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"> <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="operator" />
<include field="level" />
</type> </type>
<type id="amenity-vending_machine-drinks"> <type id="amenity-vending_machine-drinks">
<tag k="amenity" v="vending_machine" />
<tag k="vending" v="drinks" />
<include field="operator" /> <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>
<type id="amenity-vending_machine-food"> <type id="amenity-vending_machine-food">
<tag k="amenity" v="vending_machine" />
<tag k="vending" v="food" />
<include field="operator" /> <include field="operator" />
<include field="level" />
</type> </type>
<type id="amenity-vending_machine-newspapers"> <type id="amenity-vending_machine-newspapers">
<tag k="amenity" v="vending_machine" />
<tag k="vending" v="newspapers" />
<include field="operator" /> <include field="operator" />
<include field="level" />
</type> </type>
<type id="amenity-vending_machine-sweets"> <type id="amenity-vending_machine-sweets">
<tag k="amenity" v="vending_machine" />
<tag k="vending" v="sweets" />
<include field="operator" /> <include field="operator" />
<include field="level" />
</type> </type>
<type id="shop-car_repair-tyres"> <type id="amenity-vending_machine">
<tag k="shop" v="car_repair" /> <include field="operator" />
<tag k="service" v="tyres" /> <include field="level" />
<include group="poi_internet" />
</type> </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 --> <!-- Not addable as mapping as a node is uncommon -->
<type id="natural-beach" can_add="no"> <type id="natural-beach" can_add="no">
<include field="name" /> <include field="name" />

View File

@@ -5,7 +5,7 @@
# highway|bus_stop;[highway=bus_stop];;name;int_name;22; # highway|bus_stop;[highway=bus_stop];;name;int_name;22;
# It contains: # It contains:
# - type name: "highway|bus_stop" ("|" is converted to "-" internally) # - 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 # - "x" for a deprecated type or an empty cell otherwise
# - primary title tag (usually "name") # - primary title tag (usually "name")
# - secondary title tag (usually "int_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|yes;[drinking_water=yes],[drinking_water=treated],[drinking_water:refill=yes];;;;504;
drinking_water|no;505; drinking_water|no;505;
amenity|sailing_school;[amenity=sailing_school],[education=sailing_school];;name;int_name;506; 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|prep_school;[amenity=prep_school],[education=prep_school];;name;int_name;508;
amenity|car_pooling;509; amenity|car_pooling;509;
social_facility|soup_kitchen;510; social_facility|soup_kitchen;510;
Can't render this file because it contains an unexpected character in line 7 and column 16.

View File

@@ -28,7 +28,7 @@
"take_exit_number":"Nehmen Sie die Ausfahrt auf", "take_exit_number":"Nehmen Sie die Ausfahrt auf",
"take_exit_number_street_verb":"NULL", "take_exit_number_street_verb":"NULL",
"route_recalculating":"Neuberechnung der Route", "route_recalculating":"Neuberechnung der Route",
"destination":"Werden Sie ankommen.", "destination":"erreichen Sie ihr Ziel.",
"you_have_reached_the_destination":"Sie haben Ihr Ziel erreicht.", "you_have_reached_the_destination":"Sie haben Ihr Ziel erreicht.",
"in_50_meters":"In fünfzig Metern", "in_50_meters":"In fünfzig Metern",
"in_100_meters":"In einhundert Metern", "in_100_meters":"In einhundert Metern",

View File

@@ -1,32 +1,32 @@
{ {
"make_a_slight_right_turn":"Rechts aanhouden.", "make_a_slight_right_turn":"Rechts aanhouden.",
"make_a_slight_right_turn_street":"flauwe bocht naar rechts", "make_a_slight_right_turn_street":"een flauwe bocht naar rechts",
"make_a_right_turn":"Sla rechtsaf.", "make_a_right_turn":"Sla rechtsaf.",
"make_a_right_turn_street":"Sla rechtsaf", "make_a_right_turn_street":"Sla rechtsaf",
"make_a_sharp_right_turn":"Scherp rechtsaf.", "make_a_sharp_right_turn":"Scherp rechtsaf.",
"make_a_sharp_right_turn_street":"scherp naar rechts afslaan", "make_a_sharp_right_turn_street":"scherp naar rechts afslaan",
"enter_the_roundabout":"Rij de rotonde op.", "enter_the_roundabout":"Rij de rotonde op.",
"enter_the_roundabout_street":"de rotonde", "enter_the_roundabout_street":"de rotonde op",
"enter_the_roundabout_street_verb":"Rijd", "enter_the_roundabout_street_verb":"Rij",
"leave_the_roundabout":"Verlaat de rotonde.", "leave_the_roundabout":"Verlaat de rotonde.",
"leave_the_roundabout_street":"de rotonde", "leave_the_roundabout_street":"de rotonde",
"leave_the_roundabout_street_verb":"Verlaat", "leave_the_roundabout_street_verb":"Verlaat",
"make_a_slight_left_turn":"Links aanhouden.", "make_a_slight_left_turn":"Links aanhouden.",
"make_a_slight_left_turn_street":"de flauwe bocht naar links", "make_a_slight_left_turn_street":"een flauwe bocht naar links",
"make_a_slight_left_turn_street_verb":"Neem", "make_a_slight_left_turn_street_verb":"Neem",
"make_a_left_turn":"Sla linksaf.", "make_a_left_turn":"Sla linksaf.",
"make_a_left_turn_street":"naar links afslaan", "make_a_left_turn_street":"Sla linksaf",
"make_a_sharp_left_turn":"Scherp linksaf.", "make_a_sharp_left_turn":"Scherp linksaf.",
"make_a_sharp_left_turn_street":"scherp naar links afslaan", "make_a_sharp_left_turn_street":"scherp naar links afslaan",
"make_a_u_turn":"Keer om.", "make_a_u_turn":"Keer om.",
"make_a_u_turn_street":"NULL", "make_a_u_turn_street":"om",
"make_a_u_turn_street_verb":"NULL", "make_a_u_turn_street_verb":"Keer",
"go_straight":"Rij rechtdoor.", "go_straight":"Rij rechtdoor.",
"exit":"Verlaat.", "exit":"Verlaat.",
"onto":"naar", "onto":"naar",
"take_exit_number":"Verlaat naar", "take_exit_number":"Verlaat naar",
"take_exit_number_street_verb":"Neem", "take_exit_number_street_verb":"Neem",
"route_recalculating":"De route herberekenen", "route_recalculating":"Route herberekenen",
"destination":"Arriveert u.", "destination":"Arriveert u.",
"you_have_reached_the_destination":"Bestemming bereikt.", "you_have_reached_the_destination":"Bestemming bereikt.",
"in_50_meters":"Over vijftig meter", "in_50_meters":"Over vijftig meter",
@@ -104,5 +104,5 @@
"in_1_5_miles":"Over anderhalve mijl", "in_1_5_miles":"Over anderhalve mijl",
"in_2_miles":"Over twee mijl", "in_2_miles":"Over twee mijl",
"unknown_camera":"Camera in zicht", "unknown_camera":"Camera in zicht",
"make_a_slight_right_turn_street_verb":"NULL" "make_a_slight_right_turn_street_verb":"Neem"
} }

View File

@@ -680,7 +680,7 @@
"editor_edits_sent_message" = "Din note vil blive sendt til OpenStreetMap"; "editor_edits_sent_message" = "Din note vil blive sendt til OpenStreetMap";
"editor_comment_hint" = "Kommentar…"; "editor_comment_hint" = "Kommentar…";
"editor_reset_edits_message" = "Kassér alle lokale ændringer?"; "editor_reset_edits_message" = "Kassér alle lokale ændringer?";
"editor_reset_edits_button" = "Kassér"; "editor_reset_edits_button" = "Kassér ændringer";
"editor_remove_place_message" = "Slet tilføjet sted?"; "editor_remove_place_message" = "Slet tilføjet sted?";
"editor_remove_place_button" = "Slet"; "editor_remove_place_button" = "Slet";
"editor_place_doesnt_exist" = "Stedet eksisterer ikke"; "editor_place_doesnt_exist" = "Stedet eksisterer ikke";

View File

@@ -685,7 +685,7 @@
"editor_edits_sent_message" = "Ihre Notiz wird an OpenStreetMap gesendet"; "editor_edits_sent_message" = "Ihre Notiz wird an OpenStreetMap gesendet";
"editor_comment_hint" = "Kommentar…"; "editor_comment_hint" = "Kommentar…";
"editor_reset_edits_message" = "Alle lokalen Korrekturen verwerfen?"; "editor_reset_edits_message" = "Alle lokalen Korrekturen verwerfen?";
"editor_reset_edits_button" = "Verwerfen"; "editor_reset_edits_button" = "Änderungen verwerfen";
"editor_remove_place_message" = "Hinzugefügtes Objekt löschen?"; "editor_remove_place_message" = "Hinzugefügtes Objekt löschen?";
"editor_remove_place_button" = "Löschen"; "editor_remove_place_button" = "Löschen";
"editor_place_doesnt_exist" = "Dieser Ort existiert nicht"; "editor_place_doesnt_exist" = "Dieser Ort existiert nicht";

View File

@@ -730,7 +730,7 @@
"editor_edits_sent_message" = "Your note will be sent to OpenStreetMap"; "editor_edits_sent_message" = "Your note will be sent to OpenStreetMap";
"editor_comment_hint" = "Comment…"; "editor_comment_hint" = "Comment…";
"editor_reset_edits_message" = "Discard all local changes?"; "editor_reset_edits_message" = "Discard all local changes?";
"editor_reset_edits_button" = "Discard"; "editor_reset_edits_button" = "Discard changes";
"editor_remove_place_message" = "Delete added place?"; "editor_remove_place_message" = "Delete added place?";
"editor_remove_place_button" = "Delete"; "editor_remove_place_button" = "Delete";
"editor_place_doesnt_exist" = "Place does not exist"; "editor_place_doesnt_exist" = "Place does not exist";

View File

@@ -779,7 +779,7 @@
"type.natural.beach.sand" = "Playa de arena"; "type.natural.beach.sand" = "Playa de arena";
"type.natural.beach.gravel" = "Playa de grava"; "type.natural.beach.gravel" = "Playa de grava";
"type.natural.cape" = "Cabo"; "type.natural.cape" = "Cabo";
"type.natural.cave_entrance" = "Cueva"; "type.natural.cave_entrance" = "Entrada de cueva";
"type.natural.cliff" = "Acantilado"; "type.natural.cliff" = "Acantilado";
"type.natural.earth_bank" = "Talud de tierra"; "type.natural.earth_bank" = "Talud de tierra";
"type.man_made.embankment" = "Terraplén"; "type.man_made.embankment" = "Terraplén";
@@ -815,7 +815,7 @@
"type.natural.wetland.marsh" = "Ciénaga"; "type.natural.wetland.marsh" = "Ciénaga";
"type.noexit" = "Sin salida"; "type.noexit" = "Sin salida";
"type.office" = "Oficina"; "type.office" = "Oficina";
"type.office.company" = "Oficina"; "type.office.company" = "Oficina de compañía";
"type.office.estate_agent" = "Agente inmobiliario"; "type.office.estate_agent" = "Agente inmobiliario";
"type.office.government" = "Oficina gubernamental"; "type.office.government" = "Oficina gubernamental";
"type.office.insurance" = "Oficina de seguros"; "type.office.insurance" = "Oficina de seguros";
@@ -859,13 +859,13 @@
"type.place.state.USA" = "Estado"; "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) */ /* Named part of a city or town, bigger than place=quarter (Wiki: https://wiki.openstreetmap.org/wiki/Tag:place%3Dsuburb) */
"type.place.suburb" = "Barrio"; "type.place.suburb" = "Suburbio";
"type.place.town" = "Pueblo"; "type.place.town" = "Pueblo";
"type.place.village" = "Pueblo"; "type.place.village" = "Pueblo";
"type.power" = "Energía"; "type.power" = "Energía";
"type.power.generator" = "Generador"; "type.power.generator" = "Generador";
"type.power.generator.solar" = "Generador solar"; "type.power.generator.solar" = "Generador solar";
"type.power.generator.wind" = "Generador de viento"; "type.power.generator.wind" = "Aerogenerador";
"type.power.generator.gas" = "Planta termoeléctrica de gas"; "type.power.generator.gas" = "Planta termoeléctrica de gas";
"type.power.generator.hydro" = "Planta hidroeléctrica"; "type.power.generator.hydro" = "Planta hidroeléctrica";
"type.power.line" = "Línea eléctrica"; "type.power.line" = "Línea eléctrica";
@@ -947,10 +947,10 @@
"type.railway.station" = "Estación de tren"; "type.railway.station" = "Estación de tren";
"type.railway.station.funicular" = "Funicular"; "type.railway.station.funicular" = "Funicular";
"type.railway.station.light_rail" = "Estación de tren"; "type.railway.station.light_rail" = "Estación de tren";
"type.railway.station.light_rail.berlin" = "Estación de tren"; "type.railway.station.light_rail.berlin" = "Estación de tren (S-Bahn)";
"type.railway.station.light_rail.london" = "Estación de tren"; "type.railway.station.light_rail.london" = "Estación de tren";
"type.railway.station.light_rail.porto" = "Estación de tren"; "type.railway.station.light_rail.porto" = "Estación de metro";
"type.railway.station.monorail" = "Estación de tren"; "type.railway.station.monorail" = "Estación de monoriel";
"type.railway.station.subway" = "Estación de metro"; "type.railway.station.subway" = "Estación de metro";
"type.railway.station.subway.adana" = "Estación de metro"; "type.railway.station.subway.adana" = "Estación de metro";
"type.railway.station.subway.algiers" = "Estación de metro"; "type.railway.station.subway.algiers" = "Estación de metro";
@@ -1220,7 +1220,7 @@
"type.shop.doityourself" = "Tienda de bricolaje"; "type.shop.doityourself" = "Tienda de bricolaje";
"type.shop.dry_cleaning" = "Tintorería"; "type.shop.dry_cleaning" = "Tintorería";
"type.shop.electronics" = "Electrónica"; "type.shop.electronics" = "Electrónica";
"type.shop.erotic" = "Sex Shop"; "type.shop.erotic" = "Tienda erótica";
"type.shop.fabric" = "Tienda de telas"; "type.shop.fabric" = "Tienda de telas";
"type.shop.farm" = "Tienda de alimentos de granja"; "type.shop.farm" = "Tienda de alimentos de granja";
"type.shop.fashion_accessories" = "Accesorios de moda"; "type.shop.fashion_accessories" = "Accesorios de moda";
@@ -1306,7 +1306,7 @@
"type.shop.tobacco" = "Tabaco"; "type.shop.tobacco" = "Tabaco";
"type.shop.trade" = "Suministros comerciales"; "type.shop.trade" = "Suministros comerciales";
"type.shop.watches" = "Relojes"; "type.shop.watches" = "Relojes";
"type.shop.wholesale" = "Almacén al por mayor"; "type.shop.wholesale" = "Tienda al por mayor";
"type.sport" = "Deporte"; "type.sport" = "Deporte";
"type.sport.american_football" = "Fútbol americano"; "type.sport.american_football" = "Fútbol americano";
"type.sport.archery" = "Tiro al arco"; "type.sport.archery" = "Tiro al arco";
@@ -1348,7 +1348,7 @@
/* Typically serviced, staff is present and food is available (compared to wilderness_hut). */ /* Typically serviced, staff is present and food is available (compared to wilderness_hut). */
"type.tourism.alpine_hut" = "Albergue de montaña"; "type.tourism.alpine_hut" = "Albergue de montaña";
"type.tourism.apartment" = "Apartamento de vacaciones"; "type.tourism.apartment" = "Apartamento vacacional";
"type.tourism.artwork" = "Obra de arte"; "type.tourism.artwork" = "Obra de arte";
"type.tourism.artwork.architecture" = "Arte arquitectónico"; "type.tourism.artwork.architecture" = "Arte arquitectónico";
"type.tourism.artwork.painting" = "Pintura"; "type.tourism.artwork.painting" = "Pintura";

View File

@@ -681,7 +681,7 @@
"editor_edits_sent_message" = "Sinu märkus saadetakse OpenStreetMapile"; "editor_edits_sent_message" = "Sinu märkus saadetakse OpenStreetMapile";
"editor_comment_hint" = "Kommenteeri…"; "editor_comment_hint" = "Kommenteeri…";
"editor_reset_edits_message" = "Kas loobud kõigist kohalikest muudatustest?"; "editor_reset_edits_message" = "Kas loobud kõigist kohalikest muudatustest?";
"editor_reset_edits_button" = "Loobu"; "editor_reset_edits_button" = "Loobu muudatustest";
"editor_remove_place_message" = "Kas kustutad lisatud koha?"; "editor_remove_place_message" = "Kas kustutad lisatud koha?";
"editor_remove_place_button" = "Kustuta"; "editor_remove_place_button" = "Kustuta";
"editor_place_doesnt_exist" = "Kohta pole olemas"; "editor_place_doesnt_exist" = "Kohta pole olemas";

View File

@@ -1585,3 +1585,4 @@
"type.spherical_buoy.safe_water" = "Faarvaatri kerapoi"; "type.spherical_buoy.safe_water" = "Faarvaatri kerapoi";
"type.man_made.mast.communication" = "Sidemast"; "type.man_made.mast.communication" = "Sidemast";
"type.shop.beauty.nails" = "Küünestuudio"; "type.shop.beauty.nails" = "Küünestuudio";
"type.amenity.hydrant" = "Kastmishüdrant";

View File

@@ -57,13 +57,13 @@
"add_new_set" = "افزودن پهرستی نو"; "add_new_set" = "افزودن پهرستی نو";
/* Add Bookmark list dialog - hint when the list name is empty */ /* Add Bookmark list dialog - hint when the list name is empty */
"bookmark_set_name" = "Bookmark List Name"; "bookmark_set_name" = "نام پهرست نشانگ‌ها";
/* "Bookmark Lists" dialog title */ /* "Bookmark Lists" dialog title */
"bookmark_sets" = "Bookmark Lists"; "bookmark_sets" = "Bookmark Lists";
/* Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. */ /* 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" dialog title, also sync it with iphone/plist.txt */
"bookmarks_and_tracks" = "نشانه‌ها و مسیر ها"; "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!"; "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 */ /* message title of loading file */
"load_kmz_title" = "در حال بارگیری نشانهها"; "load_kmz_title" = "بارگذاری نشانگها";
/* Kmz file successful loading */ /* Kmz file successful loading */
"load_kmz_successful" = "نشانه‌ها با موفقیت بارگذاری شد!شما می توانید آنها را در نقشه یا بخش مدیریت نشانه‌ها بیابید."; "load_kmz_successful" = "نشانه‌ها با موفقیت بارگذاری شد!شما می توانید آنها را در نقشه یا بخش مدیریت نشانه‌ها بیابید.";

View File

@@ -680,7 +680,7 @@
"editor_edits_sent_message" = "Notatet ditt vil bli sendt til OpenStreetMap"; "editor_edits_sent_message" = "Notatet ditt vil bli sendt til OpenStreetMap";
"editor_comment_hint" = "Kommentar…"; "editor_comment_hint" = "Kommentar…";
"editor_reset_edits_message" = "Forkaste alle lokale endringer?"; "editor_reset_edits_message" = "Forkaste alle lokale endringer?";
"editor_reset_edits_button" = "Forkast"; "editor_reset_edits_button" = "Forkast endringer";
"editor_remove_place_message" = "Slette tillagt sted?"; "editor_remove_place_message" = "Slette tillagt sted?";
"editor_remove_place_button" = "Slett"; "editor_remove_place_button" = "Slett";
"editor_place_doesnt_exist" = "Sted finnes ikke"; "editor_place_doesnt_exist" = "Sted finnes ikke";

View File

@@ -1591,3 +1591,4 @@
"type.shop.beauty.nails" = "Nagelsalon"; "type.shop.beauty.nails" = "Nagelsalon";
"type.amenity.food_sharing" = "Voedsel delen"; "type.amenity.food_sharing" = "Voedsel delen";
"type.amenity.give_box" = "Giftenkist"; "type.amenity.give_box" = "Giftenkist";
"type.amenity.hydrant" = "Watertappunt|waterkraan";

View File

@@ -1591,3 +1591,4 @@
"type.natural.tree" = "Árvore"; "type.natural.tree" = "Árvore";
"type.shop.beauty.nails" = "Salão de Unhas"; "type.shop.beauty.nails" = "Salão de Unhas";
"type.xmas.tree" = "Árvore de Natal"; "type.xmas.tree" = "Árvore de Natal";
"type.amenity.hydrant" = "Boca de Rega";

View File

@@ -543,7 +543,7 @@
/* OpenStreetMap Profile */ /* OpenStreetMap Profile */
"osm_profile" = "Profil OpenStreetMap"; "osm_profile" = "Profil OpenStreetMap";
"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_promt" = "Creați un cont OpenStreetMap sau conectați-vă pentru a vă publica editările hărții pentru î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_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_login" = "Conectează-te la contul OpenStreetMap";
"osm_profile_reauthorize_promt" = "Contul OpenStreetMap a fost deconectat de la această aplicație"; "osm_profile_reauthorize_promt" = "Contul OpenStreetMap a fost deconectat de la această aplicație";

View File

@@ -368,3 +368,99 @@
"type.cuisine.bubble_tea" = "Čaj s tapiokinimi kroglicami ('Bubble Tea')"; "type.cuisine.bubble_tea" = "Čaj s tapiokinimi kroglicami ('Bubble Tea')";
"type.cuisine.breakfast" = "Zajtrk"; "type.cuisine.breakfast" = "Zajtrk";
"type.cuisine.chicken" = "Piščanec"; "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";
"type.highway.cycleway.tunnel" = "Predor";
"type.highway.elevator" = "Dvigalo";
"type.highway.footway" = "Pešpot";
"type.highway.footway.sidewalk" = "Pločnik";
"type.highway.footway.crossing" = "Prehod za pešce";
"type.highway.footway.area" = "Površina za pešce";
"type.highway.footway.bridge" = "Most za pešce";
"type.highway.footway.tunnel" = "Predor za pešce";

View File

@@ -1101,3 +1101,4 @@
"offline_explanation_title" = "Çevrimdışı Haritalar"; "offline_explanation_title" = "Çevrimdışı Haritalar";
"avoid_steps" = "Merdivenlerden kaçın"; "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"; "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";

View File

@@ -1491,3 +1491,4 @@
"type.shop.lighting" = "Aydınlatma dükkanı"; "type.shop.lighting" = "Aydınlatma dükkanı";
"type.amenity.charging_station.motorcar.small" = "Araç Şarj Noktası"; "type.amenity.charging_station.motorcar.small" = "Araç Şarj Noktası";
"type.amenity.bench.backless" = "Sırtıık Bank"; "type.amenity.bench.backless" = "Sırtıık Bank";
"type.amenity.sailing_school" = "Denizcilik Okulu";

View File

@@ -683,7 +683,7 @@
"editor_edits_sent_message" = "您的说明将发送至 OpenStreetMap"; "editor_edits_sent_message" = "您的说明将发送至 OpenStreetMap";
"editor_comment_hint" = "备注…"; "editor_comment_hint" = "备注…";
"editor_reset_edits_message" = "舍弃所有本地更改?"; "editor_reset_edits_message" = "舍弃所有本地更改?";
"editor_reset_edits_button" = "舍弃"; "editor_reset_edits_button" = "舍弃更改";
"editor_remove_place_message" = "删除已添加的地点?"; "editor_remove_place_message" = "删除已添加的地点?";
"editor_remove_place_button" = "删除"; "editor_remove_place_button" = "删除";
"editor_place_doesnt_exist" = "该地点不存在"; "editor_place_doesnt_exist" = "该地点不存在";

View File

@@ -40,6 +40,7 @@
27AF18562E1DB63000CD41E2 /* PowerSavingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */; }; 27AF18562E1DB63000CD41E2 /* PowerSavingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */; };
27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18572E1DB63900CD41E2 /* Appearance.swift */; }; 27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18572E1DB63900CD41E2 /* Appearance.swift */; };
27AF185A2E1DB64500CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.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 */; }; 3304306D21D4EAFB00317CA3 /* SearchCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3304306C21D4EAFB00317CA3 /* SearchCategoryCell.swift */; };
33046832219C57180041F3A8 /* CategorySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33046831219C57180041F3A8 /* CategorySettingsViewController.swift */; }; 33046832219C57180041F3A8 /* CategorySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33046831219C57180041F3A8 /* CategorySettingsViewController.swift */; };
337F98A621D37B7400C8AC27 /* SearchTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337F98A521D37B7400C8AC27 /* SearchTabViewController.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>"; }; 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>"; }; 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>"; }; 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; }; 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; }; 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>"; }; 30034C5C2B3F0B74005D961A /* az */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = az; path = az.lproj/Localizable.strings; sourceTree = "<group>"; };
@@ -3948,6 +3950,7 @@
6B9978341C89A316003B8AA0 /* editor.config */, 6B9978341C89A316003B8AA0 /* editor.config */,
978D4A30199A11E600D72CA7 /* faq.html */, 978D4A30199A11E600D72CA7 /* faq.html */,
BB7626B41E8559980031D71C /* icudt75l.dat */, BB7626B41E8559980031D71C /* icudt75l.dat */,
27FDBF202EEEFC830045621D /* mapcss-mapping.csv */,
F623DA6A1C9C2731006A3436 /* opening_hours_how_to_edit.html */, F623DA6A1C9C2731006A3436 /* opening_hours_how_to_edit.html */,
FA85F632145DDDC20090E1A0 /* packed_polygons.bin */, FA85F632145DDDC20090E1A0 /* packed_polygons.bin */,
451950391B7A3E070085DA05 /* patterns.txt */, 451950391B7A3E070085DA05 /* patterns.txt */,
@@ -4201,6 +4204,7 @@
34F73F9F1E082FF800AC1FD6 /* Localizable.strings in Resources */, 34F73F9F1E082FF800AC1FD6 /* Localizable.strings in Resources */,
340E1EF21E2F614400CE49BF /* Main.storyboard in Resources */, 340E1EF21E2F614400CE49BF /* Main.storyboard in Resources */,
F6E2FE521E097BA00083EBEC /* MWMActionBarButton.xib in Resources */, F6E2FE521E097BA00083EBEC /* MWMActionBarButton.xib in Resources */,
27FDBF212EEEFC830045621D /* mapcss-mapping.csv in Resources */,
EDBD68072B625724005DD151 /* LocationServicesDisabledAlert.xib in Resources */, EDBD68072B625724005DD151 /* LocationServicesDisabledAlert.xib in Resources */,
993DF0CA23F6BD0600AC231A /* ElevationDetailsViewController.xib in Resources */, 993DF0CA23F6BD0600AC231A /* ElevationDetailsViewController.xib in Resources */,
F623DA6F1C9C2E62006A3436 /* MWMAddPlaceNavigationBar.xib in Resources */, F623DA6F1C9C2E62006A3436 /* MWMAddPlaceNavigationBar.xib in Resources */,

View File

@@ -158,7 +158,7 @@ void registerCellsForTableView(std::vector<MWMEditorCellID> const & cells, UITab
[self configNavBar]; [self configNavBar];
auto const & fid = m_mapObject.GetID(); auto const & fid = m_mapObject.GetID();
self.featureStatus = osm::Editor::Instance().GetFeatureStatus(fid.m_mwmId, fid.m_index); self.featureStatus = osm::Editor::Instance().GetFeatureStatus(fid.m_mwmId, fid.m_index);
self.isFeatureUploaded = osm::Editor::Instance().IsFeatureUploaded(fid.m_mwmId, fid.m_index); self.isFeatureUploaded = osm::Editor::Instance().AreSomeFeatureChangesUploaded(fid.m_mwmId, fid.m_index);
m_newAdditionalLanguages.clear(); m_newAdditionalLanguages.clear();
if (self.isCreating) if (self.isCreating)
{ {
@@ -1089,7 +1089,7 @@ void registerCellsForTableView(std::vector<MWMEditorCellID> const & cells, UITab
- (void)tapOnButtonCell:(UITableViewCell *)cell - (void)tapOnButtonCell:(UITableViewCell *)cell
{ {
auto const & fid = m_mapObject.GetID(); auto const & fid = m_mapObject.GetID();
self.isFeatureUploaded = osm::Editor::Instance().IsFeatureUploaded(fid.m_mwmId, fid.m_index); self.isFeatureUploaded = osm::Editor::Instance().AreSomeFeatureChangesUploaded(fid.m_mwmId, fid.m_index);
NSIndexPath * ip = [self.tableView indexPathForCell:cell]; NSIndexPath * ip = [self.tableView indexPathForCell:cell];
[self.tableView reloadRowsAtIndexPaths:@[ ip ] withRowAnimation:UITableViewRowAnimationFade]; [self.tableView reloadRowsAtIndexPaths:@[ ip ] withRowAnimation:UITableViewRowAnimationFade];

View File

@@ -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. ‣ 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. ‣ 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. ‣ 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. ‣ 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. ‣ Toma de decisiones y finanzas abiertas y transparentes, sin fines de lucro y totalmente de código abierto.

View File

@@ -81,7 +81,7 @@ public:
QPainter painter(device); QPainter painter(device);
painter.fillRect(QRectF(0.0, 0.0, device->width(), device->height()), Qt::white); painter.fillRect(QRectF(0.0, 0.0, device->width(), device->height()), Qt::white);
auto const shapedText = m_mng->ShapeText(m_utf8, m_fontPixelSize, m_lang); auto const shapedText = m_mng->ShapeText(m_utf8, m_fontPixelSize);
std::cout << "Total width: " << shapedText.m_lineWidthInPixels << '\n'; std::cout << "Total width: " << shapedText.m_lineWidthInPixels << '\n';
std::cout << "Max height: " << shapedText.m_maxLineHeightInPixels << '\n'; std::cout << "Max height: " << shapedText.m_maxLineHeightInPixels << '\n';

View File

@@ -5,6 +5,7 @@
#include "drape/harfbuzz_shaping.hpp" #include "drape/harfbuzz_shaping.hpp"
#include "platform/platform.hpp" #include "platform/platform.hpp"
#include "platform/preferred_languages.hpp"
#include "coding/hex.hpp" #include "coding/hex.hpp"
#include "coding/reader.hpp" #include "coding/reader.hpp"
@@ -328,6 +329,9 @@ FreetypeError constexpr g_FT_Errors[] =
TUniBlockIter m_lastUsedBlock; TUniBlockIter m_lastUsedBlock;
std::vector<std::unique_ptr<Font>> m_fonts; 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(). // Required to use std::string_view as a search key for std::unordered_map::find().
struct StringHash : public std::hash<std::string_view> struct StringHash : public std::hash<std::string_view>
{ {
@@ -563,21 +567,8 @@ FreetypeError constexpr g_FT_Errors[] =
return m_impl->m_fonts[key.m_fontIndex]->GetGlyphImage(key.m_glyphId, pixelHeight, sdf); 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. // This method is NOT multithreading-safe.
text::TextMetrics GlyphManager::ShapeText(std::string_view utf8, int fontPixelHeight, int8_t lang) text::TextMetrics GlyphManager::ShapeText(std::string_view utf8, int fontPixelHeight)
{ {
#ifdef DEBUG #ifdef DEBUG
static int const fontSize = fontPixelHeight; static int const fontSize = fontPixelHeight;
@@ -591,9 +582,6 @@ FreetypeError constexpr g_FT_Errors[] =
auto const [text, segments] = harfbuzz_shaping::GetTextSegments(utf8); auto const [text, segments] = harfbuzz_shaping::GetTextSegments(utf8);
// TODO(AB): Optimize language conversion.
hb_language_t const hbLanguage = OrganicMapsLanguageToHarfbuzzLanguage(lang);
text::TextMetrics allGlyphs; text::TextMetrics allGlyphs;
// For SplitText it's enough to know if the last visual (first logical) segment is RTL. // 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; allGlyphs.m_isRTL = segments.back().m_direction == HB_DIRECTION_RTL;
@@ -609,7 +597,8 @@ FreetypeError constexpr g_FT_Errors[] =
static_cast<int>(text.size()), substring.m_start, substring.m_length); 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_direction(m_impl->m_harfbuzzBuffer, substring.m_direction);
hb_buffer_set_script(m_impl->m_harfbuzzBuffer, substring.m_script); hb_buffer_set_script(m_impl->m_harfbuzzBuffer, substring.m_script);
hb_buffer_set_language(m_impl->m_harfbuzzBuffer, hbLanguage); // 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);
auto u32CharacterIter{text.begin() + substring.m_start}; auto u32CharacterIter{text.begin() + substring.m_start};
auto const end{u32CharacterIter + substring.m_length}; auto const end{u32CharacterIter + substring.m_length};
@@ -646,10 +635,4 @@ FreetypeError constexpr g_FT_Errors[] =
return allGlyphs; return allGlyphs;
} }
text::TextMetrics GlyphManager::ShapeText(std::string_view utf8, int fontPixelHeight, char const * lang)
{
return ShapeText(utf8, fontPixelHeight, StringUtf8Multilang::GetLangIndex(lang));
}
} // namespace dp } // namespace dp

View File

@@ -73,8 +73,7 @@ public:
int GetFontIndex(strings::UniChar unicodePoint); int GetFontIndex(strings::UniChar unicodePoint);
int GetFontIndex(std::u16string_view sv); int GetFontIndex(std::u16string_view sv);
text::TextMetrics ShapeText(std::string_view utf8, int fontPixelHeight, int8_t lang); text::TextMetrics ShapeText(std::string_view utf8, int fontPixelHeight);
text::TextMetrics ShapeText(std::string_view utf8, int fontPixelHeight, char const * lang);
GlyphImage GetGlyphImage(GlyphFontAndId key, int pixelHeight, bool sdf) const; GlyphImage GetGlyphImage(GlyphFontAndId key, int pixelHeight, bool sdf) const;

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