diff --git a/libs/indexer/feature_utils.cpp b/libs/indexer/feature_utils.cpp index 8d2c28447..c311c8117 100644 --- a/libs/indexer/feature_utils.cpp +++ b/libs/indexer/feature_utils.cpp @@ -4,6 +4,7 @@ #include "indexer/feature_data.hpp" #include "indexer/feature_visibility.hpp" #include "indexer/ftypes_matcher.hpp" +#include "indexer/ftypes_subtypes.hpp" #include "indexer/scales.hpp" #include "platform/distance.hpp" @@ -440,6 +441,19 @@ vector GetDescriptionLangPriority(RegionData const & regionData) return PrioritizedLanguages(preferredLangs, DefaultLanguage(regionData, preferredLangs)); } +vector GetLocalizedSubtypes(TypesHolder const & types) +{ + TypesHolder copiedTypes = types; + copiedTypes.SortBySpec(); + auto const & classificator = classif(); + auto subtypes = ftypes::Subtypes::Instance(); + vector localizedSubtypes; + for (auto const type : copiedTypes) + if (subtypes.IsSubtype(type)) + localizedSubtypes.push_back(platform::GetLocalizedTypeName(classificator.GetReadableObjectName(type))); + return localizedSubtypes; +} + vector GetCuisines(TypesHolder const & types) { auto const & isCuisine = ftypes::IsCuisineChecker::Instance(); diff --git a/libs/indexer/feature_utils.hpp b/libs/indexer/feature_utils.hpp index 17a832924..5f835c573 100644 --- a/libs/indexer/feature_utils.hpp +++ b/libs/indexer/feature_utils.hpp @@ -149,6 +149,9 @@ bool GetPreferredName(StringUtf8Multilang const & src, int8_t deviceLang, std::s /// - default language code; std::vector GetDescriptionLangPriority(RegionData const & regionData); +// Returns vector of subtypes localized by platform. +std::vector GetLocalizedSubtypes(TypesHolder const & types); + // Returns vector of cuisines readable names from classificator. std::vector GetCuisines(TypesHolder const & types); diff --git a/libs/search/intermediate_result.cpp b/libs/search/intermediate_result.cpp index bd87c447a..adaba1d0c 100644 --- a/libs/search/intermediate_result.cpp +++ b/libs/search/intermediate_result.cpp @@ -287,6 +287,8 @@ void FillDetails(FeatureType & ft, std::string const & name, Result::Details & d if (isHotel && strings::to_uint(ft.GetMetadata(feature::Metadata::FMD_STARS), starsCount)) stars = feature::FormatStars(starsCount); + auto const subtypes = strings::JoinStrings(feature::GetLocalizedSubtypes(typesHolder), feature::kFieldsSeparator); + auto const cuisines = feature::GetLocalizedCuisines(typesHolder); auto const cuisine = strings::JoinStrings(cuisines, feature::kFieldsSeparator); @@ -318,6 +320,7 @@ void FillDetails(FeatureType & ft, std::string const & name, Result::Details & d append(elevation); append(cuisine); append(recycling); + append(subtypes); append(fee); details.m_description = std::move(description);