mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-27 00:13:38 +00:00
Compare commits
235 Commits
generate-2
...
traffic
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
426a9661ab | ||
|
|
6dbde46dca | ||
|
|
7ed4a6ddd9 | ||
|
|
645ca792f7 | ||
|
|
cd64d14830 | ||
|
|
67b1d918ba | ||
|
|
48a3e5d4b0 | ||
|
|
d4c002851b | ||
|
|
9d4801886e | ||
|
|
5a26b72431 | ||
|
|
859b89e127 | ||
|
|
8fcf00b0ca | ||
|
|
5c2cedb19a | ||
|
|
67a3866529 | ||
|
|
90fdf0ed72 | ||
|
|
2b7ee4ba44 | ||
|
|
cd1201cb02 | ||
|
|
e6937b211a | ||
|
|
27ad70d729 | ||
|
|
a9700156db | ||
|
|
1d87e0e987 | ||
|
|
f7882636cd | ||
|
|
40fbea11e7 | ||
|
|
e87727c168 | ||
|
|
d82b545e30 | ||
|
|
781d973faa | ||
|
|
d6818786f7 | ||
|
|
615f57c604 | ||
|
|
af20e2b42b | ||
|
|
05f6dfad7b | ||
|
|
2b867a64a0 | ||
|
|
c0fd405798 | ||
|
|
207d6c833d | ||
|
|
d47aa09053 | ||
|
|
fbc150fae2 | ||
|
|
d88ed01bc1 | ||
|
|
3ec32e4415 | ||
|
|
9065f45b21 | ||
|
|
46d363ae24 | ||
|
|
0dc62c47dd | ||
|
|
3c9eeb9a75 | ||
|
|
ae23afd72e | ||
|
|
800cc0641b | ||
|
|
1b74062447 | ||
|
|
6a694c5d3e | ||
|
|
dda13b8d3d | ||
|
|
c1340a9941 | ||
|
|
a313526aed | ||
|
|
32d1a3a36e | ||
|
|
3a45740884 | ||
|
|
4e624bd04b | ||
|
|
a3d1ed83c3 | ||
|
|
38dbad0f7e | ||
|
|
7fe5823140 | ||
|
|
091d510ba1 | ||
|
|
f07c8d66d8 | ||
|
|
c9f50cdc72 | ||
|
|
2ed9bc1880 | ||
|
|
d098ecae15 | ||
|
|
9e06ec815e | ||
|
|
bf6cf27f8c | ||
|
|
bf36c875d5 | ||
|
|
30b2df89cd | ||
|
|
ba2d653a30 | ||
|
|
d6eacd7364 | ||
|
|
07c75e627e | ||
|
|
e7bde9aa05 | ||
|
|
5ba708caff | ||
|
|
48e8f32e01 | ||
|
|
38e98df6cc | ||
|
|
0713e22328 | ||
|
|
3ed31a575f | ||
|
|
ac87e3c585 | ||
|
|
ef806cf18a | ||
|
|
d46c0fec76 | ||
|
|
1d42d3b431 | ||
|
|
2663eda820 | ||
|
|
16708aae7f | ||
|
|
6963637b1b | ||
|
|
57f55f1022 | ||
|
|
01476d3dc7 | ||
|
|
90d7cadc3f | ||
|
|
3a6f21dbd1 | ||
|
|
221fe69840 | ||
|
|
167f0b8377 | ||
|
|
df7d507e1b | ||
|
|
fe737602d8 | ||
|
|
daa147a721 | ||
|
|
bd555afe61 | ||
|
|
73a70d943e | ||
|
|
dde50bd0a1 | ||
|
|
0106dc3fe5 | ||
|
|
034856f033 | ||
|
|
f53c794fdd | ||
|
|
dcab6ee5a0 | ||
|
|
edc15ac982 | ||
|
|
871cd73592 | ||
|
|
958be3dee6 | ||
|
|
06f63dcb9a | ||
|
|
bebac8d8a7 | ||
|
|
a25602dbe0 | ||
|
|
98796cd6f8 | ||
|
|
2729d07732 | ||
|
|
61b15d623d | ||
|
|
03d6847be3 | ||
|
|
3b1fca01e3 | ||
|
|
be3792b93a | ||
|
|
7283e4ecb4 | ||
|
|
75c7d146af | ||
|
|
d988ab3326 | ||
|
|
798affe0ef | ||
|
|
93a1f9d1a6 | ||
|
|
3f58c6ee20 | ||
|
|
a20d1453e0 | ||
|
|
e825753487 | ||
|
|
cc58eaa50a | ||
|
|
75197a11a8 | ||
|
|
d03b47bee0 | ||
|
|
daf344b27f | ||
|
|
121bdc4af8 | ||
|
|
6656c7e441 | ||
|
|
f32493faaa | ||
|
|
4f4d376a4a | ||
|
|
4324e329e5 | ||
|
|
9eeac05fdf | ||
|
|
b418cf659c | ||
|
|
964368f5d4 | ||
|
|
23922f1c2b | ||
|
|
f02b1538e7 | ||
|
|
dd65e89f8f | ||
|
|
f132022e60 | ||
|
|
247f88254e | ||
|
|
81a31d6b42 | ||
|
|
89d1365fee | ||
|
|
9fb08bdc56 | ||
|
|
371a58f6f9 | ||
|
|
af8b748c59 | ||
|
|
a43e83d280 | ||
|
|
04b2059ca0 | ||
|
|
ed15925251 | ||
|
|
173b5e1718 | ||
|
|
26aa5e5f54 | ||
|
|
f31541efb2 | ||
|
|
db3ed87b92 | ||
|
|
fbaa5470fd | ||
|
|
0681171d69 | ||
|
|
e3d86be324 | ||
|
|
ef3de2c781 | ||
|
|
d574b536ba | ||
|
|
2d3ca8014b | ||
|
|
df13e279b6 | ||
|
|
b48310e6a5 | ||
|
|
b98fe1999c | ||
|
|
d47713516d | ||
|
|
d72bd9e00e | ||
|
|
8cffe8fa64 | ||
|
|
ae5dea4a53 | ||
|
|
588332a23b | ||
|
|
3eb99e952c | ||
|
|
9f4b6d73ce | ||
|
|
488159e2f9 | ||
|
|
f30316d868 | ||
|
|
daaf52d27d | ||
|
|
ba9980ba36 | ||
|
|
5531b1129b | ||
|
|
394a6673e5 | ||
|
|
62ee9d5b46 | ||
|
|
2592bcf042 | ||
|
|
dd7ed98c1a | ||
|
|
76fce016bb | ||
|
|
7db32a9922 | ||
|
|
fa5608d874 | ||
|
|
185febd8d8 | ||
|
|
7a5ea64ea0 | ||
|
|
a4106505af | ||
|
|
083845a502 | ||
|
|
c6de2a25aa | ||
|
|
4c5fb21c33 | ||
|
|
f566f6f0ef | ||
|
|
9afb28aaa1 | ||
|
|
bd178932c1 | ||
|
|
2894218573 | ||
|
|
63f0799161 | ||
|
|
5b67d668bd | ||
|
|
f7adea08a2 | ||
|
|
c0c8d5da58 | ||
|
|
2ed300ca08 | ||
|
|
52a915211e | ||
|
|
18f1dfac45 | ||
|
|
a7897e2347 | ||
|
|
e3f5dd3ca8 | ||
|
|
de03995e77 | ||
|
|
74d79e5c8e | ||
|
|
e2aff53291 | ||
|
|
a39bdee0d1 | ||
|
|
136293c308 | ||
|
|
356b051036 | ||
|
|
c8d5a07262 | ||
|
|
e94c23d538 | ||
|
|
2ba3030366 | ||
|
|
3455050876 | ||
|
|
cf57942a0b | ||
|
|
3a713c477a | ||
|
|
edb1b7e784 | ||
|
|
53e80b9283 | ||
|
|
7107314e2f | ||
|
|
fafec070c9 | ||
|
|
d7facd5732 | ||
|
|
382e46af63 | ||
|
|
d0a9c564e4 | ||
|
|
a9ceec3995 | ||
|
|
73d61ff655 | ||
|
|
5cdf14386d | ||
|
|
2f6a8564cb | ||
|
|
80a7ed503e | ||
|
|
6e65e60c3d | ||
|
|
f041f910e7 | ||
|
|
dbf253c9d1 | ||
|
|
24d65bd37f | ||
|
|
16cb70a952 | ||
|
|
8827ec3c09 | ||
|
|
7be0b8a256 | ||
|
|
f0f847b214 | ||
|
|
2017907b1f | ||
|
|
bb410fc3bc | ||
|
|
6e8d400611 | ||
|
|
7b420def17 | ||
|
|
737d7b5643 | ||
|
|
9c93f421ac | ||
|
|
1574b5b7cb | ||
|
|
932dda6552 | ||
|
|
6f2f61b30a | ||
|
|
20c9fc5f45 | ||
|
|
be3e3d773b | ||
|
|
0fd7f8d573 |
@@ -1,55 +1,69 @@
|
||||
# All non-assigned.
|
||||
* @organicmaps/mergers
|
||||
# Visual design.
|
||||
/android/app/src/main/res/drawable*/ @comaps/design
|
||||
/android/app/src/main/res/font/ @comaps/design
|
||||
/android/app/src/main/res/mipmap*/ @comaps/design
|
||||
/data/*.ttf @comaps/design
|
||||
/data/resources-svg/ @comaps/design
|
||||
/data/search-icons/ @comaps/design
|
||||
/iphone/Maps/Images.xcassets/ @comaps/design
|
||||
/android/app/src/main/res/drawable*/ @organicmaps/design
|
||||
/android/app/src/main/res/font/ @organicmaps/design
|
||||
/android/app/src/main/res/mipmap*/ @organicmaps/design
|
||||
/data/*.ttf @organicmaps/design
|
||||
/data/resources-svg/ @organicmaps/design
|
||||
/data/search-icons/ @organicmaps/design
|
||||
/iphone/Maps/Images.xcassets/ @organicmaps/design
|
||||
# Android.
|
||||
/android/ @comaps/android
|
||||
/android/app/src/main/java/app/comaps/car/ @comaps/android-auto
|
||||
/docs/ANDROID_LOCATION_TEST.md @comaps/android
|
||||
/docs/JAVA_STYLE.md @comaps/android
|
||||
/android/ @organicmaps/android
|
||||
/android/app/src/main/java/app/organicmaps/car/ @organicmaps/android-auto
|
||||
/docs/ANDROID_LOCATION_TEST.md @organicmaps/android
|
||||
/docs/JAVA_STYLE.md @organicmaps/android
|
||||
# no owner for translation changes
|
||||
/android/app/src/main/res/values*/strings.xml
|
||||
# iOS.
|
||||
/iphone/ @comaps/ios
|
||||
/xcode/ @comaps/ios
|
||||
/docs/OBJC_STYLE.md @comaps/ios
|
||||
/iphone/ @organicmaps/ios
|
||||
/xcode/ @organicmaps/ios
|
||||
/docs/OBJC_STYLE.md @organicmaps/ios
|
||||
# no owner for translation changes
|
||||
/iphone/plist.txt
|
||||
/iphone/Maps/LocalizedStrings/
|
||||
# Qt
|
||||
/qt/ @organicmaps/qt
|
||||
# Rendering
|
||||
/drape/ @organicmaps/rendering
|
||||
/drape_frontend/ @organicmaps/rendering
|
||||
# Map Data.
|
||||
/tools/python/maps_generator/ @organicmaps/data
|
||||
/generator/ @organicmaps/data
|
||||
/topography_generator/ @organicmaps/data
|
||||
/data/borders/ @organicmaps/data
|
||||
/data/conf/isolines/ @organicmaps/data
|
||||
/docs/SUBWAY_GENERATION.md @organicmaps/data
|
||||
/docs/MAPS.md @organicmaps/data
|
||||
/docs/EXPERIMENTAL_PUBLIC_TRANSPORT_SUPPORT.md @organicmaps/data
|
||||
# no owner (changed often to add a new POI)
|
||||
/generator/generator_tests/osm_type_test.cpp
|
||||
# Map Styles.
|
||||
/data/styles/ @comaps/styles
|
||||
/data/types.txt @comaps/styles
|
||||
/data/visibility.txt @comaps/styles
|
||||
/data/mapcss-mapping.csv @comaps/styles
|
||||
/data/replaced_tags.txt @comaps/styles
|
||||
/data/classificator.txt @comaps/styles
|
||||
/data/drules_* @comaps/styles
|
||||
/data/styles/ @organicmaps/styles
|
||||
/data/types.txt @organicmaps/styles
|
||||
/data/visibility.txt @organicmaps/styles
|
||||
/data/mapcss-mapping.csv @organicmaps/styles
|
||||
/data/replaced_tags.txt @organicmaps/styles
|
||||
/data/classificator.txt @organicmaps/styles
|
||||
/data/drules_* @organicmaps/styles
|
||||
/docs/STYLES.md
|
||||
/tools/kothic/ @comaps/styles
|
||||
/tools/kothic/ @organicmaps/styles
|
||||
# DevOps.
|
||||
/.forgejo/workflows @comaps/devops
|
||||
/android/*gradle* @comaps/devops
|
||||
/docs/RELEASE_MANAGEMENT.md @comaps/devops
|
||||
/xcode/fastlane/ @comaps/devops
|
||||
/tools/python/maps_generator/ @comaps/devops
|
||||
/generator/ @comaps/devops
|
||||
/topography_generator/ @comaps/devops
|
||||
/data/borders/ @comaps/devops
|
||||
/data/conf/isolines/ @comaps/devops
|
||||
/docs/SUBWAY_GENERATION.md @comaps/devops
|
||||
/docs/MAPS.md @comaps/devops
|
||||
/docs/EXPERIMENTAL_PUBLIC_TRANSPORT_SUPPORT.md @comaps/devops
|
||||
/.forgejo/workflows @organicmaps/devops
|
||||
/android/*gradle* @organicmaps/devops
|
||||
/docs/RELEASE_MANAGEMENT.md @organicmaps/devops
|
||||
/xcode/fastlane/ @organicmaps/devops
|
||||
# Growth.
|
||||
README.md @organicmaps/growth
|
||||
/.forgejo/FUNDING.yml @organicmaps/growth
|
||||
/android/app/src/fdroid/play/ @organicmaps/growth
|
||||
/android/app/src/google/play/ @organicmaps/growth
|
||||
/iphone/metadata/ @organicmaps/growth
|
||||
# Legal.
|
||||
LEGAL @comaps/admins
|
||||
LICENSE @comaps/admins
|
||||
NOTICE @comaps/admins
|
||||
CONTRIBUTORS @comaps/admins
|
||||
/docs/CODE_OF_CONDUCT.md @comaps/admins
|
||||
/docs/DCO.md @comaps/admins
|
||||
/docs/GOVERNANCE.md @comaps/admins
|
||||
LEGAL @organicmaps/legal
|
||||
LICENSE @organicmaps/legal
|
||||
NOTICE @organicmaps/legal
|
||||
CONTRIBUTORS @organicmaps/legal
|
||||
/docs/CODE_OF_CONDUCT.md @organicmaps/legal
|
||||
/docs/DCO.md @organicmaps/legal
|
||||
/docs/GOVERNANCE.md @organicmaps/legal
|
||||
|
||||
@@ -1,3 +1 @@
|
||||
open_collective: comaps
|
||||
liberapay: comaps
|
||||
custom: ["https://comaps.app/donate/"]
|
||||
|
||||
3
.github/FUNDING.yml
vendored
3
.github/FUNDING.yml
vendored
@@ -1,3 +0,0 @@
|
||||
open_collective: comaps
|
||||
liberapay: comaps
|
||||
custom: ["https://comaps.app/donate/"]
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -21,6 +21,7 @@ data/symbols/**/symbols.sdf
|
||||
|
||||
data/bookmarks
|
||||
data/edits.xml
|
||||
data/traffic.xml
|
||||
data/World.mwm
|
||||
data/WorldCoasts.mwm
|
||||
data/world_mwm/*
|
||||
@@ -155,8 +156,6 @@ android/huawei-appgallery.json
|
||||
android/res/xml/network_security_config.xml
|
||||
./server/
|
||||
iphone/Maps/app.omaps/
|
||||
# Generated file
|
||||
libs/indexer/localized_types_map.cpp
|
||||
|
||||
*.li
|
||||
|
||||
|
||||
5
android/app/proguard-rules.pro
vendored
5
android/app/proguard-rules.pro
vendored
@@ -28,3 +28,8 @@
|
||||
# R8 crypts the source line numbers in all log messages.
|
||||
# https://github.com/organicmaps/organicmaps/issues/6559#issuecomment-1812039926
|
||||
-dontoptimize
|
||||
|
||||
# Keep classes for Android TraFF support
|
||||
-keep class app.organicmaps.sdk.traffxml.SourceImplV0_7 { *; }
|
||||
-keep class app.organicmaps.sdk.traffxml.SourceImplV0_8 { *; }
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
Paprasta ir patogi navigacija – Turiningesnės kelionės – Vystoma bendruomenės
|
||||
Paprasta ir patogi navigacija – Turiningos kelionės – Vystoma bendruomenės
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
Brezplačno in odprtokodno zemljevidno orodje, ki ga vodi skupnost, temelji na podatkih OpenStreetMap in je okrepljena s predanostjo transparentnosti, zasebnosti in nepridobitnosti. CoMaps je izpeljanka OrganicMaps, ta pa je izpeljanka Maps.ME.
|
||||
Brezplačno in odprtokodno zemljevidno orodje, ki ga vodi skupnost, temelji na podatkih OpenStreetMap in je okrepljena s predanostjo transparentnosti, zasebnosti in nedobičkonosnosti. CoMaps je izpeljanka OrganicMaps, ta pa je izpeljanka Maps.ME.
|
||||
|
||||
Preberite si o razlogih za ta projekt in njegovi usmerjenosti na <b><i>codeberg.org/comaps</i></b>.
|
||||
Preverite si o razlogih za ta projekt in njegovi usmerjenosti na <b><i>codeberg.org/comaps</i></b>.
|
||||
Pridružite se skupnosti in pomagajte narediti najboljše zemljevidno orodje
|
||||
• Uporabljajte orodje in širite glas o njem
|
||||
• Dajajte povratne informacije in poročajte o napakah
|
||||
• Posodabljajte podatke zemljevida v tem orodju ali na spletni strani OpenStreetMap
|
||||
|
||||
‣ <b>Osredotočeno na uporabo brez povezave</b>: Načrtujte in se usmerjajte na vašem potovanju v tujini vrez potrebe po mobilnih podatkih, iščite vmesne točke potovanja ko ste na daljšem pohodu ipd. Vse zmogljivosti orodja so zasnovane za delo brez povezave.
|
||||
‣ <b>Osredotočeno na uporabo brez povezave</b>: Načrtujte in se usmerjajte na vašem potovanju v tujini vrez potrebe po mobilnih podatkih, iščite vmesne točke potocanja ko ste na daljšem pohodu ipd. Vse zmogljivosti orodja so zasnovane za delo brez povezave.
|
||||
‣ <b>Spoštovanje zasebnosti</b>: orodje je zasnovano z mislijo na zasebnost – ne prepoznava oseb, ne sledi in ne zbira osebnih podatkov. Brez oglasov.
|
||||
‣ <b>Preprosto in dodelano</b>: nujne zmogljivosti, enostavne za uporabo, ki preprosto delujejo.
|
||||
‣ <b>Prihrani vašo baterijo in prostor.</b>: ne izčrpava vaše baterije kakor druga usmerjevalna orodja. Strnjeni zemljevidi prihranijo dragocen prostor na vašem telefonu.
|
||||
‣ <b>Brezplačno in ustvarjeno v skupnosti</b>: ljudje kot ste vi pomagajo ustvarjati to orodje, tako da dodajajo kraje na OpenStreetMap, preizkušajo in dajejo povratne informacije o zmogljivostih in prispevajo svoje razvijalske sposobnosti in sredstva.
|
||||
‣ <b>Odprto in transparentno odločanje in finance, nepridobitno in popolnoma odprtokodno.</b>
|
||||
‣ <b>Odprto in transparentno odločanje in finance, nedobičkonosno in popolnoma odprtokodno.</b>
|
||||
|
||||
<b>Glavne zmogljivosti</b>:
|
||||
• Prenosljivi podrobni zemljevidi s kraji, ki na Googlovih zemljevidih niso na voljo.
|
||||
• Prenosljivi podrobni zemljevidi s kraji, ki na Googlovoh zemljevidih niso na voljo.
|
||||
• Prikaz za dejavnosti na prostem s poudarjenimi pohodniškimi potmi, tabornimi prostori, vodnimi viri, vrhovi, plastnicami itd.
|
||||
• Pešpoti in kolesarke poti
|
||||
• Kraji zanimanja, npr. restavracije, bencinske črpalke, hoteli, trgovine, znamenitosti in mnogo več
|
||||
|
||||
@@ -1 +1 @@
|
||||
version: 2025.03.02-7-FDroid+25030207
|
||||
version: 2025.07.23-4-FDroid+25072304
|
||||
|
||||
@@ -1 +1 @@
|
||||
Paprasta ir patogi navigacija – Turiningesnės kelionės – Vystoma bendruomenės
|
||||
Paprasta ir patogi navigacija – Turiningos kelionės – Vystoma bendruomenės
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Usmerjajte se zasebno
|
||||
CoMaps - Usmerjajte zasebno
|
||||
|
||||
@@ -62,6 +62,21 @@
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="https" />
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.GET_CAPABILITIES"/>
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.POLL"/>
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.SUBSCRIBE"/>
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.SUBSCRIPTION_CHANGE"/>
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.UNSUBSCRIBE"/>
|
||||
</intent>
|
||||
</queries>
|
||||
|
||||
<supports-screens
|
||||
|
||||
@@ -12,6 +12,7 @@ public class LayersUtils
|
||||
availableLayers.add(Mode.OUTDOORS);
|
||||
availableLayers.add(Mode.ISOLINES);
|
||||
availableLayers.add(Mode.SUBWAY);
|
||||
availableLayers.add(Mode.TRAFFIC);
|
||||
return availableLayers;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,19 @@ package app.organicmaps.settings;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.DISABLE_BUTTON_CODE;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.preference.EditTextPreference;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.MultiSelectListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.TwoStatePreference;
|
||||
@@ -28,6 +35,7 @@ import app.organicmaps.sdk.routing.RoutingOptions;
|
||||
import app.organicmaps.sdk.search.SearchRecents;
|
||||
import app.organicmaps.sdk.settings.MapLanguageCode;
|
||||
import app.organicmaps.sdk.settings.UnitLocale;
|
||||
import app.organicmaps.sdk.traffxml.AndroidTransport;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.NetworkPolicy;
|
||||
import app.organicmaps.sdk.util.PowerManagment;
|
||||
@@ -35,11 +43,13 @@ import app.organicmaps.sdk.util.SharedPropertiesUtils;
|
||||
import app.organicmaps.sdk.util.log.LogsManager;
|
||||
import app.organicmaps.util.ThemeSwitcher;
|
||||
import app.organicmaps.util.Utils;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements LanguagesFragment.Listener
|
||||
{
|
||||
@@ -61,6 +71,10 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
initAutoDownloadPrefsCallbacks();
|
||||
initLargeFontSizePrefsCallbacks();
|
||||
initTransliterationPrefsCallbacks();
|
||||
initTrafficHttpEnabledPrefsCallbacks();
|
||||
initTrafficHttpUrlPrefsCallbacks();
|
||||
initTrafficAppsPrefs();
|
||||
initTrafficLegacyEnabledPrefsCallbacks();
|
||||
init3dModePrefsCallbacks();
|
||||
initPerspectivePrefsCallbacks();
|
||||
initAutoZoomPrefsCallbacks();
|
||||
@@ -136,6 +150,46 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
pref.setSummary(locale.getDisplayLanguage());
|
||||
}
|
||||
|
||||
private void updateTrafficHttpUrlSummary()
|
||||
{
|
||||
final Preference pref = getPreference(getString(R.string.pref_traffic_http_url));
|
||||
String summary = Config.getTrafficHttpUrl();
|
||||
if (summary.length() == 0)
|
||||
pref.setSummary(R.string.traffic_http_url_not_set);
|
||||
else
|
||||
pref.setSummary(summary);
|
||||
}
|
||||
|
||||
private void updateTrafficAppsSummary()
|
||||
{
|
||||
final MultiSelectListPreference pref = getPreference(getString(R.string.pref_traffic_apps));
|
||||
/*
|
||||
* If the preference is disabled, it has not been initialized. This is the case if no TraFF
|
||||
* apps were found. The code below would crash when trying to access the entries, and there
|
||||
* is no need to update the summary if the setting cannot be changed.
|
||||
*/
|
||||
if (!pref.isEnabled())
|
||||
return;
|
||||
String[] apps = Config.getTrafficApps();
|
||||
if (apps.length == 0)
|
||||
pref.setSummary(R.string.traffic_apps_none_selected);
|
||||
else
|
||||
{
|
||||
String summary = "";
|
||||
for (int i = 0; i < apps.length; i++)
|
||||
{
|
||||
if (i > 0)
|
||||
summary = summary + ", ";
|
||||
int index = pref.findIndexOfValue(apps[i]);
|
||||
if (i >= 0)
|
||||
summary = summary + pref.getEntries()[index];
|
||||
else
|
||||
summary = summary + apps[i];
|
||||
}
|
||||
pref.setSummary(summary);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateRoutingSettingsPrefsSummary()
|
||||
{
|
||||
final Preference pref = getPreference(getString(R.string.prefs_routing));
|
||||
@@ -163,6 +217,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
updateVoiceInstructionsPrefsSummary();
|
||||
updateRoutingSettingsPrefsSummary();
|
||||
updateMapLanguageCodeSummary();
|
||||
updateTrafficHttpUrlSummary();
|
||||
updateTrafficAppsSummary();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -224,6 +280,91 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
});
|
||||
}
|
||||
|
||||
private void initTrafficHttpEnabledPrefsCallbacks()
|
||||
{
|
||||
final Preference pref = getPreference(getString(R.string.pref_traffic_http_enabled));
|
||||
|
||||
((TwoStatePreference)pref).setChecked(Config.getTrafficHttpEnabled());
|
||||
pref.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
final boolean oldVal = Config.getTrafficHttpEnabled();
|
||||
final boolean newVal = (Boolean) newValue;
|
||||
if (oldVal != newVal)
|
||||
Config.setTrafficHttpEnabled(newVal);
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void initTrafficHttpUrlPrefsCallbacks()
|
||||
{
|
||||
final Preference pref = getPreference(getString(R.string.pref_traffic_http_url));
|
||||
|
||||
((EditTextPreference)pref).setText(Config.getTrafficHttpUrl());
|
||||
pref.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
final String oldVal = Config.getTrafficHttpUrl();
|
||||
final String newVal = (String) newValue;
|
||||
if (!oldVal.equals(newVal))
|
||||
Config.setTrafficHttpUrl(newVal);
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void initTrafficAppsPrefs()
|
||||
{
|
||||
final MultiSelectListPreference pref = getPreference(getString(R.string.pref_traffic_apps));
|
||||
|
||||
PackageManager pm = getContext().getPackageManager();
|
||||
List<ResolveInfo> receivers = pm.queryBroadcastReceivers(new Intent(AndroidTransport.ACTION_TRAFF_GET_CAPABILITIES), 0);
|
||||
|
||||
if (receivers == null || receivers.isEmpty())
|
||||
{
|
||||
pref.setSummary(R.string.traffic_apps_not_available);
|
||||
pref.setEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
pref.setEnabled(true);
|
||||
|
||||
List<String> entryList = new ArrayList<>(receivers.size());
|
||||
List<String> valueList = new ArrayList<>(receivers.size());
|
||||
|
||||
for (ResolveInfo receiver : receivers)
|
||||
{
|
||||
// friendly name
|
||||
entryList.add(receiver.loadLabel(pm).toString());
|
||||
// actual value (we just need the package name, broadcasts are sent to any receiver in the package)
|
||||
valueList.add(receiver.activityInfo.applicationInfo.packageName);
|
||||
}
|
||||
|
||||
pref.setEntries(entryList.toArray(new CharSequence[0]));
|
||||
pref.setEntryValues(valueList.toArray(new CharSequence[0]));
|
||||
|
||||
pref.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
// newValue is a Set<String>, each item is a package ID
|
||||
String[] apps = ((Set<String>)newValue).toArray(new String[0]);
|
||||
Config.setTrafficApps(apps);
|
||||
updateTrafficAppsSummary();
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void initTrafficLegacyEnabledPrefsCallbacks()
|
||||
{
|
||||
final Preference pref = getPreference(getString(R.string.pref_traffic_legacy_enabled));
|
||||
|
||||
((TwoStatePreference)pref).setChecked(Config.getTrafficLegacyEnabled());
|
||||
pref.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
final boolean oldVal = Config.getTrafficLegacyEnabled();
|
||||
final boolean newVal = (Boolean) newValue;
|
||||
if (oldVal != newVal)
|
||||
Config.setTrafficLegacyEnabled(newVal);
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void initUseMobileDataPrefsCallbacks()
|
||||
{
|
||||
final ListPreference mobilePref = getPreference(getString(R.string.pref_use_mobile_data));
|
||||
|
||||
@@ -90,7 +90,8 @@ public enum ThemeSwitcher
|
||||
{
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
|
||||
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_YES);
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
|
||||
else
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
|
||||
|
||||
if (RoutingController.get().isVehicleNavigation())
|
||||
style = MapStyle.VehicleDark;
|
||||
@@ -103,7 +104,8 @@ public enum ThemeSwitcher
|
||||
{
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
|
||||
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_NO);
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
|
||||
else
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
|
||||
|
||||
if (RoutingController.get().isVehicleNavigation())
|
||||
style = MapStyle.VehicleClear;
|
||||
|
||||
@@ -154,7 +154,6 @@ public class PlacePageView extends Fragment
|
||||
private MaterialTextView mTvLastChecked;
|
||||
private View mEditPlace;
|
||||
private View mAddPlace;
|
||||
private View mMapTooOld;
|
||||
private View mEditTopSpace;
|
||||
private ShapeableImageView mColorIcon;
|
||||
private MaterialTextView mTvCategory;
|
||||
@@ -319,7 +318,6 @@ public class PlacePageView extends Fragment
|
||||
mTvLastChecked = mFrame.findViewById(R.id.place_page_last_checked);
|
||||
mEditPlace = mFrame.findViewById(R.id.ll__place_editor);
|
||||
mAddPlace = mFrame.findViewById(R.id.ll__place_add);
|
||||
mMapTooOld = mFrame.findViewById(R.id.cv__map_too_old);
|
||||
mEditTopSpace = mFrame.findViewById(R.id.edit_top_space);
|
||||
latlon.setOnLongClickListener(this);
|
||||
address.setOnLongClickListener(this);
|
||||
@@ -686,73 +684,39 @@ public class PlacePageView extends Fragment
|
||||
|
||||
if (RoutingController.get().isNavigating() || RoutingController.get().isPlanning())
|
||||
{
|
||||
UiUtils.hide(mEditPlace, mAddPlace, mEditTopSpace, mMapTooOld);
|
||||
UiUtils.hide(mEditPlace, mAddPlace, mEditTopSpace);
|
||||
}
|
||||
else
|
||||
{
|
||||
UiUtils.showIf(Editor.nativeShouldShowEditPlace(), mEditPlace);
|
||||
UiUtils.showIf(Editor.nativeShouldShowAddPlace(), mAddPlace);
|
||||
UiUtils.hide(mMapTooOld);
|
||||
MaterialButton mTvEditPlace = mEditPlace.findViewById(R.id.mb__place_editor);
|
||||
MaterialButton mTvAddPlace = mAddPlace.findViewById(R.id.mb__place_add);
|
||||
|
||||
boolean shouldEnableEditPlace = Editor.nativeShouldEnableEditPlace();
|
||||
|
||||
if (shouldEnableEditPlace)
|
||||
{
|
||||
mTvEditPlace.setOnClickListener(this);
|
||||
mTvAddPlace.setOnClickListener(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
mTvEditPlace.setOnClickListener((v) -> {
|
||||
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
|
||||
});
|
||||
mTvAddPlace.setOnClickListener((v) -> {
|
||||
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
|
||||
});
|
||||
|
||||
String countryId = MapManager.nativeGetSelectedCountry();
|
||||
|
||||
if (countryId != null)
|
||||
{
|
||||
CountryItem map = CountryItem.fill(countryId);
|
||||
|
||||
if (map.status == CountryItem.STATUS_UPDATABLE || map.status == CountryItem.STATUS_DONE
|
||||
|| map.status == CountryItem.STATUS_FAILED)
|
||||
{
|
||||
UiUtils.show(mMapTooOld);
|
||||
|
||||
boolean canUpdateMap = map.status != CountryItem.STATUS_DONE;
|
||||
MaterialButton mTvUpdateTooOldMap = mMapTooOld.findViewById(R.id.mb__update_too_old_map);
|
||||
UiUtils.showIf(canUpdateMap, mTvUpdateTooOldMap);
|
||||
|
||||
MaterialTextView mapTooOldDescription = mMapTooOld.findViewById(R.id.tv__map_too_old_description);
|
||||
if (canUpdateMap)
|
||||
{
|
||||
mapTooOldDescription.setText(R.string.place_page_map_too_old_description);
|
||||
mTvUpdateTooOldMap.setOnClickListener((v) -> {
|
||||
MapManagerHelper.warn3gAndDownload(requireActivity(), map.id, null);
|
||||
UiUtils.hide(mMapTooOld);
|
||||
});
|
||||
}
|
||||
else
|
||||
mapTooOldDescription.setText(R.string.place_page_app_too_old_description);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final int editButtonColor =
|
||||
shouldEnableEditPlace
|
||||
mTvEditPlace.setOnClickListener(this);
|
||||
mTvAddPlace.setOnClickListener(this);
|
||||
mTvEditPlace.setEnabled(Editor.nativeShouldEnableEditPlace());
|
||||
mTvAddPlace.setEnabled(Editor.nativeShouldEnableAddPlace());
|
||||
final int editTextButtonColor =
|
||||
Editor.nativeShouldEnableEditPlace()
|
||||
? ContextCompat.getColor(
|
||||
getContext(),
|
||||
UiUtils.getStyledResourceId(getContext(), com.google.android.material.R.attr.colorSecondary))
|
||||
: ContextCompat.getColor(getContext(), R.color.button_accent_text_disabled);
|
||||
|
||||
mTvEditPlace.setTextColor(editButtonColor);
|
||||
mTvAddPlace.setTextColor(editButtonColor);
|
||||
mTvEditPlace.setStrokeColor(ColorStateList.valueOf(editButtonColor));
|
||||
mTvAddPlace.setStrokeColor(ColorStateList.valueOf(editButtonColor));
|
||||
final ColorStateList editStrokeButtonColor = new ColorStateList(
|
||||
new int[][]{
|
||||
new int[]{android.R.attr.state_enabled}, // enabled
|
||||
new int[]{-android.R.attr.state_enabled} // disabled
|
||||
},
|
||||
new int[]{
|
||||
ContextCompat.getColor(
|
||||
getContext(),
|
||||
UiUtils.getStyledResourceId(getContext(), com.google.android.material.R.attr.colorSecondary)),
|
||||
ContextCompat.getColor(getContext(), R.color.button_accent_text_disabled)
|
||||
});
|
||||
mTvEditPlace.setTextColor(editTextButtonColor);
|
||||
mTvAddPlace.setTextColor(editTextButtonColor);
|
||||
mTvEditPlace.setStrokeColor(editStrokeButtonColor);
|
||||
mTvAddPlace.setStrokeColor(editStrokeButtonColor);
|
||||
UiUtils.showIf(
|
||||
UiUtils.isVisible(mEditPlace) || UiUtils.isVisible(mAddPlace),
|
||||
mEditTopSpace);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:pathData="M19,13H5v-2h14v2z"
|
||||
android:pathData="M240,520q-17,0 -28.5,-11.5T200,480q0,-17 11.5,-28.5T240,440h480q17,0 28.5,11.5T760,480q0,17 -11.5,28.5T720,520L240,520Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"
|
||||
android:pathData="M440,520L240,520q-17,0 -28.5,-11.5T200,480q0,-17 11.5,-28.5T240,440h200v-200q0,-17 11.5,-28.5T480,200q17,0 28.5,11.5T520,240v200h200q17,0 28.5,11.5T760,480q0,17 -11.5,28.5T720,520L520,520v200q0,17 -11.5,28.5T480,760q-17,0 -28.5,-11.5T440,720v-200Z"
|
||||
android:fillColor="@android:color/white"/>
|
||||
</vector>
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="48dp"
|
||||
android:height="48dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960"
|
||||
android:tint="?colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M453,680L513,680L513,440L453,440L453,680ZM479.98,366Q494,366 503.5,356.8Q513,347.6 513,334Q513,319.55 503.52,309.78Q494.04,300 480.02,300Q466,300 456.5,309.78Q447,319.55 447,334Q447,347.6 456.48,356.8Q465.96,366 479.98,366ZM480.27,880Q397.53,880 324.77,848.5Q252,817 197.5,762.5Q143,708 111.5,635.16Q80,562.32 80,479.5Q80,396.68 111.5,323.84Q143,251 197.5,197Q252,143 324.84,111.5Q397.68,80 480.5,80Q563.32,80 636.16,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,479.73Q880,562.47 848.5,635.23Q817,708 763,762.32Q709,816.63 636,848.32Q563,880 480.27,880ZM480.5,820Q622,820 721,720.5Q820,621 820,479.5Q820,338 721.19,239Q622.38,140 480,140Q339,140 239.5,238.81Q140,337.62 140,480Q140,621 239.5,720.5Q339,820 480.5,820ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
|
||||
</vector>
|
||||
@@ -26,7 +26,7 @@
|
||||
app:tint="?colorSecondary"/>
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/head_message"
|
||||
style="@style/TextAppearance.Headline6"
|
||||
style="?fontHeadline6"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/margin_base"
|
||||
@@ -36,7 +36,7 @@
|
||||
android:text="@string/download_map_title" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/download_message"
|
||||
style="@style/TextAppearance.Body2"
|
||||
style="?fontBody2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/margin_base"
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text="@string/aa_connected_title"
|
||||
android:textAlignment="center"
|
||||
android:textAppearance="@style/TextAppearance.Headline4"
|
||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline4"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
@@ -36,7 +36,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/car_used_on_the_car_screen"
|
||||
android:textAlignment="center"
|
||||
android:textAppearance="@style/TextAppearance.Body1" />
|
||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
android:layout_marginStart="32dp"
|
||||
android:text="@string/aa_request_permission_activity_text"
|
||||
android:textAlignment="center"
|
||||
android:textAppearance="@style/TextAppearance.Headline4"
|
||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline4"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
android:layout_marginStart="@dimen/margin_base"
|
||||
android:maxLines="3"
|
||||
android:ellipsize="end"
|
||||
android:textAppearance="@style/TextAppearance.Headline6"
|
||||
android:textAppearance="?fontHeadline6"
|
||||
tools:text="Title" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/margin_base"
|
||||
android:text="@string/download_country_ask"
|
||||
android:textAppearance="@style/TextAppearance.Body2"
|
||||
android:textAppearance="?fontBody2"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"/>
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
android:textAppearance="@style/MwmTextAppearance.Title" />
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/et__input_layout"
|
||||
style="?fontBody1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:hintEnabled="false">
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
android:layout_marginTop="@dimen/margin_base">
|
||||
|
||||
<RadioButton
|
||||
style="@style/TextAppearance.Subtitle1"
|
||||
style="?fontSubtitle1"
|
||||
android:id="@+id/sort_by_default"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -37,7 +37,7 @@
|
||||
app:buttonTint="@null"/>
|
||||
|
||||
<RadioButton
|
||||
style="@style/TextAppearance.Subtitle1"
|
||||
style="?fontSubtitle1"
|
||||
android:id="@+id/sort_by_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -47,7 +47,7 @@
|
||||
app:buttonTint="@null"/>
|
||||
|
||||
<RadioButton
|
||||
style="@style/TextAppearance.Subtitle1"
|
||||
style="?fontSubtitle1"
|
||||
android:id="@+id/sort_by_type"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -57,7 +57,7 @@
|
||||
app:buttonTint="@null"/>
|
||||
|
||||
<RadioButton
|
||||
style="@style/TextAppearance.Subtitle1"
|
||||
style="?fontSubtitle1"
|
||||
android:id="@+id/sort_by_distance"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -67,7 +67,7 @@
|
||||
app:buttonTint="@null"/>
|
||||
|
||||
<RadioButton
|
||||
style="@style/TextAppearance.Subtitle1"
|
||||
style="?fontSubtitle1"
|
||||
android:id="@+id/sort_by_time"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
android:orientation="vertical">
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/edit_bookmark_name_input"
|
||||
style="?fontBody1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/name"
|
||||
@@ -87,6 +88,7 @@
|
||||
tools:src="@drawable/ic_bookmark_none" />
|
||||
</RelativeLayout>
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
style="?fontBody1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_half"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
android:layout_marginEnd="@dimen/margin_base"
|
||||
android:paddingTop="@dimen/margin_half"
|
||||
android:paddingBottom="@dimen/margin_base"
|
||||
android:textAppearance="@style/TextAppearance.Headline6"
|
||||
android:textAppearance="?fontHeadline6"
|
||||
tools:text="Xindian Shitoushan Trail" />
|
||||
<include
|
||||
layout="@layout/item_divider"
|
||||
|
||||
@@ -402,13 +402,11 @@
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/margin_half"
|
||||
android:fontFamily="@string/robotoMedium"
|
||||
android:text="@string/editor_other_info"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body3"/>
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/custom_input"
|
||||
android:layout_marginBottom="@dimen/margin_quarter"
|
||||
style="@style/MwmWidget.Editor.CustomTextInput"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="74dp"
|
||||
@@ -418,7 +416,6 @@
|
||||
android:id="@+id/input"
|
||||
style="@style/MwmWidget.Editor.FieldLayout.EditText"
|
||||
android:inputType="textMultiLine"
|
||||
android:gravity="top"
|
||||
android:hint="@string/editor_note_hint"/>
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
android:layout_marginStart="@dimen/margin_base"
|
||||
android:layout_marginTop="@dimen/margin_base"
|
||||
android:text="@string/layers_title"
|
||||
android:textAppearance="@style/TextAppearance.Headline6"
|
||||
android:textAppearance="?fontHeadline6"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<com.google.android.material.button.MaterialButton
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
android:ellipsize="middle"
|
||||
android:singleLine="true"
|
||||
android:textAlignment="viewStart"
|
||||
android:textAppearance="@style/TextAppearance.Body1"
|
||||
android:textAppearance="?fontBody1"
|
||||
tools:text="Bookmark name looooooooooooooooooongasdasdasd" />
|
||||
<LinearLayout
|
||||
android:id="@+id/bottom_line_container"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
android:layout_marginEnd="@dimen/bookmark_collection_item_end_margin"
|
||||
android:ellipsize="middle"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.Body1"
|
||||
android:textAppearance="?fontBody1"
|
||||
tools:text="Bookmark name looooooooooooooooooongasdasdasd" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/size"
|
||||
@@ -37,7 +37,7 @@
|
||||
android:ellipsize="end"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
style="@style/TextAppearance.Body2"
|
||||
style="?fontBody2"
|
||||
tools:text="42000000" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
android:paddingBottom="@dimen/margin_half_plus">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/text_message"
|
||||
style="@style/TextAppearance.Headline6"
|
||||
style="?fontHeadline6"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentStart="true"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/text"
|
||||
style="@style/TextAppearance.Headline6"
|
||||
style="?fontHeadline6"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?windowBackgroundForced"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
android:gravity="center"
|
||||
android:maxWidth="500dp"
|
||||
android:text="@string/editor_category_unsuitable_title"
|
||||
android:textAppearance="@style/TextAppearance.Headline6"
|
||||
android:textAppearance="@style/TextAppearance.MdcTypographyStyles.Headline6"
|
||||
android:textStyle="bold" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/editor_category_unsuitable_text"
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
android:orientation="horizontal">
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/input_layout"
|
||||
style="?fontBody1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
|
||||
@@ -147,12 +147,12 @@
|
||||
<LinearLayout
|
||||
android:id="@+id/allday"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="@dimen/editor_height_allday"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:background="?clickableBackground"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:padding="@dimen/margin_half">
|
||||
android:padding="@dimen/margin_half_plus">
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:layout_width="0dp"
|
||||
@@ -164,8 +164,7 @@
|
||||
<com.google.android.material.materialswitch.MaterialSwitch
|
||||
android:id="@+id/sw__allday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_quarter"/>
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
android:layout_marginTop="@dimen/margin_base"
|
||||
android:layout_marginEnd="@dimen/bookmark_collection_item_end_margin"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.Body1"
|
||||
android:textAppearance="?fontBody1"
|
||||
tools:text="@string/tracks_title" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/tv__bookmark_distance"
|
||||
@@ -39,7 +39,7 @@
|
||||
android:layout_marginBottom="@dimen/margin_half_plus"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textAppearance="@style/TextAppearance.Body2"
|
||||
android:textAppearance="?fontBody2"
|
||||
tools:text="@string/by_distance" />
|
||||
</LinearLayout>
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
style="@style/MwmWidget.M3.FAB.MapButton.Zoom"
|
||||
android:tint="?iconTint"
|
||||
app:srcCompat="@drawable/ic_plus"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearance.MapButton.Zoom.Minus"
|
||||
android:layout_marginBottom="@dimen/margin_eighth"
|
||||
app:shapeAppearance="@style/Widget.MaterialComponents.FloatingActionButton"
|
||||
android:layout_marginBottom="@dimen/margin_half"
|
||||
android:contentDescription="@string/zoom_in"/>
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/nav_zoom_out"
|
||||
style="@style/MwmWidget.M3.FAB.MapButton.Zoom"
|
||||
android:tint="?iconTint"
|
||||
app:srcCompat="@drawable/ic_minus"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearance.MapButton.Zoom.Plus"
|
||||
app:shapeAppearance="@style/Widget.MaterialComponents.FloatingActionButton"
|
||||
android:contentDescription="@string/zoom_out"/>
|
||||
</LinearLayout>
|
||||
@@ -82,15 +82,13 @@
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/place_page_last_checked"
|
||||
style="@style/TextAppearance.Caption"
|
||||
style="?fontCaption"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/margin_half"
|
||||
android:paddingHorizontal="@dimen/margin_base"
|
||||
tools:text="Existence confirmed 1 month ago"/>
|
||||
|
||||
<include android:visibility="gone" layout="@layout/place_page_map_too_old"/>
|
||||
|
||||
<include android:visibility="gone" layout="@layout/place_page_editor"/>
|
||||
|
||||
<include android:visibility="gone" layout="@layout/place_page_add"/>
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/cv__map_too_old"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="@dimen/margin_base"
|
||||
android:layout_marginTop="@dimen/margin_half"
|
||||
app:strokeWidth="1dp"
|
||||
app:strokeColor="@color/base_accent"
|
||||
app:cardBackgroundColor="@color/bg_cards">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:padding="@dimen/margin_base"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginEnd="@dimen/margin_base"
|
||||
app:srcCompat="@drawable/info_icon"
|
||||
app:tint="@color/base_accent" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/margin_quarter"
|
||||
android:text="@string/place_page_map_too_old_title"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body2"
|
||||
android:textStyle="bold"
|
||||
android:textColor="?android:textColorPrimary" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/tv__map_too_old_description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/margin_quarter"
|
||||
android:text="@string/place_page_map_too_old_description"
|
||||
android:fontFamily="@string/robotoRegular"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body3"
|
||||
android:textColor="?android:textColorPrimary" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/mb__update_too_old_map"
|
||||
style="@style/MwmWidget.M3.Button.Primary"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:text="@string/place_page_update_too_old_map"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/oh_check_date"
|
||||
style="@style/TextAppearance.Caption"
|
||||
style="?fontCaption"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
|
||||
@@ -912,12 +912,4 @@
|
||||
<string name="charge_socket_type1">Tipus 1</string>
|
||||
<string name="charge_socket_nacs">NACS</string>
|
||||
<string name="charge_socket_chademo">CHAdeMO</string>
|
||||
<string name="place_page_too_old_to_edit">L\'edició de dades d\'OpenStreetMap està deshabilitada perquè les dades del mapa són massa antigues.</string>
|
||||
<string name="place_page_map_too_old_title">Dades del mapa desactualitzades</string>
|
||||
<string name="place_page_map_too_old_description">Les teves dades de mapa son molt antigues, per favor actualitza el mapa.</string>
|
||||
<string name="place_page_app_too_old_description">Les teues dades del mapa son molt antigues, per favor actualitza l\'app de CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Actualitzar regió del mapa</string>
|
||||
<string name="prefs_speed_cameras_information">Les advertències de càmeres radar estan deshabilitades als països on estan prohibides per llei.</string>
|
||||
<string name="navigation_start_tts_message">"Iniciant Navegació, idioma d\'instruccions de veu: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instruccions de veu desactivades: motor TTS no disponible</string>
|
||||
</resources>
|
||||
|
||||
@@ -907,10 +907,4 @@
|
||||
<string name="charge_socket_schuko">Domovní EU</string>
|
||||
<string name="prefs_speed_cameras_information">Upozornění na radary jsou vypnuty v zemích, kde je tato funkcionalita zakázána místními zákony.</string>
|
||||
<string name="navigation_start_tts_message">"Spouštím navigaci, jazyk hlasových instrukcí: "</string>
|
||||
<string name="place_page_map_too_old_title">Mapová data jsou zastaralá</string>
|
||||
<string name="place_page_map_too_old_description">Vaše mapová data jsou velmi stará, doporučujeme je aktualizovat.</string>
|
||||
<string name="place_page_app_too_old_description">Vaše aktuální mapová data jsou velmi stará, aktualizujte prosím aplikaci CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Aktualizovat oblast mapy</string>
|
||||
<string name="place_page_too_old_to_edit">Úprava OpenStreetMap je zakázaná, protože mapová data jsou příliš stará.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Hlasové pokyny vypnuty: služba TTS není dostupná</string>
|
||||
</resources>
|
||||
|
||||
@@ -896,10 +896,4 @@
|
||||
<string name="charge_socket_schuko">Europæisk</string>
|
||||
<string name="prefs_speed_cameras_information">Advarsler om hastighedskameraer er deaktiveret i lande, hvor advarsler er forbudt i henhold til lokal lovgivning.</string>
|
||||
<string name="navigation_start_tts_message">"Starter navigation, sprog for stemmeinstruktioner: "</string>
|
||||
<string name="place_page_map_too_old_title">Kortdata forældet</string>
|
||||
<string name="place_page_map_too_old_description">Dine nuværende kortdata er meget gamle. Opdater kortet.</string>
|
||||
<string name="place_page_app_too_old_description">Dine nuværende kortdata er meget gamle. Opdater CoMaps-appen.</string>
|
||||
<string name="place_page_update_too_old_map">Opdater kortregion</string>
|
||||
<string name="place_page_too_old_to_edit">Redigering af OpenStreetMap er deaktiveret, fordi kortdataene er for gamle.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Stemmeinstruktioner deaktiveret: TTS-motor ikke tilgængelig</string>
|
||||
</resources>
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<!-- "Add new bookmark list" dialog title -->
|
||||
<string name="add_new_set">Agregar una lista nueva</string>
|
||||
<!-- Add Bookmark list dialog - hint when the list name is empty -->
|
||||
<string name="bookmark_set_name">Nombre de la lista de marcadores</string>
|
||||
<string name="bookmark_set_name">Nombre del grupo de marcadores</string>
|
||||
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
|
||||
<string name="bookmarks">Marcadores</string>
|
||||
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
|
||||
@@ -246,7 +246,7 @@
|
||||
<!-- Button in the main menu -->
|
||||
<string name="donate">Donar</string>
|
||||
<!-- Button in the main Help dialog -->
|
||||
<string name="how_to_support_us">Apoya y mejora el proyecto CoMaps</string>
|
||||
<string name="how_to_support_us">Apoya el proyecto</string>
|
||||
<!-- Button in the main Help dialog -->
|
||||
<string name="copyright">Derechos de autor</string>
|
||||
<!-- Text in menu + Button in the main Help dialog -->
|
||||
@@ -914,12 +914,4 @@
|
||||
<string name="editor_mark_business_vacant_description">Usa esto si el negocio ya no existe y el local ha quedado vacío para un nuevo inquilino.</string>
|
||||
<string name="editor_submit">Enviar</string>
|
||||
<string name="power_management">Gestión de energía</string>
|
||||
<string name="place_page_map_too_old_title">Datos del mapa anticuados</string>
|
||||
<string name="place_page_map_too_old_description">Tus datos del mapa están muy anticuados, por favor actualiza el mapa.</string>
|
||||
<string name="place_page_app_too_old_description">Tus datos del mapa están muy anticuados, por favor actualiza la aplicación CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Actualizar mapa de la región</string>
|
||||
<string name="place_page_too_old_to_edit">La edición de OpenStreetMap está deshabilitada porque los datos del mapa están muy anticuados.</string>
|
||||
<string name="prefs_speed_cameras_information">Las advertencias de radares de velocidad están deshabilitadas en países donde las alertas están prohibidas por ley.</string>
|
||||
<string name="navigation_start_tts_message">"Iniciando Navegación, idioma de las instrucciones por voz: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instrucciones por voz deshabilitadas: Motor de TTS no disponible</string>
|
||||
</resources>
|
||||
|
||||
@@ -905,10 +905,4 @@
|
||||
<string name="charge_socket_schuko">EU-sisene</string>
|
||||
<string name="prefs_speed_cameras_information">Kiiruskaamerate teavitused on nendes riikides lülitatud välja, kus seda keelab kohalik seadusandlus.</string>
|
||||
<string name="navigation_start_tts_message">"Alustan tee juhatamist, hääljuhiste keel: "</string>
|
||||
<string name="place_page_map_too_old_title">Kaardiandmed on aegunud</string>
|
||||
<string name="place_page_map_too_old_description">Sinu kasutatavad kaardiandmed on väga vanad. Palun uuenda andmeid.</string>
|
||||
<string name="place_page_app_too_old_description">Sinu kasutatavad kaardiandmed on väga vanad. Palun uuenda CoMapsi rakendust.</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="navigation_start_tts_disabled_message">Hääljuhiste kasutamine on lülitatud välja: kõnesünteesimootorit pole saadaval</string>
|
||||
</resources>
|
||||
|
||||
@@ -25,44 +25,44 @@
|
||||
<!-- Location services are disabled by user alert - message -->
|
||||
<string name="location_is_disabled_long_text">هماینک، شما همهی سامانههای گیاگیابی را برای این دستگاه یا این برنامه ناکارا کردهاید. خواهشمند است آن را در پیکربندیها کارا کنید.</string>
|
||||
<!-- A dialog title, that warns a user that Precise Location is disabled and suggests to turn it on -->
|
||||
<string name="limited_accuracy">نزومان ویمندیگ</string>
|
||||
<string name="limited_accuracy">دقت محدود</string>
|
||||
<!-- A dialog text, that warns a user that Precise Location is disabled and suggests to turn it on -->
|
||||
<string name="precise_location_is_disabled_long_text">برای آسودهدل بودن از نزومانی ناوبری، گیاگیابی نزومان را در پیکربندی کارا کنید</string>
|
||||
<string name="precise_location_is_disabled_long_text">برای اطمینان از دقیق ناوبری ، موقعیت مکانی دقیق را در تنظیمات فعال کنید</string>
|
||||
<!-- View and button titles for accessibility -->
|
||||
<string name="zoom_to_country">نمایش بر روی نقشه</string>
|
||||
<!-- Message to display at the center of the screen when the country download has failed -->
|
||||
<string name="country_status_download_failed">بارگیری ناکام بود</string>
|
||||
<string name="country_status_download_failed">دانلود با شکست مواجه شد</string>
|
||||
<!-- Button text for the button under the country_status_download_failed message -->
|
||||
<string name="try_again">تلاش دوباره</string>
|
||||
<string name="about_menu_title">درباره CoMaps</string>
|
||||
<string name="try_again">تلاش مجدد</string>
|
||||
<string name="about_menu_title">CoMaps دربارهی</string>
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_proposition_1">• بکارگیری آسان اود پیراسته</string>
|
||||
<string name="about_proposition_1">• آسان برای استفاده و جلا</string>
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_proposition_2">• حریم خصوصی متمرکز اود بیآگهی</string>
|
||||
<string name="about_proposition_2">• حریم خصوصی متمرکز و بدون تبلیغات</string>
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_proposition_3">• آفلاین، چابک و جمع و جور</string>
|
||||
<string name="about_proposition_3">• آفلاین، سریع و جمع و جور</string>
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_developed_by_enthusiasts">منبع کاملا باز، نه برای سود، تصمیم گیری شفاف و امور مالی شفاف.</string>
|
||||
<!-- The button that opens system location settings -->
|
||||
<string name="location_settings">پیکربندیهای گیاگ</string>
|
||||
<string name="location_settings">تنظیمات مکان</string>
|
||||
<string name="close">بستن</string>
|
||||
<string name="unsupported_phone">متأسفانه دستگاه شما از آن پشتیبانی نمیکندبرنامه برای اجرا به OpenGL نیازمند است.</string>
|
||||
<string name="download">بارگیری</string>
|
||||
<string name="download">دانلود</string>
|
||||
<!-- Used in DownloadResources startup screen -->
|
||||
<string name="not_enough_free_space_on_sdcard">لطفا مقداری از فضای ذخیرهسازی را آزاد نمایید</string>
|
||||
<string name="download_resources">قبل از استفاده از اپلیکیشن, اجازه دهید تا ما نقشه جهانی را بر روی موبایل شما دانلود کنیم. \nمقدار %s از حافظه شما اشغال می شود.</string>
|
||||
<string name="download_resources_continue">برو به نقشه</string>
|
||||
<string name="downloading_country_can_proceed">بارگیری میشود %1$s (%2$s). شما اکنون میتوانید\nبه نقشه بروید.</string>
|
||||
<string name="download_country_ask">بارگیری %1$s؟ (%2$s)</string>
|
||||
<string name="downloading_country_can_proceed">درحال دانلود %1$s (%2$s). شما اکنون می توانید \nبه نقشه بروید.</string>
|
||||
<string name="download_country_ask">دانلود %1$s؟ (%2$s)</string>
|
||||
<string name="update_country_ask">بروزرسانی %1$s؟ (%2$s)</string>
|
||||
<!-- REMOVE THIS STRING AFTER REFACTORING -->
|
||||
<string name="pause">درنگ</string>
|
||||
<!-- REMOVE THIS STRING AFTER REFACTORING -->
|
||||
<string name="continue_button">ادامه</string>
|
||||
<!-- Show popup notification on top of the map when country download has failed. -->
|
||||
<string name="download_country_failed">%s بارگیری ناکام بود</string>
|
||||
<string name="download_country_failed">%s دانلود با شکست مواجه شد</string>
|
||||
<!-- "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. -->
|
||||
<string name="bookmarks">نشانهها</string>
|
||||
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
|
||||
@@ -778,7 +778,7 @@
|
||||
<string name="panoramax">تصویر Panoramax</string>
|
||||
<string name="app_site_url">https://comaps.app</string>
|
||||
<string name="saved">ذخیره شد</string>
|
||||
<string name="about_headline">پروژهای باز نیرو گرفته از انجمن</string>
|
||||
<string name="about_headline">رایگان برای همه، ساخته شده با عشق</string>
|
||||
<string name="pedestrian">پیاده</string>
|
||||
<string name="bicycle">دوچرخه</string>
|
||||
<string name="backup_interval_every_week">هفتگی</string>
|
||||
|
||||
@@ -524,7 +524,7 @@
|
||||
<string name="editor_share_to_all_dialog_title">Haluatko lähettää sen kaikille käyttäjille?</string>
|
||||
<!-- Dialog before publishing the modifications to the public map. -->
|
||||
<string name="editor_share_to_all_dialog_message_1">Varmista, ettet syöttänyt henkilökohtaisia tietojasi.</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">OpenStreetMap-muokkaajat tarkistavat muutokset ja ottavat sinuun yhteyttä, jos heillä on kysyttävää.</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">OpenStreetMap-muokkaimet tarkistavat muutokset ja ottavat sinuun yhteyttä, jos niillä on kysyttävää</string>
|
||||
<string name="navigation_stop_button">Lopeta</string>
|
||||
<!-- Shown as toast when starting the recent track recording -->
|
||||
<string name="track_recording">Reitin kirjaaminen</string>
|
||||
@@ -903,12 +903,4 @@
|
||||
<string name="editor_submit">Lähetä</string>
|
||||
<string name="list_description_empty">Muokkaa listaa lisätäksesi kuvauksen</string>
|
||||
<string name="editor_business_vacant_button">Liike on tyhjillään</string>
|
||||
<string name="place_page_map_too_old_title">Karttatiedot vanhentuneet</string>
|
||||
<string name="place_page_map_too_old_description">Nykyinen karttadata on hyvin vanhaa, päivitä kartta.</string>
|
||||
<string name="place_page_app_too_old_description">Nykyinen karttadata on hyvin vanhaa, päivitä CoMaps-sovellus.</string>
|
||||
<string name="place_page_update_too_old_map">Päivitä kartta-alue</string>
|
||||
<string name="place_page_too_old_to_edit">OpenStreetMap-muokkaus on poistettu käytöstä, koska karttadata on liian vanhaa.</string>
|
||||
<string name="prefs_speed_cameras_information">Nopeuskameravaroitukset on poistettu käytöstä niissä maissa, missä varoitukset on kielletty lain nojalla.</string>
|
||||
<string name="power_management">Virranhallinta</string>
|
||||
<string name="navigation_start_tts_message">"Käynnistetään navigointi, ääniohjeistuksen kieli: "</string>
|
||||
</resources>
|
||||
|
||||
@@ -897,7 +897,7 @@
|
||||
<string name="editor_place_doesnt_exist_description">Décrivez le lieu afin de signaler l\'erreur à la communauté OpenStreetMap</string>
|
||||
<string name="offline_explanation_text">Une carte doit être téléchargée pour visualiser et vous déplacer dans une zone.\nTéléchargez les cartes des zones que vous souhaitez visiter.</string>
|
||||
<string name="list_description_empty">Modifier la liste pour ajouter une description</string>
|
||||
<string name="avoid_paved">Éviter les routes pavées</string>
|
||||
<string name="avoid_paved">Éviter les routes goudronnées</string>
|
||||
<string name="opens_at">Ouvre à %s</string>
|
||||
<string name="closes_at">Ferme à %s</string>
|
||||
<string name="opens_day_at">Ouverture le %1$s à %2$s</string>
|
||||
@@ -913,12 +913,4 @@
|
||||
<string name="editor_submit">Soumettre</string>
|
||||
<string name="power_management">Gestion de l\'énergie</string>
|
||||
<string name="charge_socket_schuko">Europe</string>
|
||||
<string name="place_page_map_too_old_title">Carte obsolète</string>
|
||||
<string name="place_page_map_too_old_description">Les données de la carte actuelle sont anciennes, pensez à les mettre à jour.</string>
|
||||
<string name="place_page_update_too_old_map">Mettre à jour la carte</string>
|
||||
<string name="place_page_too_old_to_edit">Les modifications OpenStreetMap sont désactivées car les données de la carte sont trop anciennes.</string>
|
||||
<string name="place_page_app_too_old_description">Vos données cartographiques actuelles sont très anciennes, veuillez mettre à jour l\'application CoMaps.</string>
|
||||
<string name="prefs_speed_cameras_information">Les avertissements relatifs aux radars de vitesse sont désactivés dans les pays où les alertes sont interdites par la législation locale.</string>
|
||||
<string name="navigation_start_tts_message">"Navigation de démarrage, langue des instructions vocales : "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instructions vocales désactivées : moteur de synthèse vocale non disponible</string>
|
||||
</resources>
|
||||
|
||||
@@ -261,13 +261,4 @@
|
||||
<string name="dialog_routing_system_error">Sistemska greška</string>
|
||||
<string name="dialog_routing_application_error">Nije moguće napraviti rutu zbog greške u aplikaciji</string>
|
||||
<string name="dialog_routing_try_again">Pokušajte ponovno</string>
|
||||
<string name="search_not_found_query">Preuzmite regiju u kojoj pretražujete ili pokušajte dodati naziv obližnjeg grada/sela.</string>
|
||||
<string name="search_history_text">Pogledajte svoja nedavna pretraživanja</string>
|
||||
<string name="read_in_wikipedia">Wikipedija</string>
|
||||
<string name="p2p_your_location">Vaša lokacija</string>
|
||||
<string name="p2p_only_from_current">Navigacija je dostupna samo od vaše trenutne lokacije</string>
|
||||
<string name="p2p_reroute_from_current">Želite li isplanirati rutu od vaše trenutne lokacije?</string>
|
||||
<string name="editor_time_add">Dodaj Raspored</string>
|
||||
<string name="editor_time_delete">Izbriši Raspored</string>
|
||||
<string name="editor_time_allday">Cijeli dan (24 sata)</string>
|
||||
</resources>
|
||||
|
||||
@@ -898,12 +898,4 @@
|
||||
<string name="avoid_paved">Evita le strade asfaltate</string>
|
||||
<string name="charge_socket_schuko">Domestico EU</string>
|
||||
<string name="power_management">Risparmio energetico</string>
|
||||
<string name="place_page_too_old_to_edit">La modifica di OpenStreetMap è disabilitata perché le mappe sono troppo vecchie.</string>
|
||||
<string name="place_page_update_too_old_map">Aggiorna questa mappa</string>
|
||||
<string name="place_page_app_too_old_description">Le mappe correnti sono molto vecchie, si suggerisce di aggiornare CoMaps.</string>
|
||||
<string name="place_page_map_too_old_description">La mappa corrente è molto vecchia, si suggerisce di aggiornarla.</string>
|
||||
<string name="place_page_map_too_old_title">Mappa obsoleta</string>
|
||||
<string name="navigation_start_tts_disabled_message">Istruzioni vocali disabilitate: TTS non disponibile</string>
|
||||
<string name="prefs_speed_cameras_information">Gli avvisi di Autovelox sono disabilitati dove proibito dalla legge locale.</string>
|
||||
<string name="navigation_start_tts_message">"Inizio Navigazione, lingua per istruzioni vocali: "</string>
|
||||
</resources>
|
||||
|
||||
@@ -371,6 +371,4 @@
|
||||
<string name="error_value_must_be_positive">Res an niver positiv</string>
|
||||
<string name="error_invalid_number">Niver anewn</string>
|
||||
<string name="offline_explanation_title">Mappys Dhywarlinen</string>
|
||||
<string name="category_shopping">Gwerthjiow</string>
|
||||
<string name="edit">Golegi</string>
|
||||
</resources>
|
||||
|
||||
@@ -845,10 +845,4 @@
|
||||
<string name="closed_now">Šobrīd slēgts</string>
|
||||
<string name="avoid_paved">Izvairīties no ceļiem ar cietu mākslīgo segumu</string>
|
||||
<string name="editor_submit">Iesniegt</string>
|
||||
<string name="place_page_map_too_old_title">Novecojuši kartes dati</string>
|
||||
<string name="place_page_map_too_old_description">Pašreizējie kartes dati ir ļoti veci, lūgums atjaunināt karti.</string>
|
||||
<string name="place_page_app_too_old_description">Pašreizējie kartes dati ir ļoti veci, lūgums atjaunināt CoMaps lietotni.</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="navigation_start_tts_disabled_message">Balss norādes atspējotas: nav pieejams teksta pārveidošanas runā dzinējs</string>
|
||||
</resources>
|
||||
|
||||
@@ -899,11 +899,4 @@
|
||||
<string name="navigation_start_tts_disabled_message">Taleveiledninger deaktivert: TTS-motor ikke tilgjengelig</string>
|
||||
<string name="navigation_start_tts_message">"Starter navigering, taleveiledningsspråk: "</string>
|
||||
<string name="prefs_speed_cameras_information">Fotoboksvarsler er deaktivert i land hvor varsler er forbudt i henhold til lokal lovgivning.</string>
|
||||
<string name="place_page_map_too_old_title">Kartdata utdatert</string>
|
||||
<string name="place_page_map_too_old_description">Gjeldende kartdata er gamle, oppdater kartet.</string>
|
||||
<string name="place_page_app_too_old_description">Gjeldende kartdata er gamle, oppdater CoMaps-appen.</string>
|
||||
<string name="place_page_update_too_old_map">Oppdater kartregion</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_toast">Notatet vil bli sendt til OpenStreetMap</string>
|
||||
</resources>
|
||||
|
||||
@@ -88,19 +88,19 @@
|
||||
<item name="android:textAppearanceSmall">@style/TextAppearance.Small</item>
|
||||
<item name="android:textAppearanceMedium">@style/TextAppearance.Medium</item>
|
||||
<item name="android:textAppearanceLarge">@style/TextAppearance.Large</item>
|
||||
<item name="fontHeadline1">@style/TextAppearance.Headline1</item>
|
||||
<item name="fontHeadline2">@style/TextAppearance.Headline2</item>
|
||||
<item name="fontHeadline3">@style/TextAppearance.Headline3</item>
|
||||
<item name="fontHeadline4">@style/TextAppearance.Headline4</item>
|
||||
<item name="fontHeadline1">@style/TextAppearance.MdcTypographyStyles.Headline1</item>
|
||||
<item name="fontHeadline2">@style/TextAppearance.MdcTypographyStyles.Headline2</item>
|
||||
<item name="fontHeadline3">@style/TextAppearance.MdcTypographyStyles.Headline3</item>
|
||||
<item name="fontHeadline4">@style/TextAppearance.MdcTypographyStyles.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="fontHeadline6">@style/TextAppearance.MdcTypographyStyles.Headline6</item>
|
||||
<item name="fontSubtitle1">@style/TextAppearance.MdcTypographyStyles.Subtitle1</item>
|
||||
<item name="fontSubtitle2">@style/TextAppearance.MdcTypographyStyles.Subtitle2</item>
|
||||
<item name="fontBody1">@style/TextAppearance.MdcTypographyStyles.Body1</item>
|
||||
<item name="fontBody2">@style/TextAppearance.MdcTypographyStyles.Body2</item>
|
||||
<item name="fontButton">@style/TextAppearance.MdcTypographyStyles.Button</item>
|
||||
<item name="fontCaption">@style/TextAppearance.MdcTypographyStyles.Caption</item>
|
||||
<item name="fontOverline">@style/TextAppearance.MdcTypographyStyles.Overline</item>
|
||||
<item name="drivingOptionsViewBg">@color/bg_primary_dark</item>
|
||||
<item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item>
|
||||
<item name="elevationProfilePropIconTint">@color/white_secondary</item>
|
||||
|
||||
@@ -910,9 +910,4 @@
|
||||
<string name="navigation_start_tts_message">"Navigatie starten, taal voor steminstructie: "</string>
|
||||
<string name="prefs_speed_cameras_information">Waarschuwingen voor flitsers zijn uitgeschakeld in landen waar deze wettelijk zijn verboden.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Spraakinstructies uitgeschakeld: TTS-engine niet beschikbaar</string>
|
||||
<string name="place_page_map_too_old_title">Kaartgegevens verouderd</string>
|
||||
<string name="place_page_map_too_old_description">Uw huidige kaartgegevens zijn erg oud. Werk de kaart bij.</string>
|
||||
<string name="place_page_app_too_old_description">Uw huidige kaartgegevens zijn erg oud. Update de CoMaps-app.</string>
|
||||
<string name="place_page_update_too_old_map">Kaart regio bijwerken</string>
|
||||
<string name="place_page_too_old_to_edit">Het bewerken van OpenStreetMap is uitgeschakeld omdat de kaartgegevens te oud zijn.</string>
|
||||
</resources>
|
||||
|
||||
@@ -885,12 +885,4 @@
|
||||
<string name="editor_submit">Enviar</string>
|
||||
<string name="power_management">Gerenciamento de energia</string>
|
||||
<string name="charge_socket_schuko">Doméstica UE</string>
|
||||
<string name="place_page_map_too_old_title">Dados do mapa desatualizados</string>
|
||||
<string name="place_page_map_too_old_description">Os seus dados do mapa atuais são muito antigos, por favor atualize o mapa.</string>
|
||||
<string name="place_page_app_too_old_description">Seus dados do mapa atuais são muito antigos, por favor atualize o aplicativo CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Atualizar região do mapa</string>
|
||||
<string name="place_page_too_old_to_edit">A edição do OpenStreetMap está desativada porque os dados do mapa são antigos demais.</string>
|
||||
<string name="prefs_speed_cameras_information">Alertas de radar fotográfico de velocidade estão desativados em países onde os alertas são proibidos pelas leis locais.</string>
|
||||
<string name="navigation_start_tts_message">"Iniciando navegação, idioma da instrução por voz: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instrução por voz desativada: nenhum motor de texto para voz disponível</string>
|
||||
</resources>
|
||||
|
||||
@@ -901,12 +901,4 @@
|
||||
<string name="list_description_empty">Edite a lista para adicionar uma descrição</string>
|
||||
<string name="power_management">Gestão de Energia</string>
|
||||
<string name="charge_socket_schuko">Doméstica UE</string>
|
||||
<string name="place_page_map_too_old_title">Dados do mapa desatualizados</string>
|
||||
<string name="place_page_map_too_old_description">O seu mapa atual tem dados demasiado antigos, por favor atualize-o.</string>
|
||||
<string name="place_page_app_too_old_description">O seu mapa atual tem dados demasiado antigos, por favor atualize a aplicação do CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Atualizar região do mapa</string>
|
||||
<string name="place_page_too_old_to_edit">Edição OpenStreetMap está desativada, pois os dados do mapa são demasiado antigos.</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_disabled_message">Instruções por voz desativadas: nenhum motor de TTS disponível</string>
|
||||
</resources>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<!-- Choose measurement on first launch alert - choose imperial system button -->
|
||||
<string name="miles">Мили</string>
|
||||
<!-- Update maps later button text -->
|
||||
<string name="later">Позже</string>
|
||||
<string name="later">Не сейчас</string>
|
||||
<!-- View and button titles for accessibility, please also edit it in iphone/plist.txt -->
|
||||
<string name="search">Поиск</string>
|
||||
<!-- Search box placeholder text; Used when searching on the map itself, not when searching for a map -->
|
||||
@@ -27,7 +27,7 @@
|
||||
<!-- A dialog title, that warns a user that Precise Location is disabled and suggests to turn it on -->
|
||||
<string name="limited_accuracy">Точность местоположения ограничена</string>
|
||||
<!-- A dialog text, that warns a user that Precise Location is disabled and suggests to turn it on -->
|
||||
<string name="precise_location_is_disabled_long_text">Включите в настройках определение точного местоположения</string>
|
||||
<string name="precise_location_is_disabled_long_text">Для обеспечения точной навигации включите определение точного местоположения в настройках</string>
|
||||
<!-- View and button titles for accessibility -->
|
||||
<string name="zoom_to_country">Показать на карте</string>
|
||||
<!-- Message to display at the center of the screen when the country download has failed -->
|
||||
@@ -297,7 +297,7 @@
|
||||
<!-- location service disabled -->
|
||||
<string name="enable_location_services">Пожалуйста, включите геолокацию</string>
|
||||
<string name="save">Сохранить</string>
|
||||
<string name="create">Создать</string>
|
||||
<string name="create">создать</string>
|
||||
<!-- red color -->
|
||||
<string name="red">Красный</string>
|
||||
<!-- yellow color -->
|
||||
@@ -526,8 +526,8 @@
|
||||
<!-- Displayed when saving some edits to the map to warn against publishing personal data -->
|
||||
<string name="editor_share_to_all_dialog_title">Отправить всем пользователям?</string>
|
||||
<!-- Dialog before publishing the modifications to the public map. -->
|
||||
<string name="editor_share_to_all_dialog_message_1">Убедитесь, что вы не указали никаких личных данных.</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">Редакторы OpenStreetMap проверят изменения и свяжутся с вами, если у них возникнут вопросы.</string>
|
||||
<string name="editor_share_to_all_dialog_message_1">Убедитесь, что вы не указали никаких личных данных</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">Редакторы OpenStreetMap проверят изменения и свяжутся с вами, если у них возникнут вопросы</string>
|
||||
<string name="navigation_stop_button">Cтоп</string>
|
||||
<!-- Shown as toast when starting the recent track recording -->
|
||||
<string name="track_recording">Запись трека</string>
|
||||
@@ -918,9 +918,4 @@
|
||||
<string name="list_description_empty">Отредактируйте список, чтобы добавить описание</string>
|
||||
<string name="pref_tts_no_system_tts_short">Не найден движок синтезатора речи, проверьте настройки приложения</string>
|
||||
<string name="unknown_power_output">неизвестно</string>
|
||||
<string name="opens_day_at">Откроется %1$s на %2$s</string>
|
||||
<string name="closes_day_at">Закроется %1$s на %2$s</string>
|
||||
<string name="place_page_map_too_old_title">Данные карты устарели</string>
|
||||
<string name="place_page_update_too_old_map">Обновить регион карты</string>
|
||||
<string name="place_page_too_old_to_edit">Редактирование OpenStreetMap отключено, так как данные карты слишком старые.</string>
|
||||
</resources>
|
||||
|
||||
@@ -349,8 +349,8 @@
|
||||
<string name="osm_note_hint">Ali pa pusti sporočilo skupnosti OpenStreetMap, da bo nekdo drug dodal ali popravil ta kraj.</string>
|
||||
<string name="osm_note_toast">Sporočilo bo poslano na OpenStreetMap</string>
|
||||
<string name="editor_share_to_all_dialog_title">Ali to želite poslati vsem uporabnikom?</string>
|
||||
<string name="editor_share_to_all_dialog_message_1">Poskrbite, da niste vnesli nobenih zasebnih ali osebnih podatkov</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">Uredniki na OpenStreetMap bodo preverili spremembe in stopili v stik z vami, če kaj ne bo jasno.</string>
|
||||
<string name="editor_share_to_all_dialog_message_1">Poskrbite, da niste vnesli nobenih zasebnih podatkov</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">Uredniki na OpenStreetMap bodo preverili spremembe in stopili v stik z vami, če kaj ne bo jasno</string>
|
||||
<string name="navigation_stop_button">Ustavi</string>
|
||||
<string name="track_recording">Snemam pot</string>
|
||||
<string name="accept">Potrdi</string>
|
||||
@@ -639,22 +639,4 @@
|
||||
<item quantity="few">%d min</item>
|
||||
<item quantity="other">%d min</item>
|
||||
</plurals>
|
||||
<string name="opens_day_at">Odpre se %1$s, ob %2$s</string>
|
||||
<string name="closes_day_at">Zapre se %1$s, ob %2$s</string>
|
||||
<string name="editor_business_vacant_button">Podjetje ni zakupljeno</string>
|
||||
<string name="editor_mark_business_vacant_title">Označi, da je podjetje nezakupljeno</string>
|
||||
<string name="editor_mark_business_vacant_description">To uporabite, če se je podjetje izselilo in so prostori prazni in pripravljeni za novega zakupnika.</string>
|
||||
<string name="editor_submit">Potrdi</string>
|
||||
<string name="place_page_map_too_old_title">Podatki zemljevida so zastareli</string>
|
||||
<string name="place_page_map_too_old_description">Vaši trenutni podatki zemljevida so zelo stari; prosimo, posodobite zemljevid.</string>
|
||||
<string name="place_page_app_too_old_description">Vaši trenutni podatki zemljevida so zelo stari; prosimo, posodobite orodje CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Posodobi področje zemljevida</string>
|
||||
<string name="place_page_too_old_to_edit">Urejanje OpenStreetMap je onemogočeno, ker so podatki zemljevida prestari.</string>
|
||||
<string name="prefs_speed_cameras_information">Opozorila o merilnikih hitrosti so onemogočena v državah, kjer so prepovedana s tamkajšnjimi zakoni.</string>
|
||||
<string name="power_management">Energetsko upravljanje</string>
|
||||
<string name="avoid_paved">Izogni se neasfaltiranim cestam</string>
|
||||
<string name="navigation_start_tts_message">"Začenjanje potnega usmerjanja, jezik glasovnih napotkov: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Glasovni napotki so onemogočeni: ustvarjalec glasu (TTS) ni na voljo</string>
|
||||
<string name="charge_socket_schuko">standardna evropska vtičnica (Schuko)</string>
|
||||
<string name="list_description_empty">Uredite seznam, da dodate opis</string>
|
||||
</resources>
|
||||
|
||||
@@ -912,9 +912,4 @@
|
||||
<string name="navigation_start_tts_message">"启动导航,语音指令语言: "</string>
|
||||
<string name="prefs_speed_cameras_information">在当地法律禁止发出警报的国家/地区,测速摄像头警告功能将被禁用。</string>
|
||||
<string name="navigation_start_tts_disabled_message">语音指令已禁用:TTS 引擎不可用</string>
|
||||
<string name="place_page_map_too_old_title">地图数据已过时</string>
|
||||
<string name="place_page_map_too_old_description">您当前的地图数据非常旧,请更新地图。</string>
|
||||
<string name="place_page_app_too_old_description">您当前的地图数据非常旧,请更新 CoMaps 应用。</string>
|
||||
<string name="place_page_update_too_old_map">更新地图区域</string>
|
||||
<string name="place_page_too_old_to_edit">由于地图数据太旧,OpenStreetMap 编辑被禁用。</string>
|
||||
</resources>
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
<dimen name="nav_menu_landscape_width">360dp</dimen>
|
||||
|
||||
<dimen name="nav_frame_padding">@dimen/margin_half</dimen>
|
||||
<dimen name="zoom_buttons_margin">58dp</dimen>
|
||||
<dimen name="zoom_buttons_margin">64dp</dimen>
|
||||
<dimen name="map_buttons_bottom_margin">136dp</dimen>
|
||||
<dimen name="map_buttons_bottom_max_width">300dp</dimen>
|
||||
|
||||
@@ -130,6 +130,7 @@
|
||||
<!-- Editor -->
|
||||
<dimen name="editor_height_days">72dp</dimen>
|
||||
<dimen name="editor_height_closed">72dp</dimen>
|
||||
<dimen name="editor_height_allday">56dp</dimen>
|
||||
<dimen name="editor_height_field">64dp</dimen>
|
||||
<dimen name="editor_margin_left">56dp</dimen>
|
||||
<dimen name="editor_auth_btn_height">@dimen/primary_button_min_height</dimen>
|
||||
|
||||
@@ -35,6 +35,11 @@
|
||||
<string name="pref_settings_general" translatable="false">GeneralSettings</string>
|
||||
<string name="pref_navigation" translatable="false">Navigation</string>
|
||||
<string name="pref_information" translatable="false">Information</string>
|
||||
<string name="pref_traffic" translatable="false">Traffic</string>
|
||||
<string name="pref_traffic_http_enabled" translatable="false">TrafficHttpEnabled</string>
|
||||
<string name="pref_traffic_http_url" translatable="false">TrafficHttpUrl</string>
|
||||
<string name="pref_traffic_apps" translatable="false">TrafficApps</string>
|
||||
<string name="pref_traffic_legacy_enabled" translatable="false">TrafficLegacyEnabled</string>
|
||||
<string name="pref_transliteration" translatable="false">Transliteration</string>
|
||||
<string name="pref_power_management" translatable="false">PowerManagment</string>
|
||||
<string name="pref_keep_screen_on" translatable="false">KeepScreenOn</string>
|
||||
|
||||
@@ -215,6 +215,7 @@
|
||||
<!-- Settings information group in settings screen -->
|
||||
<string name="prefs_group_information">Information</string>
|
||||
<string name="prefs_group_route">Navigation</string>
|
||||
<string name="prefs_group_traffic">Traffic information</string>
|
||||
<string name="pref_zoom_title">Zoom buttons</string>
|
||||
<string name="pref_zoom_summary">Display on the map</string>
|
||||
<!-- Settings «Map» category: «Night style» title -->
|
||||
@@ -573,16 +574,6 @@
|
||||
<string name="error_enter_correct_fediverse_page">Enter a valid Mastodon username or web address</string>
|
||||
<string name="error_enter_correct_bluesky_page">Enter a valid Bluesky username or web address</string>
|
||||
<string name="placepage_add_place_button">Add Place to OpenStreetMap</string>
|
||||
<!-- Title of info shown when the map is older than 3 to 6 months -->
|
||||
<string name="place_page_map_too_old_title">Map data outdated</string>
|
||||
<!-- Description of info shown when the map is older than 3 months -->
|
||||
<string name="place_page_map_too_old_description"> Your current map data is very old, please update the map.</string>
|
||||
<!-- Description of info shown when the app and the map are older than 6 months -->
|
||||
<string name="place_page_app_too_old_description"> Your current map data is very old, please update the CoMaps app.</string>
|
||||
<!-- Button to update map region, part of the map too old info -->
|
||||
<string name="place_page_update_too_old_map">Update map region</string>
|
||||
<!-- Toast shown after pressing add place / edit OpenStreetMap when editing is disabled -->
|
||||
<string name="place_page_too_old_to_edit">OpenStreetMap editing is disabled because the map data is too old.</string>
|
||||
<string name="osm_note_hint">Or, alternatively, leave a note to OpenStreetMap community so that someone else can add or fix a place here.</string>
|
||||
<string name="osm_note_toast">Note will be sent to OpenStreetMap</string>
|
||||
<!-- Displayed when saving some edits to the map to warn against publishing personal data -->
|
||||
@@ -799,6 +790,24 @@
|
||||
<string name="enable_show_on_lock_screen_description">When enabled, the app will work on the lockscreen even when the device is locked.</string>
|
||||
<!-- Current language of the map! -->
|
||||
<string name="change_map_locale">Map language</string>
|
||||
<!-- Enable live traffic data via HTTP (title) -->
|
||||
<string name="traffic_http_enabled">Enable live traffic data</string>
|
||||
<!-- Enable live traffic data via HTTP (description) -->
|
||||
<string name="traffic_http_enabled_description">When enabled, the app will periodically retrieve traffic information from the configured URL.</string>
|
||||
<!-- URL for live traffic data -->
|
||||
<string name="traffic_http_url">Traffic service URL</string>
|
||||
<!-- Status message indicating that user did not set a traffic URL yet. -->
|
||||
<string name="traffic_http_url_not_set">Not set</string>
|
||||
<!-- TraFF 0.8 apps from which to receive data (title) -->
|
||||
<string name="traffic_apps">Use data from TraFF applications</string>
|
||||
<!-- Status message indicating that no TraFF 0.8 apps are installed -->
|
||||
<string name="traffic_apps_not_available">No apps installed</string>
|
||||
<!-- Status message indicating that no TraFF 0.8 apps are currently selected -->
|
||||
<string name="traffic_apps_none_selected">No apps salected</string>
|
||||
<!-- Enable traffic data from TraFF 0.7 apps (title) -->
|
||||
<string name="traffic_legacy_enabled">Use data from legacy TraFF applications</string>
|
||||
<!-- Enable traffic data from TraFF 0.7 apps (description) -->
|
||||
<string name="traffic_legacy_enabled_description">When enabled, the app will receive and process traffic data from legacy TraFF applications.</string>
|
||||
<!-- OpenStreetMap text on splash screen -->
|
||||
<string name="splash_subtitle">Map data from OpenStreetMap</string>
|
||||
<!-- Telegram group url for the "?" About page -->
|
||||
|
||||
@@ -6,6 +6,11 @@
|
||||
<item name="android:textStyle">normal</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmTextAppearance.Display1">
|
||||
<item name="android:textSize">@dimen/text_size_display_1</item>
|
||||
<item name="android:textColor">?android:textColorPrimary</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmTextAppearance.Title">
|
||||
<item name="android:textSize">@dimen/text_size_title</item>
|
||||
<item name="android:textColor">?android:textColorPrimary</item>
|
||||
@@ -185,91 +190,91 @@
|
||||
<item name="android:textColor">@color/white_secondary</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Headline1"
|
||||
parent="TextAppearance.Material3.DisplayLarge">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Headline1"
|
||||
parent="TextAppearance.MaterialComponents.Headline1">
|
||||
<item name="fontFamily">@string/robotoLight</item>
|
||||
<item name="android:fontFamily">@string/robotoLight</item>
|
||||
<item name="android:textSize">96sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Headline2"
|
||||
parent="TextAppearance.Material3.DisplayLarge">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Headline2"
|
||||
parent="TextAppearance.MaterialComponents.Headline2">
|
||||
<item name="fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:textSize">60sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Headline3"
|
||||
parent="TextAppearance.Material3.DisplayMedium">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Headline3"
|
||||
parent="TextAppearance.MaterialComponents.Headline3">
|
||||
<item name="fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:textSize">48sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Headline4"
|
||||
parent="TextAppearance.Material3.HeadlineLarge">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Headline4"
|
||||
parent="TextAppearance.MaterialComponents.Headline4">
|
||||
<item name="fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:textSize">34sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Headline5"
|
||||
parent="TextAppearance.Material3.HeadlineMedium">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Headline5"
|
||||
parent="TextAppearance.MaterialComponents.Headline5">
|
||||
<item name="fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:textSize">24sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Headline6"
|
||||
parent="TextAppearance.Material3.HeadlineSmall">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Headline6"
|
||||
parent="TextAppearance.MaterialComponents.Headline6">
|
||||
<item name="fontFamily">@string/robotoMedium</item>
|
||||
<item name="android:fontFamily">@string/robotoMedium</item>
|
||||
<item name="android:textSize">20sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Subtitle1"
|
||||
parent="TextAppearance.Material3.TitleMedium">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Subtitle1"
|
||||
parent="TextAppearance.MaterialComponents.Subtitle1">
|
||||
<item name="fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:textSize">16sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Subtitle2"
|
||||
parent="TextAppearance.Material3.TitleSmall">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Subtitle2"
|
||||
parent="TextAppearance.MaterialComponents.Subtitle2">
|
||||
<item name="fontFamily">@string/robotoMedium</item>
|
||||
<item name="android:fontFamily">@string/robotoMedium</item>
|
||||
<item name="android:textSize">14sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Body1"
|
||||
parent="TextAppearance.Material3.BodyLarge">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Body1"
|
||||
parent="TextAppearance.MaterialComponents.Body1">
|
||||
<item name="fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:textSize">16sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Body2"
|
||||
parent="TextAppearance.Material3.BodyMedium">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Body2"
|
||||
parent="TextAppearance.MaterialComponents.Body2">
|
||||
<item name="fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:textSize">14sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Button"
|
||||
<style name="TextAppearance.MdcTypographyStyles.Button"
|
||||
parent="TextAppearance.MaterialComponents.Button">
|
||||
<item name="fontFamily">@string/robotoMedium</item>
|
||||
<item name="android:fontFamily">@string/robotoMedium</item>
|
||||
<item name="android:textSize">14sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Caption"
|
||||
parent="TextAppearance.Material3.LabelMedium">
|
||||
<style name="TextAppearance.MdcTypographyStyles.Caption"
|
||||
parent="TextAppearance.MaterialComponents.Caption">
|
||||
<item name="fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:textSize">12sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Overline"
|
||||
<style name="TextAppearance.MdcTypographyStyles.Overline"
|
||||
parent="TextAppearance.MaterialComponents.Overline">
|
||||
<item name="fontFamily">@string/robotoRegular</item>
|
||||
<item name="android:fontFamily">@string/robotoRegular</item>
|
||||
|
||||
@@ -139,13 +139,12 @@
|
||||
<item name="cornerSize">50%</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmWidget.ToolbarStyle" parent="Widget.Material3.Toolbar">
|
||||
<style name="MwmWidget.ToolbarStyle" parent="ThemeOverlay.Material3.Dark.ActionBar">
|
||||
<item name="android:background">?colorPrimary</item>
|
||||
<item name="android:displayOptions">homeAsUp|showTitle</item>
|
||||
<item name="contentInsetStart">0dp</item>
|
||||
<item name="android:titleTextAppearance">@style/MwmTextAppearance.Toolbar.Title</item>
|
||||
<item name="titleTextAppearance">@style/MwmTextAppearance.Toolbar.Title</item>
|
||||
<item name="buttonGravity">center_vertical</item>
|
||||
</style>
|
||||
|
||||
<style name="MwmWidget.ToolbarStyle.Light">
|
||||
@@ -425,17 +424,4 @@
|
||||
<item name="android:maxWidth">@dimen/map_buttons_bottom_max_width</item>
|
||||
<item name="android:padding">@dimen/nav_frame_padding</item>
|
||||
</style>
|
||||
|
||||
<style name="ShapeAppearance.MapButton.Zoom.Plus" parent="">
|
||||
<item name="cornerSizeTopLeft">10%</item>
|
||||
<item name="cornerSizeTopRight">10%</item>
|
||||
<item name="cornerSizeBottomRight">50%</item>
|
||||
<item name="cornerSizeBottomLeft">50%</item>
|
||||
</style>
|
||||
<style name="ShapeAppearance.MapButton.Zoom.Minus" parent="">
|
||||
<item name="cornerSizeBottomLeft">10%</item>
|
||||
<item name="cornerSizeBottomRight">10%</item>
|
||||
<item name="cornerSizeTopLeft">50%</item>
|
||||
<item name="cornerSizeTopRight">50%</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
@@ -93,19 +93,19 @@
|
||||
<item name="android:textAppearanceSmallInverse">@style/TextAppearance.Small.Inverse</item>
|
||||
<item name="android:textAppearanceMediumInverse">@style/TextAppearance.Medium.Inverse</item>
|
||||
<item name="android:textAppearanceLargeInverse">@style/TextAppearance.Large.Inverse</item>
|
||||
<item name="fontHeadline1">@style/TextAppearance.Headline1</item>
|
||||
<item name="fontHeadline2">@style/TextAppearance.Headline2</item>
|
||||
<item name="fontHeadline3">@style/TextAppearance.Headline3</item>
|
||||
<item name="fontHeadline4">@style/TextAppearance.Headline4</item>
|
||||
<item name="fontHeadline1">@style/TextAppearance.MdcTypographyStyles.Headline1</item>
|
||||
<item name="fontHeadline2">@style/TextAppearance.MdcTypographyStyles.Headline2</item>
|
||||
<item name="fontHeadline3">@style/TextAppearance.MdcTypographyStyles.Headline3</item>
|
||||
<item name="fontHeadline4">@style/TextAppearance.MdcTypographyStyles.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="fontHeadline6">@style/TextAppearance.MdcTypographyStyles.Headline6</item>
|
||||
<item name="fontSubtitle1">@style/TextAppearance.MdcTypographyStyles.Subtitle1</item>
|
||||
<item name="fontSubtitle2">@style/TextAppearance.MdcTypographyStyles.Subtitle2</item>
|
||||
<item name="fontBody1">@style/TextAppearance.MdcTypographyStyles.Body1</item>
|
||||
<item name="fontBody2">@style/TextAppearance.MdcTypographyStyles.Body2</item>
|
||||
<item name="fontButton">@style/TextAppearance.MdcTypographyStyles.Button</item>
|
||||
<item name="fontCaption">@style/TextAppearance.MdcTypographyStyles.Caption</item>
|
||||
<item name="fontOverline">@style/TextAppearance.MdcTypographyStyles.Overline</item>
|
||||
<item name="drivingOptionsViewBg">@color/bg_primary_dark</item>
|
||||
<item name="elevationProfilePropertyBg">@drawable/bg_rounded_rect</item>
|
||||
<item name="elevationProfilePropIconTint">@color/black_secondary</item>
|
||||
|
||||
@@ -191,6 +191,36 @@
|
||||
android:widgetLayout="@layout/preference_switch"
|
||||
android:order="5"/>
|
||||
</PreferenceCategory>
|
||||
<androidx.preference.PreferenceCategory
|
||||
android:key="@string/pref_traffic"
|
||||
android:title="@string/prefs_group_traffic"
|
||||
android:order="4">
|
||||
<SwitchPreferenceCompat
|
||||
android:key="@string/pref_traffic_http_enabled"
|
||||
android:title="@string/traffic_http_enabled"
|
||||
app:singleLineTitle="false"
|
||||
android:summary="@string/traffic_http_enabled_description"
|
||||
android:defaultValue="true"
|
||||
android:order="1"/>
|
||||
<EditTextPreference
|
||||
android:key="@string/pref_traffic_http_url"
|
||||
android:title="@string/traffic_http_url"
|
||||
app:singleLineTitle="false"
|
||||
android:order="2"/>
|
||||
<MultiSelectListPreference
|
||||
android:key="@string/pref_traffic_apps"
|
||||
android:title="@string/traffic_apps"
|
||||
app:singleLineTitle="false"
|
||||
android:order="3"/>
|
||||
<SwitchPreferenceCompat
|
||||
android:key="@string/pref_traffic_legacy_enabled"
|
||||
android:title="@string/traffic_legacy_enabled"
|
||||
app:singleLineTitle="false"
|
||||
android:summary="@string/traffic_legacy_enabled_description"
|
||||
android:defaultValue="true"
|
||||
android:order="4"/>
|
||||
</androidx.preference.PreferenceCategory>
|
||||
|
||||
<androidx.preference.PreferenceCategory
|
||||
android:key="@string/pref_privacy"
|
||||
android:title="@string/privacy"
|
||||
|
||||
@@ -17,6 +17,7 @@ set(SRC
|
||||
app/organicmaps/sdk/opengl/gl3stub.h
|
||||
app/organicmaps/sdk/platform/GuiThread.hpp
|
||||
app/organicmaps/sdk/platform/AndroidPlatform.hpp
|
||||
app/organicmaps/sdk/traffxml/AndroidTraffSource.hpp
|
||||
app/organicmaps/sdk/util/Distance.hpp
|
||||
app/organicmaps/sdk/util/FeatureIdBuilder.hpp
|
||||
app/organicmaps/sdk/vulkan/android_vulkan_context_factory.hpp
|
||||
@@ -76,6 +77,8 @@ set(SRC
|
||||
app/organicmaps/sdk/platform/PThreadImpl.cpp
|
||||
app/organicmaps/sdk/platform/SecureStorage.cpp
|
||||
app/organicmaps/sdk/platform/SocketImpl.cpp
|
||||
app/organicmaps/sdk/traffxml/AndroidTraffSource.cpp
|
||||
app/organicmaps/sdk/traffxml/SourceImpl.cpp
|
||||
app/organicmaps/sdk/util/Config.cpp
|
||||
app/organicmaps/sdk/util/GeoUtils.cpp
|
||||
app/organicmaps/sdk/util/HttpClient.cpp
|
||||
@@ -127,6 +130,7 @@ target_link_libraries(${PROJECT_NAME}
|
||||
# icu
|
||||
# agg
|
||||
# vulkan_wrapper
|
||||
traffxml
|
||||
|
||||
# Android libs
|
||||
log
|
||||
|
||||
@@ -182,6 +182,8 @@ public:
|
||||
void Set3dMode(bool allow3d, bool allow3dBuildings);
|
||||
void Get3dMode(bool & allow3d, bool & allow3dBuildings);
|
||||
|
||||
TrafficManager & GetTrafficManager() { return m_work.GetTrafficManager(); }
|
||||
|
||||
void SetMapLanguageCode(std::string const & languageCode);
|
||||
std::string GetMapLanguageCode();
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "app/organicmaps/sdk/Framework.hpp"
|
||||
|
||||
#include "app/organicmaps/sdk/platform/AndroidPlatform.hpp"
|
||||
#include "app/organicmaps/sdk/traffxml/AndroidTraffSource.hpp"
|
||||
|
||||
#include "app/organicmaps/sdk/core/jni_helper.hpp"
|
||||
|
||||
@@ -34,6 +35,26 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_OrganicMaps_nativeInitFramework(
|
||||
JNIEnv * env = jni::GetEnv();
|
||||
jmethodID const methodId = jni::GetMethodID(env, *onComplete, "run", "()V");
|
||||
env->CallVoidMethod(*onComplete, methodId);
|
||||
|
||||
ASSERT(g_framework, ("g_framework must be non-null"));
|
||||
|
||||
/*
|
||||
* Add traffic sources for Android.
|
||||
*/
|
||||
jclass configClass = env->FindClass("app/organicmaps/sdk/util/Config");
|
||||
jmethodID const getTrafficLegacyEnabledId = jni::GetStaticMethodID(env, configClass,
|
||||
"getTrafficLegacyEnabled", "()Z");
|
||||
jmethodID const applyTrafficLegacyEnabledId = jni::GetStaticMethodID(env, configClass,
|
||||
"applyTrafficLegacyEnabled", "(Z)V");
|
||||
jmethodID const getTrafficAppsId = jni::GetStaticMethodID(env, configClass,
|
||||
"getTrafficApps", "()[Ljava/lang/String;");
|
||||
jmethodID const applyTrafficAppsId = jni::GetStaticMethodID(env, configClass,
|
||||
"applyTrafficApps", "([Ljava/lang/String;)V");
|
||||
|
||||
env->CallStaticVoidMethod(configClass, applyTrafficLegacyEnabledId,
|
||||
env->CallStaticBooleanMethod(configClass, getTrafficLegacyEnabledId));
|
||||
env->CallStaticVoidMethod(configClass, applyTrafficAppsId,
|
||||
(jobjectArray)env->CallStaticObjectMethod(configClass, getTrafficAppsId));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
#include "AndroidTraffSource.hpp"
|
||||
|
||||
#include "app/organicmaps/sdk/core/jni_helper.hpp"
|
||||
|
||||
namespace traffxml {
|
||||
void AndroidTraffSourceV0_7::Create(TraffSourceManager & manager)
|
||||
{
|
||||
std::unique_ptr<AndroidTraffSourceV0_7> source = std::unique_ptr<AndroidTraffSourceV0_7>(new AndroidTraffSourceV0_7(manager));
|
||||
manager.RegisterSource(std::move(source));
|
||||
}
|
||||
|
||||
AndroidTraffSourceV0_7::AndroidTraffSourceV0_7(TraffSourceManager & manager)
|
||||
: TraffSource(manager)
|
||||
{
|
||||
JNIEnv * env = jni::GetEnv();
|
||||
|
||||
static jclass const implClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/traffxml/SourceImplV0_7");
|
||||
|
||||
static jmethodID const implConstructor = jni::GetConstructorID(env, implClass, "(Landroid/content/Context;J)V");
|
||||
|
||||
jlong nativeManager = reinterpret_cast<jlong>(&manager);
|
||||
|
||||
jobject implObject = env->NewObject(
|
||||
implClass, implConstructor, android::Platform::Instance().GetContext(), nativeManager);
|
||||
|
||||
m_implObject = env->NewGlobalRef(implObject);
|
||||
|
||||
m_subscribeImpl = jni::GetMethodID(env, m_implObject, "subscribe", "(Ljava/lang/String;)V");
|
||||
m_unsubscribeImpl = jni::GetMethodID(env, m_implObject, "unsubscribe", "()V");
|
||||
}
|
||||
|
||||
AndroidTraffSourceV0_7::~AndroidTraffSourceV0_7()
|
||||
{
|
||||
jni::GetEnv()->DeleteGlobalRef(m_implObject);
|
||||
}
|
||||
|
||||
void AndroidTraffSourceV0_7::Close()
|
||||
{
|
||||
Unsubscribe();
|
||||
}
|
||||
|
||||
void AndroidTraffSourceV0_7::Subscribe(std::set<MwmSet::MwmId> & mwms)
|
||||
{
|
||||
jni::GetEnv()->CallVoidMethod(m_implObject, m_subscribeImpl, nullptr);
|
||||
}
|
||||
|
||||
void AndroidTraffSourceV0_7::Unsubscribe()
|
||||
{
|
||||
jni::GetEnv()->CallVoidMethod(m_implObject, m_unsubscribeImpl);
|
||||
}
|
||||
|
||||
void AndroidTraffSourceV0_8::Create(TraffSourceManager & manager, std::string const & packageId)
|
||||
{
|
||||
std::unique_ptr<AndroidTraffSourceV0_8> source = std::unique_ptr<AndroidTraffSourceV0_8>(new AndroidTraffSourceV0_8(manager, packageId));
|
||||
manager.RegisterSource(std::move(source));
|
||||
}
|
||||
|
||||
AndroidTraffSourceV0_8::AndroidTraffSourceV0_8(TraffSourceManager & manager, std::string const & packageId)
|
||||
: TraffSource(manager)
|
||||
{
|
||||
JNIEnv * env = jni::GetEnv();
|
||||
|
||||
static jclass const implClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/traffxml/SourceImplV0_8");
|
||||
|
||||
static jmethodID const implConstructor = jni::GetConstructorID(env, implClass, "(Landroid/content/Context;JLjava/lang/String;)V");
|
||||
|
||||
jlong nativeManager = reinterpret_cast<jlong>(&manager);
|
||||
|
||||
jobject implObject = env->NewObject(
|
||||
implClass, implConstructor, android::Platform::Instance().GetContext(), nativeManager, jni::ToJavaString(env, packageId));
|
||||
|
||||
m_implObject = env->NewGlobalRef(implObject);
|
||||
|
||||
m_subscribeImpl = jni::GetMethodID(env, m_implObject, "subscribe", "(Ljava/lang/String;)V");
|
||||
m_changeSubscriptionImpl = jni::GetMethodID(env, m_implObject, "changeSubscription", "(Ljava/lang/String;)V");
|
||||
m_unsubscribeImpl = jni::GetMethodID(env, m_implObject, "unsubscribe", "()V");
|
||||
|
||||
// TODO packageId (if we need that at all here)
|
||||
}
|
||||
|
||||
AndroidTraffSourceV0_8::~AndroidTraffSourceV0_8()
|
||||
{
|
||||
jni::GetEnv()->DeleteGlobalRef(m_implObject);
|
||||
}
|
||||
|
||||
void AndroidTraffSourceV0_8::Close()
|
||||
{
|
||||
Unsubscribe();
|
||||
}
|
||||
|
||||
void AndroidTraffSourceV0_8::Subscribe(std::set<MwmSet::MwmId> & mwms)
|
||||
{
|
||||
JNIEnv * env = jni::GetEnv();
|
||||
std::string data = "<filter_list>\n"
|
||||
+ GetMwmFilters(mwms)
|
||||
+ "</filter_list>";
|
||||
|
||||
env->CallVoidMethod(m_implObject, m_subscribeImpl, jni::ToJavaString(env, data));
|
||||
}
|
||||
|
||||
void AndroidTraffSourceV0_8::ChangeSubscription(std::set<MwmSet::MwmId> & mwms)
|
||||
{
|
||||
JNIEnv * env = jni::GetEnv();
|
||||
std::string data = "<filter_list>\n"
|
||||
+ GetMwmFilters(mwms)
|
||||
+ "</filter_list>";
|
||||
|
||||
env->CallVoidMethod(m_implObject, m_changeSubscriptionImpl, jni::ToJavaString(env, data));
|
||||
}
|
||||
|
||||
void AndroidTraffSourceV0_8::Unsubscribe()
|
||||
{
|
||||
jni::GetEnv()->CallVoidMethod(m_implObject, m_unsubscribeImpl);
|
||||
}
|
||||
} // namespace traffxml
|
||||
@@ -0,0 +1,199 @@
|
||||
#pragma once
|
||||
|
||||
#include "traffxml/traff_source.hpp"
|
||||
|
||||
namespace traffxml
|
||||
{
|
||||
/**
|
||||
* @brief A TraFF source which relies on Android Binder for message delivery, using version 0.7 of the TraFF protocol.
|
||||
*
|
||||
* TraFF 0.7 does not support subscriptions. Messages are broadcast as the payload to a `FEED` intent.
|
||||
*/
|
||||
class AndroidTraffSourceV0_7 : public TraffSource
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Creates a new `AndroidTraffSourceV0_7` instance and registers it with the traffic manager.
|
||||
*
|
||||
* @param manager The traffic manager to register the new instance with
|
||||
*/
|
||||
static void Create(TraffSourceManager & manager);
|
||||
|
||||
virtual ~AndroidTraffSourceV0_7() override;
|
||||
|
||||
/**
|
||||
* @brief Prepares the traffic source for unloading.
|
||||
*/
|
||||
// TODO do we need a close operation here?
|
||||
// TODO move this to the parent class and override it here?
|
||||
void Close();
|
||||
|
||||
/**
|
||||
* @brief Subscribes to a traffic service.
|
||||
*
|
||||
* TraFF 0.7 does not support subscriptions. This implementation registers a broadcast receiver.
|
||||
*
|
||||
* @param mwms The MWMs for which data is needed (not used by this implementation).
|
||||
*/
|
||||
virtual void Subscribe(std::set<MwmSet::MwmId> & mwms) override;
|
||||
|
||||
/**
|
||||
* @brief Changes an existing traffic subscription.
|
||||
*
|
||||
* This implementation does nothing, as TraFF 0.7 does not support subscriptions.
|
||||
*
|
||||
* @param mwms The new set of MWMs for which data is needed.
|
||||
*/
|
||||
virtual void ChangeSubscription(std::set<MwmSet::MwmId> & mwms) override {};
|
||||
|
||||
/**
|
||||
* @brief Unsubscribes from a traffic service we are subscribed to.
|
||||
*
|
||||
* TraFF 0.7 does not support subscriptions. This implementation unregisters the broadcast
|
||||
* receiver which was registered by `Subscribe()`.
|
||||
*/
|
||||
virtual void Unsubscribe() override;
|
||||
|
||||
/**
|
||||
* @brief Whether this source should be polled.
|
||||
*
|
||||
* Prior to calling `Poll()` on a source, the caller should always first call `IsPollNeeded()` and
|
||||
* poll the source only if the result is true.
|
||||
*
|
||||
* This implementation always returns false, as message delivery on Android uses `FEED` (push).
|
||||
*
|
||||
* @return true if the source should be polled, false if not.
|
||||
*/
|
||||
virtual bool IsPollNeeded() override { return false; };
|
||||
|
||||
/**
|
||||
* @brief Polls the traffic service for updates.
|
||||
*
|
||||
* This implementation does nothing, as message delivery on Android uses `FEED` (push).
|
||||
*/
|
||||
virtual void Poll() override {};
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructs a new `AndroidTraffSourceV0_7`.
|
||||
* @param manager The `TrafficSourceManager` instance to register the source with.
|
||||
*/
|
||||
AndroidTraffSourceV0_7(TraffSourceManager & manager);
|
||||
|
||||
private:
|
||||
// TODO “subscription” (i.e. broadcast receiver) state
|
||||
|
||||
/**
|
||||
* @brief The Java implementation class instance.
|
||||
*/
|
||||
jobject m_implObject;
|
||||
|
||||
/**
|
||||
* @brief The Java subscribe method.
|
||||
*/
|
||||
jmethodID m_subscribeImpl;
|
||||
|
||||
/**
|
||||
* @brief The Java unsubscribe method.
|
||||
*/
|
||||
jmethodID m_unsubscribeImpl;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief A TraFF source which relies on Android Binder for message delivery, using version 0.8 of the TraFF protocol.
|
||||
*
|
||||
* TraFF 0.8 supports subscriptions. Messages are announced through a `FEED` intent, whereupon the
|
||||
* consumer can retrieve them from a content provider.
|
||||
*/
|
||||
class AndroidTraffSourceV0_8 : public TraffSource
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Creates a new `AndroidTraffSourceV0_8` instance and registers it with the traffic manager.
|
||||
*
|
||||
* @param manager The traffic manager to register the new instance with
|
||||
* @param packageId The package ID of the app providing the TraFF source.
|
||||
*/
|
||||
static void Create(TraffSourceManager & manager, std::string const & packageId);
|
||||
|
||||
virtual ~AndroidTraffSourceV0_8() override;
|
||||
|
||||
/**
|
||||
* @brief Prepares the traffic source for unloading.
|
||||
*
|
||||
* If there is still an active subscription, it unsubscribes, but without processing the result
|
||||
* received from the service. Otherwise, teardown is a no-op.
|
||||
*/
|
||||
// TODO move this to the parent class and override it here?
|
||||
void Close();
|
||||
|
||||
/**
|
||||
* @brief Subscribes to a traffic service.
|
||||
*
|
||||
* @param mwms The MWMs for which data is needed.
|
||||
*/
|
||||
virtual void Subscribe(std::set<MwmSet::MwmId> & mwms) override;
|
||||
|
||||
/**
|
||||
* @brief Changes an existing traffic subscription.
|
||||
*
|
||||
* @param mwms The new set of MWMs for which data is needed.
|
||||
*/
|
||||
virtual void ChangeSubscription(std::set<MwmSet::MwmId> & mwms) override;
|
||||
|
||||
/**
|
||||
* @brief Unsubscribes from a traffic service we are subscribed to.
|
||||
*/
|
||||
virtual void Unsubscribe() override;
|
||||
|
||||
/**
|
||||
* @brief Whether this source should be polled.
|
||||
*
|
||||
* Prior to calling `Poll()` on a source, the caller should always first call `IsPollNeeded()` and
|
||||
* poll the source only if the result is true.
|
||||
*
|
||||
* This implementation always returns false, as message delivery on Android uses `FEED` (push).
|
||||
*
|
||||
* @return true if the source should be polled, false if not.
|
||||
*/
|
||||
virtual bool IsPollNeeded() override { return false; };
|
||||
|
||||
/**
|
||||
* @brief Polls the traffic service for updates.
|
||||
*
|
||||
* This implementation does nothing, as message delivery on Android uses `FEED` (push).
|
||||
*/
|
||||
virtual void Poll() override {};
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructs a new `AndroidTraffSourceV0_8`.
|
||||
* @param manager The `TrafficSourceManager` instance to register the source with.
|
||||
* @param packageId The package ID of the app providing the TraFF source.
|
||||
*/
|
||||
AndroidTraffSourceV0_8(TraffSourceManager & manager, std::string const & packageId);
|
||||
|
||||
private:
|
||||
// TODO subscription state
|
||||
|
||||
/**
|
||||
* @brief The Java implementation class instance.
|
||||
*/
|
||||
jobject m_implObject;
|
||||
|
||||
/**
|
||||
* @brief The Java subscribe method.
|
||||
*/
|
||||
jmethodID m_subscribeImpl;
|
||||
|
||||
/**
|
||||
* @brief The Java changeSubscription method.
|
||||
*/
|
||||
jmethodID m_changeSubscriptionImpl;
|
||||
|
||||
/**
|
||||
* @brief The Java unsubscribe method.
|
||||
*/
|
||||
jmethodID m_unsubscribeImpl;
|
||||
};
|
||||
} // namespace traffxml
|
||||
@@ -0,0 +1,34 @@
|
||||
// TODO which of the two do we need? (jni_helper includes jni)
|
||||
//#include <jni>
|
||||
#include "app/organicmaps/sdk/core/jni_helper.hpp"
|
||||
|
||||
#include "traffxml/traff_source.hpp"
|
||||
#include "traffxml/traff_model_xml.hpp"
|
||||
|
||||
#include <optional>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
JNIEXPORT void JNICALL
|
||||
Java_app_organicmaps_sdk_traffxml_SourceImpl_onFeedReceivedImpl(JNIEnv * env, jclass thiz, jlong nativeManager, jstring feed)
|
||||
{
|
||||
std::string feedStd = jni::ToNativeString(env, feed);
|
||||
pugi::xml_document document;
|
||||
traffxml::TraffFeed parsedFeed;
|
||||
|
||||
if (!document.load_string(feedStd.c_str()))
|
||||
{
|
||||
LOG(LWARNING, ("Feed is not a well-formed XML document"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!traffxml::ParseTraff(document, std::nullopt, parsedFeed))
|
||||
{
|
||||
LOG(LWARNING, ("Feed is not a valid TraFF feed"));
|
||||
return;
|
||||
}
|
||||
|
||||
traffxml::TraffSourceManager & manager = *reinterpret_cast<traffxml::TraffSourceManager*>(nativeManager);
|
||||
manager.ReceiveFeed(parsedFeed);
|
||||
}
|
||||
}
|
||||
@@ -119,4 +119,74 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_util_Config_nativeSetTranslitera
|
||||
frm()->SaveTransliteration(value);
|
||||
frm()->AllowTransliteration(value);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_app_organicmaps_sdk_util_Config_nativeGetTrafficHttpEnabled(JNIEnv * env, jclass thiz)
|
||||
{
|
||||
return frm()->LoadTrafficHttpEnabled();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_app_organicmaps_sdk_util_Config_nativeSetTrafficHttpEnabled(JNIEnv * env, jclass thiz,
|
||||
jboolean value)
|
||||
{
|
||||
frm()->SaveTrafficHttpEnabled(value);
|
||||
frm()->SetTrafficHttpEnabled(value);
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_app_organicmaps_sdk_util_Config_nativeGetTrafficHttpUrl(JNIEnv * env, jclass thiz)
|
||||
{
|
||||
std::string value = frm()->LoadTrafficHttpUrl();
|
||||
return jni::ToJavaString(env, value);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_app_organicmaps_sdk_util_Config_nativeSetTrafficHttpUrl(JNIEnv * env, jclass thiz,
|
||||
jstring value)
|
||||
{
|
||||
frm()->SaveTrafficHttpUrl(jni::ToNativeString(env, value));
|
||||
frm()->SetTrafficHttpUrl(jni::ToNativeString(env, value));
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_app_organicmaps_sdk_util_Config_applyTrafficLegacyEnabled(JNIEnv * env, jclass thiz,
|
||||
jboolean value)
|
||||
{
|
||||
TrafficManager & tm = g_framework->GetTrafficManager();
|
||||
tm.RemoveTraffSourceIf([](traffxml::TraffSource* source) {
|
||||
if (traffxml::AndroidTraffSourceV0_7* traffSource = dynamic_cast<traffxml::AndroidTraffSourceV0_7*>(source))
|
||||
{
|
||||
traffSource->Close();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
});
|
||||
if (value)
|
||||
traffxml::AndroidTraffSourceV0_7::Create(tm);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_app_organicmaps_sdk_util_Config_applyTrafficApps(JNIEnv * env, jclass thiz, jobjectArray value)
|
||||
{
|
||||
jsize valueLen = env->GetArrayLength(value);
|
||||
TrafficManager & tm = g_framework->GetTrafficManager();
|
||||
tm.RemoveTraffSourceIf([](traffxml::TraffSource* source) {
|
||||
if (traffxml::AndroidTraffSourceV0_8* traffSource = dynamic_cast<traffxml::AndroidTraffSourceV0_8*>(source))
|
||||
{
|
||||
traffSource->Close();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
});
|
||||
for (jsize i = 0; i < valueLen; i++)
|
||||
{
|
||||
jstring jAppId = (jstring)env->GetObjectArrayElement(value, i);
|
||||
std::string appId = jni::ToNativeString(env, jAppId);
|
||||
traffxml::AndroidTraffSourceV0_8::Create(tm, appId);
|
||||
env->DeleteLocalRef(jAppId);
|
||||
}
|
||||
}
|
||||
} // extern "C"
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright © 2017–2020 traffxml.org.
|
||||
*
|
||||
* Relicensed to CoMaps by the original author.
|
||||
*/
|
||||
|
||||
package app.organicmaps.sdk.traffxml;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import app.organicmaps.sdk.traffxml.Version;
|
||||
import app.organicmaps.sdk.traffxml.AndroidTransport;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.IntentFilter.MalformedMimeTypeException;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
|
||||
public class AndroidConsumer {
|
||||
/**
|
||||
* Creates an Intent filter which matches the Intents a TraFF consumer needs to receive.
|
||||
*
|
||||
* <p>Different filters are available for consumers implementing different versions of the TraFF
|
||||
* specification.
|
||||
*
|
||||
* @param version The version of the TraFF specification (one of the constants in {@link org.traffxml.traff.Version})
|
||||
*
|
||||
* @return An intent filter matching the necessary Intents
|
||||
*/
|
||||
public static IntentFilter createIntentFilter(int version) {
|
||||
IntentFilter res = new IntentFilter();
|
||||
switch (version) {
|
||||
case Version.V0_7:
|
||||
res.addAction(AndroidTransport.ACTION_TRAFF_PUSH);
|
||||
break;
|
||||
case Version.V0_8:
|
||||
res.addAction(AndroidTransport.ACTION_TRAFF_PUSH);
|
||||
res.addDataScheme(AndroidTransport.CONTENT_SCHEMA);
|
||||
try {
|
||||
res.addDataType(AndroidTransport.MIME_TYPE_TRAFF);
|
||||
} catch (MalformedMimeTypeException e) {
|
||||
// as long as the constant is a well-formed MIME type, this exception never gets thrown
|
||||
e.printStackTrace();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Invalid version code: " + version);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a TraFF intent to a source.
|
||||
*
|
||||
* <p>This encapsulates most of the low-level Android handling.
|
||||
*
|
||||
* <p>If the recipient specified in {@code packageName} declares multiple receivers for the intent in its
|
||||
* manifest, a separate intent will be delivered to each of them. The intent will not be delivered to
|
||||
* receivers registered at runtime.
|
||||
*
|
||||
* <p>All intents are sent as explicit ordered broadcasts. This means two things:
|
||||
*
|
||||
* <p>Any app which declares a matching receiver in its manifest will be woken up to process the intent.
|
||||
* This works even with certain Android 7 builds which restrict intent delivery to apps which are not
|
||||
* currently running.
|
||||
*
|
||||
* <p>It is safe for the recipient to unconditionally set result data. If the recipient does not set
|
||||
* result data, the result will have a result code of
|
||||
* {@link org.traffxml.transport.android.AndroidTransport#RESULT_INTERNAL_ERROR}, no data and no extras.
|
||||
*
|
||||
* @param context The context
|
||||
* @param action The intent action.
|
||||
* @param data The intent data (for TraFF, this is the content provider URI), or null
|
||||
* @param extras The extras for the intent
|
||||
* @param packageName The package name for the intent recipient, or null to deliver the intent to all matching receivers
|
||||
* @param receiverPermission A permission which the recipient must hold, or null if not required
|
||||
* @param resultReceiver A BroadcastReceiver which will receive the result for the intent
|
||||
*/
|
||||
public static void sendTraffIntent(Context context, String action, Uri data, Bundle extras, String packageName,
|
||||
String receiverPermission, BroadcastReceiver resultReceiver) {
|
||||
Intent outIntent = new Intent(action);
|
||||
PackageManager pm = context.getPackageManager();
|
||||
List<ResolveInfo> receivers = pm.queryBroadcastReceivers(outIntent, 0);
|
||||
if (receivers != null)
|
||||
for (ResolveInfo receiver : receivers) {
|
||||
if ((packageName != null) && !packageName.equals(receiver.activityInfo.applicationInfo.packageName))
|
||||
continue;
|
||||
ComponentName cn = new ComponentName(receiver.activityInfo.applicationInfo.packageName,
|
||||
receiver.activityInfo.name);
|
||||
outIntent = new Intent(action);
|
||||
if (data != null)
|
||||
outIntent.setData(data);
|
||||
if (extras != null)
|
||||
outIntent.putExtras(extras);
|
||||
outIntent.setComponent(cn);
|
||||
context.sendOrderedBroadcast (outIntent,
|
||||
receiverPermission,
|
||||
resultReceiver,
|
||||
null, // scheduler,
|
||||
AndroidTransport.RESULT_INTERNAL_ERROR, // initialCode,
|
||||
null, // initialData,
|
||||
null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,222 @@
|
||||
/*
|
||||
* Copyright © 2019–2020 traffxml.org.
|
||||
*
|
||||
* Relicensed to CoMaps by the original author.
|
||||
*/
|
||||
|
||||
package app.organicmaps.sdk.traffxml;
|
||||
|
||||
public class AndroidTransport {
|
||||
/**
|
||||
* Intent to poll a peer for its capabilities.
|
||||
*
|
||||
* <p>This is a broadcast intent and must be sent as an explicit broadcast.
|
||||
*/
|
||||
public static final String ACTION_TRAFF_GET_CAPABILITIES = "org.traffxml.traff.GET_CAPABILITIES";
|
||||
|
||||
/**
|
||||
* Intent to send a heartbeat to a peer.
|
||||
*
|
||||
* <p>This is a broadcast intent and must be sent as an explicit broadcast.
|
||||
*/
|
||||
public static final String ACTION_TRAFF_HEARTBEAT = "org.traffxml.traff.GET_HEARTBEAT";
|
||||
|
||||
/**
|
||||
* Intent to poll a source for information.
|
||||
*
|
||||
* <p>This is a broadcast intent and must be sent as an explicit broadcast.
|
||||
*
|
||||
* <p>Polling is a legacy feature on Android and deprecated in TraFF 0.8 (rather than polling, TraFF 0.8
|
||||
* applications query the content provider). Therefore, poll operations are subscriptionless, and the
|
||||
* source should either reply with all messages it currently holds, or ignore the request.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String ACTION_TRAFF_POLL = "org.traffxml.traff.POLL";
|
||||
|
||||
/**
|
||||
* Intent for a push feed.
|
||||
*
|
||||
* <p>This is a broadcast intent. It can be used in different forms:
|
||||
*
|
||||
* <p>As of TraFF 0.8, it must be sent as an explicit broadcast and include the
|
||||
* {@link #EXTRA_SUBSCRIPTION_ID} extra. The intent data must be a URI to the content provider from which
|
||||
* the messages can be retrieved. The {@link #EXTRA_FEED} extra is not supported. The feed is part of a
|
||||
* subscription and will contain only changes over feeds sent previously as part of the same
|
||||
* subscription.
|
||||
*
|
||||
* <p>Legacy applications omit the {@link #EXTRA_SUBSCRIPTION_ID} extra and may send it as an implicit
|
||||
* broadcast. If an application supports both legacy transport and TraFF 0.8 or later, it must include
|
||||
* the {@link #EXTRA_PACKAGE} extra. The feed is sent in the {@link #EXTRA_FEED} extra, as legacy
|
||||
* applications may not support content providers. If sent as a response to a subscriptionless poll, the
|
||||
* source should include all messages it holds, else the set of messages included is at the discretion of
|
||||
* the source.
|
||||
*
|
||||
* <p>Future applications may reintroduce unsolicited push operations for certain scenarios.
|
||||
*/
|
||||
public static final String ACTION_TRAFF_PUSH = "org.traffxml.traff.FEED";
|
||||
|
||||
/**
|
||||
* Intent for a subscription request.
|
||||
*
|
||||
* <p>This is a broadcast intent and must be sent as an explicit broadcast.
|
||||
*
|
||||
* <p>The filter list must be specified in the {@link #EXTRA_FILTER_LIST} extra.
|
||||
*
|
||||
* <p>The sender must indicate its package name in the {@link #EXTRA_PACKAGE} extra.
|
||||
*/
|
||||
public static final String ACTION_TRAFF_SUBSCRIBE = "org.traffxml.traff.SUBSCRIBE";
|
||||
|
||||
/**
|
||||
* Intent for a subscription change request,
|
||||
*
|
||||
* <p>This is a broadcast intent and must be sent as an explicit broadcast.
|
||||
*
|
||||
* <p>This intent must have {@link #EXTRA_SUBSCRIPTION_ID} set to the ID of an existing subscription between
|
||||
* the calling consumer and the source which receives the broadcast.
|
||||
*
|
||||
* <p>The new filter list must be specified in the {@link #EXTRA_FILTER_LIST} extra.
|
||||
*/
|
||||
public static final String ACTION_TRAFF_SUBSCRIPTION_CHANGE = "org.traffxml.traff.SUBSCRIPTION_CHANGE";
|
||||
|
||||
/**
|
||||
* Intent for an unsubscribe request,
|
||||
*
|
||||
* <p>This is a broadcast intent and must be sent as an explicit broadcast.
|
||||
*
|
||||
* <p>This intent must have {@link #EXTRA_SUBSCRIPTION_ID} set to the ID of an existing subscription between
|
||||
* the calling consumer and the source which receives the broadcast. It signals that the consumer is no
|
||||
* longer interested in receiving messages related to that subscription, and that the source should stop
|
||||
* sending updates. Unsubscribing from a nonexistent subscription is a no-op.
|
||||
*/
|
||||
public static final String ACTION_TRAFF_UNSUBSCRIBE = "org.traffxml.traff.UNSUBSCRIBE";
|
||||
|
||||
/**
|
||||
* Name for the column which holds the message data.
|
||||
*/
|
||||
public static final String COLUMN_DATA = "data";
|
||||
|
||||
/**
|
||||
* Schema for TraFF content URIs.
|
||||
*/
|
||||
public static final String CONTENT_SCHEMA = "content";
|
||||
|
||||
/**
|
||||
* String representations of TraFF result codes
|
||||
*/
|
||||
public static final String[] ERROR_STRINGS = {
|
||||
"unknown (0)",
|
||||
"invalid request (1)",
|
||||
"subscription rejected by the source (2)",
|
||||
"requested area not covered (3)",
|
||||
"requested area partially covered (4)",
|
||||
"subscription ID not recognized by the source (5)",
|
||||
"unknown (6)",
|
||||
"source reported an internal error (7)"
|
||||
};
|
||||
|
||||
/**
|
||||
* Extra which contains the capabilities of the peer.
|
||||
*
|
||||
* <p>This is a String extra. It contains a {@code capabilities} XML element.
|
||||
*/
|
||||
public static final String EXTRA_CAPABILITIES = "capabilities";
|
||||
|
||||
/**
|
||||
* Extra which contains a TraFF feed.
|
||||
*
|
||||
* <p>This is a String extra. It contains a {@code feed} XML element.
|
||||
*
|
||||
* <p>The sender should be careful to keep the size of this extra low, as Android has a 1 MByte limit on all
|
||||
* pending Binder transactions. However, there is no feedback to the sender about the capacity still
|
||||
* available, or whether a request exceeds that limit. Therefore, senders should keep the size if each
|
||||
* feed significantly below that limit. If necessary, they should split up a feed into multiple smaller
|
||||
* ones and send them with a delay in between.
|
||||
*
|
||||
* <p>This mechanism is deprecated since TraFF 0.8 and peers are no longer required to support it. Peers
|
||||
* which support TraFF 0.8 must rely on content providers for message transport.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String EXTRA_FEED = "feed";
|
||||
|
||||
/**
|
||||
* Extra which contains a filter list.
|
||||
*
|
||||
* <p>This is a String extra. It contains a {@code filter_list} XML element.
|
||||
*/
|
||||
public static final String EXTRA_FILTER_LIST = "filter_list";
|
||||
|
||||
/**
|
||||
* Extra which contains the package name of the app sending it.
|
||||
*
|
||||
* <p>This is a String extra.
|
||||
*/
|
||||
public static final String EXTRA_PACKAGE = "package";
|
||||
|
||||
/**
|
||||
* Extra which contains a subscription ID.
|
||||
*
|
||||
* <p>This is a String extra.
|
||||
*/
|
||||
public static final String EXTRA_SUBSCRIPTION_ID = "subscription_id";
|
||||
|
||||
/**
|
||||
* Extra which contains the timeout duration for a subscription.
|
||||
*
|
||||
* <p>This is an integer extra.
|
||||
*/
|
||||
public static final String EXTRA_TIMEOUT = "timeout";
|
||||
|
||||
/**
|
||||
* The MIME type for TraFF content providers.
|
||||
*/
|
||||
public static final String MIME_TYPE_TRAFF = "vnd.android.cursor.dir/org.traffxml.message";
|
||||
|
||||
/**
|
||||
* The operation completed successfully.
|
||||
*/
|
||||
public static final int RESULT_OK = -1;
|
||||
|
||||
/**
|
||||
* An internal error prevented the recipient from fulfilling the request.
|
||||
*/
|
||||
public static final int RESULT_INTERNAL_ERROR = 7;
|
||||
|
||||
/**
|
||||
* A nonexistent operation was attempted, or an operation was attempted with incomplete or otherwise
|
||||
* invalid data.
|
||||
*/
|
||||
public static final int RESULT_INVALID = 1;
|
||||
|
||||
/**
|
||||
* The subscription was rejected, and no messages will be sent.
|
||||
*/
|
||||
public static final int RESULT_SUBSCRIPTION_REJECTED = 2;
|
||||
|
||||
/**
|
||||
* The subscription was rejected because the source will never provide messages matching the selection.
|
||||
*/
|
||||
public static final int RESULT_NOT_COVERED = 3;
|
||||
|
||||
/**
|
||||
* The subscription was accepted but the source can only provide messages for parts of the selection.
|
||||
*/
|
||||
public static final int RESULT_PARTIALLY_COVERED = 4;
|
||||
|
||||
/**
|
||||
* The request failed because it refers to a subscription which does not exist between the source and
|
||||
* consumer involved.
|
||||
*/
|
||||
public static final int RESULT_SUBSCRIPTION_UNKNOWN = 5;
|
||||
|
||||
/**
|
||||
* The request failed because the aggregator does not accept unsolicited push requests from the sensor.
|
||||
*/
|
||||
public static final int RESULT_PUSH_REJECTED = 6;
|
||||
|
||||
public static String formatTraffError(int code) {
|
||||
if ((code < 0) || (code >= ERROR_STRINGS.length))
|
||||
return String.format("unknown (%d)", code);
|
||||
else
|
||||
return ERROR_STRINGS[code];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package app.organicmaps.sdk.traffxml;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
|
||||
/**
|
||||
* Abstract superclass for TraFF source implementations.
|
||||
*/
|
||||
public abstract class SourceImpl extends BroadcastReceiver
|
||||
{
|
||||
/**
|
||||
* Creates a new instance.
|
||||
*
|
||||
* @param context The application context
|
||||
*/
|
||||
public SourceImpl(Context context, long nativeManager)
|
||||
{
|
||||
super();
|
||||
this.context = context;
|
||||
this.nativeManager = nativeManager;
|
||||
}
|
||||
|
||||
protected Context context;
|
||||
|
||||
/**
|
||||
* The native `TraffSourceManager` instance.
|
||||
*/
|
||||
protected long nativeManager;
|
||||
|
||||
/**
|
||||
* Subscribes to a traffic source.
|
||||
*
|
||||
* @param filterList The filter list in XML format
|
||||
*/
|
||||
public abstract void subscribe(String filterList);
|
||||
|
||||
/**
|
||||
* Changes an existing traffic subscription.
|
||||
*
|
||||
* @param filterList The filter list in XML format
|
||||
*/
|
||||
public abstract void changeSubscription(String filterList);
|
||||
|
||||
/**
|
||||
* Unsubscribes from a traffic source we are subscribed to.
|
||||
*/
|
||||
public abstract void unsubscribe();
|
||||
|
||||
/**
|
||||
* Forwards a newly received TraFF feed to the traffic module for processing.
|
||||
*
|
||||
* Called when a TraFF feed is received. This is a wrapper around {@link #onFeedReceivedImpl(long, String)}.
|
||||
*
|
||||
* @param feed The TraFF feed
|
||||
*/
|
||||
protected void onFeedReceived(String feed)
|
||||
{
|
||||
onFeedReceivedImpl(nativeManager, feed);
|
||||
}
|
||||
|
||||
/**
|
||||
* Forwards a newly received TraFF feed to the traffic module for processing.
|
||||
*
|
||||
* Called when a TraFF feed is received.
|
||||
*
|
||||
* @param nativeManager The native `TraffSourceManager` instance
|
||||
* @param feed The TraFF feed
|
||||
*/
|
||||
protected static native void onFeedReceivedImpl(long nativeManager, String feed);
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
package app.organicmaps.sdk.traffxml;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
|
||||
/**
|
||||
* Implementation for a TraFF 0.7 source.
|
||||
*/
|
||||
public class SourceImplV0_7 extends SourceImpl
|
||||
{
|
||||
private PackageManager pm;
|
||||
|
||||
/**
|
||||
* Creates a new instance.
|
||||
*
|
||||
* @param context The application context
|
||||
*/
|
||||
public SourceImplV0_7(Context context, long nativeManager)
|
||||
{
|
||||
super(context, nativeManager);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribes to a traffic source.
|
||||
*
|
||||
* @param filterList The filter list in XML format
|
||||
*/
|
||||
@Override
|
||||
public void subscribe(String filterList)
|
||||
{
|
||||
IntentFilter traffFilter07 = new IntentFilter();
|
||||
traffFilter07.addAction(AndroidTransport.ACTION_TRAFF_PUSH);
|
||||
|
||||
this.context.registerReceiver(this, traffFilter07);
|
||||
|
||||
// Broadcast a poll intent to all TraFF 0.7-only receivers
|
||||
Intent outIntent = new Intent(AndroidTransport.ACTION_TRAFF_POLL);
|
||||
pm = this.context.getPackageManager();
|
||||
List<ResolveInfo> receivers07 = pm.queryBroadcastReceivers(outIntent, 0);
|
||||
List<ResolveInfo> receivers08 = pm.queryBroadcastReceivers(new Intent(AndroidTransport.ACTION_TRAFF_GET_CAPABILITIES), 0);
|
||||
if (receivers07 != null)
|
||||
{
|
||||
/*
|
||||
* Get receivers which support only TraFF 0.7 and poll them.
|
||||
* If there are no TraFF 0.7 sources at the moment, we register the receiver nonetheless.
|
||||
* That way, if any new sources are added during the session, we get any messages they send.
|
||||
*/
|
||||
if (receivers08 != null)
|
||||
receivers07.removeAll(receivers08);
|
||||
for (ResolveInfo receiver : receivers07)
|
||||
{
|
||||
ComponentName cn = new ComponentName(receiver.activityInfo.applicationInfo.packageName,
|
||||
receiver.activityInfo.name);
|
||||
outIntent = new Intent(AndroidTransport.ACTION_TRAFF_POLL);
|
||||
outIntent.setComponent(cn);
|
||||
this.context.sendBroadcast(outIntent, Manifest.permission.ACCESS_COARSE_LOCATION);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes an existing traffic subscription.
|
||||
*
|
||||
* This implementation does nothing, as TraFF 0.7 does not support subscriptions.
|
||||
*
|
||||
* @param filterList The filter list in XML format
|
||||
*/
|
||||
@Override
|
||||
public void changeSubscription(String filterList)
|
||||
{
|
||||
// NOP
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsubscribes from a traffic source we are subscribed to.
|
||||
*/
|
||||
@Override
|
||||
public void unsubscribe()
|
||||
{
|
||||
this.context.unregisterReceiver(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent)
|
||||
{
|
||||
if (intent == null)
|
||||
return;
|
||||
|
||||
if (intent.getAction().equals(AndroidTransport.ACTION_TRAFF_PUSH))
|
||||
{
|
||||
/* 0.7 feed */
|
||||
String packageName = intent.getStringExtra(AndroidTransport.EXTRA_PACKAGE);
|
||||
/*
|
||||
* If the feed comes from a TraFF 0.8+ source, skip it (this may happen with “bilingual”
|
||||
* TraFF 0.7/0.8 sources). That ensures the only way to get information from such sources is
|
||||
* through a TraFF 0.8 subscription. Fetching the list from scratch each time ensures that
|
||||
* apps installed during runtime get considered.)
|
||||
*/
|
||||
if (packageName != null)
|
||||
{
|
||||
for (ResolveInfo info : pm.queryBroadcastReceivers(new Intent(AndroidTransport.ACTION_TRAFF_GET_CAPABILITIES), 0))
|
||||
if (packageName.equals(info.resolvePackageName))
|
||||
return;
|
||||
}
|
||||
String feed = intent.getStringExtra(AndroidTransport.EXTRA_FEED);
|
||||
if (feed == null)
|
||||
{
|
||||
Logger.w(this.getClass().getSimpleName(), "empty feed, ignoring");
|
||||
}
|
||||
else
|
||||
{
|
||||
onFeedReceived(feed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,240 @@
|
||||
package app.organicmaps.sdk.traffxml;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.IntentFilter.MalformedMimeTypeException;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
|
||||
/**
|
||||
* Implementation for a TraFF 0.8 source.
|
||||
*/
|
||||
public class SourceImplV0_8 extends SourceImpl
|
||||
{
|
||||
|
||||
private String packageName;
|
||||
private String subscriptionId = null;
|
||||
|
||||
/**
|
||||
* Creates a new instance.
|
||||
*
|
||||
* @param context The application context
|
||||
* @param packageName The package name for the source
|
||||
*/
|
||||
public SourceImplV0_8(Context context, long nativeManager, String packageName)
|
||||
{
|
||||
super(context, nativeManager);
|
||||
this.packageName = packageName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribes to a traffic source.
|
||||
*
|
||||
* @param filterList The filter list in XML format
|
||||
*/
|
||||
@Override
|
||||
public void subscribe(String filterList)
|
||||
{
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(AndroidTransport.ACTION_TRAFF_PUSH);
|
||||
filter.addDataScheme(AndroidTransport.CONTENT_SCHEMA);
|
||||
try
|
||||
{
|
||||
filter.addDataType(AndroidTransport.MIME_TYPE_TRAFF);
|
||||
}
|
||||
catch (MalformedMimeTypeException e)
|
||||
{
|
||||
// as long as the constant is a well-formed MIME type, this exception never gets thrown
|
||||
// TODO revisit logging
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
context.registerReceiver(this, filter);
|
||||
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString(AndroidTransport.EXTRA_PACKAGE, context.getPackageName());
|
||||
extras.putString(AndroidTransport.EXTRA_FILTER_LIST, filterList);
|
||||
AndroidConsumer.sendTraffIntent(context, AndroidTransport.ACTION_TRAFF_SUBSCRIBE, null,
|
||||
extras, packageName, Manifest.permission.ACCESS_COARSE_LOCATION, this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes an existing traffic subscription.
|
||||
*
|
||||
* @param filterList The filter list in XML format
|
||||
*/
|
||||
@Override
|
||||
public void changeSubscription(String filterList)
|
||||
{
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString(AndroidTransport.EXTRA_SUBSCRIPTION_ID, subscriptionId);
|
||||
extras.putString(AndroidTransport.EXTRA_FILTER_LIST, filterList);
|
||||
AndroidConsumer.sendTraffIntent(context, AndroidTransport.ACTION_TRAFF_SUBSCRIPTION_CHANGE, null,
|
||||
extras, packageName, Manifest.permission.ACCESS_COARSE_LOCATION, this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsubscribes from a traffic source we are subscribed to.
|
||||
*/
|
||||
@Override
|
||||
public void unsubscribe()
|
||||
{
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString(AndroidTransport.EXTRA_SUBSCRIPTION_ID, subscriptionId);
|
||||
AndroidConsumer.sendTraffIntent(this.context, AndroidTransport.ACTION_TRAFF_UNSUBSCRIBE, null,
|
||||
extras, packageName, Manifest.permission.ACCESS_COARSE_LOCATION, this);
|
||||
|
||||
this.context.unregisterReceiver(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent)
|
||||
{
|
||||
if (intent == null)
|
||||
return;
|
||||
|
||||
if (intent.getAction().equals(AndroidTransport.ACTION_TRAFF_PUSH))
|
||||
{
|
||||
Uri uri = intent.getData();
|
||||
if (uri != null)
|
||||
{
|
||||
/* 0.8 feed */
|
||||
String subscriptionId = intent.getStringExtra(AndroidTransport.EXTRA_SUBSCRIPTION_ID);
|
||||
if (subscriptionId.equals(this.subscriptionId))
|
||||
fetchMessages(context, uri);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.w(this.getClass().getSimpleName(), "no URI in feed, ignoring");
|
||||
} // uri != null
|
||||
} else if (intent.getAction().equals(AndroidTransport.ACTION_TRAFF_SUBSCRIBE)) {
|
||||
if (this.getResultCode() != AndroidTransport.RESULT_OK) {
|
||||
Bundle extras = this.getResultExtras(true);
|
||||
if (extras != null)
|
||||
Logger.e(this.getClass().getSimpleName(), String.format("subscription to %s failed, %s",
|
||||
extras.getString(AndroidTransport.EXTRA_PACKAGE), AndroidTransport.formatTraffError(this.getResultCode())));
|
||||
else
|
||||
Logger.e(this.getClass().getSimpleName(), String.format("subscription failed, %s",
|
||||
AndroidTransport.formatTraffError(this.getResultCode())));
|
||||
if (this.getResultCode() == AndroidTransport.RESULT_INTERNAL_ERROR)
|
||||
Logger.e(this.getClass().getSimpleName(), "Make sure the TraFF source app has at least coarse location permission, even when running in background");
|
||||
return;
|
||||
}
|
||||
Bundle extras = this.getResultExtras(true);
|
||||
String data = this.getResultData();
|
||||
String packageName = extras.getString(AndroidTransport.EXTRA_PACKAGE);
|
||||
if (!this.packageName.equals(packageName))
|
||||
return;
|
||||
String subscriptionId = extras.getString(AndroidTransport.EXTRA_SUBSCRIPTION_ID);
|
||||
if (subscriptionId == null) {
|
||||
Logger.e(this.getClass().getSimpleName(),
|
||||
String.format("subscription to %s failed: no subscription ID returned", packageName));
|
||||
return;
|
||||
} else if (packageName == null) {
|
||||
Logger.e(this.getClass().getSimpleName(), "subscription failed: no package name");
|
||||
return;
|
||||
} else if (data == null) {
|
||||
Logger.w(this.getClass().getSimpleName(),
|
||||
String.format("subscription to %s successful (ID: %s) but no content URI was supplied. "
|
||||
+ "This is an issue with the source and may result in delayed message retrieval.",
|
||||
packageName, subscriptionId));
|
||||
this.subscriptionId = subscriptionId;
|
||||
return;
|
||||
}
|
||||
Logger.d(this.getClass().getSimpleName(),
|
||||
"subscription to " + packageName + " successful, ID: " + subscriptionId);
|
||||
this.subscriptionId = subscriptionId;
|
||||
fetchMessages(context, Uri.parse(data));
|
||||
} else if (intent.getAction().equals(AndroidTransport.ACTION_TRAFF_SUBSCRIPTION_CHANGE)) {
|
||||
if (this.getResultCode() != AndroidTransport.RESULT_OK) {
|
||||
Bundle extras = this.getResultExtras(true);
|
||||
if (extras != null)
|
||||
Logger.e(this.getClass().getSimpleName(),
|
||||
String.format("subscription change for %s failed: %s",
|
||||
extras.getString(AndroidTransport.EXTRA_SUBSCRIPTION_ID),
|
||||
AndroidTransport.formatTraffError(this.getResultCode())));
|
||||
else
|
||||
Logger.e(this.getClass().getSimpleName(),
|
||||
String.format("subscription change failed: %s",
|
||||
AndroidTransport.formatTraffError(this.getResultCode())));
|
||||
return;
|
||||
}
|
||||
Bundle extras = intent.getExtras();
|
||||
String data = this.getResultData();
|
||||
String subscriptionId = extras.getString(AndroidTransport.EXTRA_SUBSCRIPTION_ID);
|
||||
if (subscriptionId == null) {
|
||||
Logger.w(this.getClass().getSimpleName(),
|
||||
"subscription change successful but the source did not specify the subscription ID. "
|
||||
+ "This is an issue with the source and may result in delayed message retrieval. "
|
||||
+ "URI: " + data);
|
||||
return;
|
||||
} else if (!subscriptionId.equals(this.subscriptionId)) {
|
||||
return;
|
||||
} else if (data == null) {
|
||||
Logger.w(this.getClass().getSimpleName(),
|
||||
String.format("subscription change for %s successful but no content URI was supplied. "
|
||||
+ "This is an issue with the source and may result in delayed message retrieval.",
|
||||
subscriptionId));
|
||||
return;
|
||||
}
|
||||
Logger.d(this.getClass().getSimpleName(),
|
||||
"subscription change for " + subscriptionId + " successful");
|
||||
fetchMessages(context, Uri.parse(data));
|
||||
} else if (intent.getAction().equals(AndroidTransport.ACTION_TRAFF_UNSUBSCRIBE)) {
|
||||
String subscriptionId = intent.getStringExtra(AndroidTransport.EXTRA_SUBSCRIPTION_ID);
|
||||
if (subscriptionId.equals(this.subscriptionId))
|
||||
this.subscriptionId = null;
|
||||
// TODO is there anything to do here? (Comment below is from Navit)
|
||||
/*
|
||||
* If we ever unsubscribe for reasons other than that we are shutting down or got a feed for
|
||||
* a subscription we don’t recognize, or if we start keeping a persistent list of
|
||||
* subscriptions, we need to delete the subscription from our list. Until then, there is
|
||||
* nothing to do here: either the subscription isn’t in the list, or we are about to shut
|
||||
* down and the whole list is about to get discarded.
|
||||
*/
|
||||
} else if (intent.getAction().equals(AndroidTransport.ACTION_TRAFF_HEARTBEAT)) {
|
||||
String subscriptionId = intent.getStringExtra(AndroidTransport.EXTRA_SUBSCRIPTION_ID);
|
||||
if (subscriptionId.equals(this.subscriptionId)) {
|
||||
Logger.d(this.getClass().getSimpleName(),
|
||||
String.format("got a heartbeat from %s for subscription %s; sending result",
|
||||
intent.getStringExtra(AndroidTransport.EXTRA_PACKAGE), subscriptionId));
|
||||
this.setResult(AndroidTransport.RESULT_OK, null, null);
|
||||
}
|
||||
} // intent.getAction()
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches TraFF messages from a content provider.
|
||||
*
|
||||
* @param context The context to use for the content resolver
|
||||
* @param uri The content provider URI
|
||||
*/
|
||||
private void fetchMessages(Context context, Uri uri) {
|
||||
try {
|
||||
Cursor cursor = context.getContentResolver().query(uri, new String[] {AndroidTransport.COLUMN_DATA}, null, null, null);
|
||||
if (cursor == null)
|
||||
return;
|
||||
if (cursor.getCount() < 1) {
|
||||
cursor.close();
|
||||
return;
|
||||
}
|
||||
StringBuilder builder = new StringBuilder("<feed>\n");
|
||||
while (cursor.moveToNext())
|
||||
builder.append(cursor.getString(cursor.getColumnIndex(AndroidTransport.COLUMN_DATA))).append("\n");
|
||||
builder.append("</feed>");
|
||||
cursor.close();
|
||||
onFeedReceived(builder.toString());
|
||||
} catch (Exception e) {
|
||||
Logger.w(this.getClass().getSimpleName(),
|
||||
String.format("Unable to fetch messages from %s", uri.toString()), e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright © 2019–2020 traffxml.org.
|
||||
*
|
||||
* Relicensed to CoMaps by the original author.
|
||||
*/
|
||||
|
||||
package app.organicmaps.sdk.traffxml;
|
||||
|
||||
/**
|
||||
* Constants for versions.
|
||||
*/
|
||||
public class Version {
|
||||
/** Version 0.7: introduced transport on Android. */
|
||||
public static final int V0_7 = 7;
|
||||
|
||||
/** Version 0.8: introduced subscriptions and HTTP transport. */
|
||||
public static final int V0_8 = 8;
|
||||
}
|
||||
@@ -70,6 +70,16 @@ public final class Config
|
||||
* True if the first start animation has been seen.
|
||||
*/
|
||||
private static final String KEY_MISC_FIRST_START_DIALOG_SEEN = "FirstStartDialogSeen";
|
||||
|
||||
/**
|
||||
* Whether feeds from legacy TraFF applications (TraFF 0.7, Android transport) are enabled.
|
||||
*/
|
||||
private static final String KEY_TRAFFIC_LEGACY_ENABLED = "TrafficLegacyEnabled";
|
||||
|
||||
/**
|
||||
* TraFF (0.8+) applications from which to request traffic data.
|
||||
*/
|
||||
private static final String KEY_TRAFFIC_APPS = "TrafficApps";
|
||||
|
||||
private Config() {}
|
||||
|
||||
@@ -393,6 +403,63 @@ public final class Config
|
||||
nativeSetTransliteration(value);
|
||||
}
|
||||
|
||||
public static boolean getTrafficHttpEnabled()
|
||||
{
|
||||
return nativeGetTrafficHttpEnabled();
|
||||
}
|
||||
|
||||
public static void setTrafficHttpEnabled(boolean value)
|
||||
{
|
||||
nativeSetTrafficHttpEnabled(value);
|
||||
}
|
||||
|
||||
public static String getTrafficHttpUrl()
|
||||
{
|
||||
return nativeGetTrafficHttpUrl();
|
||||
}
|
||||
|
||||
public static void setTrafficHttpUrl(String value)
|
||||
{
|
||||
nativeSetTrafficHttpUrl(value);
|
||||
}
|
||||
|
||||
public static String[] getTrafficApps()
|
||||
{
|
||||
String appString = getString(KEY_TRAFFIC_APPS, "");
|
||||
if (appString.length() == 0)
|
||||
return new String[0];
|
||||
return appString.split(",");
|
||||
}
|
||||
|
||||
public static void setTrafficApps(String[] value)
|
||||
{
|
||||
String valueString = "";
|
||||
for (int i = 0; i < value.length; i++)
|
||||
{
|
||||
valueString = valueString + value[i];
|
||||
if ((i + 1) < value.length)
|
||||
valueString = valueString + ",";
|
||||
}
|
||||
setString(KEY_TRAFFIC_APPS, valueString);
|
||||
applyTrafficApps(value);
|
||||
}
|
||||
|
||||
public static boolean getTrafficLegacyEnabled()
|
||||
{
|
||||
return getBool(KEY_TRAFFIC_LEGACY_ENABLED, false);
|
||||
}
|
||||
|
||||
public static void setTrafficLegacyEnabled(boolean value)
|
||||
{
|
||||
setBool(KEY_TRAFFIC_LEGACY_ENABLED, value);
|
||||
applyTrafficLegacyEnabled(value);
|
||||
}
|
||||
|
||||
public static boolean isNY()
|
||||
{
|
||||
return getBool("NY");
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static String getDonateUrl()
|
||||
{
|
||||
@@ -536,4 +603,10 @@ public final class Config
|
||||
private static native void nativeSetLargeFontsSize(boolean value);
|
||||
private static native boolean nativeGetTransliteration();
|
||||
private static native void nativeSetTransliteration(boolean value);
|
||||
private static native boolean nativeGetTrafficHttpEnabled();
|
||||
private static native void nativeSetTrafficHttpEnabled(boolean value);
|
||||
private static native String nativeGetTrafficHttpUrl();
|
||||
private static native void nativeSetTrafficHttpUrl(String value);
|
||||
private static native void applyTrafficApps(String[] value);
|
||||
private static native void applyTrafficLegacyEnabled(boolean value);
|
||||
}
|
||||
|
||||
@@ -1497,5 +1497,4 @@
|
||||
<string name="type.shop.beauty.nails">Nehtový salón</string>
|
||||
<string name="type.xmas.tree">Vánoční strom</string>
|
||||
<string name="type.man_made.mast.communication">Komunikační stožár</string>
|
||||
<string name="type.amenity.hydrant">Hydrant na zavlažování</string>
|
||||
</resources>
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
<string name="type.amenity.public_bath">Baños públicos</string>
|
||||
<string name="type.amenity.shower">Ducha</string>
|
||||
<string name="type.amenity.stripclub">Club de estriptis</string>
|
||||
<string name="type.amenity.taxi">Parada de taxis</string>
|
||||
<string name="type.amenity.taxi">Sitio de taxis</string>
|
||||
<string name="type.amenity.telephone">Teléfono</string>
|
||||
<string name="type.amenity.theatre">Teatro</string>
|
||||
<string name="type.amenity.toilets">WC</string>
|
||||
@@ -351,7 +351,6 @@
|
||||
<string name="type.emergency.assembly_point">Punto de reunión de emergencia</string>
|
||||
<string name="type.emergency.defibrillator">Desfibrilador</string>
|
||||
<string name="type.emergency.fire_hydrant">Boca de incendio</string>
|
||||
<string name="type.amenity.hydrant">Boca de riego</string>
|
||||
<string name="type.emergency.phone">Teléfono de emergencias</string>
|
||||
<!-- A place where a lifeguard is on duty. -->
|
||||
<string name="type.emergency.lifeguard">Socorrista</string>
|
||||
@@ -455,7 +454,7 @@
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
<string name="type.highway.residential.bridge">Puente</string>
|
||||
<!-- These translations are used for all type.highway.*.tunnel. -->
|
||||
<string name="type.highway.residential.tunnel">Túnel</string>
|
||||
<string name="type.highway.residential.tunnel">Túnel de calle residencial</string>
|
||||
<string name="type.highway.rest_area">Área de descanso</string>
|
||||
<string name="type.highway.road">Carretera</string>
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
@@ -468,7 +467,7 @@
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
<string name="type.highway.secondary.bridge">Puente</string>
|
||||
<!-- These translations are used for all type.highway.*.tunnel. -->
|
||||
<string name="type.highway.secondary.tunnel">Túnel</string>
|
||||
<string name="type.highway.secondary.tunnel">Túnel de carretera secundaria</string>
|
||||
<string name="type.highway.secondary_link">Enlace de carretera secundaria</string>
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
<string name="type.highway.secondary_link.bridge">Puente</string>
|
||||
|
||||
@@ -337,7 +337,6 @@
|
||||
<string name="type.emergency.assembly_point">Point de rassemblement d’urgence</string>
|
||||
<string name="type.emergency.defibrillator">Défibrillateur</string>
|
||||
<string name="type.emergency.fire_hydrant">Point d’eau incendie</string>
|
||||
<string name="type.amenity.hydrant">Borne d’puisage</string>
|
||||
<string name="type.emergency.phone">Téléphone d’urgence</string>
|
||||
<!-- A place where a lifeguard is on duty. -->
|
||||
<string name="type.emergency.lifeguard">Sauveteur</string>
|
||||
|
||||
@@ -179,686 +179,34 @@
|
||||
<string name="type.craft.shoemaker">Ewnans Eskis</string>
|
||||
<string name="type.craft.winery">Gwinyer</string>
|
||||
<string name="type.craft.tailor">Tregher</string>
|
||||
<string name="type.cuisine.african">Afrikan</string>
|
||||
<string name="type.cuisine.american">Amerikanek</string>
|
||||
<string name="type.cuisine.arab">Arabek</string>
|
||||
<string name="type.cuisine.argentinian">Arghantinek</string>
|
||||
<string name="type.cuisine.asian">Asiek</string>
|
||||
<string name="type.cuisine.austrian">Ostrian</string>
|
||||
<string name="type.cuisine.african">afrikan</string>
|
||||
<string name="type.cuisine.american">amerikanek</string>
|
||||
<string name="type.cuisine.arab">arabek</string>
|
||||
<string name="type.cuisine.argentinian">arghantinek</string>
|
||||
<string name="type.cuisine.asian">asiek</string>
|
||||
<string name="type.cuisine.austrian">ostrian</string>
|
||||
<string name="type.cuisine.barbecue">Barbakoa</string>
|
||||
<string name="type.cuisine.beef_bowl">Bolla Bewin</string>
|
||||
<string name="type.cuisine.brazilian">Brasiliek</string>
|
||||
<string name="type.cuisine.brazilian">brasiliek</string>
|
||||
<string name="type.cuisine.breakfast">Hansel</string>
|
||||
<string name="type.cuisine.bubble_tea">Te Hwethen</string>
|
||||
<string name="type.cuisine.burger">Borger</string>
|
||||
<string name="type.cuisine.cake">Tesen</string>
|
||||
<string name="type.cuisine.chicken">Kig Yar</string>
|
||||
<string name="type.cuisine.chinese">Chinek</string>
|
||||
<string name="type.cuisine.chinese">chinek</string>
|
||||
<string name="type.cuisine.coffee_shop">Koffi</string>
|
||||
<string name="type.cuisine.croatian">Kroatek</string>
|
||||
<string name="type.cuisine.croatian">kroatek</string>
|
||||
<string name="type.cuisine.curry">Kurri</string>
|
||||
<string name="type.cuisine.donut">Knowen Doos</string>
|
||||
<string name="type.cuisine.ethiopian">Ethiopek</string>
|
||||
<string name="type.cuisine.ethiopian">ethiopek</string>
|
||||
<string name="type.cuisine.fine_dining">Dybri Brav</string>
|
||||
<string name="type.cuisine.fish">Pysk</string>
|
||||
<string name="type.cuisine.fish_and_chips">Asklotti</string>
|
||||
<string name="type.cuisine.french">Frynkek</string>
|
||||
<string name="type.cuisine.georgian">Jorjiek</string>
|
||||
<string name="type.cuisine.german">Almaynek</string>
|
||||
<string name="type.cuisine.greek">Grek</string>
|
||||
<string name="type.cuisine.french">frynkek</string>
|
||||
<string name="type.cuisine.georgian">jorjiek</string>
|
||||
<string name="type.cuisine.german">almaynek</string>
|
||||
<string name="type.cuisine.greek">grek</string>
|
||||
<string name="type.cuisine.grill">Rastell</string>
|
||||
<string name="type.cuisine.hungarian">Hungarek</string>
|
||||
<string name="type.cuisine.hungarian">hungarek</string>
|
||||
<string name="type.cuisine.ice_cream">Dehen Rew</string>
|
||||
<string name="type.cuisine.indian">Eyndek</string>
|
||||
<string name="type.cuisine.indonesian">Indonesek</string>
|
||||
<string name="type.cuisine.international">Keswlasek</string>
|
||||
<string name="type.cuisine.irish">Iwerdhonek</string>
|
||||
<string name="type.cuisine.italian">Italek</string>
|
||||
<string name="type.cuisine.italian_pizza">Italek, Pitsa</string>
|
||||
<string name="type.cuisine.japanese">Japanek</string>
|
||||
<string name="type.cuisine.korean">Koreek</string>
|
||||
<string name="type.cuisine.lao">Laosek</string>
|
||||
<string name="type.cuisine.lebanese">Lebanek</string>
|
||||
<string name="type.cuisine.local">Leel</string>
|
||||
<string name="type.cuisine.malaysian">Malaysiek</string>
|
||||
<string name="type.cuisine.mediterranean">Kresvorek</string>
|
||||
<string name="type.cuisine.mexican">Meksikan</string>
|
||||
<string name="type.cuisine.moroccan">Morockek</string>
|
||||
<string name="type.cuisine.noodles">Noudlys</string>
|
||||
<string name="type.cuisine.oriental">Asiek Est</string>
|
||||
<string name="type.cuisine.pancake">Krampothennow</string>
|
||||
<string name="type.cuisine.pasta">Pasta</string>
|
||||
<string name="type.cuisine.persian">Persi</string>
|
||||
<string name="type.cuisine.peruvian">Peruvianek</string>
|
||||
<string name="type.cuisine.pizza">Pitsa</string>
|
||||
<string name="type.cuisine.polish">Polonek</string>
|
||||
<string name="type.cuisine.portuguese">Portyngalek</string>
|
||||
<string name="type.cuisine.regional">Ranndirek</string>
|
||||
<string name="type.cuisine.russian">Russek</string>
|
||||
<string name="type.cuisine.sandwich">Baramanyn</string>
|
||||
<string name="type.cuisine.sausage">Selsigen</string>
|
||||
<string name="type.cuisine.spanish">Spaynek</string>
|
||||
<string name="type.cuisine.steak_house">Bosti Tregh Kig</string>
|
||||
<string name="type.cuisine.sushi">Sushi</string>
|
||||
<string name="type.cuisine.tea">Te</string>
|
||||
<string name="type.cuisine.thai">Tai</string>
|
||||
<string name="type.cuisine.turkish">Turkek</string>
|
||||
<string name="type.cuisine.vegan">Vegan</string>
|
||||
<string name="type.cuisine.vegetarian">Losowek</string>
|
||||
<string name="type.cuisine.vietnamese">Vietnamek</string>
|
||||
<string name="type.emergency">Goredhom</string>
|
||||
<string name="type.emergency.access_point">Tyller Sawyans Goredhom</string>
|
||||
<string name="type.emergency.assembly_point">Tyller Kuntelles Goredhom</string>
|
||||
<string name="type.emergency.life_ring">Grugys-Sawya</string>
|
||||
<string name="type.emergency.phone">Fon Goredhom</string>
|
||||
<string name="type.emergency.lifeguard">Tyller Gwithyades-Sawya</string>
|
||||
<string name="type.lateral.port">Porth</string>
|
||||
<string name="type.lateral.starboard">Lew</string>
|
||||
<string name="type.cardinal.east">Est</string>
|
||||
<string name="type.cardinal.north">North</string>
|
||||
<string name="type.cardinal.south">Soth</string>
|
||||
<string name="type.cardinal.west">West</string>
|
||||
<string name="type.emergency.mountain_rescue">Sawyansva Menydh</string>
|
||||
<string name="type.entrance">Entrans</string>
|
||||
<string name="type.entrance.main">Entrans Chif</string>
|
||||
<string name="type.entrance.house">Entrans Chi</string>
|
||||
<string name="type.entrance.garage">Entrans Karrji</string>
|
||||
<string name="type.entrance.service">Entrans Gonis</string>
|
||||
<string name="type.entrance.entry">Entrans (Unsel)</string>
|
||||
<string name="type.entrance.exit">Fordh \'Mes (Unsel)</string>
|
||||
<string name="type.entrance.emergency">Daras Goredhom</string>
|
||||
<string name="type.fee.yes">£</string>
|
||||
<string name="type.fee.no">Heb Kost</string>
|
||||
<string name="type.healthcare.laboratory">Arbrovji Medhegel</string>
|
||||
<string name="type.healthcare.physiotherapist">Yaghheans Fisio</string>
|
||||
<string name="type.healthcare.alternative">Medhegneth Euvergryjyk</string>
|
||||
<string name="type.healthcare.audiologist">Medhek Klew</string>
|
||||
<string name="type.healthcare.blood_donation">Kres Argevrians Goos</string>
|
||||
<string name="type.healthcare.optometrist">Medhek Golok</string>
|
||||
<string name="type.healthcare.podiatrist">Medhek Troos</string>
|
||||
<string name="type.healthcare.psychotherapist">Yaghheans Brysoniethel</string>
|
||||
<string name="type.healthcare.sample_collection">Kres Kuntel Sampel</string>
|
||||
<string name="type.healthcare.speech_therapist">Pathologydh Kows ha Tavas</string>
|
||||
<string name="type.highway">Fordh Veur</string>
|
||||
<string name="type.highway.bridleway">Marghlergh</string>
|
||||
<string name="type.highway.bridleway.bridge">Pons</string>
|
||||
<string name="type.highway.bridleway.permissive">Marghlergh</string>
|
||||
<string name="type.highway.bridleway.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.busway">Fordh rag Kyttrinyow yn Unsel</string>
|
||||
<string name="type.highway.busway.bridge">Pons</string>
|
||||
<string name="type.highway.busway.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.bus_stop">Kyttrinva</string>
|
||||
<string name="type.highway.construction">Fordh y\'n Drehevyans</string>
|
||||
<string name="type.highway.cycleway">Hyns rag Diwrosow</string>
|
||||
<string name="type.highway.cycleway.bridge">Pons</string>
|
||||
<string name="type.highway.cycleway.permissive">Hyns rag Diwrosow</string>
|
||||
<string name="type.highway.cycleway.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.elevator">Yskynnell</string>
|
||||
<string name="type.highway.footway">Kerdhva</string>
|
||||
<string name="type.highway.footway.sidewalk">Kons</string>
|
||||
<string name="type.highway.footway.crossing">Treusva Gerdhoryon</string>
|
||||
<string name="type.highway.footway.area">Arenebedh Gerdhoryon</string>
|
||||
<string name="type.highway.footway.bridge">Pons Gerdhoryon</string>
|
||||
<string name="type.highway.footway.tunnel">Kowfordh Gerdhoryon</string>
|
||||
<string name="type.highway.ford">Res</string>
|
||||
<string name="type.highway.living_street">Stret Pur Byghan</string>
|
||||
<string name="type.highway.living_street.bridge">Pons</string>
|
||||
<string name="type.highway.living_street.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.motorway">Gorfordh</string>
|
||||
<string name="type.highway.motorway.bridge">Pons Gorfordh</string>
|
||||
<string name="type.highway.motorway.tunnel">Kowfordh Gorfordh</string>
|
||||
<string name="type.highway.motorway_junction">Fordh \'Mes</string>
|
||||
<string name="type.highway.motorway_link">Rybfordh</string>
|
||||
<string name="type.highway.motorway_link.bridge">Pons</string>
|
||||
<string name="type.highway.motorway_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.path">Hyns</string>
|
||||
<string name="type.highway.path.difficult">Ol Kales bo Andhiblans</string>
|
||||
<string name="type.highway.path.expert">Ol Anweladow</string>
|
||||
<string name="type.highway.path.bicycle">Hyns rag Kerdhoryon ha Diwrosow</string>
|
||||
<string name="type.highway.footway.bicycle">Hyns rag Kerdhoryon ha Diwrosow</string>
|
||||
<string name="type.highway.path.bridge">Pons</string>
|
||||
<string name="type.highway.path.horse">Marghlergh</string>
|
||||
<string name="type.highway.path.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.pedestrian">Stret Gerdhoryon yn Unsel</string>
|
||||
<string name="type.highway.pedestrian.area">Arenebedh Gerdhoryon</string>
|
||||
<string name="type.highway.pedestrian.bridge">Pons Gerdhoryon</string>
|
||||
<string name="type.highway.pedestrian.square">Plen</string>
|
||||
<string name="type.highway.pedestrian.tunnel">Kowfordh Gerdhoryon</string>
|
||||
<string name="type.highway.primary">Fordh Kynsa</string>
|
||||
<string name="type.highway.primary.bridge">Pons</string>
|
||||
<string name="type.highway.primary.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.primary_link">Rybfordh Kynsa</string>
|
||||
<string name="type.highway.primary_link.bridge">Pons</string>
|
||||
<string name="type.highway.primary_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.residential">Stret Anedhel</string>
|
||||
<string name="type.highway.residential.area">Stret Anedhel</string>
|
||||
<string name="type.highway.residential.bridge">Pons</string>
|
||||
<string name="type.highway.residential.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.rest_area">Powesva</string>
|
||||
<string name="type.highway.road">Fordh</string>
|
||||
<string name="type.highway.road.bridge">Pons</string>
|
||||
<string name="type.man_made.bridge">Pons</string>
|
||||
<string name="type.highway.road.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.secondary">Fordh Nessa</string>
|
||||
<string name="type.highway.secondary.bridge">Pons</string>
|
||||
<string name="type.highway.secondary.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.secondary_link">Rybfordh Nessa</string>
|
||||
<string name="type.highway.secondary_link.bridge">Pons</string>
|
||||
<string name="type.highway.secondary_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.service">Fordh Gonis</string>
|
||||
<string name="type.highway.service.area">Fordh Gonis</string>
|
||||
<string name="type.highway.service.bridge">Pons</string>
|
||||
<string name="type.highway.service.driveway">Fordh dhe Chi</string>
|
||||
<string name="type.highway.service.parking_aisle">Fordh Parkyans</string>
|
||||
<string name="type.highway.service.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.services">Edhommva</string>
|
||||
<string name="type.highway.speed_camera">Kamera Skavder</string>
|
||||
<string name="type.highway.steps">Grisyow</string>
|
||||
<string name="type.highway.ladder">Skeul</string>
|
||||
<string name="type.highway.steps.bridge">Pons</string>
|
||||
<string name="type.highway.steps.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.tertiary">Fordh Tryja</string>
|
||||
<string name="type.highway.tertiary.bridge">Pons</string>
|
||||
<string name="type.highway.tertiary.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.tertiary_link">Rybfordh Tryja</string>
|
||||
<string name="type.highway.tertiary_link.bridge">Pons</string>
|
||||
<string name="type.highway.tertiary_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.track">Ol</string>
|
||||
<string name="type.highway.track.area">Ol</string>
|
||||
<string name="type.highway.track.bridge">Pons</string>
|
||||
<string name="type.highway.track.grade1">Ol</string>
|
||||
<string name="type.highway.track.no.access">Ol</string>
|
||||
<string name="type.highway.track.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.traffic_signals">Sinell Traffik</string>
|
||||
<string name="type.highway.trunk">Fordh Chif</string>
|
||||
<string name="type.highway.trunk.bridge">Pons</string>
|
||||
<string name="type.highway.trunk.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.trunk_link">Rybfordh Chif</string>
|
||||
<string name="type.highway.trunk_link.bridge">Pons</string>
|
||||
<string name="type.highway.trunk_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.unclassified">Fordh Le</string>
|
||||
<string name="type.highway.unclassified.area">Fordh Le</string>
|
||||
<string name="type.highway.unclassified.bridge">Pons</string>
|
||||
<string name="type.highway.unclassified.tunnel">Kowfordh</string>
|
||||
<string name="type.area_highway.cycleway">Hyns rag Diwrosow</string>
|
||||
<string name="type.area_highway.footway">Kerdhva</string>
|
||||
<string name="type.area_highway.living_street">Stret pur Byghan</string>
|
||||
<string name="type.area_highway.motorway">Gorfordh</string>
|
||||
<string name="type.area_highway.path">Hyns</string>
|
||||
<string name="type.area_highway.pedestrian">Stret Gerdhoryon yn Unsel</string>
|
||||
<string name="type.area_highway.primary">Fordh Kynsa</string>
|
||||
<string name="type.area_highway.residential">Stret Anedhel</string>
|
||||
<string name="type.area_highway.secondary">Fordh Nessa</string>
|
||||
<string name="type.area_highway.service">Fordh Gonis</string>
|
||||
<string name="type.area_highway.tertiary">Fordh Tryja</string>
|
||||
<string name="type.area_highway.steps">Grisyow</string>
|
||||
<string name="type.area_highway.track">Ol</string>
|
||||
<string name="type.area_highway.trunk">Fordh Chif</string>
|
||||
<string name="type.area_highway.unclassified">Fordh Le</string>
|
||||
<string name="type.historic">Taklen Istorek</string>
|
||||
<string name="type.historic.aircraft">Ayren Istorek</string>
|
||||
<string name="type.historic.anchor">Ankor Istorek</string>
|
||||
<string name="type.historic.archaeological_site">Tyller Hendhyskoniethel</string>
|
||||
<string name="type.historic.battlefield">Tyller Batel Istorek</string>
|
||||
<string name="type.historic.boundary_stone">Men Or</string>
|
||||
<string name="type.historic.cannon">Kanon</string>
|
||||
<string name="type.historic.castle">Kastel</string>
|
||||
<string name="type.historic.castle.castrum">Dinas Romanek</string>
|
||||
<string name="type.historic.castle.defensive">Kastel Krev</string>
|
||||
<string name="type.historic.castle.fortified_church">Eglos rag Skons</string>
|
||||
<string name="type.historic.castle.fortress">Skons</string>
|
||||
<string name="type.historic.castle.hillfort">Ker</string>
|
||||
<string name="type.historic.castle.kremlin">Kastel Europek a\'n Est</string>
|
||||
<string name="type.historic.castle.manor">Manerji</string>
|
||||
<string name="type.historic.castle.palace">Palys</string>
|
||||
<string name="type.historic.castle.shiro">Kastel Japanek</string>
|
||||
<string name="type.historic.castle.stately">Kastel Maner</string>
|
||||
<string name="type.historic.city_gate">Porth Cita</string>
|
||||
<string name="type.historic.citywalls">Fos Cita</string>
|
||||
<string name="type.historic.fort">Dinas</string>
|
||||
<string name="type.historic.gallows">Krogbren</string>
|
||||
<string name="type.historic.locomotive">Tren Istorek</string>
|
||||
<string name="type.historic.memorial">Men Kov</string>
|
||||
<string name="type.historic.memorial.cross">Krows Men Kov</string>
|
||||
<string name="type.historic.memorial.plaque">Leghen Men Kov</string>
|
||||
<string name="type.historic.memorial.sculpture">Gravyans</string>
|
||||
<string name="type.historic.memorial.statue">Delow</string>
|
||||
<string name="type.historic.memorial.stolperstein">Men Kov rag Fethesigow a an Naziow</string>
|
||||
<string name="type.historic.stone">Men Istorek</string>
|
||||
<string name="type.historic.memorial.war_memorial">Men Kov Bell</string>
|
||||
<string name="type.historic.mine">Hwel Istorek</string>
|
||||
<string name="type.historic.monument">Men Kov Bras</string>
|
||||
<string name="type.historic.pillory">Karghar Prenn</string>
|
||||
<string name="type.historic.ruins">Kryllasow Istorek</string>
|
||||
<string name="type.historic.ship">Gorhel</string>
|
||||
<string name="type.historic.tank">Tank Istorek</string>
|
||||
<string name="type.historic.tomb">Bedh</string>
|
||||
<string name="type.man_made.cross">Krows</string>
|
||||
<string name="type.historic.wayside_cross">Krows amal an Fordh</string>
|
||||
<string name="type.historic.wayside_shrine">Krerva amal an Fordh</string>
|
||||
<string name="type.historic.wreck">Gwreck</string>
|
||||
<string name="type.internet_access">Kesrosweyth</string>
|
||||
<string name="type.internet_access.wlan">Kesrosweyth</string>
|
||||
<string name="type.junction">Fordh Dhibarth</string>
|
||||
<string name="type.junction.circular">Fordh A-Dro</string>
|
||||
<string name="type.junction.roundabout">Fordh A-Dro</string>
|
||||
<string name="type.landuse">Devnydh Tir</string>
|
||||
<string name="type.landuse.allotments">Pastellow Tir</string>
|
||||
<string name="type.landuse.basin">Bason</string>
|
||||
<string name="type.landuse.brownfield">Tir Ragdevnydhys</string>
|
||||
<string name="type.landuse.cemetery">Korflan</string>
|
||||
<string name="type.landuse.cemetery.christian">Korflan Kristyon</string>
|
||||
<string name="type.landuse.religious">Tir Kryjyk</string>
|
||||
<string name="type.landuse.commercial">Tir Kenwerthel</string>
|
||||
<string name="type.landuse.construction">Tir Drehevyans</string>
|
||||
<string name="type.landuse.education">Komodyta Adhyskansel</string>
|
||||
<string name="type.landuse.farmland">Tir Ammeth</string>
|
||||
<string name="type.landuse.farmyard">Garth an Dre</string>
|
||||
<string name="type.landuse.flowerbed">Bleujyowek</string>
|
||||
<string name="type.landuse.forest">Koos</string>
|
||||
<string name="type.landuse.forest.coniferous">Koos Bydhlas</string>
|
||||
<string name="type.landuse.forest.deciduous">Koos Kolldhel</string>
|
||||
<string name="type.landuse.forest.mixed">Koos Gemyskys</string>
|
||||
<string name="type.landuse.garages">Karrjiow</string>
|
||||
<string name="type.landuse.grass">Gwels</string>
|
||||
<string name="type.landuse.greenfield">Tir Gwyrgh</string>
|
||||
<string name="type.landuse.greenhouse_horticulture">Chi Gweder</string>
|
||||
<string name="type.landuse.industrial">Hwelbark</string>
|
||||
<string name="type.landuse.landfill">Tirlanow</string>
|
||||
<string name="type.landuse.meadow">Pras</string>
|
||||
<string name="type.landuse.military">Selva</string>
|
||||
<string name="type.landuse.orchard">Avalennek</string>
|
||||
<string name="type.landuse.quarry">Mengleudh</string>
|
||||
<string name="type.landuse.railway">Yyns Horn</string>
|
||||
<string name="type.landuse.recreation_ground">Park</string>
|
||||
<string name="type.landuse.reservoir">Kreun</string>
|
||||
<string name="type.landuse.residential">Tir Anedhel</string>
|
||||
<string name="type.landuse.retail">Tir Daskwerthans</string>
|
||||
<string name="type.landuse.salt_pond">Poll Holan</string>
|
||||
<string name="type.landuse.village_green">Plen Glas Gwig</string>
|
||||
<string name="type.landuse.vineyard">Gwinlan</string>
|
||||
<string name="type.leisure">Tir rag Termyn Syger</string>
|
||||
<string name="type.leisure.bandstand">Gwariva Poblek</string>
|
||||
<string name="type.leisure.common">Tir Poblek</string>
|
||||
<string name="type.leisure.dog_park">Park rag Keun</string>
|
||||
<string name="type.leisure.fitness_centre">Hel Sport</string>
|
||||
<string name="type.leisure.dance">Hel Donsya</string>
|
||||
<string name="type.leisure.garden">Jardin</string>
|
||||
<string name="type.leisure.garden.residential">Jardin Anedhel</string>
|
||||
<string name="type.leisure.golf_course">Gwel Golf</string>
|
||||
<string name="type.leisure.miniature_golf">Gwel Golf Munys</string>
|
||||
<string name="type.leisure.indoor_play">Garth-Gwari Pervedhek</string>
|
||||
<string name="type.leisure.marina">Porth</string>
|
||||
<string name="type.leisure.nature_reserve">Gwithva Natur</string>
|
||||
<string name="type.leisure.outdoor_seating">Esedhow yn-mes</string>
|
||||
<string name="type.leisure.firepit">Oles</string>
|
||||
<string name="type.leisure.park">Park</string>
|
||||
<string name="type.leisure.park.no.access">Park Privedh</string>
|
||||
<string name="type.leisure.park.permissive">Park</string>
|
||||
<string name="type.leisure.park.private">Park Privedh</string>
|
||||
<string name="type.leisure.picnic_table">Bordh Kroust</string>
|
||||
<string name="type.leisure.pitch">Len Sportys</string>
|
||||
<string name="type.leisure.playground">Garth-Gwari</string>
|
||||
<string name="type.leisure.recreation_ground">Park</string>
|
||||
<string name="type.leisure.sauna">Sawna</string>
|
||||
<string name="type.leisure.sports_centre">Kres Sportya</string>
|
||||
<string name="type.leisure.sports_centre.sport.multi">Kres Sportya Liesek</string>
|
||||
<string name="type.leisure.sports_centre.sport.american_football">Kres Pel Droos Amerikanek</string>
|
||||
<string name="type.leisure.sports_centre.sport.archery">Kres Gwaregieth</string>
|
||||
<string name="type.leisure.sports_centre.sport.athletics">Kres Athletek</string>
|
||||
<string name="type.leisure.sports_centre.sport.australian_football">Kres Pel Droos Ostralek</string>
|
||||
<string name="type.leisure.sports_centre.sport.badminton">Kres Badminton</string>
|
||||
<string name="type.leisure.sports_centre.sport.baseball">Kres Pel Vas</string>
|
||||
<string name="type.leisure.sports_centre.sport.basketball">Kres Pel Ganstel</string>
|
||||
<string name="type.leisure.sports_centre.sport.beachvolleyball">Kres Pel Volli war an Treth</string>
|
||||
<string name="type.leisure.sports_centre.sport.bowls">Kres Gwari Pelyow</string>
|
||||
<string name="type.leisure.sports_centre.sport.climbing">Kres Krambla</string>
|
||||
<string name="type.leisure.sports_centre.sport.cricket">Kres Krycket</string>
|
||||
<string name="type.leisure.sports_centre.sport.curling">Kres Hurlya</string>
|
||||
<string name="type.leisure.sports_centre.sport.equestrian">Kres Marghek</string>
|
||||
<string name="type.leisure.sports_centre.sport.field_hockey">Kres Hocki</string>
|
||||
<string name="type.leisure.sports_centre.sport.futsal">Kres Futsal</string>
|
||||
<string name="type.leisure.sports_centre.sport.golf">Kres Golf</string>
|
||||
<string name="type.leisure.sports_centre.sport.gymnastics">Kres Gymnastek</string>
|
||||
<string name="type.leisure.sports_centre.sport.handball">Kres Pel Dhorn</string>
|
||||
<string name="type.leisure.sports_centre.sport.ice_hockey">Kres Hocki Rew</string>
|
||||
<string name="type.leisure.sports_centre.sport.skateboard">Kres Rostell</string>
|
||||
<string name="type.leisure.sports_centre.sport.skiing">Kres Skia</string>
|
||||
<string name="type.leisure.sports_centre.sport.soccer">Kres Pel Droos</string>
|
||||
<string name="type.leisure.sports_centre.sport.swimming">Kres Poll-Neuvya</string>
|
||||
<string name="type.leisure.sports_centre.sport.table_tennis">Kres Tennis Moos</string>
|
||||
<string name="type.leisure.sports_centre.sport.tennis">Kres Tennis</string>
|
||||
<string name="type.leisure.sports_centre.sport.volleyball">Kres Pel Volli</string>
|
||||
<string name="type.leisure.stadium">Sportva</string>
|
||||
<string name="type.leisure.swimming_pool">Poll-Neuvya</string>
|
||||
<string name="type.leisure.swimming_pool.private">Poll-Neuvya Privedh</string>
|
||||
<string name="type.leisure.track">Ol Athletek</string>
|
||||
<string name="type.leisure.track.area">Ol Athletek</string>
|
||||
<string name="type.leisure.beach_resort">Tyller-Havi war an Treth</string>
|
||||
<string name="type.man_made">Dornwrys</string>
|
||||
<string name="type.man_made.cairn">Karnedh</string>
|
||||
<string name="type.man_made.chimney">Chymbla</string>
|
||||
<string name="type.man_made.survey_point">Bleyn Arhwithra</string>
|
||||
<string name="type.man_made.flagpole">Gwelen Baner</string>
|
||||
<string name="type.man_made.lighthouse">Golowji</string>
|
||||
<string name="type.man_made.mast">Gwern</string>
|
||||
<string name="type.man_made.pier">Kay</string>
|
||||
<string name="type.man_made.pipeline">Gooth</string>
|
||||
<string name="type.man_made.pipeline.overground">Gooth a-ugh dhe Leur</string>
|
||||
<string name="type.man_made.surveillance">Kamera Aspians</string>
|
||||
<string name="type.man_made.tower">Tour</string>
|
||||
<string name="type.man_made.communications_tower">Tour Keskomunyans</string>
|
||||
<string name="type.man_made.tower.communication">Tour Keskomunyans</string>
|
||||
<string name="type.man_made.mast.communication">Tour Keskomunyans</string>
|
||||
<string name="type.man_made.petroleum_well">Fenten Oyl bo Petrol</string>
|
||||
<string name="type.man_made.crane">Garan</string>
|
||||
<string name="type.man_made.wastewater_plant">Komodyta Karth Karthyon</string>
|
||||
<string name="type.man_made.water_tap">Tapp</string>
|
||||
<string name="type.man_made.water_tap.drinking_water_no">Tapp</string>
|
||||
<string name="type.man_made.water_tower">Tour Dowrargh</string>
|
||||
<string name="type.man_made.water_well">Fenten</string>
|
||||
<string name="type.man_made.water_well.drinking_water_no">Fenten</string>
|
||||
<string name="type.man_made.windmill">Melin Wyns</string>
|
||||
<string name="type.man_made.works">Tir Gonis</string>
|
||||
<string name="type.military">Selva</string>
|
||||
<string name="type.natural">Natur</string>
|
||||
<string name="type.natural.bare_rock">Karrek</string>
|
||||
<string name="type.natural.shingle">Biliennow</string>
|
||||
<string name="type.natural.scree">Radel</string>
|
||||
<string name="type.natural.bay">Pleg Mor</string>
|
||||
<string name="type.natural.beach">Treth</string>
|
||||
<string name="type.natural.beach.sand">Treth Tewesek</string>
|
||||
<string name="type.natural.beach.gravel">Treth Growan</string>
|
||||
<string name="type.natural.cape">Pennrynn</string>
|
||||
<string name="type.natural.cave_entrance">Entrans Fow</string>
|
||||
<string name="type.natural.cliff">Als</string>
|
||||
<string name="type.natural.earth_bank">Banken</string>
|
||||
<string name="type.man_made.embankment">Bour</string>
|
||||
<string name="type.natural.coastline">Kost</string>
|
||||
<string name="type.natural.desert">Difeyth</string>
|
||||
<string name="type.natural.sand">Tewes</string>
|
||||
<string name="type.natural.geyser">Fenten Gnasek</string>
|
||||
<string name="type.natural.glacier">Rewiva</string>
|
||||
<string name="type.natural.grassland">Tonn</string>
|
||||
<string name="type.natural.heath">Grug</string>
|
||||
<string name="type.natural.hot_spring">Fenten Pooth</string>
|
||||
<string name="type.natural.water.lake">Lynn</string>
|
||||
<string name="type.natural.water.lock">Poll Yet Dhowr</string>
|
||||
<string name="type.natural.water.pond">Poll</string>
|
||||
<string name="type.natural.water.reservoir">Kreun</string>
|
||||
<string name="type.natural.water.basin">Bason</string>
|
||||
<string name="type.natural.water.river">Avon</string>
|
||||
<string name="type.natural.land">Tir</string>
|
||||
<string name="type.natural.meadow">Pras</string>
|
||||
<string name="type.natural.orchard">Avalennek</string>
|
||||
<string name="type.natural.peak">Topp</string>
|
||||
<string name="type.natural.rock">Men</string>
|
||||
<string name="type.natural.scrub">Krann</string>
|
||||
<string name="type.natural.spring">Fenten</string>
|
||||
<string name="type.natural.spring.drinking_water_no">Fenten</string>
|
||||
<string name="type.natural.tree">Gwedhen</string>
|
||||
<string name="type.natural.tree_row">Rew a Gwedhennow</string>
|
||||
<string name="type.natural.vineyard">Gwinlan</string>
|
||||
<string name="type.natural.volcano">Loskvenydh</string>
|
||||
<string name="type.natural.water">Dowr</string>
|
||||
<string name="type.natural.wetland.bog">Keunegen</string>
|
||||
<string name="type.natural.wetland.marsh">Keunek</string>
|
||||
<string name="type.natural.wetland.saltmarsh">Keunek Sall</string>
|
||||
<string name="type.natural.wetland.fen">Gwern</string>
|
||||
<string name="type.natural.wetland.reedbed">Keunegen</string>
|
||||
<string name="type.natural.wetland.swamp">Gwern</string>
|
||||
<string name="type.natural.wetland.mangrove">Koos Liva</string>
|
||||
<string name="type.noexit">Fordh Dhal</string>
|
||||
<string name="type.office">Buro</string>
|
||||
<string name="type.office.company">Buro Kowethyans</string>
|
||||
<string name="type.office.government">Buro Governans</string>
|
||||
<string name="type.office.insurance">Buro Surheans</string>
|
||||
<string name="type.office.lawyer">Laghyas</string>
|
||||
<string name="type.office.ngo">Buro Aluseneth</string>
|
||||
<string name="type.office.telecommunication">Kowethyans Pellgomunyans</string>
|
||||
<string name="type.organic.only">Organek</string>
|
||||
<string name="type.organic.yes">Organek</string>
|
||||
<string name="type.place.city">Cita</string>
|
||||
<string name="type.place.city.capital">Chifcita</string>
|
||||
<string name="type.place.city.capital.10">Cita</string>
|
||||
<string name="type.place.city.capital.11">Cita</string>
|
||||
<string name="type.place.city.capital.2">Chifcita</string>
|
||||
<string name="type.place.city.capital.3">Cita</string>
|
||||
<string name="type.place.city.capital.4">Cita</string>
|
||||
<string name="type.place.city.capital.5">Cita</string>
|
||||
<string name="type.place.city.capital.6">Cita</string>
|
||||
<string name="type.place.city.capital.7">Cita</string>
|
||||
<string name="type.place.city.capital.8">Cita</string>
|
||||
<string name="type.place.city.capital.9">Cita</string>
|
||||
<string name="type.place.continent">Brastir</string>
|
||||
<string name="type.place.country">Bro</string>
|
||||
<string name="type.place.county">Konteth</string>
|
||||
<string name="type.place.farm">Amethva</string>
|
||||
<string name="type.place.hamlet">Gwigbian</string>
|
||||
<string name="type.place.island">Enys</string>
|
||||
<string name="type.place.islet">Enesik</string>
|
||||
<string name="type.place.isolated_dwelling">Tre Enyshes</string>
|
||||
<string name="type.place.locality">Tyller</string>
|
||||
<string name="type.place.quarter">Kwarter</string>
|
||||
<string name="type.place.neighbourhood">Kentreveth</string>
|
||||
<string name="type.place.ocean">Keynvor</string>
|
||||
<string name="type.place.region">Pow</string>
|
||||
<string name="type.place.sea">Mor</string>
|
||||
<string name="type.place.square">Plen</string>
|
||||
<string name="type.place.state">Gwlas</string>
|
||||
<string name="type.place.state.USA">Gwlas Amerikanek</string>
|
||||
<string name="type.place.suburb">Mestrev</string>
|
||||
<string name="type.place.town">Tre</string>
|
||||
<string name="type.place.village">Gwig</string>
|
||||
<string name="type.power">Tredan</string>
|
||||
<string name="type.power.generator">Dinythell Dredan</string>
|
||||
<string name="type.power.generator.solar">Dinythell an Howl</string>
|
||||
<string name="type.power.generator.wind">Dinythell an Awel</string>
|
||||
<string name="type.power.line">Linen Tredanek</string>
|
||||
<string name="type.power.line.underground">Linen Tredanek yn-dann Dhor</string>
|
||||
<string name="type.power.minor_line">Linen Tredanek Le</string>
|
||||
<string name="type.power.plant">Dinythva Dredan</string>
|
||||
<string name="type.power.plant.coal">Tredanva Glow</string>
|
||||
<string name="type.power.plant.gas">Tredanva Gass</string>
|
||||
<string name="type.power.plant.hydro">Tredanva Dowr</string>
|
||||
<string name="type.power.plant.solar">Tredanva an Howl</string>
|
||||
<string name="type.power.plant.wind">Tredanva an Awel</string>
|
||||
<string name="type.power.tower">Tour Tredanek</string>
|
||||
<string name="type.power.pole">Gwelen Tredanek</string>
|
||||
<string name="type.man_made.utility_pole">Gwelen Les</string>
|
||||
<string name="type.public_transport">Karyans Poblek</string>
|
||||
<string name="type.public_transport.platform">Kay</string>
|
||||
<string name="type.railway">Hyns Horn</string>
|
||||
<string name="type.railway.abandoned">Hyns Horn Gesys</string>
|
||||
<string name="type.railway.abandoned.bridge">Pons Hyns Horn Gesys</string>
|
||||
<string name="type.railway.abandoned.tunnel">Kowfordh Hyns Horn Gesys</string>
|
||||
<string name="type.railway.construction">Hyns Horn Drehevyans</string>
|
||||
<string name="type.railway.crossing">Treusva Hyns Horn</string>
|
||||
<string name="type.railway.disused">Hyns Horn Undevnydhys</string>
|
||||
<string name="type.railway.halt">Savla Tren</string>
|
||||
<string name="type.railway.level_crossing">Treusva Hyns Horn</string>
|
||||
<string name="type.railway.light_rail">Hyns Horn Byghan</string>
|
||||
<string name="type.railway.light_rail.bridge">Pons Hyns Horn Byghan</string>
|
||||
<string name="type.railway.light_rail.tunnel">Kowfordh Hyns Horn Byghan</string>
|
||||
<string name="type.railway.monorail">Tren Ungledhren</string>
|
||||
<string name="type.railway.monorail.bridge">Pons Tren Ungledhren</string>
|
||||
<string name="type.railway.monorail.tunnel">Kowfordh Tren Ungledhren</string>
|
||||
<string name="type.railway.platform">Kay</string>
|
||||
<string name="type.railway.rail">Hyns Horn</string>
|
||||
<string name="type.railway.rail.highspeed">Hyns Horn Tooth</string>
|
||||
<string name="type.railway.rail.tourism">Hyns Horn Tourystek</string>
|
||||
<string name="type.railway.rail.main">Hyns Horn</string>
|
||||
<string name="type.railway.rail.branch">Hyns Horn Skorr</string>
|
||||
<string name="type.railway.rail.utility">Hyns Horn Gonis</string>
|
||||
<string name="type.railway.rail.bridge">Pons Hyns Horn</string>
|
||||
<string name="type.railway.rail.highspeed.bridge">Pons Hyns Horn Tooth</string>
|
||||
<string name="type.railway.rail.tourism.bridge">Pons Hyns Horn Tourystek</string>
|
||||
<string name="type.railway.rail.main.bridge">Pons Hyns Horn</string>
|
||||
<string name="type.railway.rail.branch.bridge">Pons Hyns Horn Skorr</string>
|
||||
<string name="type.railway.rail.tunnel">Kowfordh Hyns Horn</string>
|
||||
<string name="type.railway.rail.highspeed.tunnel">Kowfordh Hyns Horn Tooth</string>
|
||||
<string name="type.railway.rail.tourism.tunnel">Kowfordh Hyns Horn Tourystek</string>
|
||||
<string name="type.railway.rail.main.tunnel">Kowfordh Hyns Horn</string>
|
||||
<string name="type.railway.rail.branch.tunnel">Kowfordh Hyns Horn Skorr</string>
|
||||
<string name="type.railway.station">Gorsav</string>
|
||||
<string name="type.railway.station.light_rail">Gorsav</string>
|
||||
<string name="type.railway.station.light_rail.berlin">Gorsav S-Bahn</string>
|
||||
<string name="type.railway.station.light_rail.london">Gorsav DLR</string>
|
||||
<string name="type.railway.station.light_rail.porto">Gorsav Metro Porto</string>
|
||||
<string name="type.railway.station.monorail">Gorsav Tren Ungledhren</string>
|
||||
<string name="type.railway.station.subway">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.adana">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.algiers">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.almaty">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.amsterdam">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.ankara">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.athens">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.baku">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bangkok">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.barcelona">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.beijing">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bengalore">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.berlin">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bilbao">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.brasilia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.brescia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.brussels">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bucharest">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.budapest">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.buenos_aires">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bursa">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.cairo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.caracas">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.catania">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.changchun">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.chengdu">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.chicago">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.chongqing">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.dalian">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.delhi">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.dnepro">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.dubai">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.ekb">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.fukuoka">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.glasgow">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.guangzhou">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.hamburg">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.helsinki">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.hiroshima">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.hongkong">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.isfahan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.istanbul">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.izmir">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kazan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kharkiv">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kiev">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kobe">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kolkata">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kunming">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kyoto">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.la">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.lausanne">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.lille">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.lima">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.lisboa">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.london">Gorsav Tube</string>
|
||||
<string name="type.railway.station.subway.lyon">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.madrid">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.malaga">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.manila">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.maracaibo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.mashhad">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.mecca">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.medellin">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.mexico">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.milan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.minsk">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.montreal">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.moscow">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.munchen">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.nagoya">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.newyork">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.nnov">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.novosibirsk">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.osaka">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.oslo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.palma">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.panama">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.paris">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.philadelphia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.pyongyang">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.qingdao">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.rennes">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.rio">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.roma">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.rotterdam">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.samara">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.santiago">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.santo_domingo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.saopaulo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.sapporo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.sendai">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.sf">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.shanghai">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.shenzhen">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.shiraz">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.singapore">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.sofia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.spb">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.stockholm">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tabriz">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.taipei">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.taoyuan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tashkent">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tbilisi">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tehran">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tianjin">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tokyo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.valencia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.vienna">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.warszawa">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.washington">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.wuhan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.yerevan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.yokohama">Gorsav Metro</string>
|
||||
<string name="type.railway.subway">Gorsav Metro</string>
|
||||
<string name="type.railway.subway_entrance">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.adana">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.algiers">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.almaty">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.amsterdam">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.ankara">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.athens">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.baku">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bangkok">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.barcelona">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.beijing">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bengalore">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.berlin">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bilbao">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.brasilia">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.brescia">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.brussels">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bucharest">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.budapest">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.buenos_aires">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bursa">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.cairo">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.caracas">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.catania">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.changchun">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.chengdu">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.chicago">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.chongqing">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.dalian">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.delhi">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.dnepro">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.dubai">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.ekb">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.fukuoka">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.glasgow">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.guangzhou">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.hamburg">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.helsinki">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.hiroshima">Entrans Metro</string>
|
||||
</resources>
|
||||
|
||||
@@ -352,21 +352,4 @@
|
||||
<string name="type.cuisine.argentinian">Argentinska kuhinja</string>
|
||||
<string name="type.cuisine.asian">Azijska kuhinja</string>
|
||||
<string name="type.cuisine.austrian">Avstrijska kuhinja</string>
|
||||
<string name="type.cuisine.chinese">Kitajska kuhinja</string>
|
||||
<string name="type.cuisine.crepe">Krep</string>
|
||||
<string name="type.cuisine.donut">Donat</string>
|
||||
<string name="type.cuisine.fish">Ribe</string>
|
||||
<string name="type.cuisine.fish_and_chips">Riba s krompirčkom</string>
|
||||
<string name="type.cuisine.french">Francoska kuhinja</string>
|
||||
<string name="type.cuisine.grill">Žar</string>
|
||||
<string name="type.cuisine.hotdog">Hot dog</string>
|
||||
<string name="type.craft.electronics_repair">Popravilo elektronike</string>
|
||||
<string name="type.craft.gardener">Vrtnar</string>
|
||||
<string name="type.craft.hvac">Ogrevanje, prezračevanje, klimatizacija</string>
|
||||
<string name="type.craft.key_cutter">Ključavničar</string>
|
||||
<string name="type.shop.camera">Trgovina s fotoaparati</string>
|
||||
<string name="type.craft.plumber">Vodovodar</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.chicken">Piščanec</string>
|
||||
</resources>
|
||||
|
||||
@@ -379,7 +379,6 @@
|
||||
<string name="type.emergency.life_ring">Lifebuoy</string>
|
||||
<string name="type.emergency.defibrillator">Defibrillator</string>
|
||||
<string name="type.emergency.fire_hydrant">Fire Hydrant</string>
|
||||
<string name="type.amenity.hydrant">Irrigation Hydrant</string>
|
||||
<string name="type.emergency.phone">Emergency Phone</string>
|
||||
<!-- A place where a lifeguard is on duty. -->
|
||||
<string name="type.emergency.lifeguard">Lifeguard</string>
|
||||
|
||||
@@ -116,9 +116,6 @@ fi
|
||||
echo "Generating search categories / synonyms..."
|
||||
./tools/unix/generate_categories.sh
|
||||
|
||||
echo "Generating Desktop UI strings..."
|
||||
./tools/unix/generate_desktop_ui_strings.sh
|
||||
|
||||
if [ -z "$SKIP_GENERATE_SYMBOLS" ]; then
|
||||
if Diff data/symbols_hash data/styles/*/*/symbols/* || [ ! -z "$SYMBOLS_NOT_GENERATED" ]; then
|
||||
echo "Generating symbols..."
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
"place-state": "Щат|провинция",
|
||||
"place-region": "Район|Регион",
|
||||
"place-island|place-islet": "Остров",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|микрорайон|окръг|квартал|Предградие|Жилищен комплекс|ж.к.|ЖК",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|микрорайон|окръг|квартал|Предградие",
|
||||
"place-hamlet": "Село",
|
||||
"place-village": "Село",
|
||||
"place-locality": "местност|регион|Място",
|
||||
|
||||
@@ -384,7 +384,7 @@
|
||||
"shop-outpost": "4Pickup Point|4Parcel Pickup",
|
||||
"amenity-vending_machine-fuel|@category_fuel": "Fuel Dispenser|Gas Pump",
|
||||
"building-garage": "Garage",
|
||||
"highway-rest_area|highway-services": "4Rest area|4Service area|station|rest stop",
|
||||
"highway-rest_area|highway-services": "4Rest area|4Service area|station",
|
||||
"man_made-chimney": "Chimney",
|
||||
"man_made-crane": "Crane",
|
||||
"man_made-tower|man_made-flare": "Tower",
|
||||
@@ -435,8 +435,7 @@
|
||||
"emergency-assembly_point": "5Emergency assembly point",
|
||||
"emergency-life_ring": "5Lifebuoy|6Life Ring|life-ring|lifering|flotation device|floatation device",
|
||||
"emergency-defibrillator": "4Defibrillator|AED",
|
||||
"emergency-fire_hydrant": "4Fire Hydrant|Fire Plug|Hydrant",
|
||||
"amenity-hydrant": "Irrigation Hydrant|Water Hydrant|Cleaning Hydrant|Hydrant",
|
||||
"emergency-fire_hydrant": "4Fire Hydrant|Fire Plug",
|
||||
"emergency-lifeguard": "Lifeguard|Lifesaver",
|
||||
"emergency-mountain_rescue": "Mountain Rescue Station|Search and Rescue|rescue",
|
||||
"leisure-fitness_station": "3Fitness Station|street workout|fitness|workout|4Exercise station|Exercise bench|outdoor gym|5Calisthenics park|trim trail",
|
||||
|
||||
@@ -405,8 +405,7 @@
|
||||
"amenity-shower": "3Ducha|duchas|4Regadera|regaderas",
|
||||
"emergency-assembly_point": "Punto de reunión de emergencia|reunión de emergencia|emergencia",
|
||||
"emergency-defibrillator": "4Desfibrilador|defibrilador|socorro|primeros auxilios|auxilio|electroshock|schock|reanimar|reanimación|paro cardíaco|infarto|emergencia",
|
||||
"emergency-fire_hydrant": "Boca de incendio|Boca de incendios|Hidrante|Hidrante de incendio|Hidrante de incendios|Hidrante contra incendios|Hidrante de fuego",
|
||||
"amenity-hydrant": "Boca de riego|Hidrante de riego|Hidrante de agua|Hidrante técnico|Hidrante de limpieza|Hidrante",
|
||||
"emergency-fire_hydrant": "Boca de incendio|Hidrante",
|
||||
"emergency-lifeguard": "Socorrista|Salvavidas",
|
||||
"emergency-mountain_rescue": "Puesto de rescate de montaña|Búsqueda y rescate|Rescate|rescatista|rescatistas",
|
||||
"leisure-fitness_station": "Aparatos de gimnasia|Aparatos de ejercicio|Estación de ejercicios|Gimnasio exterior|Calistenia|Ejercicio",
|
||||
|
||||
@@ -399,8 +399,7 @@
|
||||
"amenity-shower": "Douche",
|
||||
"emergency-assembly_point": "Point de rassemblement d'urgence",
|
||||
"emergency-defibrillator": "4Défibrillateur|DAE",
|
||||
"emergency-fire_hydrant": "Bouche d’incendie|bouche de incendie|borne d’incendie|borne de incendie|Borne hydratante|Poteau d’incendie|Hydrant|Hydrante",
|
||||
"amenity-hydrant": "Bouche d’puisage|bouche de puisage|borne d’puisage|bourne de puisage|Hydrant|Hydrante",
|
||||
"emergency-fire_hydrant": "Bouche d’incendie|borne d'incendie",
|
||||
"emergency-lifeguard": "Sauveteur d’urgence|Sauveteur",
|
||||
"emergency-mountain_rescue": "Sauveteurs en montagne d’urgence",
|
||||
"leisure-fitness_station": "Station de fitness|Parcours de santé",
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
"place-state": "Штат|провинция",
|
||||
"place-region": "Район",
|
||||
"place-island|place-islet": "Остров",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|микрорайон|квартал|Жилая зона|Жилой комплекс|ж.к.|ЖК",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|микрорайон|квартал|Жилая зона",
|
||||
"place-hamlet": "Посёлок|деревня",
|
||||
"place-village": "Деревня|поселок",
|
||||
"place-locality": "Местность|регион",
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
"place-state": "Штат|провінція|регіон",
|
||||
"place-region": "Район|область",
|
||||
"place-island|place-islet": "Острів",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|мікрорайон|квартал|округа|Сусідство|Житловий комплекс|ж.к.|ЖК",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|мікрорайон|квартал|округа|Сусідство",
|
||||
"place-hamlet": "Поселення|селище|село",
|
||||
"place-village": "Село|хутір|поселення",
|
||||
"place-locality": "Місцевість|регіон|Місце",
|
||||
|
||||
@@ -1096,7 +1096,7 @@
|
||||
"US_New Jersey_South":"Nueva Jersey — Sur",
|
||||
"US_New Mexico":"Nuevo México",
|
||||
"US_New York_East":"Nueva York — Long Island",
|
||||
"US_New York_New York":"Nueva York — Ciudad de Nueva York",
|
||||
"US_New York_New York":"Nueva York — Nueva York",
|
||||
"US_New York_North":"Nueva York — Norte",
|
||||
"US_New York_West":"Nueva York — Oeste",
|
||||
"US_North Carolina_Asheville":"Asheville",
|
||||
@@ -1898,7 +1898,7 @@
|
||||
"Japan_Kanto_Kanagawa Description":"Yokohama, Sagamihara, Fujisawa",
|
||||
"Japan_Kanto_Saitama Description":"Saitama, Kawaguchi, Hannō",
|
||||
"Japan_Kanto_Tochigi Description":"Ashikaga, Kanuma, Sano",
|
||||
"Japan_Kanto_Tokyo Description":"Tokio, Setagaya, Hachiōji",
|
||||
"Japan_Kanto_Tokyo Description":"Tokio, Hachiōji",
|
||||
"Japan_Kinki Region_Mie Description":"Kumano, Tsu, Kameyama",
|
||||
"Japan_Kinki Region_Nara Description":"Nara, Kashihara, Ikoma",
|
||||
"Japan_Kinki Region_Osaka_Osaka Description":"Osaka, Ashiya, Sennan",
|
||||
@@ -1961,7 +1961,7 @@
|
||||
"Mexico_Mexico Description":"Ciudad de México, Puebla de Zaragoza, Cuautitlán Izcalli",
|
||||
"Mexico_Sonora Description":"Hermosillo, Ciudad Obregon, Heroica Nogales",
|
||||
"Mexico_South Description":"León, Santiago de Querétaro, Acapulco",
|
||||
"Moldova Description":"Chisinau, Tiraspol, Balti",
|
||||
"Moldova Description":"Chisinau,Tiraspol, Balti",
|
||||
"Monaco Description":"Mónaco, Mónaco",
|
||||
"Mongolia Description":"Ulán Bator, Khovd, Erdenet",
|
||||
"Montenegro Description":"Podgorica, Niksic, Tuzi",
|
||||
@@ -2004,7 +2004,7 @@
|
||||
"Netherlands_Utrecht_Utrecht Description":"Utrecht, Nieuwegein, Houten",
|
||||
"Netherlands_Zeeland Description":"Middelburg, Vlissingen, Goes",
|
||||
"New Zealand North_Auckland Description":"Auckland, Hamilton, Tauranga",
|
||||
"New Zealand North_Wellington Description":"Wellington, Bajo Hutt, Palmerston Norte",
|
||||
"New Zealand North_Wellington Description":"Wellington, Lower Hutt, Palmerston North",
|
||||
"New Zealand South_Canterbury Description":"Christchurch, Nelson, Waimate",
|
||||
"New Zealand South_Southland Description":"Dunedin, Invercargill, Tuatapere",
|
||||
"Nicaragua Description":"Managua, Matagalpa, Bluefields",
|
||||
@@ -2032,14 +2032,14 @@
|
||||
"Palestine Description":"Gaza (Ciudad de Gaza)",
|
||||
"Panama Description":"Panamá",
|
||||
"Papua New Guinea Description":"Puerto Moresby",
|
||||
"Paraguay Description":"Asunción, San Lorenzo, Ciudad del Este",
|
||||
"Peru_Lima Description":"Lima, Ica, Nazca",
|
||||
"Paraguay Description":"Asuncion, San Lorenzo, Ciudad del Este",
|
||||
"Peru_Lima Description":"Lima, Ica",
|
||||
"Peru_North Description":"Chiclayo, Iquitos, Piura",
|
||||
"Peru_South Description":"Arequipa, Abancay, Moquegua",
|
||||
"Philippines_Luzon_Manila Description":"Manila, Quezon City, Pasig",
|
||||
"Philippines_Luzon_North Description":"Ángeles, Palayán, Malolos",
|
||||
"Philippines_Luzon_South Description":"Puerto Princesa, Masbate, Calapán",
|
||||
"Philippines_Mindanao Description":"Ciudad Zamboanga, General Santos, Koronadal",
|
||||
"Philippines_Luzon_North Description":"Angeles, Palayan, Malolos",
|
||||
"Philippines_Luzon_South Description":"Puerto Princesa, Masbate, Calapan",
|
||||
"Philippines_Mindanao Description":"Zamboanga City, General Santos, Koronadal",
|
||||
"Philippines_Visayas Description":"Bacólod",
|
||||
"Pitcairn Islands Description":"Adamstown",
|
||||
"Poland_Greater Poland Voivodeship Description":"Poznan, Kalisz, Piła, Konin",
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
"India":"Indija",
|
||||
"Ireland":"Airija",
|
||||
"Italy":"Italija",
|
||||
"Nauru":"Nauru",
|
||||
"Nauru":"Naurų",
|
||||
"Poland":"Lenkija",
|
||||
"Romania":"Rumunija",
|
||||
"Slovakia":"Slovakija",
|
||||
"Slovenia":"Slovėnija",
|
||||
"Tokelau":"Tokelau",
|
||||
"United States of America Short":"JAV",
|
||||
"United States of America Short":"USA",
|
||||
"United Kingdom Short":"JK",
|
||||
"Czech Republic Short":"Čekija",
|
||||
"Australia":"Australija",
|
||||
@@ -55,9 +55,9 @@
|
||||
"Azerbaijan":"Azerbaidžanas",
|
||||
"Italy_Lombardy":"Lombardija",
|
||||
"Jamaica":"Jamaika",
|
||||
"Spain_Extremadura":"Estremadūra",
|
||||
"Spain_Extremadura":"Ispanų kalbos Ekstremadūros tarmė",
|
||||
"US_Georgia":"Džordžija",
|
||||
"Spain_Galicia_North Short":"Galisija",
|
||||
"Spain_Galicia_North Short":"Galisų",
|
||||
"Azerbaijan Region":"Azerbaidžanas",
|
||||
"Bolivia":"Bolivija",
|
||||
"Canada_Ontario_Bame":"Baris",
|
||||
@@ -66,16 +66,16 @@
|
||||
"Georgia":"Sakartvelas",
|
||||
"Indiana":"Indiana",
|
||||
"Spain_Galicia":"Galisija",
|
||||
"Spain_Galicia_South Short":"Galisija",
|
||||
"Spain_Galicia_South Short":"Galisų",
|
||||
"Ethiopia":"Etiopija",
|
||||
"Germany_Free State of Bavaria":"Bavarija",
|
||||
"Italy_Liguria":"Ligūrija",
|
||||
"Italy_Sardinia":"Sardinija",
|
||||
"Malaysia":"Malaysian",
|
||||
"Mongolia":"Mongolija",
|
||||
"Mongolia":"Mongolų",
|
||||
"Pakistan":"Pakistano",
|
||||
"Serbia":"Serbija",
|
||||
"Somalia":"Somalis",
|
||||
"Serbia":"Serbų",
|
||||
"Somalia":"Somaliečių",
|
||||
"India_Gujarat":"Gudžaratas",
|
||||
"India_Manipur":"Manipuras",
|
||||
"India_Punjab":"Pandžabas",
|
||||
@@ -230,7 +230,7 @@
|
||||
"Seychelles":"Seišelės",
|
||||
"Sierra Leone":"Siera Leonė",
|
||||
"Singapore":"Singapūras",
|
||||
"South Georgia and the South Sandwich Islands":"Pietų Džordžija ir Pietų Sandvičo salos",
|
||||
"South Georgia and the South Sandwich Islands":"Pietų Džordžija ir Pietų sumuštinių salos",
|
||||
"Sudan":"Sudanas",
|
||||
"Suriname":"Surinamas",
|
||||
"The Gambia":"Gambija",
|
||||
@@ -403,7 +403,7 @@
|
||||
"China_Shanxi":"Šansi",
|
||||
"China_Sichuan":"Sičuanas",
|
||||
"China_Tibet Autonomous Region":"Tibeto autonominis rajonas",
|
||||
"China_Xinjiang":"Sindziango uigūrų autonominis rajonas",
|
||||
"China_Xinjiang":"Sindziango Uigūrų autonominis rajonas",
|
||||
"China_Yunnan":"Junanas",
|
||||
"China_Zhejiang":"Džedziangas",
|
||||
"Colombia_East":"Kolumbija – rytinė",
|
||||
@@ -1782,175 +1782,5 @@
|
||||
"India_Haryana Description":"Pančkula, Revaris, Rohtakas",
|
||||
"India_Himachal Pradesh Description":"Nurpuras, Mandis, Bharmuras",
|
||||
"India_Jammu and Kashmir Description":"Šrynagaras, Džamu, Udampuras",
|
||||
"India_Jharkhand Description":"Ranči, Danbadas, Džamšedpuras",
|
||||
"India_Karnataka_North Description":"Belagavis, Hubalis, Mangaloras",
|
||||
"India_Karnataka_South Description":"Bengaloras, Maisūru, Kolaro aukso kasyklos",
|
||||
"India_Kerala Description":"Tiruvanantapuramas, Ernakulamas, Tričūras",
|
||||
"India_Lakshadweep Description":"Kavaratis, Minikojus, Agatis",
|
||||
"India_Madhya Pradesh Description":"Indauras, Bopalas, Gvalijaras",
|
||||
"India_Maharashtra Description":"Mumbajus, Punė, Nagpuras",
|
||||
"India_Manipur Description":"Impalas, Džiribamas",
|
||||
"India_Meghalaya Description":"Šilongas, Garobanda, Betasingas",
|
||||
"India_Mizoram Description":"Aizaulas, Lunglėjus, Mamitas",
|
||||
"India_Nagaland Description":"Kohyma, Perenas",
|
||||
"India_Odisha Description":"Katakas, Raurkela, Brahmapuras",
|
||||
"India_Punjab Description":"Džalandaras, Amritsaras, Batinda",
|
||||
"India_Rajasthan Description":"Džaipuras, Džodpuras, Kota",
|
||||
"India_Sikkim Description":"Gangtokas, Gjalšingas, Džoretangas",
|
||||
"India_Tamil Nadu Description":"Čenajus, Kanijakumaris, Namakalas",
|
||||
"India_Telangana Description":"Haidarabadas, Varangalas, Kamamas",
|
||||
"India_Tripura Description":"Agartala, Bišramgandžas, Belonija",
|
||||
"India_Uttar Pradesh Description":"Alahabadas, Laknau, Varanasis",
|
||||
"India_Uttarakhand Description":"Dehradūnas, Rūrkis, Haridvaras",
|
||||
"India_West Bengal Description":"Kolkata, Siliguris, Asansolas",
|
||||
"Indonesia_Central Description":"Makasaras, Samarinda, Pontianakas",
|
||||
"Indonesia_East Description":"Sorongas, Timika, Manokvaris",
|
||||
"Indonesia_Jawa Barat Description":"Džakarta, Bandungas, Pietų Tangerangas",
|
||||
"Indonesia_Jawa Tengah Description":"Semarangas, Džokjakarta, Surakarta",
|
||||
"Indonesia_Jawa Timur Description":"Sumenepas, Tulungagungas, Batu",
|
||||
"Indonesia_Nusa Tenggara Description":"Denpasaras, Semarapura, Tambolaka",
|
||||
"Indonesia_West Description":"Medanas, Siak Sri Indrapura, Lampungas",
|
||||
"Iran_East Description":"Mašhadas, Zahedanas, Jazdas",
|
||||
"Iran_North Description":"Teheranas, Karadžas, Tebrizas",
|
||||
"Iran_South Description":"Isfahanas, Širazas, Ahvazas",
|
||||
"Iraq_North Description":"Mosulas, Erbilis, Kirkukas, Tikritas",
|
||||
"Iraq_South Description":"Bagdadas, Basra, Hila, Ramadi",
|
||||
"Ireland_Connacht Description":"Golvėjus, Svinfordas, Mohilas",
|
||||
"Ireland_Leinster Description":"Dublinas, Darou, Prosperosas",
|
||||
"Ireland_Munster Description":"Korkas, Kersivynas",
|
||||
"Ireland_Northern Counties Description":"Glemkolemkilas, Ardara, Glentisas",
|
||||
"Isle of Man Description":"Daglasas, Onkanas",
|
||||
"Israel Description":"Tel Avivas-Jafa, Herclija, Modiinas-Makabimas-Reutas",
|
||||
"Italy_Abruzzo Description":"Peskara, Rošiolas, Pinetas",
|
||||
"Italy_Aosta Valley Description":"Kvartas, Aosta",
|
||||
"Italy_Apulia Description":"Baris, Tarantas, Fodža",
|
||||
"Italy_Basilicata Description":"Potenca, Matera, Melfis",
|
||||
"Italy_Calabria Description":"Kalabrijos Redžas, Katancaras, Kozenca",
|
||||
"Italy_Campania Description":"Neapolis, Salernas, Tore del Grekas",
|
||||
"Italy_Emilia-Romagna_Bologna Description":"Bolonija, Imola, Kazalekjo di Renas",
|
||||
"Italy_Emilia-Romagna_Ferrara Description":"Ferara, Longastrinas, Anita",
|
||||
"Italy_Emilia-Romagna_Forli-Cesena Description":"Forli, Čezena, Čezenatikas",
|
||||
"Italy_Emilia-Romagna_Modena Description":"Modena, Karpis, Sasuolas",
|
||||
"Italy_Emilia-Romagna_Parma Description":"Parma, Fidenca, Salsomadžore Termė",
|
||||
"Italy_Emilia-Romagna_Piacenza Description":"Pjačenca, San Nikolo prie Trebijos, Ciano Pjačentinas",
|
||||
"Italy_Emilia-Romagna_Ravenna Description":"Ravena, Faenca, Lugas",
|
||||
"Italy_Emilia-Romagna_Reggio Emilia Description":"Emilijos Redžas, Skandianas, Kazalgrandė",
|
||||
"Italy_Emilia-Romagna_Rimini Description":"Riminis, Ričonė, Santarkandželo di Romanja",
|
||||
"Italy_Friuli-Venezia Giulia_Gorizia Description":"Goricija, Monfalkonė, Ronki dei Ledžonaris",
|
||||
"Italy_Friuli-Venezia Giulia_Pordenone Description":"Pordenonė, Sačilė, San Vito al Taljamentas",
|
||||
"Italy_Friuli-Venezia Giulia_Trieste Description":"Triestas, Mudža, Aurizina",
|
||||
"Italy_Friuli-Venezia Giulia_Udine Description":"Udinė, Kodroipas, Červinjano del Friulis",
|
||||
"Italy_Lazio Description":"Roma, Latina, Fjumičinas",
|
||||
"Italy_Liguria Description":"Genuja, Specija,",
|
||||
"Italy_Lombardy_Bergamo Description":"Bergamas, Taljunas, Treviljas",
|
||||
"Italy_Lombardy_Brescia Description":"Breša, Bosotis, Lumedzanė",
|
||||
"Italy_Lombardy_Como Description":"Komas, Kantu",
|
||||
"Italy_Lombardy_Cremona Description":"Kremona, Treskore Kremaskas",
|
||||
"Italy_Lombardy_Lecco Description":"Lekas, Meratė, Kalolcjokortė",
|
||||
"Italy_Lombardy_Lodi Description":"Lodis, Kodonjas, Kazalpusterlengas",
|
||||
"Italy_Lombardy_Mantua Description":"Mantua, Sucara",
|
||||
"Italy_Lombardy_Milan Description":"Milanasm Sesto San Džovanis, Činizelo Balzamas",
|
||||
"Italy_Lombardy_Monza and Brianza Description":"Monca, Briancos Bezana, Serenjas",
|
||||
"Italy_Lombardy_Pavia Description":"Pavija, Vidževanas, Buskarela",
|
||||
"Italy_Lombardy_Sondrio Description":"Sondrijus, Morbenjas",
|
||||
"Italy_Lombardy_Varese Description":"Busto Arsicijus, Varezė, Galaratė",
|
||||
"Italy_Marche Description":"Ankona, Pezaras",
|
||||
"Italy_Molise Description":"Kampobasas, Termolis, Izernija",
|
||||
"Italy_Piemont_Alessandria Description":"Alesandrija, Kazale Monferatas, Novi Ligūrė",
|
||||
"Italy_Piemont_Asti Description":"Astis, Kanelis, Nica Monferatas",
|
||||
"Italy_Piemont_Biella Description":"Bjela, Kosatas",
|
||||
"Italy_Piemont_Cuneo Description":"Kuneo, Verdunas, Bergolas",
|
||||
"Italy_Piemont_Novara Description":"Novara, Borgomaneras, Trekatė",
|
||||
"Italy_Piemont_Torino Description":"Turinas, Monkaljeris, Rivolis",
|
||||
"Italy_Piemont_Verbano-Cusio-Ossola Description":"Verbanija, Domodosola, Omenja",
|
||||
"Italy_Piemont_Vercelli Description":"Verčelis, Borgozezija, Santija",
|
||||
"Italy_Sardinia Description":"Kaljaris, Sasaris, Kvartu Sant’Elena",
|
||||
"Italy_Sicily Description":"Palermas, Katanija, Mesina",
|
||||
"Italy_Trentino-Alto Adige Sudtirol Description":"Trentas, Bolcanas, Roveretas",
|
||||
"Italy_Tuscany_Grosseto Description":"Arecas, Grosetas, Siena",
|
||||
"Italy_Tuscany_Massa e Carrara Description":"Florencija, Livornas, Luka, Piza, Pratas, Pistoja, Karara, Masa",
|
||||
"Italy_Umbria Description":"Perudža, Ternis, Folinjas",
|
||||
"Italy_Veneto_Belluno Description":"Belunas, Feltrė, Sedikas",
|
||||
"Italy_Veneto_Padova Description":"Paduva, Čitadela, Selvacano Dentras",
|
||||
"Italy_Veneto_Rovigo Description":"Rovigas, Badija Polesinė, Adrija",
|
||||
"Italy_Veneto_Treviso Description":"Trevizas, Koneljanas, Kastelfranko Venetas",
|
||||
"Italy_Veneto_Venezia Description":"Venecija, Mestrė, Kjodža",
|
||||
"Italy_Veneto_Verona Description":"Verona, Vilafranka di Verona, Lenjagas",
|
||||
"Italy_Veneto_Vicenza Description":"Vičenca, Basano del Grapa, Skijus",
|
||||
"Jamaica Description":"Kingstonas, Montego Bėjus, Spaniš Taunas",
|
||||
"Japan_Chubu Region_Aichi_Nagoya Description":"Nagoja, Cušima, Kijosu",
|
||||
"Japan_Chubu Region_Aichi_Toyohashi Description":"Tahara, Gamagoris, Nišijas",
|
||||
"Japan_Chubu Region_Fukui Description":"Obama, Fukujis, Sakajis",
|
||||
"Japan_Chubu Region_Gifu Description":"Gifu, Hida, Ena",
|
||||
"Japan_Chubu Region_Ishikawa Description":"Kanadzava, Komacu, Hakusanas",
|
||||
"Japan_Chubu Region_Nagano Description":"Okaja, Omačis, Naganas",
|
||||
"Japan_Chubu Region_Niigata Description":"Niigata, Miokas, Sadas",
|
||||
"Japan_Chubu Region_Shizuoka Description":"Hamamacu, Kosajis, Fukurojis",
|
||||
"Japan_Chubu Region_Toyama Description":"Tojama, Takaoka, Imidzu",
|
||||
"Japan_Chubu Region_Yamanashi Description":"Hokutas, Kofu, Nirasakis",
|
||||
"Japan_Chugoku Region_Hiroshima Description":"Hirošima, Otakė, Kurė",
|
||||
"Japan_Chugoku Region_Okayama Description":"Okajama, Niimis, Kasaoka",
|
||||
"Japan_Chugoku Region_Shimane Description":"Masuda, Gocu, Hamada",
|
||||
"Japan_Chugoku Region_Tottori Description":"Sakajis-Minatas, Kurajošis, Jonagas",
|
||||
"Japan_Chugoku Region_Yamaguchi Description":"Nagatas, Sanijas-Onoda, Šimonosekis",
|
||||
"Japan_Hokkaido Region_East Description":"Kuširas, Nemuras, Obihiras",
|
||||
"Japan_Hokkaido Region_North Description":"Asahikava, Furanas, Šibecu",
|
||||
"Japan_Hokkaido Region_Sapporo Description":"Saporas, Išikaris, Ivamidzava",
|
||||
"Japan_Hokkaido Region_West Description":"Hokutas, Datė, Noboribecu",
|
||||
"Japan_Kanto_Chiba Description":"Tatejama, Kamagaja, Minamibosas",
|
||||
"Japan_Kanto_Gunma Description":"Fudžioka, Midoris, Numata",
|
||||
"Japan_Kanto_Ibaraki Description":"Inašikis, Hokota, Išioka",
|
||||
"Japan_Kanto_Kanagawa Description":"Jokohama, Sagamihara, Fudžisava",
|
||||
"Japan_Kanto_Saitama Description":"Saitama, Kavagučis, Hanas",
|
||||
"Japan_Kanto_Tochigi Description":"Ašikaga, Kanuma, Sanas",
|
||||
"Japan_Kanto_Tokyo Description":"Tokijas, Setagaja, Hačiodžis",
|
||||
"Japan_Kinki Region_Mie Description":"Kumanas, Cu, Kamejama",
|
||||
"Japan_Kinki Region_Nara Description":"Nara, Kašihara, Ikoma",
|
||||
"Japan_Kinki Region_Osaka_Osaka Description":"Osaka, Ašija, Senanas",
|
||||
"Japan_Kinki Region_Osaka_West Description":"Kobė, Himedžis, Akas",
|
||||
"Japan_Kinki Region_Wakayama Description":"Vakajama, Tanabė, Kinokava",
|
||||
"Japan_Kyushu Region_Fukuoka Description":"Fukuoka, Kitakiūšiū, Itošima",
|
||||
"Japan_Kyushu Region_Kagoshima Description":"Kagošima, Sacumasendajis, Minamisacuma",
|
||||
"Japan_Kyushu Region_Kumamoto Description":"Kumamotas, Amakusa, Kamiamakusa",
|
||||
"Japan_Kyushu Region_Miyazaki Description":"Ebinas, Kušima, Mijakonodžias",
|
||||
"Japan_Kyushu Region_Nagasaki Description":"Nagasakis, Gošima, Hiradas",
|
||||
"Japan_Kyushu Region_Oita Description":"Oita, Jufu, Taketa",
|
||||
"Japan_Kyushu Region_Okinawa Description":"Naha, Okinava, Uruma",
|
||||
"Japan_Kyushu Region_Saga Description":"Imaris, Karacu, Takeo",
|
||||
"Japan_Shikoku Region_Ehime Description":"Macujama, Javatahama, Uvadžima",
|
||||
"Japan_Shikoku Region_Kagawa Description":"Takamacu, Tadocu, Sakaidė",
|
||||
"Japan_Shikoku Region_Kochi Description":"Sukumas, Šimantas, Tosa-Šimidzu",
|
||||
"Japan_Shikoku Region_Kyoto Description":"Kiotas, Kiotangas, Fukučijama",
|
||||
"Japan_Shikoku Region_Tokushima Description":"Mijošis, Ava, Jošinogava",
|
||||
"Japan_Tohoku_Akita Description":"Oga, Nikahas, Daisenas",
|
||||
"Japan_Tohoku_Aomori Description":"Hirakava, Tovada, Aomoris",
|
||||
"Japan_Tohoku_Fukushima Description":"Kitakata, Sukagava, Širakava",
|
||||
"Japan_Tohoku_Iwate Description":"Morioka, Hačimantajis, Ninohė",
|
||||
"Japan_Tohoku_Miyagi Description":"Sendajus, Higaši Macušima, Tomė",
|
||||
"Japan_Tohoku_Yamagata Description":"Nanijas, Higaši Nė, Obanadzava",
|
||||
"Jersey Description":"Sent Heljeris, Sent Seivjoras, Sent Džonas",
|
||||
"Jerusalem Description":"Jeruzalė, Anata, al Valadža",
|
||||
"Jordan Description":"Amanas, Zarka, Irbidas",
|
||||
"Kazakhstan_North Description":"Astana, Karaganda, Pavlodaras",
|
||||
"Kazakhstan_South Description":"Almata, Šymkentas, Aktobė",
|
||||
"Kenya Description":"Nairobis, Kisumu, Kitalė",
|
||||
"Kingdom of Lesotho Description":"Maseru, Buta Butė, Mohales Hukas",
|
||||
"Kiribati Description":"Betijas, Kabuna, Bairikis",
|
||||
"Kuwait Description":"Kuveitas, Achmadi, Džahra",
|
||||
"Kyrgyzstan Description":"Biškekas, Ošas, Balykči",
|
||||
"Laos Description":"Vientianas, Paksanas, Udomsajus",
|
||||
"Latvia Description":"Ryga, Daugpilis, Liepoja",
|
||||
"Lebanon Description":"Beirutas, Zahlė, Sidonas",
|
||||
"Liberia Description":"Monrovija, Sanikelis, Fiš Taunas",
|
||||
"Libya Description":"Tripolis, Bengazis, Misrata",
|
||||
"Liechtenstein Description":"Vaducas, Šanas, Tryzenas",
|
||||
"Lithuania_East Description":"Vilnius, Kaunas, Alytus",
|
||||
"Lithuania_West Description":"Klaipėda, Šiauliai, Panevėžys",
|
||||
"Luxembourg Description":"Liuksemburgas, Mondorf le Benas, Ešas prie Alzeto",
|
||||
"Macedonia Description":"Skopjė, Ochridas, Kavadarcis",
|
||||
"Madagascar Description":"Antananaryvas, Toamasina, Fianarancoa",
|
||||
"Malawi Description":"Lilongvė, Blantairas, Mzuzu",
|
||||
"Malaysia Description":"Kvala Lumpūras, Petaling Džaja, Kota Kinabalu",
|
||||
"Finland_Southern Finland_West Short":"Pietvakarių Suomija",
|
||||
"Palestine Region Short":"Palestina"
|
||||
"India_Jharkhand Description":"Ranči, Danbadas, Džamšedpuras"
|
||||
}
|
||||
|
||||
@@ -1232,7 +1232,7 @@ shop|car_parts;1104;
|
||||
deprecated|deprecated;1105;x
|
||||
deprecated|deprecated;1106;x
|
||||
deprecated|deprecated;1107;x
|
||||
amenity|hydrant;1108;
|
||||
deprecated|deprecated;1108;x
|
||||
amenity|public_bookcase;1109;
|
||||
tourism|apartment;1110;
|
||||
leisure|resort;[leisure=resort],[tourism=resort],[leisure=summer_camp];;name;int_name;1111;
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 7 and column 16.
|
@@ -104,5 +104,5 @@
|
||||
"in_1_mile":"Už vienos mylios",
|
||||
"in_1_5_miles":"Už pusantros mylios",
|
||||
"in_2_miles":"Už dviejų mylių",
|
||||
"unknown_camera":"Greičio matuoklis priekyje"
|
||||
"unknown_camera":"Greičio matuoklis priešakyje"
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="18" height="18" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>firehydrant-m</title>
|
||||
<g transform="translate(.258 -1.5e-5)" fill="none" fill-rule="evenodd" opacity=".6">
|
||||
<g fill-rule="nonzero">
|
||||
<g transform="translate(6,5)" fill="#983e44">
|
||||
<path d="m5.7422 5.8857c-1.2062 0-2.1875 0.98131-2.1875 2.1875s0.98131 2.1875 2.1875 2.1875 2.1875-0.98131 2.1875-2.1875-0.98131-2.1875-2.1875-2.1875zm0 3.5547c-0.75387 0-1.3672-0.61332-1.3672-1.3672 0-0.75387 0.61332-1.3672 1.3672-1.3672s1.3672 0.61332 1.3672 1.3672c0 0.75387-0.61332 1.3672-1.3672 1.3672z"/>
|
||||
<polygon points="6.1523 8.4834 5.332 8.4834 5.332 7.6631 6.1523 7.6631"/>
|
||||
<path d="m11.484 7.6631h-0.51953v-1.333h-1.7773v-1.5859h0.65458v-0.82031h-0.68764c-0.17522-1.0818-1.0316-1.9382-2.1134-2.1134v-0.51157c0-0.71616-0.58267-1.2988-1.2988-1.2988s-1.2988 0.58267-1.2988 1.2988v0.51157c-1.0818 0.17522-1.9382 1.0316-2.1134 2.1134h-0.68764v0.82031h0.65458v1.5859h-1.7773v1.333h-0.51953v0.82031h0.51953v1.333h1.7773v1.5859c-0.71616 0-1.2988 0.58267-1.2988 1.2988v1.2988h9.4883v-1.2988c0-0.71616-0.58267-1.2988-1.2988-1.2988v-1.5859h1.7773v-1.333h0.51953v-0.82031zm-6.2207-6.3643c0-0.26384 0.21468-0.47852 0.47852-0.47852s0.47852 0.21468 0.47852 0.47852v0.47852h-0.95703v-0.47852zm-0.41016 1.2988h1.7773c0.81613 0 1.5021 0.56612 1.6869 1.3262h-5.1512c0.18482-0.76005 0.87082-1.3262 1.6869-1.3262zm-3.5137 6.3984v-1.8457h0.95703v1.8457zm8.3262 3.7051v0.47852h-7.8477v-0.47852c0-0.26384 0.21468-0.47852 0.47852-0.47852h6.8906c0.26384 0 0.47852 0.21468 0.47852 0.47852zm-1.2988-1.2988h-5.25v-6.6582h5.25zm1.7773-2.4063h-0.95703v-1.8457h0.95703z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<svg version="1.1" viewBox="0 0 24 24" width="18" height="18" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>firehydrant-m</title>
|
||||
<g id="Page-2:-Night" fill="none" fill-rule="evenodd" opacity=".6">
|
||||
<g id="firehydrant-m" fill-rule="nonzero">
|
||||
<g id="fire-hydrant" transform="translate(6 5)" fill="#983E44">
|
||||
<path id="Shape" d="m5.7422 5.8857c-1.2062 0-2.1875 0.98131-2.1875 2.1875s0.98131 2.1875 2.1875 2.1875 2.1875-0.98131 2.1875-2.1875-0.98131-2.1875-2.1875-2.1875zm0 3.5547c-0.75387 0-1.3672-0.61332-1.3672-1.3672 0-0.75387 0.61332-1.3672 1.3672-1.3672s1.3672 0.61332 1.3672 1.3672c0 0.75387-0.61332 1.3672-1.3672 1.3672z"/>
|
||||
<polygon id="Path" points="5.332 7.6631 6.1523 7.6631 6.1523 8.4834 5.332 8.4834"/>
|
||||
<path id="Shape" d="m11.484 7.6631h-0.51953v-1.333h-1.7773v-1.5859h0.65458v-0.82031h-0.68764c-0.17522-1.0818-1.0316-1.9382-2.1134-2.1134v-0.51157c0-0.71616-0.58267-1.2988-1.2988-1.2988s-1.2988 0.58267-1.2988 1.2988v0.51157c-1.0818 0.17522-1.9382 1.0316-2.1134 2.1134h-0.68764v0.82031h0.65458v1.5859h-1.7773v1.333h-0.51953v0.82031h0.51953v1.333h1.7773v1.5859c-0.71616 0-1.2988 0.58267-1.2988 1.2988v1.2988h9.4883v-1.2988c0-0.71616-0.58267-1.2988-1.2988-1.2988v-1.5859h1.7773v-1.333h0.51953v-0.82031zm-6.2207-6.3643c0-0.26384 0.21468-0.47852 0.47852-0.47852s0.47852 0.21468 0.47852 0.47852v0.47852h-0.95703v-0.47852zm-0.41016 1.2988h1.7773c0.81613 0 1.5021 0.56612 1.6869 1.3262h-5.1512c0.18482-0.76005 0.87082-1.3262 1.6869-1.3262zm-3.5137 6.3984v-1.8457h0.95703v1.8457h-0.95703zm8.3262 3.7051v0.47852h-7.8477v-0.47852c0-0.26384 0.21468-0.47852 0.47852-0.47852h6.8906c0.26384 0 0.47852 0.21468 0.47852 0.47852zm-1.2988-1.2988h-5.25v-6.6582h5.25v6.6582zm1.7773-2.4063h-0.95703v-1.8457h0.95703v1.8457z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user