[strings] Improve roads classification, add references #1779
No reviewers
Labels
No labels
Accessibility
Accessibility
Address
Address
Android
Android
Android Auto
Android Auto
Android Automotive (AAOS)
Android Automotive (AAOS)
API
API
AppGallery
AppGallery
AppStore
AppStore
Battery and Performance
Battery and Performance
Blocker
Blocker
Bookmarks and Tracks
Bookmarks and Tracks
Borders
Borders
Bug
Bug
Build
Build
CarPlay
CarPlay
Classificator
Classificator
Community
Community
Core
Core
CrashReports
CrashReports
Cycling
Cycling
Desktop
Desktop
DevEx
DevEx
DevOps
DevOps
dev_sandbox
dev_sandbox
Directions
Directions
Documentation
Documentation
Downloader
Downloader
Drape
Drape
Driving
Driving
Duplicate
Duplicate
Editor
Editor
Elevation
Elevation
Enhancement
Enhancement
Epic
Epic
External Map Datasets
External Map Datasets
F-Droid
F-Droid
Fonts
Fonts
Frequently User Reported
Frequently User Reported
Fund
Fund
Generator
Generator
Good first issue
Good first issue
Google Play
Google Play
GPS
GPS
GSoC
GSoC
iCloud
iCloud
Icons
Icons
iOS
iOS
Legal
Legal
Linux Desktop
Linux Desktop
Linux packaging
Linux packaging
Linux Phone
Linux Phone
Mac OS
Mac OS
Map Data
Map Data
Metro
Metro
Navigation
Navigation
Need Feedback
Need Feedback
Night Mode
Night Mode
NLnet 2024-06-281
NLnet 2024-06-281
No Feature Parity
No Feature Parity
Opening Hours
Opening Hours
Outdoors
Outdoors
POI Info
POI Info
Privacy
Privacy
Public Transport
Public Transport
Raw Idea
Raw Idea
Refactoring
Refactoring
Regional
Regional
Regression
Regression
Releases
Releases
RoboTest
RoboTest
Route Planning
Route Planning
Routing
Routing
Ruler
Ruler
Search
Search
Security
Security
Styles
Styles
Tests
Tests
Track Recording
Track Recording
Translations
Translations
TTS
TTS
UI
UI
UX
UX
Walk Navigation
Walk Navigation
Watches
Watches
Web
Web
Wikipedia
Wikipedia
Windows
Windows
Won't fix
Won't fix
World Map
World Map
No milestone
No project
No assignees
2 participants
Due date
No due date set.
Dependencies
No dependencies set.
Reference: organicmaps/organicmaps-tmp#1779
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "pastk-strings-ru-uk"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
See #1767.
Added references support for translation files in
strings_utils.py
By default translations duplicated in a referenced definition are removed.
--keep-resolved-references
option allows to keep/restore them if necessary.@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Может проще и надёжнее поправить код, чтобы он брал перевод от базового типа, вместо этих усложнений? @vng а сейчас перевод не берётся у базового?
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Более того, переводы с базовых типов будут автоматом работать, если мы решим дальше добавлять подтипы (приватные парковки и бассейны, и пр.).
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Я плохо представляю, что является "базовым типом" и где находится соответствующий код.
Например,
highway.bus_stop
иhighway.footway.bridge
- базовый тип будет у них разныйhighway
иhighway.footway
соответственно?А
historic.memorial.plaque
иhistoric.memorial.statue
, например - тут возможность разного перевода очень даже подходит.@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
В любом случае эти ref'ы будет очень легко убрать при надобности и вернуть всё "как было". Пока же они дают возможность как делать точные переводы "полного типа", так и брать с базового. Причём можно брать с базового, только если нет перевода для "полного".
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
@vng очень хорошо разбирается. Должно работать так: выбирается базовый тип из классификатора, подходящий по смыслу (highway.footway) и переводится. Понятно, что highway.bus_stop должен быть с другим переводом, это другой тип. У нас обычно базовые типы имеют 2 уровня вложенности, и легко различимы на глаз. Очень не хочется тратить время на (по сути не нужный) ref, и потом его и откатывать ещё.
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Вообще да, пожалуй лучше, чтобы данная функциональность была в основном коде, а не во вспомогательном инструменте. Только хотелось бы, чтобы имеющаяся гибкость была сохранена.
На мой взгляд важны следующие моменты:
highway.footway
иhistoric.memorial
иметь возможность перевестиhighway.footway.mountain_hiking
иhistoric.memorial.statue
иначеtypes_strings.txt
должны присутствовать все типы, даже если все их переводы на данный момент взяты из базовых типов - иначе переводчики просто не будут знать, что есть возможность сделать точный перевод полного типа (и что он вообще существует)highway.bus_stop
вообще лучше не дефолтить наhighway
- лучше уж показать английское "Bus Stop", чем русское "Дорога", взятое изhighway
(в случае, если нет русского перевода дляhighway.bus_stop
) - то же самое для других "широких" базовых типов, напримерnature
иlanduse
; а вот разнообразныеoffice.*
,shop.*
вполне можно дефолтить в базовыеoffice
иshop
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Разумно. Надо понимать, что многие наши типы, особенно highway.footway.bridge, это костыли для меньшего размера данных и более быстрой их обработки. По-хорошему, это были бы highway.footway с доп.признаками. И так для остальных примеров тоже. Но имеем что имеем, поэтому надо двигаться сюда:
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Было бы хорошо, да!
Для этого хорошо бы в перспективе сделать автоматическое добавление новых типов в types_strings.txt, типа как другие используемые строки грепаются в clean_strings_txt.py сейчас. Я уже штуки три нехватающих типа туда добавил, все их нашёл случайно, увидев в приложении идшку в PP subtitle.
Я бы на самом деле их все перевёл как "Мост" и "Тоннель", это более важная характеристика, чем тип дороги, проходящей через них (его можно при необходимости посмотреть, тапнув на подходящую к мосту дорогу). В таком случае выбор объектов по лонг тапу (когда это будет сделано) будет отлично заменять легенду (пару раз про неё юзеры уже спрашивали). Скажем, обозначение тоннеля не слишком очевидное (а для условной домохозяйки и обозначение моста в новинку будет).
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Надо смотреть, но я согласен что базовый должен подниматься. Грубо говоря, мы переводим только highway и highway.bus_stop в виде исключения и все дороги будут подписываться.
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Я посмотрел код перевода типов, пусть @vng меня поправит, если я неправ.
Перевод берётся из нативных ios/android файлов локализации стандартными же методами (e.g.
getString()
в андроиде). В андроиде есть обёртка Utils::getLocalizedFeatureType(), она экспортируется в cpp-код и используется, например, для формирования PP subtitle там. Аналогично из iOS тоже в cpp своя функция локализации строк экспортируется. А, скажем, локализация списка типов/категорий в add place идёт целиком в андроиде, без заглядывания в cpp codebase.Получается, что код придётся менять в нескольких местах (как минимум и в iOS, и в андроиде нужно понимать, вернул ли getString() язык X или дефолтный en, чтобы дальше опционально делать дефолт в базовый тип) и, возможно, дублировать саму логику дефолта в базовый тип (или реализовывать её в cpp, но тогда все использования перевода типов в андроиде, например, надо переделывать на вызовы cpp кода).
Имхо итого получится размазанно по нескольким кодовым базам, не проще, и не надёжнее, чем вот эта вот компактная реализация рефов в скрипте.
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Исторически, предыдущие разработчики прикрутили типы в разных местах, потому что им так было проще. Но это по сути костыли. В идеале должен быть один источник строк, например, в С++, и оттуда уже код UI пускай получает, что отображать. Поддерживать такую реализацию очень легко.
Поэтому не хочется поверх текущих костылей лепить ещё новые.
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Это неплохая идея, но сейчас её непросто будет реализовать. Идея получше — выделить отдельные типы "мост" и "тоннель", и хранить их в списке типов фичи. Тогда можно будет показывать и "автострада * тоннель", что ещё лучше для пользователей. Кстати, @vng а почему мы так с самого начала не сделали?
На сколько я помню, сейчас за фичей может храниться до 7 разных типов из классификатора (@vng верно?)
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Серьёзный такой рефакторинг.
Вообще, рефакторинг - это хорошо!
Но, на мой взгляд, в данной ситуации неоправданно:
Пока же, мне кажется, тут лучше придерживаться подхода "работает - не трогай".
Ссылки (refs) это существующая фича твайна (я понимаю, что можно смотреть на весь твайн, как на костыль - всё относительно :))
Я сначала сомневался в их полезности, но тут они очень пригодились, чтобы растиражировать новые переводы по куче копий и дедублицировать эти копии, причём так, чтобы не затереть уже сделанные некоторыми переводчиками более точные переводы, например:
Руками сделать это было бы очень муторно и легко было бы наделать ошибок.
Мои дополнения в
strings_utils.py
по сути просто автоматизируют эту работу.В итоге - почищенный файл, в котором удобнее и добавлять, и обновлять переводы.
Более того, в случае предложенного вами рефакторинга всё равно понадобится какой-то скрипт дедубликации существующих переводов (я уже начал эту работу :)).
В общем, прошу попробовать посмотреть на этот PR не как на новый костыль, а как на причёсывание того, что есть, первые шажки в длинном пути рефакторинга и incremental improvement :)
@ -7545,3 +7533,2 @@
de = Reitweg
fr = Chemin pour cavalier
ref = type.highway.bridleway
ja = 馬道(トンネル)
Ладно, пускай будет. Только надо будет сделать подробный issue для рефакторинга.