Compare commits

...

112 Commits

Author SHA1 Message Date
map-per
0243b1e86b [copyright] Add StreetComplete-taginfo-categorize to copyright
Signed-off-by: map-per <map-per@gmx.de>
2025-11-16 21:20:43 +01:00
Codeberg Translate
8f3978e391 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: yannikbloscheck <yannikbloscheck@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/iOS - Map Feature Types
2025-11-16 20:08:15 +01:00
map-per
680d97bc4f [styles] Add natural=sand (#2451)
Signed-off-by: map-per <map-per@gmx.de>

Reviewed-on: https://codeberg.org/comaps/comaps/pulls/2451
Reviewed-by: Yannik Bloscheck <yannikbloscheck@noreply.codeberg.org>
Reviewed-by: Konstantin Pastbin <pastk@noreply.codeberg.org>
Co-authored-by: map-per <map-per@gmx.de>
Co-committed-by: map-per <map-per@gmx.de>
2025-11-16 19:19:58 +01:00
zyphlar
5683606c31 [android] Punctuate complete sentences
Signed-off-by: zyphlar <zyphlar@noreply.codeberg.org>
Co-authored-by: zyphlar <zyphlar@noreply.codeberg.org>
Co-committed-by: zyphlar <zyphlar@noreply.codeberg.org>
2025-11-16 19:15:08 +01:00
Yannik Bloscheck
3c7eb92b17 [styles] Adding trees
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 18:30:49 +01:00
x7z4w
226b0f03c8 [cmake] Fix Android boost errors
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-16 18:27:04 +01:00
x7z4w
0a3a4ebd9a [core] Regex refactoring
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-16 18:27:04 +01:00
map-per
a62f6c0ef6 [translations] Fix translation merge conflict
Signed-off-by: map-per <map-per@gmx.de>
2025-11-16 17:35:29 +01:00
Yannik Bloscheck
ef280c7f89 [styles] Differentiate between different entrances
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 15:22:47 +01:00
Yannik Bloscheck
c49c414ec4 [styles] Added smaller bus stop icons
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 15:16:20 +01:00
Jean-Baptiste
e62196798f [android] Add place holder in phone field
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-16 14:52:21 +01:00
Jean-Baptiste
c687c850b8 [android] Reduce padding foreach items in the search view
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-16 14:51:59 +01:00
Codeberg Translate
f549358f28 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Mickael81 <mickael81@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: ghose <ghose@noreply.codeberg.org>
Co-authored-by: tace16 <tace16@noreply.codeberg.org>
Co-authored-by: teletext <teletext@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-16 14:51:41 +01:00
Yannik Bloscheck
e3c8e422d5 [styles] Apply pill shape road sign also to tertiary roads in Austria
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:38:18 +01:00
Yannik Bloscheck
f664138a42 [types] Adding buoys
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:38:02 +01:00
x7z4w
6ae28a0ccf [android] Fix layers button tint
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-16 14:34:46 +01:00
Jean-Baptiste
6cef8e3594 [android] Add new fresh screenshots
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-16 14:21:41 +01:00
Yannik Bloscheck
ec76982895 [styles] Reduce visbility of service roads
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:12:38 +01:00
Yannik Bloscheck
17fb4dd855 [styles] Reduce visbility of tram tunnels
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:12:38 +01:00
Yannik Bloscheck
8c880f00b2 [styles] Decrease visbility of railway tunnels further
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:12:38 +01:00
Yannik Bloscheck
6c02e1d53a [types] Christmas trees
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:02:08 +01:00
zyphlar
a1944435ae Add French national library archiving info/instructions
Signed-off-by: zyphlar <zyphlar@noreply.codeberg.org>
2025-11-16 12:39:44 +01:00
Jean-Baptiste
5beed2672f [android] Remove custom right to left implementation
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-16 08:45:51 +01:00
x7z4w
64eb8af3c1 [android] Fix dark mode launcher icon
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-15 21:23:48 +01:00
Yannik Bloscheck
316e259ebb [types] Preperations for new education tag
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:40:57 +01:00
Yannik Bloscheck
dce50b2ca6 [types] Adding prep, sailing and flight school
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:40:57 +01:00
Yannik Bloscheck
8db1dd55b5 [generator] Name method parameter more clearly
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:32:43 +01:00
Yannik Bloscheck
14c4d08e32 [generator] Shorten code to avoid unnecessary if condition
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:32:43 +01:00
Yannik Bloscheck
2ae482de76 [generator] Ignore edited status for nearby places during map generation
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:32:43 +01:00
NoelClick
5c2e0b5b43 [android] Unify search opening hours formatting with place page
Signed-off-by: NoelClick <dev@noel.click>
2025-11-15 17:49:41 +01:00
Yannik Bloscheck
b2077ecf0b [types] Fix translation keys for soup kitchen and food banks
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 12:05:03 +01:00
Codeberg Translate
68ee3f4cda [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: ERYpTION <eryption@noreply.codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Juno Takano <jutty@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Oier <oier@noreply.codeberg.org>
Co-authored-by: Outbreak2096 <outbreak2096@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: aoxa <aoxa@noreply.codeberg.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: eBug <ebug@noreply.codeberg.org>
Co-authored-by: map-per <map-per@noreply.codeberg.org>
Co-authored-by: metehan <metehan@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Co-authored-by: sunsand <sunsand@noreply.codeberg.org>
Co-authored-by: tace16 <tace16@noreply.codeberg.org>
Co-authored-by: teletext <teletext@noreply.codeberg.org>
Co-authored-by: thesupertechie <thesupertechie@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Android UI Strings (SDK)
Translation: CoMaps/Countries and regions names
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plist
Translation: CoMaps/iOS UI Strings
2025-11-15 10:09:37 +00:00
Jean-Baptiste
07ba709939 [android] Increase touch area on text category on PP
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-15 08:00:41 +01:00
map-per
9bfebc2046 Add "Business is vacant"/'disused' option to editor (#526)
Signed-off-by: map-per <map-per@gmx.de>
Co-authored-by: map-per <map-per@gmx.de>
Co-committed-by: map-per <map-per@gmx.de>
2025-11-14 22:10:02 +01:00
Jean-Baptiste
24b498e386 [android] Fix FAB styles not apply
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-14 19:34:23 +01:00
Jean-Baptiste
0a0bb61942 [android] Improve opening_hours layout in the editor
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-14 19:26:33 +01:00
x7z4w
d78fe108ad [tools][styles] Suppress drules diffs output
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-14 14:08:02 +01:00
x7z4w
4aa441101c [tools] Cache python bytecode
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-14 14:08:02 +01:00
Konstantin Pastbin
2d275d9148 [generator] Use more threads to Index Taiwan_*
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-14 13:59:25 +01:00
Konstantin Pastbin
0814b574a9 [core] Add mapgen to default CDNs list
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-14 10:04:40 +01:00
patepelo
b4abce822e [search] Improve search terms and synonyms
Signed-off-by: patepelo <developing.anton@gmail.com>
Co-authored-by: patepelo <developing.anton@gmail.com>
Co-committed-by: patepelo <developing.anton@gmail.com>
2025-11-14 10:04:10 +01:00
gekeleda
2e0443097a [android] Improve map language settings
Signed-off-by: gekeleda <git@davidgekeler.eu>
Co-authored-by: gekeleda <git@davidgekeler.eu>
Co-committed-by: gekeleda <git@davidgekeler.eu>
2025-11-14 07:58:47 +01:00
Jean-Baptiste
f6426fe689 [android] Update Add schedule button to M3
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-13 22:26:42 +01:00
Yannik Bloscheck
6296de6ce9 [types] Add day spas
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-13 17:59:17 +01:00
NoelClick
4f63c5fdcf [android] Hide offline explanation after two downloads
Signed-off-by: NoelClick <dev@noel.click>
Co-authored-by: NoelClick <dev@noel.click>
Co-committed-by: NoelClick <dev@noel.click>
2025-11-13 13:32:01 +01:00
x7z4w
e4648fbc1f Revert "[core][drape] Making arrows smooth again"
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-13 11:36:21 +01:00
NoelClick
1de35bb5f8 [android] Adjust phrasing to "Opens on ... / Closes on ..." for clarity
- Update i18n strings following review suggestion.

Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
7b7df6ff2e [android] Remove unused full "minutes" plural resource
- Keep only `minutes_short` (`%d min`) for compact display.
- Ensures consistency with search UI and avoids redundant i18n strings.

Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
33e2f4854e [android] Use 60/15 min short-horizon windows (yellow) for closes/opens
- Closes: Yellow when <= 60 min
- Opens: Yellow when <= 15 min
- Keep compact unit via `plurals/minutes_short`
- Long-horizon cases continue to show "Open / Closed now • Opens / Closes ... at ..."
- Use full weekday names for clarity

Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
5b4fa55e83 [android] Use compact min unit for short opening-hours label
* Replace "minutes" plural with new "minutes_short" (`%d min`) for concise
  display on the place page.

Signed-off-by: NoelClick <dev@noel.click>
(cherry picked from commit 5468927a285466a5c5614328a4400abb5182d302)
Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
83256c4895 [android] Show "Opens / Closes X at Y" using formatter + add i18n strings
- Wire `PlacePageView.refreshOpenState()` to `OpenStateTextFormatter`.
- Keep <= 60 min branch with plurals (“Closes in %d minutes • at HH:mm”).
- Add day hint when next change is not today (“Opens Sat at 09:00”).
- Add localized strings with positional placeholders:
  - `opens_at` / `closes_at` (... `%s`).
  - `opens_day_at` / `closes_day_at` (`%1$s=%day`, `%2$s=%time`).

Refs: #2303

Signed-off-by: NoelClick <dev@noel.click>
(cherry picked from commit be80c7486882ab64a64efc30d0979d3674bbcc29)
Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
94542456a2 [android] Add OpenStateTextFormatter and JVM tests
- Introduce a tiny, pure formatter for opening-hours labels:
	- `formatHoursMinutes(12/24h)`, `isSameLocalDate()`, `dayShort()`
	- `buildAtLabel(...)` that accepts already-localized templates
- Add JVM unit tests for hour formatting and label selection.

Signed-off-by: NoelClick <dev@noel.click>
(cherry picked from commit df4b5f2281607e5a35b98b1007fb34eabd4aa657)
Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
patepelo
dd620c3f0c Add wiki debug command to docs
Signed-off-by: patepelo <developing.anton@gmail.com>
2025-11-13 02:01:27 +07:00
Jean-Baptiste
a42db17858 [android] Add icon before some settings
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-12 19:13:37 +01:00
patepelo
738d0641ca Add Myanmar Burma synonyms
Signed-off-by: patepelo <developing.anton@gmail.com>
2025-11-12 21:16:34 +07:00
Yannik Bloscheck
4f5f8782fe [types] Adding lifebuoy
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-12 12:25:57 +01:00
Yannik Bloscheck
a886270dda [types] Add emergency access points
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-12 12:25:32 +01:00
x7z4w
66609ff08b [styles] Fix winery label
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-12 10:49:38 +01:00
zyphlar
c8bfeb8e96 Don't error when a temp file doesn't exist
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-11 19:46:22 -08:00
zyphlar
7fc5ed494b [tools] Handle not-yet-generated drules files
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-12 02:26:27 +01:00
zyphlar
d9850f506a [docs] Add CDN_SETUP_INSTRUCTIONS.md
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-12 02:26:27 +01:00
zyphlar
f16d14e07f [generator] Automate maps generation with Docker and CI/CD
Co-authored-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-12 02:26:27 +01:00
Codeberg Translate
7852cdb5a5 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Linus_W_Frische <linus_w_frische@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: javnik <javnik@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-12 00:09:38 +00:00
x7z4w
9a96096066 [android] Remove routing options item divider
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-11 19:18:25 +01:00
Wojciech Sipak
f72c4a28d9 fix openlr helpers build
See the commit e0f8e043bb
apparently the code was never tested

Signed-off-by: Wojciech Sipak <wsipak@protonmail.com>
2025-11-11 18:46:49 +01:00
Wojciech Sipak
68bb78b00d fix levenshtein dfa test build
The constuctor argument type was modified without
any adjustments to the callers.

See the commit
a0a5459b15

Signed-off-by: Wojciech Sipak <wsipak@protonmail.com>
2025-11-11 18:46:49 +01:00
Jean-Baptiste
b9d4f082de [android] Rework clear and close icon on Android
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-11 17:55:28 +01:00
Jean-Baptiste
7e40a0e642 [android] Fix drawable used in floating marker view
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-11 17:51:53 +01:00
x7z4w
0d3d1823d8 [taginfo] Regenerate
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-11 12:32:59 +01:00
Codeberg Translate
09e08c4c8f [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: ma12vlad <ma12vlad@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/iOS - Map Feature Types
2025-11-10 18:09:49 +00:00
x7z4w
a0a5459b15 [search] nits
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-10 18:15:48 +01:00
x7z4w
6e57f9a2ba [platform] Fix warning
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-10 17:22:30 +01:00
Codeberg Translate
d971c51fd1 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-10 14:09:44 +00:00
Codeberg Translate
ac23642462 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-10 10:09:28 +00:00
Yannik Bloscheck
cfe1ce2c67 [ios] Work around background selection issue
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-10 10:39:31 +01:00
Codeberg Translate
e07b2e52b3 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: Juno Takano <jutty@noreply.codeberg.org>
Co-authored-by: Mickael81 <mickael81@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: ToninoThePro <toninothepro@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: ldmpub <ldmpub@noreply.codeberg.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Co-authored-by: 玄枵 <ipmlosion@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-10 09:09:37 +00:00
Codeberg Translate
24f59a1344 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: ERYpTION <eryption@noreply.codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: groam <groam@noreply.codeberg.org>
Co-authored-by: yannikbloscheck <yannikbloscheck@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-09 22:09:31 +00:00
x7z4w
85f4c1c3eb [build] Fix hash for failed generation (#2421)
Co-authored-by: x7z4w <x7z4w@noreply.codeberg.org>
Co-committed-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-09 16:37:02 +01:00
Codeberg Translate
3a9faecc3d [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: yannikbloscheck <yannikbloscheck@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
2025-11-09 14:10:16 +00:00
Yannik Bloscheck
f0e078701e [types] Adding soup kitchens, food banks, food sharing and give boxes
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 14:16:31 +01:00
Yannik Bloscheck
7e27971605 [style] Fix label color for lighthouses
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 13:57:50 +01:00
Yannik Bloscheck
9267622494 [types] Added telescopes and observatories
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 13:57:50 +01:00
Yannik Bloscheck
82a4843431 [types] Add car pooling spaces
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 13:56:34 +01:00
Yannik Bloscheck
5bd7a284fa [ios] Fixes CarPlay voice setting being permanent
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 12:43:26 +01:00
map-per
84ecbaa63c [generator] Keep area shape to fix OSM editing
Signed-off-by: map-per <map-per@gmx.de>
2025-11-09 12:36:24 +01:00
map-per
91ba38df56 [editor] Improve place does not exist note text
Signed-off-by: map-per <map-per@gmx.de>
2025-11-09 12:30:45 +01:00
Yannik Bloscheck
31dcb954b1 [ios] Added custom icons to routing options
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 12:21:24 +01:00
Yannik Bloscheck
8b4eab3444 [ios] Add UI for avoiding paved roads
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 12:21:24 +01:00
x7z4w
90c12003bd [routing] Avoid paved roads
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-09 12:21:24 +01:00
Codeberg Translate
a4909a0554 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/iOS - Map Feature Types
2025-11-09 11:10:19 +01:00
x7z4w
1b9e9f5091 [cmake] Fix QT errors
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-09 10:33:46 +01:00
Yannik Bloscheck
bd78355263 [style] Fix label color for major communication towers
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-08 23:26:57 +01:00
Codeberg Translate
b3c188564e [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: jeanbaptisteC <jeanbaptistec@noreply.codeberg.org>
Co-authored-by: ldmpub <ldmpub@noreply.codeberg.org>
Co-authored-by: map-per <map-per@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/iOS - Map Feature Types
2025-11-08 17:09:30 +00:00
map-per
e891ffa5d1 [editor] compare coordinates with tolerance and in WGS 84
Signed-off-by: map-per <map-per@gmx.de>
2025-11-08 13:05:46 +01:00
map-per
8799c5613e [editor] Fixes for the OSM uploading code
Signed-off-by: map-per <map-per@gmx.de>
2025-11-08 11:47:51 +01:00
Codeberg Translate
4a91c55ece [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: map-per <map-per@noreply.codeberg.org>
Translation: CoMaps/Search synonyms / aliases
2025-11-08 09:51:22 +00:00
vikiawv
268ad19089 [styles] Removing whitespace from hexagon roadshields
Signed-off-by: vikiawv <vikiawv@noreply.codeberg.org>
2025-11-08 10:51:09 +01:00
vikiawv
325f62d8cb [styles] Adding Hungary roadshields
Signed-off-by: vikiawv <vikiawv@noreply.codeberg.org>
2025-11-08 10:51:09 +01:00
x7z4w
443d24b8d0 [cmake] Fix definitions
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-08 09:18:10 +01:00
Codeberg Translate
c0e492247e [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Frz <frz@noreply.codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Kachelkaiser <kachelkaiser@noreply.codeberg.org>
Co-authored-by: Pat580 <pat580@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Stzyxh <stzyxh@noreply.codeberg.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: codebergian42 <codebergian42@noreply.codeberg.org>
Co-authored-by: ghose <ghose@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Co-authored-by: teletext <teletext@noreply.codeberg.org>
Co-authored-by: x7z4w <x7z4w@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/Countries and regions names
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plurals
Translation: CoMaps/iOS UI Strings
2025-11-08 08:30:09 +01:00
map-per
e71550e78b Fix details shown in editor for tourism and place_of_worship
Signed-off-by: map-per <map-per@gmx.de>
2025-11-07 22:56:33 +01:00
Yannik Bloscheck
b3991555b5 [styles] Fix waterpark label color
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 21:52:27 +01:00
map-per
c21afb27bd [editor] Higher priority for OSM upload on Android 12 and higher
Signed-off-by: map-per <map-per@gmx.de>
2025-11-07 21:02:22 +01:00
Yannik Bloscheck
dea24b5681 [styes] Add icon to train station buildings
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 21:00:17 +01:00
Yannik Bloscheck
51859424ea [types] Adding telecommunication shop
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:59:16 +01:00
Yannik Bloscheck
b5404cc2c6 [types] Adding indoor play
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:58:48 +01:00
Yannik Bloscheck
b8e0ad3b3e [types] Adding boat rental and icon for slipway
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:58:24 +01:00
Yannik Bloscheck
23b5d92d4f [types] Adding payment centre
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:55:37 +01:00
Yannik Bloscheck
99f3639b9c [types] Adding mobile money agent
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:52:24 +01:00
Yannik Bloscheck
e0f8e043bb [indexer] Support for road shield parsing by highway class
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:49:54 +01:00
Yannik Bloscheck
7f4ff8b606 [styles] Optimized file sizes of hexagon highway shields
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:45:27 +01:00
vikiawv
7132ff2ed8 [styles] Adding highway hexagon road shields
Signed-off-by: vikiawv <vikiawv@noreply.codeberg.org>
2025-11-07 20:45:27 +01:00
603 changed files with 11121 additions and 2239 deletions

View File

@@ -5,10 +5,10 @@ on:
jobs:
description: 'Which job(s) to run right now?'
required: true
default: 'all'
default: 'all-except-upload'
type: choice
options:
- all
- all-except-upload
- copy-coasts
- planet
- wiki
@@ -16,30 +16,82 @@ on:
- subways
- tiger
- maps
- upload
map-generator-continue:
description: 'Continue previous map generation?'
required: false
default: false
type: boolean
map-generator-countries:
description: 'Generate specific MWMs? (i.e. "US_New York_*, foo")'
required: false
type: string
reset:
description: 'Reset part of the system?'
required: false
default: 'no'
type: choice
options:
- 'no'
- wiki-ratelimit
## RCLONE_CONF is multi-line text containing keys and credentials for us2,ru1,fi1,de1 servers
env:
RCLONE_CONF: ${{ secrets.RCLONE_CONF }}
WIKIMEDIA_USERNAME: ${{ secrets.WIKIMEDIA_USERNAME }}
WIKIMEDIA_PASSWORD: ${{ secrets.WIKIMEDIA_PASSWORD }}
S3_KEY_ID: ${{ secrets.S3_KEY_ID }}
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }}
S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
SFTP_USER: ${{ secrets.SFTP_USER }}
SFTP_PASSWORD: ${{ secrets.SFTP_PASSWORD }}
SFTP_HOST: ${{ secrets.SFTP_HOST }}
SFTP_PATH: ${{ secrets.SFTP_PATH }}
ZULIP_BOT_EMAIL: ${{ secrets.ZULIP_BOT_EMAIL }}
ZULIP_API_KEY: ${{ secrets.ZULIP_API_KEY }}
MWMCONTINUE: ${{ inputs.map-generator-continue }}
MWMCOUNTRIES: ${{ inputs.map-generator-countries }}
DEBIAN_FRONTEND: noninteractive
TZ: Etc/UTC
jobs:
copy-coasts:
if: inputs.jobs == 'copy-coasts' || inputs.jobs == 'all'
name: Copy Previously Generated Coasts
clone-repos:
name: Clone Git Repos
runs-on: mapfilemaker
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal:/mnt/4tbexternal
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Checkout main repo
shell: bash
run: |
echo "Cloning $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY branch $FORGEJO_REF_NAME"
cd ~
git clone --recurse-submodules --shallow-submodules -b $FORGEJO_REF_NAME --single-branch $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY.git comaps
- name: Checkout wikiparser repo
shell: bash
run: |
cd ~
git clone https://codeberg.org/comaps/wikiparser.git
- name: Checkout subways repo
shell: bash
run: |
cd ~
git clone https://codeberg.org/comaps/subways.git
copy-coasts:
if: inputs.jobs == 'copy-coasts' || inputs.jobs == 'all-except-upload'
name: Copy Previously Generated Coasts
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
@@ -47,336 +99,403 @@ jobs:
- name: Copy Coasts
shell: bash
run: |
if [ -f /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom ]; then
cp /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom /media/4tbexternal/osm-planet/latest_coasts.geom
cp /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.rawgeom /media/4tbexternal/osm-planet/latest_coasts.rawgeom
echo "WorldCoasts available:"
ls -al /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.*
if [ -f /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom ]; then
echo "Before:"
ls -al /home/planet/latest_coasts*
cp -p /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom /home/planet/latest_coasts.geom
cp -p /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.rawgeom /home/planet/latest_coasts.rawgeom
echo "After:"
ls -al /home/planet/latest_coasts*
else
echo "No WorldCoasts found."
fi
update-planet:
if: inputs.jobs == 'planet' || inputs.jobs == 'all'
if: inputs.jobs == 'planet' || inputs.jobs == 'all-except-upload'
name: Update Planet
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -y
apt-get install -y pyosmium osmium-tool python3-venv python3-pip wget2
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
pip3 install "protobuf<4"
- name: Download Planet File if Absent
shell: bash
# TODO: replace wget2 with curl -Z
run: |
if [ ! -d /media/4tbexternal/osm-planet/planet/ ]; then
mkdir -p /media/4tbexternal/osm-planet/planet/
if [ ! -d /home/planet/planet/ ]; then
mkdir -p /home/planet/planet/
fi
if [ ! -f /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf ]; then
cd /media/4tbexternal/osm-planet/planet/
wget2 --verbose --progress=bar --continue --debug https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf
if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
cd /home/planet/planet/
wget2 --verbose --progress=bar --continue https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf
else
echo "planet-latest.osm.pbf was found, raw download not required."
fi
- name: Update Planet
shell: bash
run: |
cd /media/4tbexternal/osm-planet/planet/
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -vv --size 16384
cd /home/planet/planet/
rm -f planet-latest-new.osm.pbf
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -v --size 16384
mv planet-latest-new.osm.pbf planet-latest.osm.pbf
- name: Converting planet-latest.osm.pbf to planet.o5m
run: /root/OM/osmctools/osmconvert planet-latest.osm.pbf -o=planet.o5m
# TODO: better to run osmupdate (not convert) just before starting the maps jobs - for max fresh data.
run: |
echo "Starting..."
cd /home/planet/planet/
osmconvert -v --drop-author --drop-version --hash-memory=4000 planet-latest.osm.pbf -o=planet.o5m
echo "Done."
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Planet update is done!'
wiki-update:
if: inputs.jobs == 'wiki' || inputs.jobs == 'all'
if: inputs.jobs == 'wiki' || inputs.jobs == 'all-except-upload'
name: Update Wikipedia
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -y
apt-get install -y jq curl wget2 rustc cargo git ca-certificates
- name: Clone wikiparser if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/wikiparser ]; then
cd /media/4tbexternal
git clone https://codeberg.org/comaps/wikiparser.git
fi
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Check for planet file
shell: bash
# TODO: remove debug output
run: |
if [ ! -f /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf ]; then
echo "ERROR: No file at /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf"
ls -al /media/4tbexternal/
ls -al /media/4tbexternal/osm-planet/
ls -al /media/4tbexternal/osm-planet/planet/
if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
echo "ERROR: No file at /home/planet/planet/planet-latest.osm.pbf"
ls -al /home/planet/
ls -al /home/planet/planet/
exit 1
fi
- name: Only get new dumps once per 30 days
shell: bash
run: |
if [[ '${{ inputs.reset }}' == 'wiki-ratelimit' ]]; then
echo "Bypassing wiki rate limit upon request."
exit 0
fi
datediff() {
d1=$(date -d "$1" +%s)
d2=$(date -d "$2" +%s)
echo $(( (d1 - d2) / 86400 ))
}
RECENTDUMPDATE=$(find /home/planet/wikipedia/dumps/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f6)
TODAY=$(date +%Y%m%d)
DATEDIFF=$(datediff $TODAY $RECENTDUMPDATE)
if [ $DATEDIFF -lt 30 ]; then
echo "ERROR: The most recent wiki dump is from $RECENTDUMPDATE, $DATEDIFF days ago. Wikimedia limits users to 15 snapshot requests per month."
echo "Set the 'reset' option to 'wiki-ratelimit' to bypass this."
ls -al /home/planet/wikipedia/dumps/
exit 1
fi
- name: Update Wikipedia from Enterprise API
shell: bash
run: |
mkdir -p /media/4tbexternal/osm-planet/wikipedia/dumps
mkdir -p /media/4tbexternal/osm-planet/wikipedia/build
cd /media/4tbexternal/wikiparser
#todo: curl in download.sh can fail when rate limited and even save error messages to the output. need to validate.
#downloading all languages can also trigger rate limits or fail as well. needs work.
#also: a failure to download means a failure to build, and could result in no wiki descriptions etc.
#also-also: do we want to remove old wiki data in planet between builds? pastk: no need, its being updated / augmented
mkdir -p /home/planet/wikipedia/dumps
mkdir -p /home/planet/wikipedia/build
cd ~/wikiparser
ls -al
echo "Downloading ..."
./download.sh /media/4tbexternal/osm-planet/wikipedia/dumps
./download.sh /home/planet/wikipedia/dumps
ls -al /home/planet/wikipedia/dumps/*
echo "Running ..."
./run.sh /media/4tbexternal/osm-planet/wikipedia/build \
/media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf \
/media/4tbexternal/osm-planet/wikipedia/dumps/latest/*.tar.gz
./run.sh /home/planet/wikipedia/build \
/home/planet/planet/planet-latest.osm.pbf \
/home/planet/wikipedia/dumps/latest/*.tar.gz
echo "DONE"
- name: Check that the latest dumps are present, recent, and not super tiny
shell: bash
run: |
FAILCHECK=0
# Check all .tar.gz files in /home/planet/wikipedia/dumps/latest/
for file in /home/planet/wikipedia/dumps/latest/*.tar.gz; do
# Check if file exists (handles case where glob doesn't match)
[ -e "$file" ] || continue
# Get file size in MB and modification time in days
size_mb=$(stat -f%z "$file" 2>/dev/null | awk '{print int($1/1024/1024)}' || stat -c%s "$file" | awk
'{print int($1/1024/1024)}')
days_old=$(find "$file" -mtime -7 | wc -l)
# Verify conditions
if [ "$size_mb" -lt 100 ]; then
echo "FAIL: $file is only ${size_mb}MB (< 100MB)"
FAILCHECK=1
elif [ "$days_old" -eq 0 ]; then
echo "FAIL: $file is older than 7 days"
ls -al $file
FAILCHECK=1
else
echo "PASS: $file (${size_mb}MB, modified within 7 days)"
fi
done
exit $FAILCHECK
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Wiki update is done!'
update-isolines:
if: inputs.jobs == 'isolines' || inputs.jobs == 'all'
if: inputs.jobs == 'isolines' || inputs.jobs == 'all-except-upload'
name: Update Isolines
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq \
&& apt-get install -y --no-install-recommends \
curl \
osmctools \
rclone \
git \
ca-certificates \
openssh-client \
sshpass \
vim \
wget \
build-essential \
clang \
cmake \
python3 \
python3-pip \
python3.12-venv \
qt6-base-dev \
qt6-positioning-dev \
libc++-dev \
libfreetype-dev \
libglvnd-dev \
libgl1-mesa-dev \
libharfbuzz-dev \
libicu-dev \
libqt6svg6-dev \
libqt6positioning6-plugins \
libqt6positioning6 \
libsqlite3-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
zlib1g-dev
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
pip3 install "protobuf<4"
- name: Clone main repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
apt-get update -qq && apt-get install -y --no-install-recommends git
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
# TODO: we only need to update these if our SRTM or countries change
# TODO: after update, verify that sizable files exist: /home/planet/isolines/*.isolines
- name: Update Isolines
shell: bash
# TODO: preserve previous isolines version?
# TODO: cleanup the tmp-tiles dir after completion
run: |
cd /media/4tbexternal/comaps-init/
./tools/unix/build_omim.sh -R topography_generator_tool
rm -rf ../osm-planet/isolines/
mkdir ../osm-planet/isolines/
../omim-build-relwithdebinfo/topography_generator_tool \
cd ~/comaps/
./tools/unix/build_omim.sh -p ~ -R topography_generator_tool
rm -rf /home/planet/isolines/
mkdir /home/planet/isolines/
~/omim-build-relwithdebinfo/topography_generator_tool \
--profiles_path=./data/conf/isolines/isolines-profiles.json \
--countries_to_generate_path=./data/conf/isolines/countries-to-generate.json \
--tiles_isolines_out_dir=../osm-planet/isolines/tmp-tiles/ \
--countries_isolines_out_dir=../osm-planet/isolines/ \
--tiles_isolines_out_dir=/home/planet/isolines/tmp-tiles/ \
--countries_isolines_out_dir=/home/planet/isolines/ \
--data_dir=./data/ \
--srtm_path=../osm-planet/SRTM-patched-europe/ \
--threads=22
--srtm_path=/home/planet/SRTM-patched-europe/ \
--threads=96
- name: Check isolines
shell: bash
run: |
NUMISO=$(ls -al /home/planet/isolines/*.isolines | wc -l)
echo "Found $NUMISO isolines"
if [ $NUMISO -lt 10 ]; then
echo "ERROR: Did generation fail?"
exit 1
fi
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Isolines are done!'
update-subways:
if: inputs.jobs == 'subways' || inputs.jobs == 'all'
if: inputs.jobs == 'subways' || inputs.jobs == 'all-except-upload'
name: Update Subways
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq && apt-get install -y --no-install-recommends curl osmctools osmium-tool python3-venv ca-certificates git python3-pip
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
pip3 install "protobuf<4"
- name: Clone subways if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/subways ]; then
cd /media/4tbexternal
git clone https://codeberg.org/comaps/subways.git
fi
- name: Clone main repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Update Subways
shell: bash
run: |
cd /media/4tbexternal/comaps-init/
cd ~/comaps/
cp tools/unix/maps/settings.sh.prod tools/unix/maps/settings.sh
./tools/unix/maps/generate_subways.sh
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Subways are done!'
update-tiger:
if: inputs.jobs == 'tiger' || inputs.jobs == 'all'
if: inputs.jobs == 'tiger' || inputs.jobs == 'all-except-upload'
name: Update TIGER
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq && apt-get install -y --no-install-recommends \
build-essential \
clang \
cmake \
ninja-build \
ca-certificates \
git \
wget2
- name: Clone main repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Build address_parser
shell: bash
run: |
cd /media/4tbexternal/comaps-init
rm -rf ../omim-build-relwithdebinfo/CMakeCache.txt
rm -rf ../omim-build-relwithdebinfo/CMakeFiles
./tools/unix/build_omim.sh -R address_parser_tool
cd ~/comaps
#rm -rf ~/omim-build-relwithdebinfo/CMakeCache.txt
#rm -rf ~/omim-build-relwithdebinfo/CMakeFiles
./tools/unix/build_omim.sh -p ~ -R address_parser_tool
- name: Update TIGER from Nominatim
shell: bash
# TODO: use curl instead of wget2
run: |
cd /media/4tbexternal/osm-planet/
# TODO: maybe remove old osm-planet/tiger first?
cd /home/planet/
mkdir -p tiger
wget2 https://nominatim.org/data/tiger-nominatim-preprocessed-latest.csv.tar.gz
tar -xOzf tiger-nominatim-preprocessed-latest.csv.tar.gz | /media/4tbexternal/omim-build-relwithdebinfo/address_parser_tool --output_path=./tiger
cd ~/comaps
tar -xOzf /home/planet/tiger-nominatim-preprocessed-latest.csv.tar.gz | ~/omim-build-relwithdebinfo/address_parser_tool --output_path=/home/planet/tiger
generate-maps:
if: inputs.jobs == 'maps' || inputs.jobs == 'all'
if: inputs.jobs == 'maps' || inputs.jobs == 'all-except-upload'
name: Generate Maps
runs-on: mapfilemaker
needs:
- clone-repos
timeout-minutes: 40320
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
options: --ulimit nofile=262144:262144
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq \
&& apt-get install -y --no-install-recommends \
curl \
osmctools \
rclone \
git \
ca-certificates \
openssh-client \
sshpass \
vim \
wget \
build-essential \
clang \
cmake \
ninja-build \
python3 \
python3-pip \
python3.12-venv \
qt6-base-dev \
qt6-positioning-dev \
libc++-dev \
libfreetype-dev \
libglvnd-dev \
libgl1-mesa-dev \
libharfbuzz-dev \
libicu-dev \
libqt6svg6-dev \
libqt6positioning6-plugins \
libqt6positioning6 \
libsqlite3-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
zlib1g-dev
- name: Clone repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Make output folders if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/osm-maps ]; then
mkdir -p /media/4tbexternal/osm-maps
if [ ! -d /mnt/4tbexternal/osm-maps ]; then
mkdir -p /mnt/4tbexternal/osm-maps
fi
- name: Get SRTM if necessary
# TODO: it should be a separate step like Wiki or isolines
shell: bash
run: |
if [ ! -d /media/4tbexternal/osm-planet/SRTM-patched-europe/ ]; then
if [ ! -d /home/planet/SRTM-patched-europe/ ]; then
echo "ERROR: NO SRTM"
exit 1
fi
- name: Symlink paths for repo scripts
shell: bash
run: |
mkdir -p /root/OM
ln -s /media/4tbexternal/comaps-init /root/OM/organicmaps
ln -s /media/4tbexternal/osm-planet /home/planet
ln -s /media/4tbexternal/osm-maps /root/OM/maps_build
- name: Run docker_maps_generator.sh
shell: bash
run: |
cd /root/OM/organicmaps
./tools/unix/docker_maps_generator.sh
cd ~/comaps
bash ./tools/unix/maps/docker_maps_generator.sh
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Generator is done!'
upload-maps:
if: inputs.jobs == 'upload'
name: Upload Maps
runs-on: mapfilemaker
container:
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Write config file
run: |
mkdir -p ~/.config/rclone/
echo "${{ secrets.RCLONE_CONF }}" > ~/.config/rclone/rclone.conf
- name: Upload map files to CDNs
shell: bash
run: |
shopt -s nullglob
buildfolder=$(find /mnt/4tbexternal/osm-maps/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f5)
builddate=$(find /mnt/4tbexternal/osm-maps/*/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f6)
mwmfiles=( /mnt/4tbexternal/osm-maps/$buildfolder/$builddate/*.mwm )
if (( ${#mwmfiles[@]} )); then
echo "<$(date +%T)> Uploading maps from $buildfolder/$builddate..."
cd ~/comaps/tools/unix/maps
./upload_to_cdn.sh /mnt/4tbexternal/osm-maps/$buildfolder/$builddate
echo "<$(date +%T)> Finished uploading maps from $buildfolder/$builddate."
else
echo "<$(date +%T)> No MWM files in /mnt/4tbexternal/osm-maps/$buildfolder/$builddate/*.mwm, not uploading maps."
echo "<$(date +%T)> Found top level: $(ls -alt /mnt/4tbexternal/osm-maps/*)"
echo "<$(date +%T)> Found second level: $(ls -alt /mnt/4tbexternal/osm-maps/$buildfolder/*)"
fi
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Upload is done!'

1
.gitignore vendored
View File

@@ -9,6 +9,7 @@ Makefile.Release
object_script.*.Debug
object_script.*.Release
compile_commands.json
*.local.*
stxxl.errlog
stxxl.log

View File

@@ -175,10 +175,10 @@ if (NOT PLATFORM_IPHONE AND NOT PLATFORM_ANDROID)
find_package(Qt6 COMPONENTS REQUIRED ${qt_components} PATHS $ENV{QT_PATH} /opt/homebrew/opt/qt@6 /usr/local/opt/qt@6 /usr/lib/x86_64-linux-gnu/qt6)
set(MINIMUM_REQUIRED_QT_VERSION 6.4.0)
if (Qt6Widgets_VERSION VERSION_LESS ${MINIMUM_REQUIRED_QT_VERSION})
message(FATAL_ERROR "Unsupported Qt version: ${Qt6Widgets_VERSION}, the minimum required is ${MINIMUM_REQUIRED_QT_VERSION}")
if (Qt6_VERSION VERSION_LESS ${MINIMUM_REQUIRED_QT_VERSION})
message(FATAL_ERROR "Unsupported Qt version: ${Qt6_VERSION}, the minimum required is ${MINIMUM_REQUIRED_QT_VERSION}")
else()
message(STATUS "Found Qt version: ${Qt6Widgets_VERSION}")
message(STATUS "Found Qt version: ${Qt6_VERSION}")
endif()
endif()
@@ -222,6 +222,11 @@ if (PLATFORM_DESKTOP AND NOT WITH_SYSTEM_PROVIDED_3PARTY)
include_directories("${PROJECT_BINARY_DIR}/3party/gflags/include")
endif()
# Android fails to find boost in many cases, this fixes it.
if (PLATFORM_ANDROID)
include_directories("${OMIM_ROOT}/3party/boost")
endif()
# Used in qt/ and shaders/
find_package(Python3 REQUIRED COMPONENTS Interpreter)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 628 KiB

After

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 KiB

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 KiB

After

Width:  |  Height:  |  Size: 357 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 KiB

After

Width:  |  Height:  |  Size: 605 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 KiB

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 KiB

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 452 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 KiB

After

Width:  |  Height:  |  Size: 355 KiB

View File

@@ -0,0 +1,31 @@
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.
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 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, nedobičkonosno in popolnoma odprtokodno.</b>
<b>Glavne zmogljivosti</b>:
• 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č
• Iščite po imenu, hišnemu naslovu ali po vrsti
• Usmerjanje z glasovnimi obvestili za hojo, kolesarjenje ali vožnjo avtomobila.
• Zaznamujte svoje najljubše kraje s preprostim dotikom
• Wikipedijini članki brez povezave
• Prometna plast podzemne železnice z usmerjanjem
• Izvozite ali uvozite zaznamke in sledi v oblikah KML, KMZ, GPX
• Temni prikaz za uporabo ponoči
• Izboljšajtw podatke zemljevida za vse z uporabo vgrajenega urejevalnika
<b>Svoboda je tu</b>
Odkijte več o vašem potovanju, usmerjajte se po svetu s poudarkom na zasebnosti in skupnostnem delovanju!

View File

@@ -0,0 +1 @@
Comaps- Vandra, Cykla, Kör Offline, Privat

View File

@@ -0,0 +1,32 @@
OpenStreetMap தரவை அடிப்படையாகக் கொண்ட சமூகம் தலைமையிலான இலவச மற்றும் திறந்த மூல வரைபட பயன்பாடு மற்றும் வெளிப்படைத்தன்மை, தனியுரிமை மற்றும் இலாப நோக்கற்றது ஆகியவற்றுக்கான அர்ப்பணிப்புடன் வலுவூட்டப்பட்டது. CoMaps என்பது ஆர்கானிக் மேப்சின் ஃபோர்க்/ச்பின்-ஆஃப் ஆகும், இது Maps.ME இன் ஃபோர்க் ஆகும்.
திட்டத்திற்கான காரணங்கள் மற்றும் அதன் திசையை <b><i>codeberg.org/comaps</i></b> இல் படிக்கவும்.
அங்குள்ள சமூகத்தில் சேர்ந்து சிறந்த வரைபட பயன்பாட்டை உருவாக்க உதவுங்கள்
• பயன்பாட்டைப் பயன்படுத்தி, அதைப் பற்றிய தகவலைப் பரப்புங்கள்
• கருத்துக்களை வழங்கவும் மற்றும் சிக்கல்களைப் புகாரளிக்கவும்
• பயன்பாட்டில் அல்லது OpenStreetMap இணையதளத்தில் வரைபடத் தரவைப் புதுப்பிக்கவும்
‣ <b>ஆஃப்லைனில் கவனம் செலுத்தப்பட்டது</b>: செல்லுலார் சேவையின் தேவையின்றி உங்களின் வெளிநாட்டுப் பயணத்தைத் திட்டமிட்டு வழிநடத்துங்கள், தொலைதூர பயணத்தில் இருக்கும் போது வழிப் புள்ளிகளைத் தேடுங்கள்.
‣ <b>தனியுரிமைக்கு மதிப்பளித்தல்</b>: பயன்பாடு தனியுரிமையை மனதில் கொண்டு வடிவமைக்கப்பட்டுள்ளது - நபர்களை அடையாளம் காணாது, கண்காணிக்காது மற்றும் தனிப்பட்ட தகவல்களைச் சேகரிக்காது. விளம்பரங்கள் இல்லாதது.
‣ <b>எளிமையான மற்றும் மெருகூட்டப்பட்டது</b>: செயல்படும் நற்பொருத்தங்கள் பயன்படுத்த எளிதானது.
‣ <b>உங்கள் பேட்டரி மற்றும் இடத்தைச் சேமிக்கிறது</b>: மற்ற வழிசெலுத்தல் பயன்பாடுகளைப் போல உங்கள் பேட்டரியை வெளியேற்றாது. சிறிய வரைபடங்கள் உங்கள் தொலைபேசியில் விலைமதிப்பற்ற இடத்தை சேமிக்கின்றன.
‣ <b>இலவசம் மற்றும் சமூகத்தால் உருவாக்கப்பட்டது</b>: OpenStreetMap இல் இடங்களைச் சேர்ப்பதன் மூலமும், சோதனை செய்து, அம்சங்களைப் பற்றிய கருத்துக்களை வழங்குவதன் மூலமும், அவர்களின் மேம்பாட்டுத் திறன்களையும் பணத்தையும் பங்களிப்பதன் மூலமும் உங்களைப் போன்றவர்கள் பயன்பாட்டை உருவாக்க உதவியுள்ளனர்.
‣ <b>திறந்த மற்றும் வெளிப்படையான முடிவெடுக்கும் மற்றும் நிதியியல், இலாப நோக்கற்ற மற்றும் முழு திறந்த மூல.</b>
<b>முக்கிய அம்சங்கள்</b>:
• கூகுள் மேப்சில் இல்லாத இடங்களுடன் தரவிறக்கம் செய்யக்கூடிய விரிவான வரைபடங்கள்
• ஐகிங் பாதைகள், முகாம்கள், நீர் ஆதாரங்கள், சிகரங்கள், விளிம்பு கோடுகள் போன்றவற்றைக் கொண்ட வெளிப்புறப் பயன்முறை
• நடைபாதைகள் மற்றும் சைக்கிள் பாதைகள்
• உணவகங்கள், எரிவாயு நிலையங்கள், ஓட்டல்கள், கடைகள், சுற்றிப்பார்க்கும் இடங்கள் மற்றும் பல போன்ற ஆர்வமுள்ள இடங்கள்
• பெயர் அல்லது முகவரி அல்லது ஆர்வமுள்ள வகை மூலம் தேடவும்
• நடைபயிற்சி, சைக்கிள் ஓட்டுதல் அல்லது வண்டி ஓட்டுவதற்கான குரல் அறிவிப்புகளுடன் வழிசெலுத்தல்
• ஒரே தட்டினால் உங்களுக்குப் பிடித்த இடங்களை புத்தகக்குறி செய்யவும்
• இணைப்பில்லாத விக்கிபீடியா கட்டுரைகள்
• சுரங்கப்பாதை போக்குவரத்து அடுக்கு மற்றும் திசைகள்
• ட்ராக் ரெக்கார்டிங்
• KML, KMZ, GPX வடிவங்களில் புக்மார்க்குகள் மற்றும் டிராக்குகளை ஏற்றுமதி மற்றும் இறக்குமதி செய்யுங்கள்
• இரவில் பயன்படுத்த ஒரு இருண்ட பயன்முறை
• அடிப்படை உள்ளமைக்கப்பட்ட எடிட்டரைப் பயன்படுத்தி அனைவருக்கும் வரைபடத் தரவை மேம்படுத்தவும்
<b>சுதந்திரம் இங்கே உள்ளது</b>
உங்கள் பயணத்தைக் கண்டறியவும், தனியுரிமை மற்றும் சமூகத்தை முன்னணியில் கொண்டு உலகிற்கு செல்லவும்!

View File

@@ -0,0 +1 @@
எளிதான வரைபட வழிசெல் - உங்கள் பயணத்தை மேலும் கண்டறி - சமூகத்தால் இயக்கப்படுகிறது

View File

@@ -0,0 +1 @@
Comaps- Navigera Privat

View File

@@ -0,0 +1 @@
எளிதான வரைபட வழிசெல் - உங்கள் பயணத்தை மேலும் கண்டறி - சமூகத்தால் இயக்கப்படுகிறது

View File

@@ -1,11 +1,13 @@
package app.organicmaps.background;
import android.content.Context;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.work.Constraints;
import androidx.work.ExistingWorkPolicy;
import androidx.work.NetworkType;
import androidx.work.OneTimeWorkRequest;
import androidx.work.OutOfQuotaPolicy;
import androidx.work.WorkManager;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
@@ -35,7 +37,11 @@ public class OsmUploadWork extends Worker
if (Editor.nativeHasSomethingToUpload() && OsmOAuth.isAuthorized())
{
final Constraints c = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
final OneTimeWorkRequest wr = new OneTimeWorkRequest.Builder(OsmUploadWork.class).setConstraints(c).build();
OneTimeWorkRequest.Builder builder = new OneTimeWorkRequest.Builder(OsmUploadWork.class).setConstraints(c);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
builder.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST);
}
final OneTimeWorkRequest wr = builder.build();
WorkManager.getInstance(context).beginUniqueWork("UploadOsmChanges", ExistingWorkPolicy.KEEP, wr).enqueue();
}
}

View File

@@ -18,9 +18,7 @@ import androidx.fragment.app.FragmentManager;
import app.organicmaps.MwmApplication;
import app.organicmaps.R;
import app.organicmaps.SplashActivity;
import app.organicmaps.sdk.util.Config;
import app.organicmaps.sdk.util.log.Logger;
import app.organicmaps.util.RtlUtils;
import com.google.android.material.appbar.MaterialToolbar;
import java.util.Objects;
@@ -42,7 +40,6 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
{
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT));
RtlUtils.manageRtl(this);
if (!MwmApplication.from(this).getOrganicMaps().arePlatformAndCoreInitialized())
{
final Intent intent = Objects.requireNonNull(getIntent());

View File

@@ -32,7 +32,8 @@ public class DrivingOptionsScreen extends BaseMapScreen
new DrivingOption(RoadType.Dirty, R.string.avoid_unpaved),
new DrivingOption(RoadType.Ferry, R.string.avoid_ferry),
new DrivingOption(RoadType.Motorway, R.string.avoid_motorways),
new DrivingOption(RoadType.Steps, R.string.avoid_steps)};
new DrivingOption(RoadType.Steps, R.string.avoid_steps),
new DrivingOption(RoadType.Paved, R.string.avoid_paved)};
@NonNull
private final Map<RoadType, Boolean> mInitialDrivingOptionsState = new HashMap<>();

View File

@@ -357,7 +357,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
private MenuBottomSheetItem getCancelMenuItem()
{
return new MenuBottomSheetItem(R.string.cancel, R.drawable.ic_cancel, () -> onCancelActionSelected(mSelectedItem));
return new MenuBottomSheetItem(R.string.cancel, R.drawable.ic_close, () -> onCancelActionSelected(mSelectedItem));
}
private class ItemViewHolder extends BaseInnerViewHolder<CountryItem>

View File

@@ -4,6 +4,7 @@ import android.location.Location;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat;
import app.organicmaps.MwmActivity;
@@ -26,6 +27,10 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
{
private static boolean sAutodownloadLocked;
private static final int HIDE_THRESHOLD = 2;
// Default bundles (e.g., world/coasts). Used to approximate “user-downloaded” count.
private static final int DEFAULT_MAP_BASELINE = 2;
private final MwmActivity mActivity;
private final View mFrame;
private final MaterialTextView mParent;
@@ -33,6 +38,7 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
private final MaterialTextView mSize;
private final WheelProgressView mProgress;
private final MaterialButton mButton;
private final View mOfflineExplanation;
private int mStorageSubscriptionSlot;
@@ -43,8 +49,10 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
@Override
public void onStatusChanged(List<MapManager.StorageCallbackData> data)
{
if (mCurrentCountry == null)
if (mCurrentCountry == null) {
updateOfflineExplanationVisibility();
return;
}
for (MapManager.StorageCallbackData item : data)
{
@@ -58,7 +66,7 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
{
mCurrentCountry.update();
updateProgressState(false);
updateOfflineExplanationVisibility();
return;
}
}
@@ -101,6 +109,12 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
return enqueued || progress || applying;
}
private void updateOfflineExplanationVisibility() {
if (mOfflineExplanation == null) return;
// hide once threshold reached; safe to call repeatedly.
app.organicmaps.util.UiUtils.showIf(MapManager.nativeGetDownloadedCount() < (DEFAULT_MAP_BASELINE + HIDE_THRESHOLD), mOfflineExplanation);
}
private void updateProgressState(boolean shouldAutoDownload)
{
updateStateInternal(shouldAutoDownload);
@@ -108,6 +122,8 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
private void updateStateInternal(boolean shouldAutoDownload)
{
updateOfflineExplanationVisibility();
boolean showFrame =
(mCurrentCountry != null && !mCurrentCountry.present && !RoutingController.get().isNavigating());
if (showFrame)
@@ -191,6 +207,9 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
mProgress = controls.findViewById(R.id.wheel_downloader_progress);
mButton = controls.findViewById(R.id.downloader_button);
mOfflineExplanation = mFrame.findViewById(R.id.offline_explanation);
updateOfflineExplanationVisibility();
mProgress.setOnClickListener(v -> {
if (mCurrentCountry == null)
return;
@@ -247,6 +266,7 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
public void onResume()
{
updateOfflineExplanationVisibility();
if (mStorageSubscriptionSlot == 0)
{
mStorageSubscriptionSlot = MapManager.nativeSubscribe(mStorageCallback);

View File

@@ -153,6 +153,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private final Map<Metadata.MetadataType, View> mDetailsBlocks = new HashMap<>();
private final Map<Metadata.MetadataType, View> mSocialMediaBlocks = new HashMap<>();
private MaterialButton mReset;
private MaterialButton mDisused;
private EditorHostFragment mParent;
@@ -827,6 +828,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
osmInfo.setMovementMethod(LinkMovementMethod.getInstance());
mReset = view.findViewById(R.id.reset);
mReset.setOnClickListener(this);
mDisused = view.findViewById(R.id.disused);
mDisused.setOnClickListener(this);
mDetailsBlocks.put(Metadata.MetadataType.FMD_OPEN_HOURS, blockOpeningHours);
mDetailsBlocks.put(Metadata.MetadataType.FMD_PHONE_NUMBER, blockPhone);
@@ -894,6 +897,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
mParent.addLanguage();
else if (id == R.id.reset)
reset();
else if (id == R.id.disused)
placeDisused();
else if (id == R.id.block_outdoor_seating)
mOutdoorSeating.toggle();
}
@@ -939,9 +944,12 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
if (mParent.addingNewObject())
{
UiUtils.hide(mReset);
UiUtils.hide(mDisused);
return;
}
mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE);
if (Editor.nativeIsMapObjectUploaded())
{
mReset.setText(R.string.editor_place_doesnt_exist);
@@ -1014,6 +1022,19 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
dialogFragment.setTextSaveListener(this::commitPlaceDoesntExists);
}
private void placeDisused()
{
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
.setTitle(R.string.editor_mark_business_vacant_title)
.setMessage(R.string.editor_mark_business_vacant_description)
.setPositiveButton(R.string.editor_submit, (dlg, which) -> {
Editor.nativeMarkPlaceAsDisused();
mParent.processEditedFeatures();
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
private void commitPlaceDoesntExists(@NonNull String text)
{
Editor.nativePlaceDoesNotExist(text);

View File

@@ -358,7 +358,7 @@ public class EditorHostFragment
.show();
}
private void processEditedFeatures()
public void processEditedFeatures()
{
if (OsmOAuth.isAuthorized())
{

View File

@@ -1,7 +1,10 @@
package app.organicmaps.editor;
import android.content.res.Configuration;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.core.os.ConfigurationCompat;
import androidx.core.os.LocaleListCompat;
import androidx.fragment.app.Fragment;
import app.organicmaps.base.BaseMwmRecyclerFragment;
import app.organicmaps.sdk.editor.Editor;
@@ -11,6 +14,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
@@ -32,10 +36,23 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
Set<String> existingLanguages =
args != null ? new HashSet<>(args.getStringArrayList(EXISTING_LOCALIZED_NAMES)) : new HashSet<>();
Configuration config = requireContext().getResources().getConfiguration();
LocaleListCompat systemLocales = ConfigurationCompat.getLocales(config);
List<Language> languages = new ArrayList<>();
List<Language> systemLanguages = new ArrayList<>();
for (Language lang : Editor.nativeGetSupportedLanguages(false))
{
if (existingLanguages.contains(lang.code))
// Separately extract system languages
for (int i = 0; i < systemLocales.size(); i++)
{
Locale locale = systemLocales.get(i);
if (locale != null && locale.getLanguage().equals(lang.code))
systemLanguages.add(lang);
}
if (existingLanguages.contains(lang.code) || systemLanguages.contains(lang))
continue;
languages.add(lang);
@@ -43,6 +60,8 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
Collections.sort(languages, Comparator.comparing(lhs -> lhs.name));
languages.addAll(0, systemLanguages);
return new LanguagesAdapter(this, languages.toArray(new Language[languages.size()]));
}

View File

@@ -1,5 +1,6 @@
package app.organicmaps.editor;
import android.content.res.ColorStateList;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
@@ -11,6 +12,7 @@ import androidx.annotation.IdRes;
import androidx.annotation.IntRange;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import app.organicmaps.R;
@@ -381,6 +383,29 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
final boolean enable = mComplementItem != null && mComplementItem.weekdays.length != 0;
final String text = mFragment.getString(R.string.editor_time_add);
mAdd.setEnabled(enable);
final ColorStateList bgButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mAdd.getContext(), R.color.base_accent),
ContextCompat.getColor(mAdd.getContext(), R.color.button_accent_disabled)
});
final ColorStateList textButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mAdd.getContext(),
UiUtils.getStyledResourceId(mAdd.getContext(), android.R.attr.textColorPrimaryInverse)),
ContextCompat.getColor(mAdd.getContext(), R.color.button_accent_text_disabled)
});
mAdd.setBackgroundTintList(bgButtonColor);
mAdd.setTextColor(textButtonColor);
mAdd.setText(enable ? text + " (" + TimeFormatUtils.formatWeekdays(mComplementItem) + ")" : text);
}
}

View File

@@ -21,6 +21,9 @@ import app.organicmaps.util.UiUtils;
class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchDataViewHolder>
{
private static final int SHORT_HORIZON_CLOSE_MIN = 60;
private static final int SHORT_HORIZON_OPEN_MIN = 15;
private final SearchFragment mSearchFragment;
@Nullable
private SearchResult[] mResults;
@@ -149,41 +152,32 @@ class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchDataViewHol
{
final Resources resources = mSearchFragment.getResources();
switch (result.description.openNow)
if (result.description.openNow != SearchResult.OPEN_NOW_YES && result.description.openNow != SearchResult.OPEN_NOW_NO)
{
case SearchResult.OPEN_NOW_YES ->
{
if (result.description.minutesUntilClosed < 60) // less than 1 hour
{
final String time = result.description.minutesUntilClosed + " " + resources.getString(R.string.minute);
final String string = resources.getString(R.string.closes_in, time);
UiUtils.setTextAndShow(mOpen, string);
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_yellow));
}
else
{
UiUtils.setTextAndShow(mOpen, resources.getString(R.string.editor_time_open));
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_green));
}
// Hide if unknown opening hours state
UiUtils.hide(mOpen);
return;
}
case SearchResult.OPEN_NOW_NO ->
{
if (result.description.minutesUntilOpen < 60) // less than 1 hour
{
final String time = result.description.minutesUntilOpen + " " + resources.getString(R.string.minute);
final String string = resources.getString(R.string.opens_in, time);
UiUtils.setTextAndShow(mOpen, string);
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_red));
}
else
{
UiUtils.setTextAndShow(mOpen, resources.getString(R.string.closed));
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_red));
}
final boolean isOpen = result.description.openNow == SearchResult.OPEN_NOW_YES;
final int minsToNextState = isOpen ? result.description.minutesUntilClosed : result.description.minutesUntilOpen;
final boolean shortHorizonClosing = isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_CLOSE_MIN;
final boolean shortHorizonOpening = !isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_OPEN_MIN;
if (shortHorizonClosing || shortHorizonOpening)
{
final String minsToChangeStr = resources.getQuantityString(
R.plurals.minutes_short, Math.max(minsToNextState, 1), Math.max(minsToNextState, 1));
final String nextChangeFormatted = resources.getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
UiUtils.setTextAndShow(mOpen, nextChangeFormatted);
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_yellow));
}
default -> UiUtils.hide(mOpen);
else
{
UiUtils.setTextAndShow(mOpen, isOpen ? resources.getString(R.string.editor_time_open) : resources.getString(R.string.closed));
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), isOpen ? R.color.base_green : R.color.base_red));
}
}

View File

@@ -90,28 +90,36 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
{
SwitchCompat tollsBtn = root.findViewById(R.id.avoid_tolls_btn);
tollsBtn.setChecked(RoutingOptions.hasOption(RoadType.Toll));
CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll);
CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll, root);
tollsBtn.setOnCheckedChangeListener(tollBtnListener);
SwitchCompat motorwaysBtn = root.findViewById(R.id.avoid_motorways_btn);
motorwaysBtn.setChecked(RoutingOptions.hasOption(RoadType.Motorway));
CompoundButton.OnCheckedChangeListener motorwayBtnListener = new ToggleRoutingOptionListener(RoadType.Motorway);
CompoundButton.OnCheckedChangeListener motorwayBtnListener =
new ToggleRoutingOptionListener(RoadType.Motorway, root);
motorwaysBtn.setOnCheckedChangeListener(motorwayBtnListener);
SwitchCompat ferriesBtn = root.findViewById(R.id.avoid_ferries_btn);
ferriesBtn.setChecked(RoutingOptions.hasOption(RoadType.Ferry));
CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry);
CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry, root);
ferriesBtn.setOnCheckedChangeListener(ferryBtnListener);
SwitchCompat dirtyRoadsBtn = root.findViewById(R.id.avoid_dirty_roads_btn);
dirtyRoadsBtn.setChecked(RoutingOptions.hasOption(RoadType.Dirty));
CompoundButton.OnCheckedChangeListener dirtyBtnListener = new ToggleRoutingOptionListener(RoadType.Dirty);
dirtyRoadsBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Paved) || RoutingOptions.hasOption(RoadType.Dirty));
CompoundButton.OnCheckedChangeListener dirtyBtnListener = new ToggleRoutingOptionListener(RoadType.Dirty, root);
dirtyRoadsBtn.setOnCheckedChangeListener(dirtyBtnListener);
SwitchCompat stepsBtn = root.findViewById(R.id.avoid_steps_btn);
stepsBtn.setChecked(RoutingOptions.hasOption(RoadType.Steps));
CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps);
CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps, root);
stepsBtn.setOnCheckedChangeListener(stepsBtnListener);
SwitchCompat pavedBtn = root.findViewById(R.id.avoid_paved_roads_btn);
pavedBtn.setChecked(RoutingOptions.hasOption(RoadType.Paved));
pavedBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Dirty) || RoutingOptions.hasOption(RoadType.Paved));
CompoundButton.OnCheckedChangeListener pavedBtnListener = new ToggleRoutingOptionListener(RoadType.Paved, root);
pavedBtn.setOnCheckedChangeListener(pavedBtnListener);
}
private static class ToggleRoutingOptionListener implements CompoundButton.OnCheckedChangeListener
@@ -119,9 +127,13 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
@NonNull
private final RoadType mRoadType;
private ToggleRoutingOptionListener(@NonNull RoadType roadType)
@NonNull
private final View mRoot;
private ToggleRoutingOptionListener(@NonNull RoadType roadType, @NonNull View root)
{
mRoadType = roadType;
mRoot = root;
}
@Override
@@ -131,6 +143,27 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
RoutingOptions.addOption(mRoadType);
else
RoutingOptions.removeOption(mRoadType);
SwitchCompat dirtyRoadsBtn = mRoot.findViewById(R.id.avoid_dirty_roads_btn);
SwitchCompat pavedBtn = mRoot.findViewById(R.id.avoid_paved_roads_btn);
if (mRoadType == RoadType.Dirty)
{
pavedBtn.setEnabled(!isChecked);
if (isChecked)
{
pavedBtn.setChecked(false);
dirtyRoadsBtn.setEnabled(true);
}
}
else if (mRoadType == RoadType.Paved)
{
dirtyRoadsBtn.setEnabled(!isChecked);
if (isChecked)
{
dirtyRoadsBtn.setChecked(false);
pavedBtn.setEnabled(true);
}
}
}
}
}

View File

@@ -1,25 +0,0 @@
package app.organicmaps.util;
import android.app.Activity;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.core.text.TextUtilsCompat;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public class RtlUtils
{
private final static List<String> rtlLocalesWithTranslation = Arrays.asList("ar", "fa");
public static void manageRtl(@NonNull final Activity activity)
{
final String currentLanguage = Locale.getDefault().getLanguage();
final boolean isRTL =
TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == View.LAYOUT_DIRECTION_RTL;
if (isRTL && rtlLocalesWithTranslation.contains(currentLanguage))
activity.getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
else
activity.getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
}
}

View File

@@ -0,0 +1,49 @@
package app.organicmaps.widget.placepage;
import java.time.ZonedDateTime;
import java.time.format.TextStyle;
import java.util.Locale;
public class OpenStateTextFormatter
{
private OpenStateTextFormatter() {}
static String formatHoursMinutes(int hour, int minute, boolean use24h)
{
if (use24h)
return String.format(Locale.ROOT, "%02d:%02d", hour, minute);
int h = hour % 12;
if (h == 0) h = 12;
String ampm = (hour < 12) ? "AM" : "PM";
return String.format(Locale.ROOT, "%d:%02d %s", h, minute, ampm);
}
static boolean isSameLocalDate(ZonedDateTime a, ZonedDateTime b)
{
return a.toLocalDate().isEqual(b.toLocalDate());
}
static String dayShort(ZonedDateTime t, Locale locale)
{
return t.getDayOfWeek().getDisplayName(TextStyle.SHORT, locale);
}
static String buildAtLabel(
boolean opens,
boolean isToday,
String dayShort,
String time,
String opensAtLocalized,
String closesAtLocalized,
String opensDayAtLocalized,
String closesDayAtLocalized
)
{
if (isToday)
return opens ? String.format(Locale.ROOT, opensAtLocalized, time) // Opens at %s
: String.format(Locale.ROOT, closesAtLocalized, time); // Closes at %s
return opens ? String.format(Locale.ROOT, opensDayAtLocalized, dayShort, time) // Opens %s at %s
: String.format(Locale.ROOT, closesDayAtLocalized, dayShort, time); // Closes %s at %s
}
}

View File

@@ -85,9 +85,11 @@ import com.google.android.material.textview.MaterialTextView;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.TextStyle;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public class PlacePageView extends Fragment
implements View.OnClickListener, View.OnLongClickListener, LocationListener, SensorListener, Observer<MapObject>,
@@ -105,6 +107,10 @@ public class PlacePageView extends Fragment
private static final String LINKS_FRAGMENT_TAG = "LINKS_FRAGMENT_TAG";
private static final String TRACK_SHARE_MENU_ID = "TRACK_SHARE_MENU_ID";
private static final int SHORT_HORIZON_CLOSE_MIN = 60;
private static final int SHORT_HORIZON_OPEN_MIN = 15;
private static final List<CoordinatesFormat> visibleCoordsFormat =
Arrays.asList(CoordinatesFormat.LatLonDMS, CoordinatesFormat.LatLonDecimal, CoordinatesFormat.OLCFull,
CoordinatesFormat.UTM, CoordinatesFormat.MGRS, CoordinatesFormat.OSMLink);
@@ -797,57 +803,95 @@ public class PlacePageView extends Fragment
final String ohStr = mMapObject.getMetadata(Metadata.MetadataType.FMD_OPEN_HOURS);
final Timetable[] timetables = OpeningHours.nativeTimetablesFromString(ohStr);
if (timetables != null && timetables.length != 0)
// No valid timetable
if (timetables == null || timetables.length == 0)
{
final Context context = requireContext();
final OhState poiState = OpeningHours.nativeCurrentState(timetables);
// Ignore unknown rule state
if (poiState.state == OhState.State.Unknown)
{
UiUtils.hide(mTvOpenState);
return;
}
// Get colours
final ForegroundColorSpan colorGreen =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_green));
final ForegroundColorSpan colorYellow =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_yellow));
final ForegroundColorSpan colorRed = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_red));
// Get next state info
final SpannableStringBuilder openStateString = new SpannableStringBuilder();
final boolean isOpen = (poiState.state == OhState.State.Open); // False == Closed due to early exit for Unknown
final long nextStateTime = isOpen ? poiState.nextTimeClosed : poiState.nextTimeOpen; // Unix time (seconds)
final int minsToNextState = (int) ((nextStateTime - (System.currentTimeMillis() / 1000)) / 60);
if (minsToNextState <= 60) // POI opens/closes in 60 mins
{
final String minsToChangeStr = minsToNextState + " " + getString(R.string.minute);
final String nextChangeFormatted = getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
final ForegroundColorSpan nextChangeColor = isOpen ? colorYellow : colorRed;
// TODO: We should check closed/open time for specific feature's timezone.
ZonedDateTime time = ZonedDateTime.ofInstant(Instant.ofEpochSecond(nextStateTime), ZoneId.systemDefault());
String localizedTime =
new HoursMinutes(time.getHour(), time.getMinute(), DateUtils.is24HourFormat(context)).toString();
openStateString.append(nextChangeFormatted, nextChangeColor, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
.append("") // Add spacer
.append(getString(R.string.at, localizedTime));
}
else if (isOpen)
openStateString.append(getString(R.string.open_now), colorGreen, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// TODO: Add "Closes at 18:00" etc
else // Closed
openStateString.append(getString(R.string.closed_now), colorRed, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// TODO: Add "Opens at 18:00" etc
UiUtils.setTextAndHideIfEmpty(mTvOpenState, openStateString);
UiUtils.hide(mTvOpenState);
return;
}
// No valid timetable
UiUtils.hide(mTvOpenState);
final Context context = requireContext();
final OhState poiState = OpeningHours.nativeCurrentState(timetables);
// Ignore unknown rule state
if (poiState.state == OhState.State.Unknown)
{
UiUtils.hide(mTvOpenState);
return;
}
// Get colours
final ForegroundColorSpan colorGreen =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_green));
final ForegroundColorSpan colorYellow =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_yellow));
final ForegroundColorSpan colorRed = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_red));
// Get next state info
final SpannableStringBuilder openStateString = new SpannableStringBuilder();
final boolean isOpen = (poiState.state == OhState.State.Open); // False == Closed due to early exit for Unknown
final long nextStateTime = isOpen ? poiState.nextTimeClosed : poiState.nextTimeOpen; // Unix time (seconds)
final long nowSec = System.currentTimeMillis() / 1000;
final int minsToNextState = (int) ((nextStateTime - nowSec) / 60);
// NOTE: Timezone is currently device timezone. TODO: use feature-specific timezone.
final ZonedDateTime nextChangeLocal =
ZonedDateTime.ofInstant(Instant.ofEpochSecond(nextStateTime), ZoneId.systemDefault());
String localizedTimeString = OpenStateTextFormatter.formatHoursMinutes(
nextChangeLocal.getHour(), nextChangeLocal.getMinute(), DateUtils.is24HourFormat(context));
final boolean shortHorizonClosing = isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_CLOSE_MIN;
final boolean shortHorizonOpening = !isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_OPEN_MIN;
if (shortHorizonClosing || shortHorizonOpening) // POI Opens/Closes in 60 mins • at 18:00
{
final String minsToChangeStr = getResources().getQuantityString(
R.plurals.minutes_short, Math.max(minsToNextState, 1), Math.max(minsToNextState, 1));
final String nextChangeFormatted = getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
openStateString.append(nextChangeFormatted, colorYellow, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
.append("") // Add spacer
.append(getString(R.string.at, localizedTimeString));
}
else
{
final String opensAtStr = getString(R.string.opens_at); // "Opens at %s"
final String closesAtStr = getString(R.string.closes_at); // "Closes at %s"
final String opensDayAtStr = getString(R.string.opens_day_at); // "Opens %1$s at %2$s"
final String closesDayAtStr = getString(R.string.closes_day_at); // "Closes %1$s at %2$s"
final boolean isToday =
OpenStateTextFormatter.isSameLocalDate(nextChangeLocal, ZonedDateTime.now(nextChangeLocal.getZone()));
// Full weekday name per design feedback.
final String dayName =
nextChangeLocal.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.getDefault());
if (isOpen) // > 60 minutes OR negative (safety). Show “Open now • Closes at 18:00”
{
openStateString.append(getString(R.string.open_now), colorGreen, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
final String atLabel =
OpenStateTextFormatter.buildAtLabel(false, isToday, dayName, localizedTimeString,
opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
if (!TextUtils.isEmpty(atLabel))
openStateString.append("").append(atLabel);
}
else // Closed
{
openStateString.append(getString(R.string.closed_now), colorRed, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
final String atLabel =
OpenStateTextFormatter.buildAtLabel(true, isToday, dayName, localizedTimeString,
opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
if (!TextUtils.isEmpty(atLabel))
openStateString.append("").append(atLabel);
}
}
UiUtils.setTextAndHideIfEmpty(mTvOpenState, openStateString);
}
private void addPlace()

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M80,360v-160q0,-33 23.5,-56.5T160,120h640q33,0 56.5,23.5T880,200v160h-80v-160L160,200v160L80,360ZM160,720q-33,0 -56.5,-23.5T80,640v-200h80v200h640v-200h80v200q0,33 -23.5,56.5T800,720L160,720ZM40,840v-80h880v80L40,840ZM480,420ZM80,440v-80h240q11,0 21,6t15,16l47,93 123,-215q5,-9 14,-14.5t20,-5.5q11,0 21,5.5t15,16.5l49,98h235v80L620,440q-11,0 -21,-5.5T584,418l-26,-53 -123,215q-5,10 -15,15t-21,5q-11,0 -20.5,-6T364,578l-69,-138L80,440Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,536L284,732Q273,743 256,743Q239,743 228,732Q217,721 217,704Q217,687 228,676L424,480L228,284Q217,273 217,256Q217,239 228,228Q239,217 256,217Q273,217 284,228L480,424L676,228Q687,217 704,217Q721,217 732,228Q743,239 743,256Q743,273 732,284L536,480L732,676Q743,687 743,704Q743,721 732,732Q721,743 704,743Q687,743 676,732L480,536Z"/>
</vector>

View File

@@ -1,5 +1,10 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,536L284,732Q273,743 256,743Q239,743 228,732Q217,721 217,704Q217,687 228,676L424,480L228,284Q217,273 217,256Q217,239 228,228Q239,217 256,217Q273,217 284,228L480,424L676,228Q687,217 704,217Q721,217 732,228Q743,239 743,256Q743,273 732,284L536,480L732,676Q743,687 743,704Q743,721 732,732Q721,743 704,743Q687,743 676,732L480,536Z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,840q-150,0 -255,-105T120,480q0,-150 105,-255t255,-105q14,0 27.5,1t26.5,3q-41,29 -65.5,75.5T444,300q0,90 63,153t153,63q55,0 101,-24.5t75,-65.5q2,13 3,26.5t1,27.5q0,150 -105,255T480,840ZM480,760q88,0 158,-48.5T740,585q-20,5 -40,8t-40,3q-123,0 -209.5,-86.5T364,300q0,-20 3,-40t8,-40q-78,32 -126.5,102T200,480q0,116 82,198t198,82ZM470,490Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?colorControlNormal">
<path
android:pathData="M19,9h-4v-6h-6v6h-4l7,7 7,-7ZM5,18v2h14v-2h-14Z"
android:fillColor="#FFF"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M216,784q-45,-45 -70.5,-104T120,558q0,-63 24,-124.5T222,318q35,-35 86.5,-60t122,-39.5Q501,204 591.5,201t202.5,7q8,106 5,195t-16.5,160.5q-13.5,71.5 -38,125T684,778q-53,53 -112.5,77.5T450,880q-65,0 -127,-25.5T216,784ZM328,768q29,17 59.5,24.5T450,800q46,0 91,-18.5t86,-59.5q18,-18 36.5,-50.5t32,-85Q709,534 716,459.5t2,-177.5q-49,-2 -110.5,-1.5T485,290q-61,9 -116,29t-90,55q-45,45 -62,89t-17,85q0,59 22.5,103.5T262,714q42,-80 111,-153.5T534,440q-72,63 -125.5,142.5T328,768ZM328,768ZM328,768Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M200,800v-280h-80v-80h240v80h-80v280h-80ZM200,360v-200h80v200h-80ZM360,360v-80h80v-120h80v120h80v80L360,360ZM440,800v-360h80v360h-80ZM680,800v-120h-80v-80h240v80h-80v120h-80ZM680,520v-360h80v360h-80Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M280,920q-33,0 -56.5,-23.5T200,840v-720q0,-33 23.5,-56.5T280,40h400q33,0 56.5,23.5T760,120v124q18,7 29,22t11,34v80q0,19 -11,34t-29,22v404q0,33 -23.5,56.5T680,920L280,920ZM280,840h400v-720L280,120v720ZM280,840v-720,720ZM394,640h172q14,0 24,-10t10,-24v-132q0,-14 -10,-24t-24,-10h-6v-40q0,-33 -23.5,-56.5T480,320q-33,0 -56.5,23.5T400,400v40h-6q-14,0 -24,10t-10,24v132q0,14 10,24t24,10ZM440,440v-40q0,-17 11.5,-28.5T480,360q17,0 28.5,11.5T520,400v40h-80Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M339,698q22,-22 49.5,-36t58.5,-19q-5,19 -8,38t-3,39q0,24 3.5,47t11.5,44L339,698ZM254,614 L170,528q62,-62 142,-95t168,-33q49,0 96,10.5t90,30.5q-44,8 -81.5,29T517,522q-9,-1 -18.5,-1.5T480,520q-64,0 -122.5,24.5T254,614ZM84,444 L0,360q95,-97 219.5,-148.5T480,160q136,0 260.5,51.5T960,360l-84,84q-79,-79 -181.5,-121.5T480,280q-112,0 -214.5,42.5T84,444ZM760,520 L772,580q12,5 22.5,10.5T816,604l58,-18 40,68 -46,40q2,12 2,26t-2,26l46,40 -40,68 -58,-18q-11,8 -21.5,13.5T772,860l-12,60h-80l-12,-60q-12,-5 -22.5,-10.5T624,836l-58,18 -40,-68 46,-40q-2,-12 -2,-26t2,-26l-46,-40 40,-68 58,18q11,-8 21.5,-13.5T668,580l12,-60h80ZM720,640q-33,0 -56.5,23.5T640,720q0,33 23.5,56.5T720,800q33,0 56.5,-23.5T800,720q0,-33 -23.5,-56.5T720,640Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,480q-66,0 -113,-47t-47,-113q0,-66 47,-113t113,-47q66,0 113,47t47,113q0,66 -47,113t-113,47ZM160,800v-112q0,-34 17.5,-62.5T224,582q62,-31 126,-46.5T480,520q66,0 130,15.5T736,582q29,15 46.5,43.5T800,688v112L160,800ZM240,720h480v-32q0,-11 -5.5,-20T700,654q-54,-27 -109,-40.5T480,600q-56,0 -111,13.5T260,654q-9,5 -14.5,14t-5.5,20v32ZM480,400q33,0 56.5,-23.5T560,320q0,-33 -23.5,-56.5T480,240q-33,0 -56.5,23.5T400,320q0,33 23.5,56.5T480,400ZM480,320ZM480,720Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="m798,638 l-62,-62q44,-41 69,-97t25,-119q0,-63 -25,-118t-69,-96l62,-64q56,53 89,125t33,153q0,81 -33,153t-89,125ZM670,510l-64,-64q18,-17 29,-38.5t11,-47.5q0,-26 -11,-47.5T606,274l64,-64q32,29 50,67.5t18,82.5q0,44 -18,82.5T670,510ZM360,520q-66,0 -113,-47t-47,-113q0,-66 47,-113t113,-47q66,0 113,47t47,113q0,66 -47,113t-113,47ZM40,840v-112q0,-33 17,-62t47,-44q51,-26 115,-44t141,-18q77,0 141,18t115,44q30,15 47,44t17,62v112L40,840ZM120,760h480v-32q0,-11 -5.5,-20T580,694q-36,-18 -92.5,-36T360,640q-71,0 -127.5,18T140,694q-9,5 -14.5,14t-5.5,20v32ZM360,440q33,0 56.5,-23.5T440,360q0,-33 -23.5,-56.5T360,280q-33,0 -56.5,23.5T280,360q0,33 23.5,56.5T360,440ZM360,360ZM360,760Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M360,440h80v-160h-80v160ZM480,440h80v-160h-80v160ZM600,440h80v-160h-80v160ZM240,880q-33,0 -56.5,-23.5T160,800v-480l240,-240h320q33,0 56.5,23.5T800,160v640q0,33 -23.5,56.5T720,880L240,880ZM240,800h480v-640L434,160L240,354v446ZM240,800h480,-480Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M13.26,3C8.17,2.86 4,6.95 4,12L2.21,12c-0.45,0 -0.67,0.54 -0.35,0.85l2.79,2.8c0.2,0.2 0.51,0.2 0.71,0l2.79,-2.8c0.31,-0.31 0.09,-0.85 -0.36,-0.85L6,12c0,-3.9 3.18,-7.05 7.1,-7 3.72,0.05 6.85,3.18 6.9,6.9 0.05,3.91 -3.1,7.1 -7,7.1 -1.61,0 -3.1,-0.55 -4.28,-1.48 -0.4,-0.31 -0.96,-0.28 -1.32,0.08 -0.42,0.42 -0.39,1.13 0.08,1.49C9,20.29 10.91,21 13,21c5.05,0 9.14,-4.17 9,-9.26 -0.13,-4.69 -4.05,-8.61 -8.74,-8.74zM12.75,8c-0.41,0 -0.75,0.34 -0.75,0.75v3.68c0,0.35 0.19,0.68 0.49,0.86l3.12,1.85c0.36,0.21 0.82,0.09 1.03,-0.26 0.21,-0.36 0.09,-0.82 -0.26,-1.03l-2.88,-1.71v-3.4c0,-0.4 -0.34,-0.74 -0.75,-0.74z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,560q-33,0 -56.5,-23.5T400,480q0,-33 23.5,-56.5T480,400q33,0 56.5,23.5T560,480q0,33 -23.5,56.5T480,560ZM480,840q-139,0 -241,-91.5T122,520h82q14,104 92.5,172T480,760q117,0 198.5,-81.5T760,480q0,-117 -81.5,-198.5T480,200q-69,0 -129,32t-101,88h110v80L120,400v-240h80v94q51,-64 124.5,-99T480,120q75,0 140.5,28.5t114,77q48.5,48.5 77,114T840,480q0,75 -28.5,140.5t-77,114q-48.5,48.5 -114,77T480,840Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M2,20h20v-4h-20v4ZM4,17h2v2h-2v-2ZM2,4v4h20v-4h-20ZM6,7h-2v-2h2v2ZM2,14h20v-4h-20v4ZM4,11h2v2h-2v-2Z"
android:fillColor="#FFF"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M160,720q-33,0 -56.5,-23.5T80,640v-320q0,-33 23.5,-56.5T160,240h640q33,0 56.5,23.5T880,320v320q0,33 -23.5,56.5T800,720L160,720ZM160,640h640v-320L680,320v160h-80v-160h-80v160h-80v-160h-80v160h-80v-160L160,320v320ZM280,480h80,-80ZM440,480h80,-80ZM600,480h80,-80ZM480,480Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M280,800v-520L80,280v-120h520v120L400,280v520L280,800ZM640,800v-320L520,480v-120h360v120L760,480v320L640,800Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,880q-83,0 -156,-31.5T197,763q-54,-54 -85.5,-127T80,480h80q0,115 72.5,203T418,794l-58,-58 56,-56L598,862q-29,10 -58.5,14T480,880ZM500,600v-240h120q17,0 28.5,11.5T660,400v160q0,17 -11.5,28.5T620,600L500,600ZM300,600v-60h100v-40h-60v-40h60v-40L300,420v-60h120q17,0 28.5,11.5T460,400v160q0,17 -11.5,28.5T420,600L300,600ZM560,540h40v-120h-40v120ZM800,480q0,-115 -72.5,-203T542,166l58,58 -56,56 -182,-182q29,-10 58.5,-14t59.5,-4q83,0 156,31.5T763,197q54,54 85.5,127T880,480h-80Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="m476,880 l182,-480h84L924,880h-84l-43,-122L603,758L560,880h-84ZM160,760l-56,-56 202,-202q-35,-35 -63.5,-80T190,320h84q20,39 40,68t48,58q33,-33 68.5,-92.5T484,240L40,240v-80h280v-80h80v80h280v80L564,240q-21,72 -63,148t-83,116l96,98 -30,82 -122,-125 -202,201ZM628,688h144l-72,-204 -72,204Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="m476,880 l182,-480h84L924,880h-84l-43,-122L603,758L560,880h-84ZM628,688h144l-72,-204 -72,204ZM254,640q-66,0 -123.5,-38.5T44,498l72,-36q21,42 58,70t79,28q38,0 62.5,-23.5T340,480q0,-33 -23.5,-56.5T260,400h-60v-80h60q25,0 42.5,-17.5T320,260q0,-25 -17,-42.5T261,200q-23,0 -41,15t-32,33l-63,-49q26,-32 60,-55.5t77,-23.5q57,0 97.5,40.5T400,259q0,27 -10,52.5T361,357q10,10 18.5,20.5T396,400h124v-200h-80v-80h240v80h-80v116l-61,164L420,480v4q0,63 -46,109.5T254,640Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -3,7 +3,13 @@
android:height="20dp"
android:viewportWidth="960"
android:viewportHeight="960">
<group
android:pivotX="370"
android:pivotY="480"
android:scaleX="2.2"
android:scaleY="1.7">
<path
android:pathData="M420,652q-8,0 -14,-5.5t-6,-14.5v-304q0,-9 6,-14.5t14,-5.5q2,0 14,6l145,145q5,5 7,10t2,11q0,6 -2,11t-7,10L434,646q-3,3 -6.5,4.5T420,652Z"
android:fillColor="#1f1f1f"/>
android:pathData="M640,760 L200,480l440,-280v560Z"
android:fillColor="#FFFFFF"/>
</group>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,840 L0,359q93,-93 215.5,-146T480,160q142,0 264.5,53T960,359l-56,57q-81,-81 -190,-128.5T480,240q-103,0 -195,32.5T117,363l419,420 -56,57ZM864,800L761,698q-18,11 -38,16.5t-43,5.5q-68,0 -114,-46t-46,-114q0,-68 46,-114t114,-46q68,0 114,46t46,114q0,23 -5.5,43T818,641l102,103 -56,56ZM680,640q34,0 57,-23t23,-57q0,-34 -23,-57t-57,-23q-34,0 -57,23t-23,57q0,34 23,57t57,23ZM480,783Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -26,27 +26,33 @@
android:clipChildren="false"
android:gravity="center"
tools:ignore="UselessParent">
<com.google.android.material.textview.MaterialTextView
<LinearLayout
android:id="@+id/offline_explanation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_eighth"
android:gravity="center_horizontal"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/offline_explanation_title"/>
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_eighth"
android:gravity="center_horizontal"
android:textStyle="normal"
android:textAppearance="@style/MwmTextAppearance.Body1"
android:text="@string/offline_explanation_text"/>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="@dimen/margin_quarter"
android:layout_marginBottom="@dimen/margin_quarter"/>
android:orientation="vertical">
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_eighth"
android:gravity="center_horizontal"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/offline_explanation_title"/>
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_eighth"
android:gravity="center_horizontal"
android:textStyle="normal"
android:textAppearance="@style/MwmTextAppearance.Body1"
android:text="@string/offline_explanation_text"/>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="@dimen/margin_quarter"
android:layout_marginBottom="@dimen/margin_quarter"/>
</LinearLayout>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/downloader_parent"
android:layout_width="wrap_content"

View File

@@ -3,8 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/feedback_fab"
style="MwmWidget.M3.FAB.Primary"
app:shapeAppearance="@style/ShapeAppearanceOverlay.Material3.FloatingActionButton"
style="@style/MwmWidget.M3.FAB.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/feedback"

View File

@@ -22,8 +22,8 @@
android:clipChildren="false">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/floating_triangle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="@dimen/margin_half"
android:layout_height="@dimen/margin_half"
android:elevation="@dimen/margin_eighth"
android:layout_centerVertical="true"
app:tint="@android:color/white"

View File

@@ -36,7 +36,6 @@
android:layout_height="match_parent"
android:padding="@dimen/margin_half_double_plus"/>
</LinearLayout>
<include layout="@layout/item_divider"/>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"
@@ -58,7 +57,27 @@
android:layout_height="match_parent"
android:padding="@dimen/margin_half_double_plus"/>
</LinearLayout>
<include layout="@layout/item_divider"/>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="@dimen/margin_base"
android:paddingStart="@dimen/margin_base">
<com.google.android.material.textview.MaterialTextView
android:text="@string/avoid_paved"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="?android:attr/textColorPrimary"/>
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/avoid_paved_roads_btn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="@dimen/margin_half_double_plus"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"
@@ -80,7 +99,6 @@
android:layout_height="match_parent"
android:padding="@dimen/margin_half_double_plus"/>
</LinearLayout>
<include layout="@layout/item_divider"/>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"
@@ -102,7 +120,6 @@
android:padding="@dimen/margin_half_double_plus"
android:layout_height="match_parent"/>
</LinearLayout>
<include layout="@layout/item_divider"/>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"

View File

@@ -394,7 +394,8 @@
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__more"
style="@style/MwmWidget.Editor.CardView">
style="@style/MwmWidget.Editor.CardView"
android:layout_marginBottom="@dimen/margin_base">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -421,6 +422,17 @@
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.button.MaterialButton
android:id="@+id/disused"
style="@style/MwmWidget.M3.Button.Secondary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginBottom="@dimen/margin_quarter"
app:backgroundTint="?cardBackground"
android:textColor="@color/base_red"
app:strokeColor="@color/base_red"
android:text="@string/editor_business_vacant_button"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/reset"
style="@style/MwmWidget.M3.Button.Secondary"

View File

@@ -22,7 +22,7 @@
android:id="@+id/empty_opening_hours"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginTop="@dimen/margin_base"
android:layout_marginStart="@dimen/editor_margin_timetable_left"
android:orientation="vertical"
tools:visibility="gone">
@@ -57,10 +57,8 @@
android:layout_height="wrap_content"
style="@style/Widget.Material3.Button.TextButton"
android:layout_below="@id/opening_hours"
android:layout_marginStart="@dimen/editor_margin_timetable_left"
android:layout_marginTop="@dimen/margin_base_plus"
android:gravity="center_vertical"
android:minHeight="@dimen/height_block_base"
android:layout_marginTop="@dimen/margin_base"
android:gravity="center_horizontal"
android:text="@string/edit_opening_hours"
android:textColor="?colorSecondary"
android:textAppearance="@style/MwmTextAppearance.Body1" />

View File

@@ -28,12 +28,12 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/delete_icon"
app:layout_constraintStart_toEndOf="@+id/phone_icon"
app:hintEnabled="false"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input"
style="@style/MwmWidget.Editor.FieldLayout.EditText"
tools:hint="Hint"
tools:text="Input"
android:hint="@string/phone_format"
android:inputType="phone"/>
</com.google.android.material.textfield.TextInputLayout>

View File

@@ -3,4 +3,4 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/MwmWidget.TextView.Search"
android:text="@string/clear_search"
app:drawableStartCompat="@drawable/ic_cancel"/>
app:drawableStartCompat="@drawable/ic_close"/>

View File

@@ -6,7 +6,7 @@
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:minHeight="@dimen/search_item_height"
android:padding="@dimen/margin_base"
android:padding="@dimen/margin_half_double_plus"
tools:background="#20FF0000">
<com.google.android.material.textview.MaterialTextView

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/margin_base_plus"
@@ -12,9 +11,7 @@
style="@style/MwmWidget.M3.Button.Primary"
android:layout_gravity="center"
android:enabled="false"
android:background="?accentButtonBackground"
android:padding="@dimen/margin_base"
android:text="@string/editor_time_add"
app:backgroundTint="@null"/>
android:textColor="?android:textColorPrimaryInverse"
android:text="@string/editor_time_add" />
</FrameLayout>

View File

@@ -7,4 +7,4 @@
android:tint="?iconTint"
android:contentDescription="@string/layers_title"
app:tint="?accentColorSelector"
app:srcCompat="@drawable/ic_layers" />
app:srcCompat="@drawable/ic_layers" />

View File

@@ -17,29 +17,34 @@
android:layout_gravity="center"
android:gravity="center_horizontal"
android:background="@drawable/onmap_downloader_background">
<com.google.android.material.textview.MaterialTextView
android:layout_width="@dimen/square_block_size"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_eighth"
android:gravity="center_horizontal"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/offline_explanation_title"/>
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="212dp"
android:layout_marginBottom="@dimen/margin_eighth"
android:gravity="center_horizontal"
android:textStyle="normal"
android:textAppearance="@style/MwmTextAppearance.Body1"
android:text="@string/offline_explanation_text"/>
<com.google.android.material.divider.MaterialDivider
<LinearLayout
android:id="@+id/offline_explanation"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="@dimen/margin_quarter"
android:layout_marginBottom="@dimen/margin_quarter"/>
android:layout_height="wrap_content"
android:orientation="vertical">
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_eighth"
android:gravity="center_horizontal"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/offline_explanation_title"/>
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="212dp"
android:layout_marginBottom="@dimen/margin_eighth"
android:gravity="center_horizontal"
android:textStyle="normal"
android:textAppearance="@style/MwmTextAppearance.Body1"
android:text="@string/offline_explanation_text"/>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="@dimen/margin_quarter"
android:layout_marginBottom="@dimen/margin_quarter"/>
</LinearLayout>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/downloader_parent"
android:layout_width="@dimen/square_block_size"

View File

@@ -213,6 +213,7 @@
android:layout_marginEnd="@dimen/margin_quarter"
android:layout_marginStart="@dimen/margin_quarter"
android:layout_weight="1"
android:padding="@dimen/margin_quarter"
android:background="?clickableBackground"
android:textAllCaps="false"
tools:text="@string/categories" />

View File

@@ -38,8 +38,7 @@
android:id="@+id/done"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="MwmWidget.M3.FAB.Primary"
app:shapeAppearance="@style/ShapeAppearanceOverlay.Material3.FloatingActionButton"
style="@style/MwmWidget.M3.FAB.Primary"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:contentDescription="@string/save"

View File

@@ -54,7 +54,7 @@
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/clear_the_search"
android:scaleType="center"
app:srcCompat="@drawable/ic_cancel"/>
app:srcCompat="@drawable/ic_close"/>
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/voice_input"

View File

@@ -3,4 +3,4 @@
<background android:drawable="@color/bg_app_icon_release"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome"/>
</adaptive-icon>
</adaptive-icon>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

View File

@@ -889,4 +889,19 @@
<string name="avoid_steps">Vyhnout se schodům</string>
<string name="offline_explanation_title">Offline mapy</string>
<string name="list_description_empty">Upravit seznam pro přidání popisu</string>
<string name="avoid_paved">Vyhnout se zpevněným cestám</string>
<string name="opens_at">Otevírá v %s</string>
<string name="closes_at">Zavírá v %s</string>
<string name="opens_day_at">Otevírá %1$s v %2$s</string>
<string name="closes_day_at">Zavírá %1$s v %2$s</string>
<string name="editor_business_vacant_button">Podnik je volný</string>
<string name="editor_mark_business_vacant_title">Označit podnik jako volný</string>
<string name="editor_mark_business_vacant_description">Použijte, pokud se podnik přestěhoval a místo je volné a připravené pro nového zájemce.</string>
<string name="editor_submit">Odeslat</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="few">%d min</item>
<item quantity="many">%d min</item>
<item quantity="other">%d min</item>
</plurals>
</resources>

View File

@@ -880,4 +880,13 @@
<string name="offline_explanation_title">Offline kort</string>
<string name="offline_explanation_text">Der skal downloades et kort for at kunne se og navigere i området.\nDownload kort over de områder, du ønsker at rejse i.</string>
<string name="list_description_empty">Rediger listen for at tilføje en beskrivelse</string>
<string name="avoid_paved">Undgå veje med fast belægning</string>
<string name="opens_at">Åbner kl. %s</string>
<string name="closes_at">Lukker kl. %s</string>
<string name="opens_day_at">Åbner %1$s kl. %2$s</string>
<string name="closes_day_at">Lukker %1$s kl. %2$s</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="other">%d min</item>
</plurals>
</resources>

View File

@@ -893,4 +893,8 @@
<string name="unknown_count">unbekannt</string>
<string name="error_invalid_number">ungültige Zahl</string>
<string name="list_description_empty">Liste bearbeiten, um eine Beschreibung hinzuzufügen</string>
<string name="avoid_paved">Befst. Straßen vermeiden</string>
<string name="opens_at">Öffnet um %s</string>
<string name="closes_at">Schließt um %s</string>
<string name="opens_day_at">Öffnet am %1$s um %2$s</string>
</resources>

View File

@@ -898,4 +898,15 @@
<string name="offline_explanation_title">Mapas sin conexión</string>
<string name="offline_explanation_text">Se debe descargar un mapa para ver y navegar el área\nDescarga mapas de las áreas que quieras navegar.</string>
<string name="editor_place_doesnt_exist_description">Describe la situación actual del lugar para enviar una nota de error a la comunidad de OpenStreetMap</string>
<string name="avoid_paved">Evitar caminos pavimentados</string>
<string name="opens_at">Abre a las %s</string>
<string name="closes_at">Cierra a las %s</string>
<string name="opens_day_at">Abre el %1$s a las %2$s</string>
<string name="closes_day_at">Cierra el %1$s a las %2$s</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="many">%d min</item>
<item quantity="other">%d min</item>
</plurals>
<string name="list_description_empty">Modificar la lista para añadir una descripción</string>
</resources>

View File

@@ -889,4 +889,17 @@
<string name="offline_explanation_title">Ilma võrguühenduseta toimivad kaardid</string>
<string name="offline_explanation_text">Selles piirkonnas liikumiseks ja teekonna juhatamiseks pead vajaliku kaardi alla laadima.\nVali allalaaditav kaart selle piirkonna kohta.</string>
<string name="list_description_empty">Kirjelduse lisamiseks muuda loendit</string>
<string name="avoid_paved">Väldi sillutatud teid</string>
<string name="opens_at">Avatakse %s</string>
<string name="closes_at">Suletakse %s</string>
<string name="opens_day_at">Avatakse %1$s kell %2$s</string>
<string name="closes_day_at">Suletakse %1$s kell %2$s</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="other">%d min</item>
</plurals>
<string name="editor_business_vacant_button">Äripind on vaba</string>
<string name="editor_mark_business_vacant_title">Märgi äripind vabaks</string>
<string name="editor_mark_business_vacant_description">Kasuta seda valikut, kui senine rentnik/omanik on kolinud välja ja äripind on tühi ja uue ootel.</string>
<string name="editor_submit">Saada</string>
</resources>

View File

@@ -246,7 +246,7 @@
<!-- Button in the main menu -->
<string name="donate">Dohaintza eman</string>
<!-- Button in the main Help dialog -->
<string name="how_to_support_us">Proiektuari laguntza eman</string>
<string name="how_to_support_us">Izan bolondres eta hobetu CoMaps</string>
<!-- Button in the main Help dialog -->
<string name="copyright">Egile eskubideak</string>
<!-- Text in menu + Button in the main Help dialog -->
@@ -863,4 +863,9 @@
<string name="open_now">Ireki orain</string>
<string name="closed_now">Orain itxita</string>
<string name="at">%s-etan</string>
<string name="opens_at">%s ean irekitzen da</string>
<string name="closes_at">%s ean itxiko da</string>
<string name="opens_day_at">1$s ean %2$s tan irekitzen da</string>
<string name="closes_day_at">%1$s ean %2$s etan itxiko da</string>
<string name="editor_place_doesnt_exist_description">Deskribatu nolakoa den lekua orain OpenStreetMap komunitateari errore-ohar bat bidaltzeko.</string>
</resources>

View File

@@ -765,7 +765,7 @@
<string name="track_recording_toast_nothing_to_save">مسیر خالی است - چیزی برای ذخیره کردن وجود ندارد</string>
<!-- Error message when there are no File Manager apps installed to select a folder when importing Bookmarks and Tracks -->
<string name="error_no_file_manager_app">امکان نمایش گفتگوی انتخاب پوشه وجود ندارد زیرا برنامه مناسبی روی دستگاه شما نصب نشده است. لطفاً یک برنامه مدیریت فایل نصب کنید و دوباره امتحان کنید.</string>
<string name="choose_color">انتخاب رنگ</string>
<string name="choose_color">گزیدن رنگ</string>
<string name="edit_track">ویرایش مسیر</string>
<string name="uri_open_location_failed">هیچ برنامه ای نصب نشده است که بتواند مکان را باز کند</string>
<!-- preference string for using auto theme only in navigation mode -->

View File

@@ -898,4 +898,18 @@
<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 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>
<string name="closes_day_at">Fermeture le %1$s à %2$s</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="many">%d min</item>
<item quantity="other">%d min</item>
</plurals>
<string name="editor_business_vacant_button">Local commercial vacant</string>
<string name="editor_mark_business_vacant_title">Marquer l\'établissement comme vacant</string>
<string name="editor_mark_business_vacant_description">Utilisez cette option si l\'entreprise a déménagé et que l\'espace est vide et prêt à accueillir un nouveau locataire.</string>
<string name="editor_submit">Soumettre</string>
</resources>

View File

@@ -623,7 +623,21 @@
<string name="charge_socket_unknown_other">Outro ou descoñecido</string>
<string name="unknow_socket_type">engache descoñecido</string>
<string name="editor_place_doesnt_exist_description">Describe a aparencia do lugar para enviar unha nota co erro á comunidade OpenStreetMap</string>
<string name="avoid_steps">Evitar pasos</string>
<string name="avoid_steps">Evitar escaleiras</string>
<string name="offline_explanation_title">Mapas sen conexión</string>
<string name="offline_explanation_text">Hai que descargar un mapa para ver e navegar polo área.\nDescarga os mapas para as zonas polas que vas viaxar.</string>
<string name="list_description_empty">Editar a lista para engadir unha descrición</string>
<string name="opens_at">Abre ás %s</string>
<string name="closes_at">Fecha ás %s</string>
<string name="opens_day_at">Abre o %1$s ás %2$s</string>
<string name="closes_day_at">Fecha o %1$s ás %2$s</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="other">%d min</item>
</plurals>
<string name="editor_mark_business_vacant_description">Usa isto se a empresa marchou e o espazo está baleiro e preparado para un novo proxecto.</string>
<string name="editor_submit">Enviar</string>
<string name="avoid_paved">Evitar estradas asfaltadas</string>
<string name="editor_business_vacant_button">Dispoñible para empresas</string>
<string name="editor_mark_business_vacant_title">Marcar como dispoñible para negocios</string>
</resources>

View File

@@ -506,9 +506,9 @@
<!-- Error message for "Place doesn't exist" dialog when comment is empty -->
<string name="delete_place_empty_comment_error">Norādiet šīs vietas dzēšanas iemeslu</string>
<!-- Phone number error message -->
<string name="error_enter_correct_phone">Ierakstiet derīgu tālruņa numuru</string>
<string name="error_enter_correct_web">Ierakstiet derīgu tīmekļa vietnes adresi</string>
<string name="error_enter_correct_email">Ierakstiet e-pasta adresi</string>
<string name="error_enter_correct_phone">Jāievada derīgs tālruņa numurs</string>
<string name="error_enter_correct_web">Jāievada derīga tīmekļa adrese</string>
<string name="error_enter_correct_email">Jāievada derīga e-pasta adrese</string>
<string name="error_enter_correct_facebook_page">Ierakstiet „Facebook“ lapas adresi, kontu vai mājaslapas nosaukumu</string>
<string name="error_enter_correct_instagram_page">Ierakstiet „Instagram“ vietnes adresi vai konta nosaukumu</string>
<string name="error_enter_correct_twitter_page">Ierakstiet „Twitter“ vietnes adresi vai lietotājvārdu</string>
@@ -844,4 +844,6 @@
<string name="backup_interval_every_day">Ik dienu</string>
<string name="clear">Notīrīt</string>
<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>
</resources>

View File

@@ -885,4 +885,13 @@
<string name="editor_socket">Rediger kontakt</string>
<string name="charge_socket_type1">Type 1</string>
<string name="edit_socket_info_tooltip">Opprett nye kontakter eller rediger eksisterende.</string>
<string name="avoid_paved">Unngå asfalterte veier</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="other">%d min</item>
</plurals>
<string name="closes_day_at">Stenger %1$s %2$s</string>
<string name="opens_day_at">Åpner %1$s %2$s</string>
<string name="closes_at">Stenger %s</string>
<string name="opens_at">Åpner %s</string>
</resources>

View File

@@ -3,7 +3,7 @@
<color name="base_accent">#FF7CBC7B</color>
<color name="base_accent_pressed">#FF588157</color>
<color name="icon_tint">#FFC4C6C7</color>
<color name="icon_tint">#FFF</color>
<color name="icon_tint_light">#FF76797C</color>

View File

@@ -555,8 +555,8 @@
<string name="routing_add_start_point">Gebruik zoeken of tik op de kaart om een startpunt voor de route toe te voegen</string>
<!-- User selected the start of a route by pressing Route From. Now the destination of a route should be selected using search or by tapping on the map and then pressing "Route To". -->
<string name="routing_add_finish_point">Gebruik Zoeken of tik op de kaart om een bestemmingspunt toe te voegen</string>
<string name="planning_route_manage_route">Beheer route</string>
<string name="button_plan">Plan</string>
<string name="planning_route_manage_route">Route beheren</string>
<string name="button_plan">Plannen</string>
<string name="placepage_remove_stop">Verwijder tussenstop</string>
<string name="placepage_add_stop">Voeg tussenstop toe</string>
<string name="dialog_error_storage_title">Probleem met opslagtoegang</string>
@@ -871,4 +871,39 @@
<string name="hours_confirmed_time_ago">Bevestigd %s</string>
<string name="pref_tts_no_system_tts_short">Geen tekst-naar-spraak processor gevonden, controleer de app-instellingen</string>
<string name="offline_explanation_title">Offline kaarten</string>
<string name="offline_explanation_text">Er moet een kaart worden gedownload om het gebied te kunnen bekijken en navigeren.\nDownload kaarten voor gebieden waar u wilt reizen.</string>
<string name="editor_place_doesnt_exist_description">Beschrijf hoe de plaats er nu uitziet om een foutbericht te sturen naar de OpenStreetMap-community</string>
<string name="avoid_steps">Trappen vermijden</string>
<string name="avoid_paved">Verharde wegen vermijden</string>
<string name="charge_socket_type2">Type 2 (geen kabel)</string>
<string name="charge_socket_type2_cable">Type 2 (met kabel)</string>
<string name="charge_socket_type2_combo">Type 2 combinatie</string>
<string name="charge_socket_type1">Type 1</string>
<string name="charge_socket_nacs">NACS</string>
<string name="unknown_power_output">onbekend</string>
<string name="charge_socket_chademo">CHAdeMO</string>
<string name="unknown_socket_type">onbekende stekker</string>
<string name="unknow_socket_type">onbekende stekker</string>
<string name="unknown_count">onbekend</string>
<string name="error_invalid_number">ongeldig aantal</string>
<string name="edit_socket_info_tooltip">Maak nieuwe stekkers aan of bewerk bestaande.</string>
<string name="charging_station_available_sockets">Beschikbare stekkers</string>
<string name="charge_socket_unknown_other">Andere of onbekend</string>
<string name="charge_socket_count">Aantal</string>
<string name="charge_socket_power">Vermogen (kW)</string>
<string name="editor_socket">Stekker bewerken</string>
<string name="error_value_must_be_positive">De waarde moet positief zijn</string>
<string name="list_description_empty">Bewerk de lijst om een beschrijving toe te voegen</string>
<plurals name="minutes_short">
<item quantity="one">%d min.</item>
<item quantity="other">%d min.</item>
</plurals>
<string name="opens_at">Opent om %s</string>
<string name="closes_at">Sluit om %s</string>
<string name="opens_day_at">Opent op %1$s om %2$s</string>
<string name="closes_day_at">Sluit op %1$s om %2$s</string>
<string name="editor_submit">Indienen</string>
<string name="editor_business_vacant_button">Bedrijfsruimte is leeg</string>
<string name="editor_mark_business_vacant_title">Bedrijfsruimte leeg markeren</string>
<string name="editor_mark_business_vacant_description">Gebruik dit als het bedrijf is verhuisd en de ruimte leeg is en klaar is voor een nieuwe huurder.</string>
</resources>

View File

@@ -372,7 +372,7 @@
<!-- The message when user did not find anything in the search. -->
<string name="search_not_found_query">Pobierz region, w którym szukasz lub spróbuj dodać nazwę pobliskiego miasta/wsi.</string>
<string name="search_history_title">Historia wyszukiwania</string>
<string name="search_history_text">Uzyskaj szybki dostęp do ostatniego hasła wyszukiwania.</string>
<string name="search_history_text">Zobacz swoje ostatnie wyszukiwania</string>
<string name="clear_search">Wyczyść historię wyszukiwania</string>
<!-- Place Page link to Wikipedia article (if map object has it). -->
<string name="read_in_wikipedia">Wikipedia</string>

View File

@@ -870,4 +870,14 @@
<string name="offline_explanation_title">Mapas offline</string>
<string name="editor_place_doesnt_exist_description">Descreva com detalhes como está o local agora mesmo para enviar uma nota de erro à comunidade do OpenStreetMap</string>
<string name="list_description_empty">Edite a lista para adicionar uma descrição</string>
<string name="avoid_paved">Evitar vias pavimentadas</string>
<string name="opens_at">Abre às %s</string>
<string name="closes_at">Fecha às %s</string>
<string name="opens_day_at">Abre %1$s às %2$s</string>
<string name="closes_day_at">Fecha %1$s às %2$s</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="many">%d min</item>
<item quantity="other">%d min</item>
</plurals>
</resources>

View File

@@ -885,4 +885,5 @@
<string name="unknown_count">desconhecido</string>
<string name="error_value_must_be_positive">O valor tem que ser positivo</string>
<string name="error_invalid_number">Número inválido</string>
<string name="avoid_paved">Evitar rotas pavimentadas</string>
</resources>

View File

@@ -387,10 +387,10 @@
<string name="editor_time_open">Deschis</string>
<string name="editor_time_close">Închis</string>
<string name="editor_time_add_closed">Adaugă ore de închidere</string>
<string name="editor_time_title">Ore de deschidere</string>
<string name="editor_time_title">Program</string>
<string name="editor_time_advanced">Mod Avansat</string>
<string name="editor_time_simple">Mod simplu</string>
<string name="editor_hours_closed">Ore de închidere</string>
<string name="editor_hours_closed">Pauză</string>
<string name="editor_example_values">Exemple</string>
<string name="editor_correct_mistake">Corectare greșeală</string>
<string name="editor_add_select_location">Selectați locația</string>
@@ -867,4 +867,16 @@
<string name="pref_tts_no_system_tts_short">Nu s-a găsit un motor de text-to-speech, verifică setările aplicației</string>
<string name="osm_note_hint">Sau, alternativ, lăsați un mesaj comunității OpenStreetMap, astfel încât altcineva să poată adăuga sau corecta un loc aici.</string>
<string name="osm_note_toast">Nota va fi trimisă către OpenStreetMap</string>
<string name="opens_at">Deschide la %s</string>
<string name="closes_at">Închide la %s</string>
<string name="opens_day_at">Deschide %1$s la %2$s</string>
<string name="closes_day_at">Închide %1$s la %2$s</string>
<string name="editor_business_vacant_button">Magazinul este vacant</string>
<string name="editor_mark_business_vacant_title">Machează magazinul ca vacant</string>
<string name="editor_place_doesnt_exist_description">Descrie cum arată locul acum ca să trimiți o notiță comunității OpenStreetMap</string>
<string name="editor_mark_business_vacant_description">Folosește acest buton dacă magazinul a plecat din spațiu și spațiul este gol, aștepând alt magazin.</string>
<string name="editor_submit">Trimite</string>
<string name="avoid_paved">Evită drumurile pavate</string>
<string name="avoid_steps">Evită treptele</string>
<string name="offline_explanation_text">O hartă trebuie descărcată ca să vezi și si să nevighezi prin zonă.\nDescarcă hărți pentru zonele în care vrei să mergi.</string>
</resources>

View File

@@ -84,7 +84,7 @@
<!-- Free space out of total storage size in Maps Storage settings, e.g. "300 MB free of 2 GB" -->
<string name="maps_storage_free_size">слободно %1$s од %2$s</string>
<!-- Question dialog for transferring maps from one storage to another -->
<string name="move_maps">Преместаш мапу?</string>
<string name="move_maps">Преместити мапу?</string>
<!-- Error moving map files from one storage to another -->
<string name="move_maps_error">Грешка приликом премештања мапа</string>
<!-- Ask user to wait several minutes (some long process in modal dialog). -->
@@ -240,7 +240,7 @@
<!-- Button in the main menu -->
<string name="donate">Донација</string>
<!-- Button in the main Help dialog -->
<string name="how_to_support_us">Волонтирај и унапреди CoMaps</string>
<string name="how_to_support_us">Волонтирајте и побољшајте CoMaps</string>
<!-- Text in menu + Button in the main Help dialog -->
<string name="report_a_bug">Пријавите проблем</string>
<!-- Toast text when compass calibration may improve the correctness of the current position arrow -->
@@ -871,7 +871,7 @@
<string name="error_invalid_number">Неисправан број</string>
<string name="error_value_must_be_positive">Вредност мора бити већа од нуле</string>
<string name="unknown_count">непознато</string>
<string name="unknown_power_output">Непознато напајање</string>
<string name="unknown_power_output">непознато</string>
<string name="charge_socket_type2">Тип 2 (без кабла)</string>
<string name="charge_socket_type2_cable">Тип 2 (са каблом)</string>
<string name="charge_socket_type2_combo">Тип 2 комбо</string>
@@ -890,4 +890,19 @@
<string name="offline_explanation_title">Офлајн мапе</string>
<string name="editor_place_doesnt_exist_description">Опишите како место сада изгледа та бисте послали поруку о грешци OpenStreetMap заједници</string>
<string name="avoid_steps">Избегавај степенице</string>
<string name="avoid_paved">Избегавај асфалтиране путеве</string>
<string name="list_description_empty">Промените листу да бисте додали опис</string>
<string name="opens_at">Отвара се у %s</string>
<string name="closes_at">Затвара се у %s</string>
<string name="opens_day_at">Отвара се у %1$s у %2$s</string>
<string name="closes_day_at">Затвара се у %1$s у %2$s</string>
<plurals name="minutes_short">
<item quantity="one">%d мин</item>
<item quantity="few">%d мин</item>
<item quantity="other">%d мин</item>
</plurals>
<string name="editor_business_vacant_button">Пословни простор је празан</string>
<string name="editor_mark_business_vacant_title">Означи пословни простор као празан</string>
<string name="editor_mark_business_vacant_description">Користите да бисте назначили да се фирма иселила и да је пословни простор празан и спреман да прими новог закупца.</string>
<string name="editor_submit">Пошаљи</string>
</resources>

View File

@@ -833,4 +833,7 @@
<string name="editor_level">Våningsplan (0 är bottenplan)</string>
<string name="error_enter_correct_level">Ange ett giltigt nummer för våningsplan</string>
<string name="avoid_steps">Undvik trappor</string>
<string name="avoid_paved">Undvik asfalterade vägar</string>
<string name="error_value_must_be_positive">Värdet måste vara positivt</string>
<string name="error_invalid_number">ogiltigt tal</string>
</resources>

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Items in the Preferences can have space reserved for an icon. As none of the
settings currently have associated icons, this leads to items that seem indented
without purpose. This wastes space and can lead to truncation of the item names
and descriptions. See https://github.com/organicmaps/organicmaps/issues/1872
To rectify this, the iconSpaceReserved property needs to be set to false.
According to https://developer.android.com/reference/android/preference/Preference#attr_android:iconSpaceReserved
false should be the default. However, according to
https://material.io/design/platform-guidance/android-settings.html this goes
against the material design guidelines and the default was overridden to true in
https://cs.android.com/android/platform/superproject/+/android-9.0.0_r1:prebuilts/sdk/current/support/v7/preference/res/values-sw360dp-v13/values-sw360dp-v13.xml
This file sets the default value back to false (i.e. no space reserved for icons).
See also the discussion at https://github.com/organicmaps/organicmaps/pull/1924
-->
<resources xmlns:tools="http://schemas.android.com/tools">
<bool name="config_materialPreferenceIconSpaceReserved" tools:ignore="MissingDefaultResource">false</bool>
</resources>

View File

@@ -0,0 +1,643 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="cancel">ரத்துசெய்</string>
<string name="delete">நீக்கு</string>
<string name="download_maps">வரைபடத்தைப் பதிவிறக்கவும்</string>
<string name="downloading">பதிவிறக்குகிறது…</string>
<string name="offline_explanation_title">இணைப்பில்லாத வரைபடங்கள்</string>
<string name="offline_explanation_text">அந்தப் பகுதியைப் பார்க்கவும் வழிசெலுத்தவும் ஒரு வரைபடம் பதிவிறக்கம் செய்யப்பட வேண்டும். \nநீங்கள் பயணிக்க விரும்பும் பகுதிகளுக்கான வரைபடங்களைப் பதிவிறக்கவும்.</string>
<string name="kilometres">கிலோமீட்டர்கள்</string>
<string name="miles">மைல்கள்</string>
<string name="search">தேடல்</string>
<string name="bookmarks_and_tracks">புக்மார்க்குகள் மற்றும் தடங்கள்</string>
<string name="later">பின்னர்</string>
<string name="zoom_to_country">வரைபடத்தில் காட்டு</string>
<string name="country_status_download_failed">பதிவிறக்கம் தோல்வியடைந்தது</string>
<string name="about_headline">சமூகத்தால் இயக்கப்படும் திறந்த திட்டம்</string>
<string name="close">மூடு</string>
<string name="download">பதிவிறக்கம்</string>
<string name="continue_button">தொடரவும்</string>
<string name="add_new_set">புதிய பட்டியலைச் சேர்க்கவும்</string>
<string name="bookmark_set_name">புத்தகக்குறி பட்டியல் பெயர்</string>
<string name="bookmarks">புக்மார்க்குகள்</string>
<string name="address">முகவரி</string>
<string name="settings">அமைப்புகள்</string>
<string name="measurement_units">அளவீட்டு அலகுகள்</string>
<string name="category_eat">எங்கே சாப்பிடுவது</string>
<string name="category_food">மளிகை பொருட்கள்</string>
<string name="category_transport">போக்குவரத்து</string>
<string name="category_fuel">வளிமம்</string>
<string name="category_parking">பார்க்கிங்</string>
<string name="category_shopping">சாப்பிங்</string>
<string name="category_secondhand">இரண்டாவது கை</string>
<string name="category_hotel">ஓட்டல்</string>
<string name="category_tourism">காட்சிகள்</string>
<string name="category_entertainment">பொழுதுபோக்கு</string>
<string name="category_atm">ஏடிஎம்</string>
<string name="category_nightlife">இரவு வாழ்க்கை</string>
<string name="category_children">குடும்ப விடுமுறை</string>
<string name="category_bank">வைப்பகம்</string>
<string name="category_pharmacy">மருந்தகம்</string>
<string name="category_hospital">மருத்துவமனை</string>
<string name="category_toilet">கழிப்பறை</string>
<string name="category_post">இடுகை</string>
<string name="category_police">போலீச்</string>
<string name="category_recycling">மறுசுழற்சி</string>
<string name="category_water">தண்ணீர்</string>
<string name="category_rv">RV வசதிகள்</string>
<string name="load_kmz_title">புக்மார்க்குகளை ஏற்றுகிறது</string>
<string name="load_kmz_successful">புக்மார்க்குகள் வெற்றிகரமாக ஏற்றப்பட்டன! வரைபடத்தில் அல்லது புக்மார்க்ச் மேலாளர் திரையில் அவற்றைக் காணலாம்.</string>
<string name="load_kmz_failed">புக்மார்க்குகளை ஏற்றுவதில் தோல்வி. கோப்பு சிதைந்திருக்கலாம் அல்லது குறைபாடுடையதாக இருக்கலாம்.</string>
<string name="edit">தொகு</string>
<string name="unknown_current_position">உங்கள் இருப்பிடம் இன்னும் தீர்மானிக்கப்படவில்லை</string>
<string name="bookmark_share_email_subject">ஏய், CoMaps இல் எனது பின்னை பாருங்கள்!</string>
<string name="my_position_share_email_subject">ஏய், CoMaps வரைபடத்தில் எனது தற்போதைய இருப்பிடத்தைப் பாருங்கள்!</string>
<string name="email">மின்னஞ்சல்</string>
<string name="done">முடிந்தது</string>
<string name="tracks_title">தடங்கள்</string>
<string name="length">நீளம்</string>
<string name="share_my_location">எனது இருப்பிடத்தைப் பகிரவும்</string>
<string name="prefs_group_route">வானோடல்</string>
<string name="pref_zoom_title">பெரிதாக்கு பொத்தான்கள்</string>
<string name="off">அணை</string>
<string name="on">அன்று</string>
<string name="auto">தானி</string>
<string name="pref_map_3d_title">முன்னோக்கு பார்வை</string>
<string name="pref_map_3d_buildings_title">3டி கட்டிடங்கள்</string>
<string name="pref_map_3d_buildings_disabled_summary">மின் சேமிப்பு பயன்முறையில் 3D கட்டிடங்கள் முடக்கப்பட்டுள்ளன</string>
<string name="pref_tts_street_names_title">தெரு பெயர்களை அறிவிக்கவும்</string>
<string name="pref_tts_street_names_description">இயக்கப்பட்டால், தெருவின் பெயர் அல்லது வெளியேறும் இடம் உரக்கப் பேசப்படும்.</string>
<string name="pref_tts_language_title">குரல் மொழி</string>
<string name="pref_tts_test_voice_title">குரல் வழிகளை சோதிக்கவும்</string>
<string name="pref_map_auto_zoom">ஆட்டோ சூம்</string>
<string name="placepage_distance">தூரம்</string>
<string name="search_show_on_map">வரைபடத்தில் பார்க்கவும்</string>
<string name="website">இணையதளம்</string>
<string name="news">செய்தி</string>
<string name="rate_the_app">பயன்பாட்டை மதிப்பிடவும்</string>
<string name="help">உதவி</string>
<string name="faq">அடிக்கடி கேட்கப்படும் கேள்விகள்</string>
<string name="donate">நன்கொடை</string>
<string name="copyright">காப்புரிமை</string>
<string name="report_a_bug">பிழையைப் புகாரளிக்கவும்</string>
<string name="long_tap_toast">இடைமுகத்தைப் பார்க்க மீண்டும் வரைபடத்தில் நீண்ட நேரம் தட்டவும்</string>
<string name="downloader_update_all_button">அனைத்தையும் புதுப்பிக்கவும்</string>
<string name="downloader_downloaded_subtitle">பதிவிறக்கம் செய்யப்பட்டது</string>
<string name="downloader_queued">வரிசையில் நிற்கிறது</string>
<string name="downloader_near_me_subtitle">என் அருகில்</string>
<string name="downloader_status_maps">வரைபடங்கள்</string>
<string name="downloader_download_all_button">அனைத்தையும் பதிவிறக்கவும்</string>
<string name="downloader_downloading">பதிவிறக்குகிறது:</string>
<string name="routing_failed_cross_mwm_building">ஒரு பகுதியின் வரைபடத்தில் முழுமையாகக் கொண்டிருக்கும் வழிகளை மட்டுமே உருவாக்க முடியும்.</string>
<string name="downloader_download_map">வரைபடத்தைப் பதிவிறக்கவும்</string>
<string name="downloader_retry">மீண்டும் முயற்சிக்கவும்</string>
<string name="downloader_delete_map">வரைபடத்தை நீக்கு</string>
<string name="routing_download_maps_along">உங்கள் பாதையில் உள்ள அனைத்து வரைபடங்களையும் பதிவிறக்கவும்</string>
<string name="routing_requires_all_map">வழியை உருவாக்க, உங்கள் இருப்பிடத்திலிருந்து நீங்கள் சேருமிடத்திற்கு அனைத்து வரைபடங்களையும் பதிவிறக்கம் செய்து புதுப்பிக்க வேண்டும்.</string>
<string name="save">சேமி</string>
<string name="create">உருவாக்க</string>
<string name="red">சிவப்பு</string>
<string name="yellow">மஞ்சள்</string>
<string name="blue">நீலம்</string>
<string name="green">பச்சை</string>
<string name="purple">ஊதா</string>
<string name="orange">ஆரஞ்சு</string>
<string name="brown">பழுப்பு</string>
<string name="pink">இளஞ்சிவப்பு</string>
<string name="deep_purple">அடர் ஊதா</string>
<string name="light_blue">வெளிர் நீலம்</string>
<string name="cyan">சியான்</string>
<string name="teal">டீல்</string>
<string name="lime">சுண்ணாம்பு</string>
<string name="deep_orange">ஆழமான ஆரஞ்சு</string>
<string name="gray">சாம்பல்</string>
<string name="blue_gray">நீல சாம்பல்</string>
<string name="dialog_routing_disclaimer_title">வழியைப் பின்தொடரும் போது, தயவுசெய்து நினைவில் கொள்ளுங்கள்:</string>
<string name="dialog_routing_disclaimer_priority">- வழிசெலுத்தல் குறிப்புகளை விட சாலை நிலைமைகள், போக்குவரத்து சட்டங்கள் மற்றும் சாலை அடையாளங்கள் எப்போதும் முன்னுரிமை பெறுகின்றன;</string>
<string name="dialog_routing_disclaimer_precision">— வரைபடம் துல்லியமற்றதாக இருக்கலாம், மேலும் பரிந்துரைக்கப்பட்ட பாதை எப்போதும் இலக்கை அடைய மிகவும் உகந்த வழியாக இருக்காது;</string>
<string name="dialog_routing_disclaimer_recommendations">- பரிந்துரைக்கப்பட்ட வழிகள் பரிந்துரைகளாக மட்டுமே புரிந்து கொள்ளப்பட வேண்டும்;</string>
<string name="dialog_routing_disclaimer_borders">— எல்லை மண்டலங்களில் உள்ள வழிகளில் எச்சரிக்கையாக இருங்கள்: எங்கள் ஆப்ச் உருவாக்கிய வழிகள் சில நேரங்களில் அங்கீகரிக்கப்படாத இடங்களில் நாட்டின் எல்லைகளைக் கடக்கலாம்.</string>
<string name="dialog_routing_disclaimer_beware">சாலைகளில் எச்சரிக்கையாகவும் பாதுகாப்பாகவும் இருங்கள்!</string>
<string name="dialog_routing_check_gps">சிபிஎச் சிக்னலைச் சரிபார்க்கவும்</string>
<string name="dialog_routing_error_location_not_found">வழியை உருவாக்க முடியவில்லை. தற்போதைய சிபிஎச் ஒருங்கிணைப்புகளை அடையாளம் காண முடியவில்லை.</string>
<string name="dialog_routing_location_turn_wifi">உங்கள் சிபிஎச் சிக்னலைச் சரிபார்க்கவும். வைஃபையை இயக்குவது உங்கள் இருப்பிடத் துல்லியத்தை மேம்படுத்தும்.</string>
<string name="dialog_routing_location_turn_on">இருப்பிட சேவைகளை இயக்கவும்</string>
<string name="dialog_routing_location_unknown_turn_on">தற்போதைய சிபிஎச் ஆயத்தொலைவுகளைக் கண்டறிய முடியவில்லை. வழியைக் கணக்கிட, இருப்பிடச் சேவைகளை இயக்கவும்.</string>
<string name="dialog_routing_unable_locate_route">வழியைக் கண்டறிய முடியவில்லை</string>
<string name="dialog_routing_change_start_or_end">உங்கள் தொடக்கப் புள்ளி அல்லது சேருமிடத்தைச் சரிசெய்யவும்.</string>
<string name="dialog_routing_change_start">தொடக்க புள்ளியை சரிசெய்யவும்</string>
<string name="dialog_routing_start_not_determined">பாதை உருவாக்கப்படவில்லை. தொடக்கப் புள்ளியைக் கண்டறிய முடியவில்லை.</string>
<string name="dialog_routing_select_closer_start">சாலைக்கு அருகில் ஒரு தொடக்கப் புள்ளியைத் தேர்ந்தெடுக்கவும்.</string>
<string name="dialog_routing_change_end">இலக்கை சரிசெய்யவும்</string>
<string name="dialog_routing_end_not_determined">பாதை உருவாக்கப்படவில்லை. சேருமிடத்தைக் கண்டறிய முடியவில்லை.</string>
<string name="dialog_routing_system_error">கணினி பிழை</string>
<string name="dialog_routing_try_again">மீண்டும் முயற்சிக்கவும்</string>
<string name="dialog_routing_download_and_build_cross_route">வரைபடத்தைப் பதிவிறக்கம் செய்து, ஒன்றுக்கும் மேற்பட்ட வரைபடத்தில் மிகவும் உகந்த வழியை உருவாக்க விரும்புகிறீர்களா?</string>
<string name="dialog_routing_download_cross_route">இந்த வரைபடத்தின் எல்லைகளைக் கடக்கும் சிறந்த வழியை உருவாக்க கூடுதல் வரைபடங்களைப் பதிவிறக்கவும்.</string>
<string name="show">காட்டு</string>
<string name="hide">மறை</string>
<string name="categories">வகைகள்</string>
<string name="history">வரலாறு</string>
<string name="search_not_found_query">நீங்கள் தேடும் பகுதியைப் பதிவிறக்கவும் அல்லது அருகிலுள்ள நகரம்/கிராமத்தின் பெயரைச் சேர்க்க முயற்சிக்கவும்.</string>
<string name="search_history_title">தேடல் வரலாறு</string>
<string name="clear_search">தேடல் வரலாற்றை அழிக்கவும்</string>
<string name="read_in_wikipedia">விக்கிபீடியா</string>
<string name="wikimedia_commons">விக்கிமீடியா காமன்ச்</string>
<string name="p2p_your_location">உங்கள் இருப்பிடம்</string>
<string name="p2p_start">தொடங்கு</string>
<string name="p2p_from_here">இருந்து வழி</string>
<string name="p2p_to_here">செல்லும் பாதை</string>
<string name="p2p_reroute_from_current">உங்கள் தற்போதைய இருப்பிடத்திலிருந்து ஒரு வழியைத் திட்டமிட விரும்புகிறீர்களா?</string>
<string name="editor_time_add">அட்டவணையைச் சேர்க்கவும்</string>
<string name="editor_time_delete">அட்டவணையை நீக்கு</string>
<string name="editor_time_allday">நாள் முழுவதும் (24 மணிநேரம்)</string>
<string name="editor_time_open">திற</string>
<string name="editor_time_close">மூடப்பட்டது</string>
<string name="editor_time_add_closed">வணிகம் அல்லாத நேரத்தைச் சேர்க்கவும்</string>
<string name="editor_time_title">வணிக நேரம்</string>
<string name="editor_time_advanced">மேம்பட்ட பயன்முறை</string>
<string name="editor_time_simple">எளிய முறை</string>
<string name="editor_hours_closed">வணிகம் அல்லாத நேரம்</string>
<string name="editor_example_values">எடுத்துக்காட்டு மதிப்புகள்</string>
<string name="editor_add_select_location">இருப்பிடத்தைத் தேர்ந்தெடுக்கவும்</string>
<string name="editor_report_problem_send_button">அனுப்பு</string>
<string name="autodownload">வரைபடங்களைத் தானாகப் பதிவிறக்கவும்</string>
<string name="closed_now">இப்போது மூடப்பட்டுள்ளது</string>
<string name="daily">நாள்தோறும்</string>
<string name="twentyfour_seven">24/7</string>
<string name="day_off_today">இன்று மூடப்பட்டது</string>
<string name="day_off">மூடப்பட்டது</string>
<string name="closed">மூடப்பட்டது</string>
<string name="edit_place">இடத்தைத் திருத்து</string>
<string name="add_language">ஒரு மொழியைச் சேர்க்கவும்</string>
<string name="house_number">கட்டிட எண்</string>
<string name="details">விவரங்கள்</string>
<string name="add_street">ஒரு தெருவைச் சேர்க்கவும்</string>
<string name="choose_language">ஒரு மொழியை தேர்வு செய்யவும்</string>
<string name="choose_street">ஒரு தெருவைத் தேர்ந்தெடுக்கவும்</string>
<string name="cuisine">சமையல்</string>
<string name="select_cuisine">சமையலைத் தேர்ந்தெடுக்கவும்</string>
<string name="level">மாடி</string>
<string name="downloader_update_maps">வரைபடத்தைப் புதுப்பிக்கவும்</string>
<string name="downloader_search_field_hint">வரைபடத்தைக் கண்டுபிடி</string>
<string name="downloader_no_space_title">போதுமான இடம் இல்லை</string>
<string name="downloader_no_space_message">தேவையற்ற தரவுகளை நீக்கவும்</string>
<string name="editor_profile_changes">சரிபார்க்கப்பட்ட மாற்றங்கள்</string>
<string name="editor_focus_map_on_location">இடம் அல்லது வணிகத்தின் இடத்தில் சிலுவையை வைக்க வரைபடத்தை இழுக்கவும்.</string>
<string name="editor_edit_place_title">திருத்துதல்</string>
<string name="editor_add_place_title">சேர்த்தல்</string>
<string name="editor_edit_place_name_hint">இடத்தின் பெயர்</string>
<string name="editor_default_language_hint">அச் it is written in the local மொழி</string>
<string name="editor_edit_place_category_title">வகை</string>
<string name="message_invalid_feature_position">எந்தப் பொருளையும் இங்கு வைக்க முடியாது</string>
<string name="downloader_of">%1$d / %2$d</string>
<string name="download_over_mobile_header">செல்லுலார் பிணையம் இணைப்பு மூலம் பதிவிறக்கவா?</string>
<string name="error_enter_correct_house_number">சரியான கட்டிட எண்ணை உள்ளிடவும்</string>
<string name="error_enter_correct_storey_number">மாடிகளின் எண்ணிக்கை %d ஐ விட அதிகமாக இருக்கக்கூடாது</string>
<string name="editor_zip_code">குறியீடு</string>
<string name="error_enter_correct_zip_code">சரியான அஞ்சல் குறியீட்டை உள்ளிடவும்</string>
<string name="editor_other_info">OpenStreetMap தன்னார்வலர்களுக்கான குறிப்பு (விரும்பினால்)</string>
<string name="editor_more_about_osm">OpenStreetMap பற்றி மேலும்</string>
<string name="editor_operator">ஆபரேட்டர்</string>
<string name="editor_category_unsuitable_title">பொருத்தமான வகையைக் கண்டுபிடிக்க முடியவில்லையா?</string>
<string name="editor_category_unsuitable_text">CoMaps எளிய புள்ளி வகைகளை மட்டும் சேர்க்க அனுமதிக்கிறது, அதாவது நகரங்கள், சாலைகள், ஏரிகள், கட்டிட அவுட்லைன்கள் போன்றவை இல்லை. அத்தகைய வகைகளை நேரடியாக <a href="https://www.openstreetmap.org">OpenStreetMap.org</a> இல் சேர்க்கவும். விரிவான படிப்படியான வழிமுறைகளுக்கு எங்கள் <a href="https://www.comaps.app/support/advanced-map-editing/">வழிகாட்டியைப்</a> பார்க்கவும்.</string>
<string name="downloader_no_downloaded_maps_title">நீங்கள் எந்த வரைபடத்தையும் பதிவிறக்கம் செய்யவில்லை</string>
<string name="kilometers_per_hour">கிமீ/ம</string>
<string name="miles_per_hour">mph</string>
<string name="hour"></string>
<string name="minute">மணித்துளி</string>
<string name="day">டி</string>
<string name="placepage_more_button">மேலும்</string>
<string name="placepage_edit_bookmark_button">புக்மார்க்கைத் திருத்து</string>
<string name="placepage_personal_notes_hint">தனிப்பட்ட குறிப்புகள் (உரை அல்லது html)</string>
<string name="editor_reset_edits_message">அனைத்து உள்ளக மாற்றங்களையும் நிராகரிக்கவா?</string>
<string name="editor_reset_edits_button">நிராகரிக்கவும்</string>
<string name="editor_remove_place_message">சேர்க்கப்பட்ட இடத்தை நீக்கவா?</string>
<string name="editor_remove_place_button">நீக்கு</string>
<string name="editor_place_doesnt_exist">இடம் இல்லை</string>
<string name="editor_place_doesnt_exist_description">OpenStreetMap சமூகத்திற்கு பிழைக் குறிப்பை அனுப்ப, அந்த இடம் இப்போது எப்படி இருக்கிறது என்பதை விவரிக்கவும்</string>
<string name="error_enter_correct_phone">சரியான தொலைபேசி எண்ணை உள்ளிடவும்</string>
<string name="error_enter_correct_web">சரியான இணைய முகவரியை உள்ளிடவும்</string>
<string name="error_enter_correct_email">சரியான மின்னஞ்சலை உள்ளிடவும்</string>
<string name="placepage_add_place_button">OpenStreetMap இல் இடத்தைச் சேர்க்கவும்</string>
<string name="editor_share_to_all_dialog_title">எல்லா பயனர்களுக்கும் அனுப்ப விரும்புகிறீர்களா?</string>
<string name="navigation_stop_button">நிறுத்து</string>
<string name="accept">ஏற்றுக்கொள்</string>
<string name="decline">நிராகரி</string>
<string name="mobile_data_dialog">விரிவான தகவலைக் காட்ட மொபைல் இணையத்தைப் பயன்படுத்தவா?</string>
<string name="mobile_data_option_always">எப்போதும் பயன்படுத்தவும்</string>
<string name="mobile_data_option_today">இன்று மட்டும்</string>
<string name="mobile_data_option_not_today">இன்று பயன்படுத்த வேண்டாம்</string>
<string name="mobile_data">மொபைல் இணையம்</string>
<string name="mobile_data_option_never">ஒருபோதும் பயன்படுத்த வேண்டாம்</string>
<string name="mobile_data_option_ask">எப்போதும் கேள்</string>
<string name="big_font">வரைபட லேபிள்களுக்கான அளவை அதிகரிக்கவும்</string>
<string name="traffic_data_unavailable">போக்குவரத்து தரவு கிடைக்கவில்லை</string>
<string name="enable_logging">பதிவு செய்வதை இயக்கு</string>
<string name="transliteration_title">லத்தீன் எழுத்துக்களில் ஒலிபெயர்ப்பு</string>
<string name="routing_add_start_point">பாதையின் தொடக்கப் புள்ளியைச் சேர்க்க, தேடலைப் பயன்படுத்தவும் அல்லது வரைபடத்தில் தட்டவும்</string>
<string name="routing_add_finish_point">இலக்கு புள்ளியைச் சேர்க்க, தேடலைப் பயன்படுத்தவும் அல்லது வரைபடத்தில் தட்டவும்</string>
<string name="planning_route_manage_route">வழியை நிர்வகிக்கவும்</string>
<string name="button_plan">திட்டம்</string>
<string name="placepage_remove_stop">நிறுத்தத்தை அகற்று</string>
<string name="placepage_add_stop">நிறுத்தத்தைச் சேர்க்கவும்</string>
<string name="saved">சேமிக்கப்பட்டது</string>
<string name="error_enter_correct_name">சரியான பெயரை உள்ளிடவும்</string>
<string name="bookmark_lists">பட்டியல்கள்</string>
<string name="bookmark_lists_hide_all">அனைத்தையும் மறை</string>
<string name="bookmark_lists_show_all">அனைத்தையும் காட்டு</string>
<string name="bookmarks_create_new_group">புதிய பட்டியலை உருவாக்கவும்</string>
<string name="bookmarks_import">புக்மார்க்குகள் மற்றும் தடங்களை இறக்குமதி செய்யவும்</string>
<string name="bookmarks_error_message_share_general">பயன்பாட்டுப் பிழை காரணமாகப் பகிர முடியவில்லை</string>
<string name="bookmarks_error_title_share_empty">பகிர்வதில் பிழை</string>
<string name="bookmarks_error_message_share_empty">வெற்று பட்டியலைப் பகிர முடியாது</string>
<string name="bookmarks_error_message_empty_list_name">பட்டியல் பெயரை உள்ளிடவும்</string>
<string name="bookmarks_error_title_list_name_already_taken">இந்த பெயர் ஏற்கனவே எடுக்கப்பட்டது</string>
<string name="profile">OpenStreetMap சுயவிவரம்</string>
<string name="restore">மீட்டமை</string>
<string name="privacy_policy">தனியுரிமைக் கொள்கை</string>
<string name="terms_of_use">பயன்பாட்டு விதிமுறைகள்</string>
<string name="layers_title">வரைபட நடைகள் மற்றும் அடுக்குகள்</string>
<string name="export_file">ஏற்றுமதி KMZ</string>
<string name="export_file_gpx">GPX ஐ ஏற்றுமதி செய்யவும்</string>
<string name="delete_list">பட்டியலை நீக்கு</string>
<string name="speedcams_alert_title">வேக கேமராக்கள்</string>
<string name="place_description_title">இட விளக்கம்</string>
<string name="pref_tts_speedcams_auto">வேகமாக சென்றால் எச்சரிக்கவும்</string>
<string name="pref_tts_speedcams_always">எப்போதும் எச்சரிக்கவும்</string>
<string name="pref_tts_speedcams_never">எச்சரிக்க வேண்டாம்</string>
<string name="power_managment_title">ஆற்றல் சேமிப்பு முறை</string>
<string name="power_managment_setting_never">ஒருபோதும்</string>
<string name="power_managment_setting_auto">பேட்டரி குறைவாக இருக்கும்போது</string>
<string name="power_managment_setting_manual_max">எப்போதும்</string>
<string name="enable_logging_warning_message">உதவி உரையாடலில் \"பிழையைப் புகாரளி\" என்பதைப் பயன்படுத்தி, உங்கள் சிக்கலைப் பற்றிய விரிவான கண்டறியும் பதிவுகளைப் பதிவுசெய்து கைமுறையாக எங்களுக்கு அனுப்ப இந்த விருப்பத்தை தற்காலிகமாக இயக்கவும். பதிவுகளில் இருப்பிடத் செய்தி இருக்கலாம்.</string>
<string name="driving_options_title">ரூட்டிங் விருப்பங்கள்</string>
<string name="avoid_tolls">சுங்கச்சாவடிகளைத் தவிர்க்கவும்</string>
<string name="avoid_unpaved">செப்பனிடப்படாத சாலைகளைத் தவிர்க்கவும்</string>
<string name="avoid_paved">நடைபாதை சாலைகளைத் தவிர்க்கவும்</string>
<string name="avoid_steps">படிக்கட்டுகளைத் தவிர்க்கவும்</string>
<string name="avoid_ferry">படகுகளைத் தவிர்க்கவும்</string>
<string name="avoid_motorways">தனிவழிப்பாதைகளைத் தவிர்க்கவும்</string>
<string name="unable_to_calc_alert_title">வழியைக் கணக்கிட முடியவில்லை</string>
<string name="unable_to_calc_alert_subtitle">ஒரு வழியைக் கண்டுபிடிக்க முடியவில்லை. இது உங்கள் ரூட்டிங் விருப்பங்கள் அல்லது முழுமையடையாத OpenStreetMap தரவு காரணமாக இருக்கலாம். உங்கள் ரூட்டிங் விருப்பங்களை மாற்றி மீண்டும் முயற்சிக்கவும்.</string>
<string name="define_to_avoid_btn">தவிர்க்க வேண்டிய சாலைகளை வரையறுக்கவும்</string>
<string name="change_driving_options_btn">ரூட்டிங் விருப்பங்கள் இயக்கப்பட்டன</string>
<string name="toll_road">சுங்கச்சாவடி</string>
<string name="unpaved_road">செப்பனிடப்படாத சாலை</string>
<string name="ferry_crossing">படகு கடப்பு</string>
<string name="yes">ஆம்</string>
<string name="no">இல்லை</string>
<string name="yes_available">ஆம்</string>
<string name="no_available">இல்லை</string>
<string name="trip_finished">நீங்கள் வந்துவிட்டீர்கள்!</string>
<string name="ok">சரி</string>
<string name="sort">வரிசைப்படுத்து…</string>
<string name="week_ago_sorttype">ஒரு வாரம் முன்பு</string>
<string name="month_ago_sorttype">ஒரு மாதம் முன்பு</string>
<string name="moremonth_ago_sorttype">ஒரு மாதத்திற்கும் மேலாக</string>
<string name="moreyear_ago_sorttype">ஒரு வருடத்திற்கு முன்பு</string>
<string name="near_me_sorttype">என் அருகில்</string>
<string name="others_sorttype">மற்றவை</string>
<string name="food_places">உணவு</string>
<string name="tourist_places">காட்சிகள்</string>
<string name="museums">அருங்காட்சியகங்கள்</string>
<string name="parks">பூங்காக்கள்</string>
<string name="swim_places">நீந்தவும்</string>
<string name="mountains">மலைகள்</string>
<string name="animals">விலங்குகள்</string>
<string name="hotels">ஓட்டல்கள்</string>
<string name="buildings">கட்டிடங்கள்</string>
<string name="money">பணம்</string>
<string name="shops">கடைகள்</string>
<string name="parkings">பார்க்கிங்</string>
<string name="fuel_places">எரிவாயு நிலையங்கள்</string>
<string name="medicine">மருந்து</string>
<string name="search_in_the_list">பட்டியலில் தேடவும்</string>
<string name="religious_places">மத இடங்கள்</string>
<string name="transit_not_found">இந்தப் பகுதியில் சுரங்கப்பாதை வழிசெலுத்தல் இன்னும் கிடைக்கவில்லை</string>
<string name="dialog_pedestrian_route_is_long_header">சுரங்கப்பாதை பாதை இல்லை</string>
<string name="dialog_pedestrian_route_is_long_message">சுரங்கப்பாதை நிலையத்திற்கு அருகில் உள்ள தொடக்க அல்லது முடிவுப் புள்ளியைத் தேர்வு செய்யவும்</string>
<string name="button_layer_isolines">விளிம்பு கோடுகள்</string>
<string name="isolines_activation_error_dialog">விளிம்பு கோடுகளைச் செயல்படுத்த, இந்தப் பகுதிக்கான வரைபடத் தரவைப் பதிவிறக்க வேண்டும்</string>
<string name="isolines_location_error_dialog">இந்த பகுதியில் இன்னும் விளிம்பு கோடுகள் கிடைக்கவில்லை</string>
<string name="elevation_profile_ascent">ஏற்றம்</string>
<string name="elevation_profile_descent">இறக்கம்</string>
<string name="elevation_profile_min_elevation">குறைந்தபட்சம் உயரம்</string>
<string name="elevation_profile_max_elevation">அதிகபட்சம். உயரம்</string>
<string name="isolines_toast_zooms_1_10">ஐசோலைன்களை ஆராய பெரிதாக்கவும்</string>
<string name="downloader_loading_ios">பதிவிறக்குகிறது</string>
<string name="app_tip_00">எங்கள் சமூகத்தால் உருவாக்கப்பட்ட வரைபடங்களைப் பயன்படுத்தியதற்கு நன்றி!</string>
<string name="app_tip_01">உங்கள் நன்கொடைகள் மற்றும் ஆதரவுடன், உலகில் சிறந்த வரைபடங்களை உருவாக்க முடியும்!</string>
<string name="app_tip_02">எங்கள் பயன்பாட்டை விரும்புகிறீர்களா? வளர்ச்சிக்கு ஆதரவளிக்க நன்கொடை வழங்குங்கள்! இன்னும் பிடிக்கவில்லையா? ஏன் என்று எங்களுக்குத் தெரியப்படுத்துங்கள், நாங்கள் அதை சரிசெய்வோம்!</string>
<string name="app_tip_03">உங்களுக்கு ஒரு மென்பொருள் உருவாக்குநரைத் தெரிந்திருந்தால், உங்களுக்குத் தேவையான அம்சத்தை செயல்படுத்தும்படி அவரிடம் அல்லது அவளிடம் கேட்கலாம்.</string>
<string name="app_tip_04">எதையும் தேர்ந்தெடுக்க வரைபடத்தில் எங்கும் தட்டவும். இடைமுகத்தை மறைக்க மற்றும் காட்ட ஒரு நீண்ட தட்டு பயன்படுத்தப்படுகிறது.</string>
<string name="app_tip_05">வரைபடத்தில் உங்கள் தற்போதைய இருப்பிடத்தைத் தேர்ந்தெடுக்க முடியும் என்பது உங்களுக்குத் தெரியுமா?</string>
<string name="app_tip_06">எங்கள் பயன்பாட்டை உங்கள் மொழியில் மொழிபெயர்க்க நீங்கள் உதவலாம்.</string>
<string name="app_tip_07">எங்கள் பயன்பாடு சில ஆர்வலர்கள் மற்றும் சமூகத்தால் உருவாக்கப்பட்டது.</string>
<string name="app_tip_08">வரைபடத் தரவை நீங்கள் எளிதாகச் சரிசெய்து மேம்படுத்தலாம்.</string>
<string name="app_tip_09">நீங்கள் விரும்பும் வேகமான, தனியுரிமையை மையமாகக் கொண்ட, பயன்படுத்த எளிதான வரைபடங்களை உருவாக்குவதே எங்கள் முக்கிய குறிக்கோள்.</string>
<string name="car_used_on_the_phone_screen">நீங்கள் இப்போது ஃபோன் திரையில் CoMaps ஐப் பயன்படுத்துகிறீர்கள்</string>
<string name="car_used_on_the_car_screen">நீங்கள் இப்போது கார் திரையில் CoMaps ஐப் பயன்படுத்துகிறீர்கள்</string>
<string name="car_continue_on_the_phone">தொலைபேசியில் தொடரவும்</string>
<string name="car_continue_in_the_car">கார் திரைக்கு</string>
<string name="button_layer_outdoor">வெளியில்</string>
<string name="bookmarks_export">அனைத்து புக்மார்க்குகளையும் தடங்களையும் ஏற்றுமதி செய்யவும்</string>
<string name="drive_through">டிரைவ்-த்ரூ</string>
<string name="website_menu">பட்டியல் இணைப்பு</string>
<string name="open_in_app">மற்றொரு பயன்பாட்டில் திறக்கவும்</string>
<string name="self_service">தன்வய பணி</string>
<string name="outdoor_seating">வெளிப்புற இருக்கை</string>
<string name="clear">தெளிவு</string>
<string name="start_track_recording">பதிவு தடம்</string>
<string name="stop_track_recording">ட்ராக் ரெக்கார்டிங்கை நிறுத்துங்கள்</string>
<string name="stop_without_saving">சேமிக்காமல் நிறுத்து</string>
<string name="continue_recording">பதிவைத் தொடரவும்</string>
<string name="track_recording_alert_title">புக்மார்க்குகள் மற்றும் தடங்களில் சேமிக்கவா?</string>
<string name="track_recording_toast_nothing_to_save">ட்ராக் காலியாக உள்ளது - சேமிக்க எதுவும் இல்லை</string>
<string name="edit_track">தடத்தை திருத்து</string>
<string name="app_site_url">https://comaps.app/</string>
<string name="back">பின்</string>
<string name="download_has_failed">பதிவிறக்கம் தோல்வியடைந்தது, மீண்டும் முயற்சிக்க தட்டவும்</string>
<string name="search_map">தேடு வரைபடம்</string>
<string name="location_is_disabled_long_text">இந்தச் சாதனம் அல்லது பயன்பாட்டிற்கான அனைத்து இருப்பிடச் சேவைகளும் தற்போது முடக்கப்பட்டுள்ளன. அமைப்புகளில் அவற்றை இயக்கவும்.</string>
<string name="limited_accuracy">வரையறுக்கப்பட்ட துல்லியம்</string>
<string name="precise_location_is_disabled_long_text">துல்லியமான வழிசெலுத்தலை உறுதிசெய்ய, அமைப்புகளில் துல்லியமான இருப்பிடத்தை இயக்கவும்</string>
<string name="try_again">மீண்டும் முயற்சிக்கவும்</string>
<string name="about_menu_title">CoMaps பற்றி</string>
<string name="about_proposition_1">• பயன்படுத்த எளிதானது மற்றும் மெருகூட்டப்பட்டது</string>
<string name="about_proposition_2">• தனியுரிமையை மையமாகக் கொண்டது மற்றும் விளம்பரங்கள் இல்லாதது</string>
<string name="about_proposition_3">• இணைப்பில்லாத, வேகமான மற்றும் கச்சிதமான</string>
<string name="about_developed_by_enthusiasts">முற்றிலும் திறந்த மூலமாக, லாபத்திற்காக அல்ல, வெளிப்படையான முடிவெடுத்தல் மற்றும் பொருள்.</string>
<string name="location_settings">இருப்பிட அமைப்புகள்</string>
<string name="unsupported_phone">பயன்பாட்டிற்கு வன்பொருள் துரிதப்படுத்தப்பட்ட OpenGL தேவை. எதிர்பாராதவிதமாக, உங்கள் சாதனம் ஆதரிக்கப்படவில்லை.</string>
<string name="disconnect_usb_cable">CoMaps ஐப் பயன்படுத்த USB கேபிளைத் துண்டிக்கவும் அல்லது நினைவக கார்டைச் செருகவும்</string>
<string name="not_enough_free_space_on_sdcard">பயன்பாட்டைப் பயன்படுத்த, முதலில் SD கார்டு/USB சேமிப்பகத்தில் சிறிது இடத்தைக் காலியாக்கவும்</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="update_country_ask">%1$sஐப் புதுப்பிக்கவா? (%2$s)</string>
<string name="pause">இடைநிறுத்தம்</string>
<string name="download_country_failed">%s பதிவிறக்கம் தோல்வியடைந்தது</string>
<string name="name">பெயர்</string>
<string name="list">பட்டியல்</string>
<string name="maps_storage">வரைபடங்களைச் சேமிக்கவும்</string>
<string name="maps_storage_summary">வரைபடங்களைப் பதிவிறக்குவதற்கான கோப்புறையைத் தேர்ந்தெடுக்கவும்</string>
<string name="maps_storage_downloaded">பதிவிறக்கம் செய்யப்பட்ட வரைபடங்கள்</string>
<string name="maps_storage_free_size">%2$s இல் %1$s இலவசம்</string>
<string name="move_maps">வரைபடங்களை நகர்த்தவா?</string>
<string name="move_maps_error">வரைபடக் கோப்புகளை நகர்த்துவதில் பிழை</string>
<string name="wait_several_minutes">இதற்கு பல நிமிடங்கள் ஆகலாம். \nதயவுசெய்து காத்திருங்கள்…</string>
<string name="measurement_units_summary">மைல்கள் மற்றும் கிலோமீட்டர்களுக்கு இடையே தேர்வு செய்யவும்</string>
<string name="description">குறிப்புகள்</string>
<string name="share_bookmarks_email_subject">CoMaps புக்மார்க்குகள் உங்களுடன் பகிரப்பட்டன</string>
<string name="share_bookmarks_email_body">வணக்கம்! \n\nஎனது புக்மார்க்குகள் இணைக்கப்பட்டுள்ளன; அவற்றை CoMaps இல் திறக்கவும். நீங்கள் அதை நிறுவவில்லை என்றால், அதை இங்கே பதிவிறக்கம் செய்யலாம்: https://www.comaps.app/download/ \n\nCoMaps மூலம் பயணம் செய்து மகிழுங்கள்!</string>
<string name="unknown_file_type">பயன்பாட்டால் கோப்பு வகை அங்கீகரிக்கப்படவில்லை: \n%1$s</string>
<string name="failed_to_open_file">%1$s கோப்பைத் திறக்க முடியவில்லை \n\n%2$s</string>
<string name="cant_change_this_setting">மன்னிக்கவும், வரைபட சேமிப்பக அமைப்புகள் தற்போது முடக்கப்பட்டுள்ளன</string>
<string name="downloading_is_active">வரைபடப் பதிவிறக்கம் இப்போது செயலில் உள்ளது</string>
<string name="my_position_share_sms">CoMaps இல் எனது தற்போதைய இருப்பிடத்தைப் பார்க்கவும்! %1$s அல்லது %2$s இணைப்பில்லாத வரைபடங்கள் இல்லையா? இங்கே பதிவிறக்கவும்: https://www.comaps.app/download/</string>
<string name="my_position_share_email">வணக்கம், \n\nநான் இப்போது இங்கே இருக்கிறேன்: %1$s. வரைபடத்தில் இடத்தைப் பார்க்க, இந்த இணைப்பை %2$s அல்லது இந்த %3$sஐக் சொடுக்கு செய்யவும். \n\nநன்றி.</string>
<string name="share">பங்கு</string>
<string name="copied_to_clipboard">இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது: %s</string>
<string name="data_version">OpenStreetMap தரவு: %s</string>
<string name="prefs_group_general">பொது அமைப்புகள்</string>
<string name="prefs_group_information">தகவல்</string>
<string name="pref_zoom_summary">வரைபடத்தில் காட்டவும்</string>
<string name="pref_map_style_title">இரவு முறை</string>
<string name="pref_tts_enable_title">குரல் வழிமுறைகள்</string>
<string name="pref_tts_playing_test_voice">இப்போது குரல் கேட்கவில்லை என்றால், ஒலியளவு அல்லது சிச்டம் டெக்ச்ட்-டு-ச்பீச் அமைப்புகளைச் சரிபார்க்கவும்</string>
<string name="pref_tts_unavailable">கிடைக்கவில்லை</string>
<string name="menu">பட்டியல்</string>
<string name="panoramax">Panoramax படம்</string>
<string name="feedback">பின்னூட்டம்</string>
<string name="how_to_support_us">தன்னார்வத் தொண்டு மற்றும் CoMaps ஐ மேம்படுத்தவும்</string>
<string name="compass_calibration_recommended">திசைகாட்டியை அளவீடு செய்ய, எண்-எட்டு இயக்கத்தில் தொலைபேசியை நகர்த்துவதன் மூலம் அம்புக்குறியின் திசையை மேம்படுத்தவும்.</string>
<string name="compass_calibration_required">திசைகாட்டியை அளவீடு செய்ய மற்றும் வரைபடத்தில் அம்புக்குறியின் திசையை சரிசெய்ய, எண்-எட்டு இயக்கத்தில் தொலைபேசியை நகர்த்தவும்.</string>
<string name="downloader_cancel_all">அனைத்தையும் நீக்கறல்</string>
<string name="downloader_delete_map_while_routing_dialog">வரைபடத்தை நீக்க, வழிசெலுத்தலை நிறுத்தவும்</string>
<string name="downloader_update_map">வரைபடத்தைப் புதுப்பிக்கவும்</string>
<string name="google_play_services">கூகுள் இணைந்த இருப்பிடச் பணி</string>
<string name="pref_use_google_play">GPS, Wi-Fi, செல்லுலார் நெட்வொர்க்குகள் போன்றவற்றை ஒருங்கிணைத்து உங்கள் இருப்பிடத்தை மிகவும் துல்லியமாகத் தீர்மானிக்கும் தனியுரிமைச் பணி. இது Google சேவையகங்களுடன் இணைக்கப்படலாம்.</string>
<string name="routing_not_enough_space">போதுமான இடம் இல்லை</string>
<string name="enable_location_services">இருப்பிடச் சேவைகளை இயக்கவும்</string>
<string name="dialog_routing_cant_build_route">வழியை உருவாக்க முடியவில்லை</string>
<string name="dialog_routing_select_closer_end">சாலைக்கு அருகாமையில் உள்ள இலக்கைத் தேர்ந்தெடுக்கவும்</string>
<string name="dialog_routing_change_intermediate">இடைநிலைப் புள்ளியைக் கண்டறிய முடியவில்லை</string>
<string name="dialog_routing_intermediate_not_determined">உங்கள் இடைநிலைப் புள்ளியைச் சரிசெய்யவும்</string>
<string name="dialog_routing_application_error">பயன்பாட்டுப் பிழையின் காரணமாக வழியை உருவாக்க முடியவில்லை</string>
<string name="not_now">இப்போது இல்லை</string>
<string name="search_without_internet_advertisement">வழிகளைத் தேடவும் உருவாக்கவும் தொடங்க, வரைபடத்தைப் பதிவிறக்கவும். அதன் பிறகு உங்களுக்கு இணைய இணைப்பு தேவைப்படாது.</string>
<string name="search_select_map">வரைபடத்தைத் தேர்ந்தெடுக்கவும்</string>
<string name="search_not_found">அச்சச்சோ, முடிவுகள் எதுவும் கிடைக்கவில்லை</string>
<string name="search_history_text">உங்கள் அண்மைக் கால தேடல்களைக் காண்க</string>
<string name="p2p_only_from_current">உங்களின் தற்போதைய இருப்பிடத்திலிருந்து மட்டுமே வழிசெலுத்தல் கிடைக்கும்</string>
<string name="next_button">அடுத்தது</string>
<string name="editor_time_from">இருந்து</string>
<string name="editor_time_to">பெறுநர்</string>
<string name="editor_correct_mistake">சரியான தவறு</string>
<string name="editor_report_problem_desription_1">சிக்கலை விரிவாக விவரிக்கவும், இதனால் OpenStreetMap சமூகம் அதை சரிசெய்ய முடியும்.</string>
<string name="editor_report_problem_desription_2">அல்லது https://www.openstreetmap.org/ இல் நீங்களே செய்யுங்கள்</string>
<string name="editor_report_problem_title">சிக்கல்</string>
<string name="editor_report_problem_no_place_title">இந்த இடம் இல்லை</string>
<string name="editor_report_problem_under_construction_title">பராமரிப்புக்காக மூடப்பட்டுள்ளது</string>
<string name="editor_report_problem_duplicate_place_title">நகல் இடம்</string>
<string name="opens_in">%s இல் திறக்கப்படும்</string>
<string name="closes_in">%s இல் மூடப்படும்</string>
<string name="opens_at">%s இல் திறக்கப்படும்</string>
<string name="closes_at">%s இல் மூடப்படும்</string>
<string name="opens_day_at">%1$s அன்று %2$sக்கு திறக்கப்படும்</string>
<string name="closes_day_at">%1$s அன்று %2$s இல் மூடப்படும்</string>
<plurals name="minutes_short">
<item quantity="one">%d நிமையம்</item>
<item quantity="other">%d நிமையங்கள்</item>
</plurals>
<string name="hours_confirmed_time_ago">%s உறுதிப்படுத்தப்பட்டது</string>
<string name="existence_confirmed_time_ago">இருப்பு உறுதிப்படுத்தப்பட்டது %s</string>
<string name="edit_opening_hours">வணிக நேரத்தைத் திருத்தவும்</string>
<string name="no_osm_account">OpenStreetMap கணக்கு இல்லையா?</string>
<string name="register_at_openstreetmap">OpenStreetMap இல் பதிவு செய்யவும்</string>
<string name="login">புகுபதிவு</string>
<string name="not_signed_in">உள்நுழையவில்லை</string>
<string name="login_osm">OpenStreetMap இல் உள்நுழைக</string>
<string name="logout">விடுபதிகை</string>
<string name="street">தெரு</string>
<string name="social_media">சமூக ஊடகங்கள்</string>
<string name="building">கட்டிடம்</string>
<string name="empty_street_name_error">தெருவின் பெயரை உள்ளிடவும்</string>
<string name="editor_add_phone">தொலைபேசியைச் சேர்க்கவும்</string>
<string name="level_value_generic">நிலை: %s</string>
<string name="downloader_delete_map_dialog">உங்கள் வரைபடத் திருத்தங்கள் அனைத்தும் வரைபடத்துடன் நீக்கப்படும்</string>
<string name="downloader_mwm_migration_dialog">வழியை உருவாக்க, நீங்கள் அனைத்து வரைபடங்களையும் புதுப்பித்து, மீண்டும் பாதையைத் திட்டமிட வேண்டும்.</string>
<string name="common_check_internet_connection_dialog">உங்கள் சாதனம் இணையத்துடன் இணைக்கப்பட்டுள்ளதை உறுதிசெய்யவும்</string>
<string name="editor_login_error_dialog">உள்நுழைவு பிழை</string>
<string name="detailed_problem_description">சிக்கலின் விரிவான விளக்கம்</string>
<string name="editor_report_problem_other_title">வித்தியாசமான சிக்கல்</string>
<string name="osm_presentation">%s இன் சமூகத்தால் உருவாக்கப்பட்ட OpenStreetMap தரவு. OpenStreetMap.org இல் வரைபடத்தை எவ்வாறு திருத்துவது மற்றும் புதுப்பிப்பது என்பது பற்றி மேலும் அறிக</string>
<string name="login_osm_presentation">OpenStreetMap.org (OSM) என்பது ஒரு இலவச மற்றும் திறந்த வரைபடத்தை உருவாக்குவதற்கான ஒரு சமூக திட்டமாகும். CoMaps இல் உள்ள வரைபடத் தரவின் முக்கிய சான்று இது மற்றும் விக்கிபீடியாவைப் போலவே செயல்படுகிறது. நீங்கள் இடங்களைச் சேர்க்கலாம் அல்லது திருத்தலாம் மற்றும் அவை உலகம் முழுவதும் உள்ள மில்லியன் கணக்கான பயனர்களுக்குக் கிடைக்கும். \nசமூகத்தில் சேர்ந்து அனைவருக்கும் சிறந்த வரைபடத்தை உருவாக்க உதவுங்கள்!</string>
<string name="login_to_make_edits_visible">OpenStreetMap கணக்கை உருவாக்கவும் அல்லது உங்கள் வரைபட திருத்தங்களை உலகிற்கு வெளியிட உள்நுழையவும்</string>
<string name="download_over_mobile_message">சில திட்டங்கள் அல்லது ரோமிங்கில் இது கணிசமாக விலை உயர்ந்ததாக இருக்கலாம்</string>
<string name="editor_building_levels">மாடிகள் (இன்க். தரை தளம், கூரை தவிர)</string>
<string name="editor_note_hint">வரைபடத்தில் உள்ள பிழைகள் அல்லது CoMaps மூலம் திருத்த முடியாத விசயங்களை விவரிக்கவும்</string>
<string name="editor_about_osm">உங்கள் திருத்தங்கள் பொது <a href="https://wiki.openstreetmap.org/wiki/About_OpenStreetMap">OpenStreetMap</a> தரவுத்தளத்தில் பதிவேற்றப்படும். தயவுசெய்து தனிப்பட்ட அல்லது பதிப்புரிமை பெற்ற தகவலைச் சேர்க்க வேண்டாம்.</string>
<string name="editor_osm_history">உங்கள் திருத்துதல் வரலாறு</string>
<string name="editor_osm_notes">உங்கள் வரைபடத் தரவு குறிப்புகள்</string>
<string name="operator">ஆபரேட்டர்: %s</string>
<string name="downloader_no_downloaded_maps_message">ஆஃப்லைனில் தேட மற்றும் செல்ல வரைபடங்களைப் பதிவிறக்கவும்</string>
<string name="current_location_unknown_error_title">தற்போதைய இடம் தெரியவில்லை</string>
<string name="delete_place_empty_comment_error">இடத்தை நீக்குவதற்கான காரணத்தைக் குறிப்பிடவும்</string>
<string name="editor_level">தளம் (0 என்பது தரை தளம்)</string>
<string name="error_enter_correct_level">சரியான தரை எண்ணை உள்ளிடவும்</string>
<string name="error_enter_correct_facebook_page">சரியான Facebook இணைய முகவரி, கணக்கு அல்லது பக்கத்தின் பெயரை உள்ளிடவும்</string>
<string name="error_enter_correct_instagram_page">சரியான Instagram பயனர்பெயர் அல்லது இணைய முகவரியை உள்ளிடவும்</string>
<string name="error_enter_correct_twitter_page">சரியான Twitter பயனர்பெயர் அல்லது இணைய முகவரியை உள்ளிடவும்</string>
<string name="error_enter_correct_vk_page">சரியான VK பயனர்பெயர் அல்லது இணைய முகவரியை உள்ளிடவும்</string>
<string name="error_enter_correct_line_page">சரியான வரி அடையாளம் அல்லது இணைய முகவரியை உள்ளிடவும்</string>
<string name="error_enter_correct_fediverse_page">சரியான Mastodon பயனர்பெயர் அல்லது இணைய முகவரியை உள்ளிடவும்</string>
<string name="error_enter_correct_bluesky_page">சரியான Bluesky பயனர்பெயர் அல்லது இணைய முகவரியை உள்ளிடவும்</string>
<string name="osm_note_hint">அல்லது, இதற்கு மாற்றாக, OpenStreetMap சமூகத்திற்கு ஒரு குறிப்பை விடுங்கள், இதன் மூலம் வேறு யாராவது ஒரு இடத்தைச் சேர்க்கலாம் அல்லது சரிசெய்யலாம்.</string>
<string name="osm_note_toast">குறிப்பு 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="track_recording">தடத்தை பதிவு செய்தல்</string>
<string name="mobile_data_description">வரைபட புதுப்பிப்பு அறிவிப்புகள் மற்றும் திருத்தங்களை பதிவேற்ற மொபைல் இணையம் தேவை</string>
<string name="traffic_update_maps_text">ட்ராஃபிக் தரவைக் காட்ட, வரைபடங்கள் புதுப்பிக்கப்பட வேண்டும்</string>
<string name="traffic_update_app">CoMaps ஐப் புதுப்பிக்கவும்</string>
<string name="feedback_general">பொதுவான கருத்து</string>
<string name="prefs_languages_information">குரல் வழிமுறைகளுக்கு TTS சிச்டத்தைப் பயன்படுத்துகிறோம். பல ஆண்ட்ராய்டு சாதனங்கள் Google TTS ஐப் பயன்படுத்துகின்றன, நீங்கள் அதை Google Play இலிருந்து பதிவிறக்கம் செய்யலாம் அல்லது புதுப்பிக்கலாம் (https://play.google.com/store/apps/details?id=com.google.android.tts)</string>
<string name="prefs_languages_information_off">சில மொழிகளுக்கு, ஆப் ச்டோரில் (Google Play, விண்மீன் மண்டலம்/விண்மீன் கூட்டம்/விண்மீன் திரள் Store, பயன்பாடு Gallery, FDroid) ச்பீச் சின்தசைசர் அல்லது கூடுதல் மொழி பேக்கை நிறுவ வேண்டும். \nஉங்கள் சாதனத்தின் அமைப்புகளைத் திறக்கவும் → மொழி மற்றும் உள்ளீடு → பேச்சு → உரையிலிருந்து பேச்சு வெளியீடு. \nபேச்சு தொகுப்புக்கான அமைப்புகளை இங்கே நீங்கள் நிர்வகிக்கலாம் (உதாரணமாக, இணைப்பில்லாத பயன்பாட்டிற்கான மொழிப் பேக்கைப் பதிவிறக்கவும்) மற்றும் மற்றொரு உரை-க்கு-பேச்சு இயந்திரத்தைத் தேர்ந்தெடுக்கவும்.</string>
<string name="prefs_languages_information_off_link">மேலும் தகவலுக்கு, இந்த வழிகாட்டியைப் பார்க்கவும்</string>
<string name="learn_more">மேலும் அறிக</string>
<string name="dialog_error_storage_title">சேமிப்பக அணுகல் சிக்கல்</string>
<string name="dialog_error_storage_message">வெளிப்புற சேமிப்பகத்தை அணுக முடியாது. SD அட்டை அகற்றப்பட்டிருக்கலாம், சேதமடைந்திருக்கலாம் அல்லது கோப்பு முறைமை படிக்க மட்டுமே. தயவுசெய்து, உங்கள் SD கார்டைச் சரிபார்க்கவும் அல்லது support@comaps.app இல் எங்களைத் தொடர்பு கொள்ளவும்</string>
<string name="setting_emulate_bad_storage">மோசமான சேமிப்பகத்தைப் பின்பற்றவும்</string>
<plurals name="bookmarks_places">
<item quantity="one">%d புத்தகக்குறி</item>
<item quantity="other">%d புக்மார்க்குகள்</item>
</plurals>
<string name="bookmarks_error_title_empty_list_name">பெயர் காலியாக இருக்கக்கூடாது</string>
<string name="bookmarks_new_list_hint">புதிய பட்டியல்</string>
<string name="bookmarks_error_message_list_name_already_taken">தயவுசெய்து வேறு பெயரைத் தேர்வு செய்யவும்</string>
<string name="please_wait">தயவுசெய்து காத்திருங்கள்…</string>
<string name="phone_number">தொலைபேசி எண்</string>
<plurals name="bookmarks_detect_message">
<item quantity="one">%d கோப்பு கண்டறியப்பட்டது. மாற்றிய பின் பார்க்கலாம்.</item>
<item quantity="other">%d கோப்புகள் கண்டறியப்பட்டன. மாற்றத்திற்குப் பிறகு அவற்றைப் பார்க்கலாம்.</item>
</plurals>
<plurals name="tracks">
<item quantity="one">%d டிராக்</item>
<item quantity="other">%d டிராக்குகள்</item>
</plurals>
<string name="privacy">தனியுரிமை</string>
<string name="button_layer_traffic">போக்குவரத்து</string>
<string name="subway">சுரங்கப்பாதை</string>
<string name="bookmarks_empty_list_title">இந்தப் பட்டியல் காலியாக உள்ளது</string>
<string name="bookmarks_empty_list_message">புக்மார்க்கைச் சேர்க்க, வரைபடத்தில் ஒரு இடத்தைத் தட்டவும், பின்னர் நட்சத்திர ஐகானைத் தட்டவும்</string>
<string name="category_desc_more">…மேலும்</string>
<string name="notification_channel_downloader">வரைபடம் பதிவிறக்குபவர்</string>
<string name="power_managment_description">சில செயல்பாடுகளின் இழப்பில் மின் பயன்பாட்டைக் குறைக்க முயற்சிக்கவும்</string>
<string name="capacity">திறன்: %s</string>
<string name="network">நெட்வொர்க்: %s</string>
<string name="sort_bookmarks">புக்மார்க்குகளை வரிசைப்படுத்தவும்</string>
<string name="by_default">இயல்பாக</string>
<string name="by_type">வகை மூலம்</string>
<string name="by_distance">தூரம் மூலம்</string>
<string name="by_date">தேதிப்படி</string>
<string name="by_name">பெயரால்</string>
<string name="select_list">பட்டியலைத் தேர்ந்தெடு</string>
<string name="elevation_profile_difficulty">தொல்லை</string>
<string name="elevation_profile_distance">மாவட்டம்:</string>
<string name="elevation_profile_time">நேரம்:</string>
<string name="download_map_title">உலக மேலோட்ட வரைபடத்தைப் பதிவிறக்கவும்</string>
<string name="disk_error">உள் சாதனத்தின் நினைவகம் அல்லது sdcard இல் கோப்புறையை உருவாக்க மற்றும் கோப்புகளை நகர்த்த முடியவில்லை</string>
<string name="disk_error_title">வட்டு பிழை</string>
<string name="connection_failure">இணைப்பு தோல்வி</string>
<string name="disconnect_usb_cable_title">USB கேபிளைத் துண்டிக்கவும்</string>
<string name="enable_keep_screen_on">திரையை இயக்கவும்</string>
<string name="enable_keep_screen_on_description">இயக்கப்பட்டால், வரைபடத்தைக் காண்பிக்கும் போது திரை எப்போதும் இயக்கத்தில் இருக்கும்.</string>
<string name="enable_show_on_lock_screen">பூட்டுத் திரையில் காட்டு</string>
<string name="enable_show_on_lock_screen_description">இயக்கப்பட்டால், சாதனம் பூட்டப்பட்டிருந்தாலும் கூட பூட்டுத் திரையில் பயன்பாடு செயல்படும்.</string>
<string name="change_map_locale">வரைபட மொழி</string>
<string name="splash_subtitle">OpenStreetMap இலிருந்து வரைபடத் தரவு</string>
<string name="telegram_url">https://t.me/CoMapsApp/</string>
<string name="instagram_url">https://www.instagram.com/comaps.app/</string>
<string name="tts_info_link">https://www.comaps.app/support/tts-configuration-guide-for-android/</string>
<string name="translated_om_site_url">https://comaps.app/</string>
<string name="osm_wiki_about_url">https://wiki.openstreetmap.org/wiki/About_OpenStreetMap</string>
<string name="comma_separated_pair">%1$s, %2$s</string>
<string name="aa_connected_title">நீங்கள் ஆண்ட்ராய்டு தானி உடன் இணைக்கப்பட்டுள்ளீர்கள்</string>
<string name="aa_location_permissions_request">CoMaps க்கு இருப்பிட அணுகல் தேவை. பாதுகாப்பாக இருக்கும்போது, உங்கள் மொபைலில் உள்ள அறிவிப்பைச் சரிபார்க்கவும்.</string>
<string name="aa_request_permission_notification">இந்த பயன்பாட்டிற்கு உங்கள் இசைவு தேவை</string>
<string name="aa_request_permission_activity_text">ஆண்ட்ராய்டு தானி இல் CoMaps திறம்பட செயல்பட, இருப்பிட அனுமதிகள் தேவை</string>
<string name="aa_grant_permissions">அனுமதிகளை வழங்கவும்</string>
<string name="browser_not_available">இணைய உலாவி கிடைக்கவில்லை</string>
<string name="volume">தொகுதி</string>
<string name="pref_tts_open_system_settings">பேச்சு தொகுப்பு அமைப்பு அமைப்புகள்</string>
<string name="pref_tts_no_system_tts">பேச்சு தொகுப்பு அமைப்புகள் காணப்படவில்லை, உங்கள் சாதனம் அதை ஆதரிக்கிறதா?</string>
<string name="clear_the_search">தேடலை அழிக்கவும்</string>
<string name="zoom_in">பெரிதாக்கு</string>
<string name="zoom_out">சிறிதாக்கு</string>
<string name="view_menu">மெனுவைப் பார்க்கவும்</string>
<string name="select_option">விருப்பத்தைத் தேர்ந்தெடுக்கவும்</string>
<string name="power_save_dialog_summary">மிகவும் துல்லியமான வழிசெலுத்தலுக்கு, தொலைபேசியின் பேட்டரி அமைப்புகளில் மின் சேமிப்பு பயன்முறையை முடக்க பரிந்துரைக்கிறோம்.</string>
<string name="error_no_file_manager_app">உங்கள் சாதனத்தில் பொருத்தமான பயன்பாடு எதுவும் நிறுவப்படாததால் கோப்புறை தேர்வு உரையாடலைக் காட்ட முடியவில்லை. கோப்பு மேலாளர் பயன்பாட்டை நிறுவி மீண்டும் முயற்சிக்கவும்.</string>
<string name="choose_color">வண்ணத்தைத் தேர்ந்தெடுக்கவும்</string>
<string name="uri_open_location_failed">இருப்பிடத்தைத் திறக்கக்கூடிய பயன்பாடு எதுவும் நிறுவப்படவில்லை</string>
<string name="nav_auto">வழிசெலுத்தலில் தானியங்கு</string>
<string name="pref_left_button_title">இடது பொத்தான் அமைப்பு</string>
<string name="pref_left_button_disable">முடக்கு</string>
<string name="pref_backup_title">புக்மார்க்குகள் மற்றும் டிராக்குகள் காப்புப்பிரதி</string>
<string name="pref_backup_summary">உங்கள் சாதனத்தில் உள்ள கோப்புறையில் தானாகவே காப்புப் பிரதி எடுக்கவும்</string>
<string name="pref_backup_now_title">இப்போது காப்புப்பிரதி எடுக்கவும்</string>
<string name="pref_backup_now_summary">உடனடியாக காப்புப்பிரதியை உருவாக்கவும்</string>
<string name="pref_backup_now_summary_progress">காப்புப்பிரதி செயலில் உள்ளது…</string>
<string name="pref_backup_now_summary_ok">காப்புப்பிரதி வெற்றிகரமாக முடிந்தது</string>
<string name="pref_backup_now_summary_empty_lists">காப்புப் பிரதி எடுக்க புக்மார்க்குகள் மற்றும் தடங்கள் இல்லை</string>
<string name="pref_backup_now_summary_failed">காப்புப்பிரதி தோல்வியடைந்தது</string>
<string name="pref_backup_now_summary_folder_unavailable">காப்பு கோப்புறை கிடைக்கவில்லை</string>
<string name="pref_backup_status_summary_success">கடைசி வெற்றிகரமான காப்புப்பிரதி</string>
<string name="pref_backup_location_title">காப்புப் பிரதி இடம்</string>
<string name="pref_backup_location_summary_initial">முதலில் ஒரு கோப்புறையைத் தேர்ந்தெடுத்து இசைவு வழங்கவும்</string>
<string name="pref_backup_history_title">வைத்திருக்க வேண்டிய காப்புப்பிரதிகளின் எண்ணிக்கை</string>
<string name="pref_backup_interval_title">தானியங்கி காப்புப்பிரதி</string>
<string name="backup_interval_every_day">நாள்தோறும்</string>
<string name="backup_interval_every_week">வாரந்தோறும்</string>
<string name="backup_interval_manual_only">ஆஃப் (கையேடு மட்டும்)</string>
<string name="dialog_report_error_missing_folder">தேர்ந்தெடுக்கப்பட்ட காப்புப்பிரதி இடம் கிடைக்கவில்லை அல்லது எழுதக்கூடியதாக இல்லை. தயவுசெய்து வேறு இடத்தைத் தேர்ந்தெடுக்கவும்.</string>
<string name="dialog_report_error_with_logs">பிழை அறிக்கையை எங்களுக்கு அனுப்பவும்: \n- அமைப்புகளில் \"பதிவு செய்வதை இயக்கு\" \n- சிக்கலை மீண்டும் உருவாக்கவும் \n- \"பற்றி &amp; உதவி\" திரையில் \"ஒரு பிழையைப் புகாரளி\" பொத்தானை அழுத்தி மின்னஞ்சல் அல்லது அரட்டை வழியாக அனுப்பவும் \n- பதிவு செய்வதை முடக்கு</string>
<string name="route_type">பாதை வகை</string>
<string name="vehicle">வண்டி</string>
<string name="pedestrian">பாதசாரி</string>
<string name="bicycle">சைக்கிள்</string>
<string name="ruler">ஆட்சியாளர்</string>
<string name="bookmark_color">புத்தகக்குறி நிறம்</string>
<string name="about_help">பற்றி &amp; உதவி</string>
<string name="open_now">இப்போது திறக்கவும்</string>
<string name="at">%s இல்</string>
<string name="share_track">ட்ராக்கைப் பகிரவும்</string>
<string name="delete_track_dialog_title">%s ஐ நீக்கவா?</string>
<string name="pref_tts_no_system_tts_short">உரையிலிருந்து பேச்சு இயந்திரம் எதுவும் இல்லை, பயன்பாட்டு அமைப்புகளைச் சரிபார்க்கவும்</string>
<string name="unknown_power_output">தெரியவில்லை</string>
<string name="charge_socket_type2">வகை 2 (கேபிள் இல்லை)</string>
<string name="charge_socket_type2_cable">வகை 2 (w/ கேபிள்)</string>
<string name="charge_socket_type2_combo">வகை 2 சேர்க்கை</string>
<string name="charge_socket_type1">வகை 1</string>
<string name="charge_socket_nacs">NACS</string>
<string name="charge_socket_chademo">சேட்மோ</string>
<string name="unknown_socket_type">தெரியாத சாக்கெட்</string>
<string name="unknow_socket_type">தெரியாத சாக்கெட்</string>
<string name="edit_socket_info_tooltip">புதிய சாக்கெட்டுகளை உருவாக்கவும் அல்லது ஏற்கனவே உள்ளவற்றைத் திருத்தவும்.</string>
<string name="charging_station_available_sockets">கிடைக்கும் சாக்கெட்டுகள்</string>
<string name="charge_socket_unknown_other">மற்றவை அல்லது தெரியாதவை</string>
<string name="charge_socket_count">எண்ணுங்கள்</string>
<string name="charge_socket_power">ஆற்றல் (kW)</string>
<string name="editor_socket">சாக்கெட்டை திருத்து</string>
<string name="unknown_count">தெரியவில்லை</string>
<string name="error_value_must_be_positive">மதிப்பு நேர்மறையாக இருக்க வேண்டும்</string>
<string name="error_invalid_number">தவறான எண்</string>
<string name="list_description_empty">விளக்கத்தைச் சேர்க்க பட்டியலைத் திருத்தவும்</string>
<string name="editor_business_vacant_button">வணிகம் காலியாக உள்ளது</string>
<string name="editor_mark_business_vacant_title">வணிகம் காலியாக இருப்பதாகக் குறி</string>
<string name="editor_mark_business_vacant_description">வணிகம் வெளியேறி, இடம் காலியாக இருந்தால் மற்றும் புதிய குத்தகைதாரருக்கு தயாராக இருந்தால் இதைப் பயன்படுத்தவும்.</string>
<string name="editor_submit">சமர்ப்பி</string>
</resources>

View File

@@ -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 -->
@@ -36,13 +36,13 @@
<string name="try_again">再试一次</string>
<string name="about_menu_title">关于 CoMaps</string>
<!-- Text in About screen -->
<string name="about_headline">由社区动的开项目</string>
<string name="about_headline">由社区动的开项目</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 -->
@@ -416,12 +416,12 @@
<string name="autodownload">自动下载</string>
<!-- Place Page opening hours text -->
<string name="daily">每天</string>
<string name="twentyfour_seven">24/7 全天候营业</string>
<string name="day_off_today">今天不营业</string>
<string name="day_off">不营业</string>
<string name="opens_in">将于 %s 后开业</string>
<string name="closes_in">将于 %s 后歇业</string>
<string name="closed">停止营业</string>
<string name="twentyfour_seven">24/7</string>
<string name="day_off_today">今天关闭</string>
<string name="day_off">关闭</string>
<string name="opens_in">%s 开放</string>
<string name="closes_in">%s 关闭</string>
<string name="closed">关闭</string>
<string name="edit_opening_hours">编辑营业时间</string>
<string name="no_osm_account">没有 OpenStreetMap 账号吗?</string>
<string name="register_at_openstreetmap">注册 OpenStreetMap 账号</string>
@@ -634,7 +634,7 @@
<!-- Recommended length for CarPlay and Android Auto is around 25-27 characters -->
<string name="avoid_tolls">避开收费公路</string>
<!-- Recommended length for CarPlay and Android Auto is around 25-27 characters -->
<string name="avoid_unpaved">避开未铺砌道路</string>
<string name="avoid_unpaved">避开非铺装道路</string>
<!-- Recommended length for CarPlay and Android Auto is around 25-27 characters -->
<string name="avoid_ferry">避开轮渡</string>
<string name="avoid_motorways">避开高速公路</string>
@@ -643,7 +643,7 @@
<string name="define_to_avoid_btn">选择要避开的道路</string>
<string name="change_driving_options_btn">绕行设置已开启</string>
<string name="toll_road">收费公路</string>
<string name="unpaved_road">未铺砌道路</string>
<string name="unpaved_road">非铺装道路</string>
<string name="ferry_crossing">轮渡</string>
<!-- A generic "Yes" button in dialogs -->
<string name="yes"></string>
@@ -718,9 +718,9 @@
<!-- Used in DownloadResources startup screen -->
<string name="disk_error_title">磁盘错误</string>
<!-- Used in DownloadResources startup screen -->
<string name="connection_failure">磁盘错误</string>
<string name="connection_failure">连接失败</string>
<!-- Used in DownloadResources startup screen -->
<string name="disconnect_usb_cable_title">断开 USB 线</string>
<string name="disconnect_usb_cable_title">断开 USB 线连接</string>
<string name="enable_keep_screen_on">保持屏幕打开</string>
<!-- Description in preferences -->
<string name="enable_keep_screen_on_description">启用后,显示地图时屏幕将始终打开。</string>
@@ -863,8 +863,8 @@
<string name="backup_interval_manual_only">关闭(仅手动)</string>
<string name="dialog_report_error_missing_folder">所选备份位置不可用或不可写入。请选择其他位置。</string>
<string name="dialog_report_error_with_logs">请向我们发送错误报告:\n - 在设置中“启用日志记录”\n - 重现问题\n - 在“关于和帮助”屏幕中点击“报告错误”按钮,然后通过电子邮件或聊天软件发送\n - 禁用日志记录</string>
<string name="closed_now">歇业</string>
<string name="open_now">营业中</string>
<string name="closed_now">关闭</string>
<string name="open_now">已开放</string>
<string name="at">%s</string>
<string name="osm_note_hint">或者,也可以给 OpenStreetMap 社区留下注记,以便其他人可以在此添加或修复地点。</string>
<string name="osm_note_toast">注记将发送至 OpenStreetMap</string>
@@ -896,4 +896,16 @@
<string name="offline_explanation_title">离线地图</string>
<string name="offline_explanation_text">需要下载地图才能查看并在该区域内导航。\n请为您计划前往的区域下载地图。</string>
<string name="list_description_empty">编辑列表以添加描述</string>
<string name="opens_at">%s 开放</string>
<string name="closes_at">%s 关闭</string>
<string name="opens_day_at">%1$s %2$s 开放</string>
<string name="closes_day_at">%1$s %2$s 关闭</string>
<plurals name="minutes_short">
<item quantity="other">%d 分钟</item>
</plurals>
<string name="editor_business_vacant_button">商铺空置</string>
<string name="editor_mark_business_vacant_title">将商铺标记为空置</string>
<string name="editor_mark_business_vacant_description">如果商铺已搬离且场地空置待租,请使用此选项。</string>
<string name="editor_submit">提交</string>
<string name="avoid_paved">避开铺装道路</string>
</resources>

View File

@@ -74,8 +74,8 @@
<color name="bg_statusbar_translucent">#66000000</color>
<!-- App icons background and foreground colors -->
<color name="bg_app_icon_release">@color/bg_primary</color>
<color name="bg_app_icon_test">@color/bg_primary</color>
<color name="bg_app_icon_release">#588157</color>
<color name="bg_app_icon_test">#588157</color>
<color name="bg_app_icon_debug">#f8b42e</color>
<color name="fg_app_icon_white">#fefdf6</color>

View File

@@ -100,4 +100,5 @@
<string name="pixelfed" translatable="false">Pixelfed</string>
<string name="count_label" translatable="false">× %d</string>
<string name="kw_label" translatable="false">%s kW</string>
<string name="phone_format" translatable="false">+ XX X XX XX XX</string>
</resources>

View File

@@ -441,6 +441,14 @@
<string name="opens_in">Opens in %s</string>
<string name="closes_in">Closes in %s</string>
<string name="closed">Closed</string>
<string name="opens_at">Opens at %s</string>
<string name="closes_at">Closes at %s</string>
<string name="opens_day_at">Opens on %1$s at %2$s</string>
<string name="closes_day_at">Closes on %1$s at %2$s</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="other">%d min</item>
</plurals>
<!-- Used in the opening_hours fragment for the last checked date, eg. "Confirmed two weeks ago" -->
<string name="hours_confirmed_time_ago">Confirmed %s</string>
<!-- Used on the place page for the last checked date, eg. "Existence confirmed two weeks ago" -->
@@ -543,6 +551,14 @@
<string name="editor_place_doesnt_exist_description">Describe what the place looks like now to send an error note to the OpenStreetMap community</string>
<!-- Error message for "Place doesn't exist" dialog when comment is empty -->
<string name="delete_place_empty_comment_error">Please indicate the reason for deleting the place</string>
<!-- Button in the editor to mark business as vacant -->
<string name="editor_business_vacant_button">Business is vacant</string>
<!-- Title of confirmation dialog before marking business as vacant -->
<string name="editor_mark_business_vacant_title">Mark business as vacant</string>
<!-- Description in confirmation dialog before marking business as vacant -->
<string name="editor_mark_business_vacant_description">Use this if the business has moved out and the space is empty and ready for a new tenant.</string>
<!-- Submit change to OSM in the editor -->
<string name="editor_submit">Submit</string>
<!-- Phone number error message -->
<string name="error_enter_correct_phone">Enter a valid phone number</string>
<string name="error_enter_correct_web">Enter a valid web address</string>
@@ -562,8 +578,8 @@
<!-- Displayed when saving some edits to the map to warn against publishing personal data -->
<string name="editor_share_to_all_dialog_title">Do you want to send it to all users?</string>
<!-- Dialog before publishing the modifications to the public map. -->
<string name="editor_share_to_all_dialog_message_1">Make sure you did not enter any private or personal data</string>
<string name="editor_share_to_all_dialog_message_2">OpenStreetMap editors will check the changes and contact you if they have any questions</string>
<string name="editor_share_to_all_dialog_message_1">Make sure you did not enter any private or personal data.</string>
<string name="editor_share_to_all_dialog_message_2">OpenStreetMap editors will check the changes and contact you if they have any questions.</string>
<string name="navigation_stop_button">Stop</string>
<!-- Shown as toast when starting the recent track recording -->
<string name="track_recording">Recording the track</string>
@@ -677,6 +693,7 @@
<string name="avoid_ferry">Avoid ferries</string>
<string name="avoid_motorways">Avoid freeways</string>
<string name="avoid_steps">Avoid stairs</string>
<string name="avoid_paved">Avoid paved roads</string>
<string name="unable_to_calc_alert_title">Unable to calculate route</string>
<string name="unable_to_calc_alert_subtitle">A route could not be found. This may be caused by your routing options or incomplete OpenStreetMap data. Please change your routing options and retry.</string>
<string name="define_to_avoid_btn">Define roads to avoid</string>

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