From cec5db7abdfaf81cf9ee7cdee7f39939f2d4355f Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Mon, 8 Apr 2024 01:16:01 +0200 Subject: [PATCH 1/7] [drape] Moved Glyph out of GlyphManager Also did small refactoring in a GlyphManager Signed-off-by: Alexander Borsuk --- drape/CMakeLists.txt | 1 + drape/drape_tests/glyph_mng_tests.cpp | 4 +- drape/font_texture.cpp | 4 +- drape/font_texture.hpp | 25 ++--- drape/glyph.hpp | 52 +++++++++ drape/glyph_generator.cpp | 6 +- drape/glyph_generator.hpp | 6 +- drape/glyph_manager.cpp | 145 ++++++++++---------------- drape/glyph_manager.hpp | 52 ++------- 9 files changed, 134 insertions(+), 161 deletions(-) create mode 100644 drape/glyph.hpp diff --git a/drape/CMakeLists.txt b/drape/CMakeLists.txt index 9826009d41..30e8b00fc0 100644 --- a/drape/CMakeLists.txt +++ b/drape/CMakeLists.txt @@ -43,6 +43,7 @@ set(SRC gl_includes.hpp glsl_func.hpp glsl_types.hpp + glyph.hpp glyph_generator.cpp glyph_generator.hpp glyph_manager.cpp diff --git a/drape/drape_tests/glyph_mng_tests.cpp b/drape/drape_tests/glyph_mng_tests.cpp index 3e84a5b575..555921ed4c 100644 --- a/drape/drape_tests/glyph_mng_tests.cpp +++ b/drape/drape_tests/glyph_mng_tests.cpp @@ -47,10 +47,10 @@ public: void RenderGlyphs(QPaintDevice * device) { - std::vector glyphs; + std::vector glyphs; auto generateGlyph = [this, &glyphs](strings::UniChar c) { - dp::GlyphManager::Glyph g = m_mng->GetGlyph(c, dp::kDynamicGlyphSize); + dp::Glyph g = m_mng->GetGlyph(c, dp::kDynamicGlyphSize); glyphs.push_back(dp::GlyphManager::GenerateGlyph(g, m_mng->GetSdfScale())); g.m_image.Destroy(); }; diff --git a/drape/font_texture.cpp b/drape/font_texture.cpp index 3fc81cbb4f..137b1c1fc6 100644 --- a/drape/font_texture.cpp +++ b/drape/font_texture.cpp @@ -158,7 +158,7 @@ ref_ptr GlyphIndex::MapResource(GlyphKey const & key, boo newResource = true; - GlyphManager::Glyph glyph = m_mng->GetGlyph(key.GetUnicodePoint(), key.GetFixedSize()); + Glyph glyph = m_mng->GetGlyph(key.GetUnicodePoint(), key.GetFixedSize()); m2::RectU r; if (!m_packer.PackGlyph(glyph.m_image.m_width, glyph.m_image.m_height, r)) { @@ -239,7 +239,7 @@ void GlyphIndex::UploadResources(ref_ptr context, ref_ptr m_generator; using ResourceMapping = std::map; - using PendingNode = std::pair; + using PendingNode = std::pair; using PendingNodes = std::vector; ResourceMapping m_index; @@ -113,21 +111,18 @@ private: class FontTexture : public DynamicTexture { - using TBase = DynamicTexture; public: FontTexture(m2::PointU const & size, ref_ptr glyphMng, ref_ptr glyphGenerator, ref_ptr allocator) : m_index(size, glyphMng, glyphGenerator) { - TBase::DynamicTextureParams params{size, TextureFormat::Alpha, - TextureFilter::Linear, true /* m_usePixelBuffer */}; - TBase::Init(allocator, make_ref(&m_index), params); + DynamicTextureParams const params{size, TextureFormat::Alpha, TextureFilter::Linear, true /* m_usePixelBuffer */}; + Init(allocator, make_ref(&m_index), params); } - ~FontTexture() override { TBase::Reset(); } + ~FontTexture() override { Reset(); } - std::vector> FindResources(std::vector const & keys, - bool & hasNewResources) + std::vector> FindResources(std::vector const & keys, bool & hasNewResources) const { ASSERT(m_indexer != nullptr, ()); return m_indexer->MapResources(keys, hasNewResources); diff --git a/drape/glyph.hpp b/drape/glyph.hpp new file mode 100644 index 0000000000..bfd1494047 --- /dev/null +++ b/drape/glyph.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include "base/assert.hpp" +#include "base/shared_buffer_manager.hpp" +#include "base/string_utils.hpp" + +namespace dp +{ +struct GlyphMetrics +{ + float m_xAdvance; + float m_yAdvance; + float m_xOffset; + float m_yOffset; + bool m_isValid; +}; + +struct GlyphImage +{ + ~GlyphImage() + { + ASSERT_NOT_EQUAL(m_data.use_count(), 1, ("Probably you forgot to call Destroy()")); + } + + void Destroy() + { + if (m_data != nullptr) + { + SharedBufferManager::instance().freeSharedBuffer(m_data->size(), m_data); + m_data = nullptr; + } + } + + uint32_t m_width; + uint32_t m_height; + + uint32_t m_bitmapRows; + int m_bitmapPitch; + + SharedBufferManager::shared_buffer_ptr_t m_data; +}; + +struct Glyph +{ + GlyphMetrics m_metrics; + GlyphImage m_image; + int m_fontIndex; + strings::UniChar m_code; + int m_fixedSize; +}; +} // namespace dp + diff --git a/drape/glyph_generator.cpp b/drape/glyph_generator.cpp index 78c00edd7f..c8d5e7bb31 100644 --- a/drape/glyph_generator.cpp +++ b/drape/glyph_generator.cpp @@ -49,8 +49,7 @@ void GlyphGenerator::UnregisterListener(ref_ptr listen m_listeners.erase(listener); } -void GlyphGenerator::GenerateGlyph(ref_ptr listener, m2::RectU const & rect, - GlyphManager::Glyph & glyph) +void GlyphGenerator::GenerateGlyph(ref_ptr listener, m2::RectU const & rect, Glyph & glyph) { GenerateGlyph(listener, GlyphGenerationData(rect, glyph)); } @@ -60,8 +59,7 @@ void GlyphGenerator::GenerateGlyph(ref_ptr listener, GlyphGenerationDa GenerateGlyphs(listener, {std::move(data)}); } -void GlyphGenerator::GenerateGlyphs(ref_ptr listener, - GlyphGenerationDataArray && generationData) +void GlyphGenerator::GenerateGlyphs(ref_ptr listener, GlyphGenerationDataArray && generationData) { std::lock_guard lock(m_mutex); if (m_listeners.find(listener) == m_listeners.end()) diff --git a/drape/glyph_generator.hpp b/drape/glyph_generator.hpp index 76943fede4..6d51e874e3 100644 --- a/drape/glyph_generator.hpp +++ b/drape/glyph_generator.hpp @@ -21,10 +21,10 @@ public: struct GlyphGenerationData { m2::RectU m_rect; - GlyphManager::Glyph m_glyph; + Glyph m_glyph; GlyphGenerationData() = default; - GlyphGenerationData(m2::RectU const & rect, GlyphManager::Glyph const & glyph) + GlyphGenerationData(m2::RectU const & rect, Glyph const & glyph) : m_rect(rect), m_glyph(glyph) {} @@ -69,7 +69,7 @@ public: void RegisterListener(ref_ptr listener); void UnregisterListener(ref_ptr listener); - void GenerateGlyph(ref_ptr listener, m2::RectU const & rect, GlyphManager::Glyph & glyph); + void GenerateGlyph(ref_ptr listener, m2::RectU const & rect, Glyph & glyph); void GenerateGlyph(ref_ptr listener, GlyphGenerationData && data); void GenerateGlyphs(ref_ptr listener, GlyphGenerationDataArray && generationData); bool IsSuspended() const; diff --git a/drape/glyph_manager.cpp b/drape/glyph_manager.cpp index 4ae16ff5f0..244f30572e 100644 --- a/drape/glyph_manager.cpp +++ b/drape/glyph_manager.cpp @@ -1,6 +1,7 @@ #include "drape/glyph_manager.hpp" #include "drape/font_constants.hpp" +#include "drape/glyph.hpp" #include "platform/platform.hpp" @@ -13,17 +14,16 @@ #include "3party/sdf_image/sdf_image.h" #include -#include -#include #include #include #include +#include #include -#include FT_TYPES_H -#include FT_SYSTEM_H #include FT_FREETYPE_H +#include FT_SYSTEM_H #include FT_STROKER_H +#include FT_TYPES_H #undef __FTERRORS_H__ #define FT_ERRORDEF(e, v, s) {e, s}, @@ -39,27 +39,15 @@ FreetypeError constexpr g_FT_Errors[] = #include FT_ERRORS_H #ifdef DEBUG - #define FREETYPE_CHECK(x) \ +#define FREETYPE_CHECK(x) \ do \ { \ FT_Error const err = (x); \ if (err) \ - LOG(LWARNING, ("Freetype:", g_FT_Errors[err].m_code, g_FT_Errors[err].m_message)); \ - } while (false) - - #define FREETYPE_CHECK_RETURN(x, msg) \ - do \ - { \ - FT_Error const err = (x); \ - if (err) \ - { \ - LOG(LWARNING, ("Freetype", g_FT_Errors[err].m_code, g_FT_Errors[err].m_message, msg)); \ - return; \ - } \ + LOG(LERROR, ("Freetype:", g_FT_Errors[err].m_code, g_FT_Errors[err].m_message)); \ } while (false) #else - #define FREETYPE_CHECK(x) x - #define FREETYPE_CHECK_RETURN(x, msg) FREETYPE_CHECK(x) +#define FREETYPE_CHECK(x) x #endif namespace dp @@ -125,57 +113,39 @@ class Font public: DECLARE_EXCEPTION(InvalidFontException, RootException); - Font(uint32_t sdfScale, ReaderPtr fontReader, FT_Library lib) - : m_fontReader(fontReader) + Font(uint32_t sdfScale, ReaderPtr && fontReader, FT_Library lib) + : m_fontReader(std::move(fontReader)) , m_fontFace(nullptr) , m_sdfScale(sdfScale) { - m_stream.base = nullptr; + std::memset(&m_stream, 0, sizeof(m_stream)); m_stream.size = static_cast(m_fontReader.Size()); - m_stream.pos = 0; m_stream.descriptor.pointer = &m_fontReader; - m_stream.pathname.pointer = nullptr; m_stream.read = &Font::Read; m_stream.close = &Font::Close; - m_stream.memory = nullptr; - m_stream.cursor = nullptr; - m_stream.limit = nullptr; FT_Open_Args args; + std::memset(&args, 0, sizeof(args)); args.flags = FT_OPEN_STREAM; - args.memory_base = 0; - args.memory_size = 0; - args.pathname = 0; args.stream = &m_stream; - args.driver = 0; - args.num_params = 0; - args.params = 0; FT_Error const err = FT_Open_Face(lib, &args, 0, &m_fontFace); if (err || !IsValid()) MYTHROW(InvalidFontException, (g_FT_Errors[err].m_code, g_FT_Errors[err].m_message)); } - bool IsValid() const + ~Font() { - return m_fontFace != nullptr && m_fontFace->num_glyphs > 0; + ASSERT(m_fontFace, ()); + FREETYPE_CHECK(FT_Done_Face(m_fontFace)); + m_fontFace = nullptr; } - void DestroyFont() - { - if (m_fontFace != nullptr) - { - FREETYPE_CHECK(FT_Done_Face(m_fontFace)); - m_fontFace = nullptr; - } - } + bool IsValid() const { return m_fontFace && m_fontFace->num_glyphs > 0; } - bool HasGlyph(strings::UniChar unicodePoint) const - { - return FT_Get_Char_Index(m_fontFace, unicodePoint) != 0; - } + bool HasGlyph(strings::UniChar unicodePoint) const { return FT_Get_Char_Index(m_fontFace, unicodePoint) != 0; } - GlyphManager::Glyph GetGlyph(strings::UniChar unicodePoint, uint32_t baseHeight, bool isSdf) const + Glyph GetGlyph(strings::UniChar unicodePoint, uint32_t baseHeight, bool isSdf) const { uint32_t const glyphHeight = isSdf ? baseHeight * m_sdfScale : baseHeight; @@ -186,7 +156,7 @@ public: FREETYPE_CHECK(FT_Get_Glyph(m_fontFace->glyph, &glyph)); FT_BBox bbox; - FT_Glyph_Get_CBox(glyph, FT_GLYPH_BBOX_PIXELS , &bbox); + FT_Glyph_Get_CBox(glyph, FT_GLYPH_BBOX_PIXELS, &bbox); FT_Bitmap const bitmap = m_fontFace->glyph->bitmap; @@ -204,44 +174,32 @@ public: imageHeight = std::round(img.GetHeight() * scale); data = SharedBufferManager::instance().reserveSharedBuffer(bitmap.rows * bitmap.pitch); - memcpy(data->data(), bitmap.buffer, data->size()); + std::memcpy(data->data(), bitmap.buffer, data->size()); } else { - int const border = kSdfBorder; - imageHeight += 2 * border; - imageWidth += 2 * border; + imageHeight += 2 * kSdfBorder; + imageWidth += 2 * kSdfBorder; data = SharedBufferManager::instance().reserveSharedBuffer(imageWidth * imageHeight); auto ptr = data->data(); - memset(ptr, 0, data->size()); + std::memset(ptr, 0, data->size()); - for (size_t row = border; row < bitmap.rows + border; ++row) + for (size_t row = kSdfBorder; row < bitmap.rows + kSdfBorder; ++row) { - size_t const dstBaseIndex = row * imageWidth + border; - size_t const srcBaseIndex = (row - border) * bitmap.pitch; + size_t const dstBaseIndex = row * imageWidth + kSdfBorder; + size_t const srcBaseIndex = (row - kSdfBorder) * bitmap.pitch; for (int column = 0; column < bitmap.pitch; ++column) ptr[dstBaseIndex + column] = bitmap.buffer[srcBaseIndex + column]; } } } - GlyphManager::Glyph result; - result.m_image = GlyphManager::GlyphImage - { - imageWidth, imageHeight, - bitmap.rows, bitmap.pitch, - data - }; + Glyph result; + result.m_image = {imageWidth, imageHeight, bitmap.rows, bitmap.pitch, data}; - result.m_metrics = GlyphManager::GlyphMetrics - { - static_cast(glyph->advance.x >> 16) * scale, - static_cast(glyph->advance.y >> 16) * scale, - static_cast(bbox.xMin) * scale, - static_cast(bbox.yMin) * scale, - true - }; + result.m_metrics = {(glyph->advance.x >> 16) * scale, (glyph->advance.y >> 16) * scale, + bbox.xMin * scale, bbox.yMin * scale, true}; result.m_code = unicodePoint; result.m_fixedSize = isSdf ? kDynamicGlyphSize : static_cast(baseHeight); @@ -257,22 +215,22 @@ public: while (gindex) charcodes.push_back(FT_Get_Next_Char(m_fontFace, charcodes.back(), &gindex)); - sort(charcodes.begin(), charcodes.end()); - charcodes.erase(unique(charcodes.begin(), charcodes.end()), charcodes.end()); + std::sort(charcodes.begin(), charcodes.end()); + charcodes.erase(std::unique(charcodes.begin(), charcodes.end()), charcodes.end()); } static unsigned long Read(FT_Stream stream, unsigned long offset, unsigned char * buffer, unsigned long count) { if (count != 0) { - ReaderPtr * reader = reinterpret_cast *>(stream->descriptor.pointer); + auto * reader = reinterpret_cast *>(stream->descriptor.pointer); reader->Read(offset, buffer, count); } return count; } - static void Close(FT_Stream){} + static void Close(FT_Stream) {} void MarkGlyphReady(strings::UniChar code, int fixedHeight) { @@ -346,6 +304,19 @@ using TUniBlockIter = TUniBlocks::const_iterator; struct GlyphManager::Impl { + Impl() = default; + + ~Impl() { + m_fonts.clear(); + if (m_library) + FREETYPE_CHECK(FT_Done_FreeType(m_library)); + } + + Impl(Impl const &) = delete; + Impl(Impl &&) = delete; + Impl & operator=(Impl const &) = delete; + Impl & operator=(Impl &&) = delete; + FT_Library m_library; TUniBlocks m_blocks; TUniBlockIter m_lastUsedBlock; @@ -355,8 +326,11 @@ struct GlyphManager::Impl uint32_t m_sdfScale; }; -GlyphManager::GlyphManager(GlyphManager::Params const & params) - : m_impl(new Impl()) +// Destructor is defined where pimpl's destructor is already known. +GlyphManager::~GlyphManager() = default; + +GlyphManager::GlyphManager(Params const & params) + : m_impl(std::make_unique()) { m_impl->m_baseGlyphHeight = params.m_baseGlyphHeight; m_impl->m_sdfScale = params.m_sdfScale; @@ -504,15 +478,8 @@ GlyphManager::GlyphManager(GlyphManager::Params const & params) LOG_SHORT(LDEBUG, (b.m_name, "is in", params.m_fonts[ind])); } } -} -GlyphManager::~GlyphManager() -{ - for (auto const & f : m_impl->m_fonts) - f->DestroyFont(); - FREETYPE_CHECK(FT_Done_FreeType(m_impl->m_library)); - delete m_impl; } uint32_t GlyphManager::GetBaseGlyphHeight() const @@ -582,7 +549,7 @@ int GlyphManager::FindFontIndexInBlock(UnicodeBlock const & block, strings::UniC return kInvalidFont; } -GlyphManager::Glyph GlyphManager::GetGlyph(strings::UniChar unicodePoint, int fixedHeight) +Glyph GlyphManager::GetGlyph(strings::UniChar unicodePoint, int fixedHeight) { int const fontIndex = GetFontIndex(unicodePoint); if (fontIndex == kInvalidFont) @@ -596,11 +563,11 @@ GlyphManager::Glyph GlyphManager::GetGlyph(strings::UniChar unicodePoint, int fi } // static -GlyphManager::Glyph GlyphManager::GenerateGlyph(Glyph const & glyph, uint32_t sdfScale) +Glyph GlyphManager::GenerateGlyph(Glyph const & glyph, uint32_t sdfScale) { if (glyph.m_image.m_data != nullptr) { - GlyphManager::Glyph resultGlyph; + Glyph resultGlyph; resultGlyph.m_metrics = glyph.m_metrics; resultGlyph.m_fontIndex = glyph.m_fontIndex; resultGlyph.m_code = glyph.m_code; @@ -660,7 +627,7 @@ bool GlyphManager::AreGlyphsReady(strings::UniString const & str, int fixedSize) return true; } -GlyphManager::Glyph GlyphManager::GetInvalidGlyph(int fixedSize) const +Glyph const & GlyphManager::GetInvalidGlyph(int fixedSize) const { strings::UniChar constexpr kInvalidGlyphCode = 0x9; int constexpr kFontId = 0; diff --git a/drape/glyph_manager.hpp b/drape/glyph_manager.hpp index 13fe2a6197..c02b7fbe26 100644 --- a/drape/glyph_manager.hpp +++ b/drape/glyph_manager.hpp @@ -3,9 +3,12 @@ #include "base/shared_buffer_manager.hpp" #include "base/string_utils.hpp" +#include "drape/glyph.hpp" + +#include +#include #include #include -#include namespace dp { @@ -26,49 +29,6 @@ public: uint32_t m_sdfScale = 4; }; - struct GlyphMetrics - { - float m_xAdvance; - float m_yAdvance; - float m_xOffset; - float m_yOffset; - bool m_isValid; - }; - - struct GlyphImage - { - ~GlyphImage() - { - ASSERT(m_data.use_count() != 1, ("Probably you forgot to call Destroy()")); - } - - void Destroy() - { - if (m_data != nullptr) - { - SharedBufferManager::instance().freeSharedBuffer(m_data->size(), m_data); - m_data = nullptr; - } - } - - uint32_t m_width; - uint32_t m_height; - - uint32_t m_bitmapRows; - int m_bitmapPitch; - - SharedBufferManager::shared_buffer_ptr_t m_data; - }; - - struct Glyph - { - GlyphMetrics m_metrics; - GlyphImage m_image; - int m_fontIndex; - strings::UniChar m_code; - int m_fixedSize; - }; - explicit GlyphManager(Params const & params); ~GlyphManager(); @@ -77,7 +37,7 @@ public: void MarkGlyphReady(Glyph const & glyph); bool AreGlyphsReady(strings::UniString const & str, int fixedSize) const; - Glyph GetInvalidGlyph(int fixedSize) const; + Glyph const & GetInvalidGlyph(int fixedSize) const; uint32_t GetBaseGlyphHeight() const; uint32_t GetSdfScale() const; @@ -92,6 +52,6 @@ private: private: struct Impl; - Impl * m_impl; + std::unique_ptr m_impl; }; } // namespace dp -- 2.45.3 From 13a7ef47a685e6f0812d606a3abe2f8c03ef346f Mon Sep 17 00:00:00 2001 From: Konstantin Pastbin Date: Thu, 4 Apr 2024 15:10:13 +0300 Subject: [PATCH 2/7] [classif] Support drinking_water:refill=yes Signed-off-by: Konstantin Pastbin --- data/mapcss-mapping.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mapcss-mapping.csv b/data/mapcss-mapping.csv index f2cbcb303c..9a7d69512e 100644 --- a/data/mapcss-mapping.csv +++ b/data/mapcss-mapping.csv @@ -588,7 +588,7 @@ fee|yes;[fee?];;name;int_name;500; fee|no;[fee=no];;name;int_name;501; toilets|yes;502; highway|trunk_link|tunnel;[highway=trunk_link][tunnel?];;name;int_name;503; -drinking_water|yes;504; +drinking_water|yes;[drinking_water=yes],[drinking_water=treated],[drinking_water:refill=yes];;;;504; drinking_water|no;505; deprecated|deprecated;506;x deprecated|deprecated;507;x -- 2.45.3 From 29061a90c9a292ada7771b39f70a64e1c87b750b Mon Sep 17 00:00:00 2001 From: Viktor Govako Date: Sat, 23 Mar 2024 22:34:10 -0300 Subject: [PATCH 3/7] [drape] Minor fixes. Signed-off-by: Viktor Govako --- drape_frontend/selection_shape_generator.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/drape_frontend/selection_shape_generator.cpp b/drape_frontend/selection_shape_generator.cpp index ba8cef6edd..a25efa6f0a 100644 --- a/drape_frontend/selection_shape_generator.cpp +++ b/drape_frontend/selection_shape_generator.cpp @@ -16,10 +16,8 @@ #include "geometry/mercator.hpp" #include "base/buffer_vector.hpp" -#include "base/macros.hpp" #include "base/math.hpp" -#include #include namespace df @@ -228,15 +226,9 @@ drape_ptr SelectionShapeGenerator::GenerateSelectionGeometry(ref_ptr { mapDataProvider.ReadFeatures([&points](FeatureType & ft) { - if (ft.GetGeomType() != feature::GeomType::Line || points.size() > 1) - return; - points.reserve(5); - ft.ForEachPoint([&points](m2::PointD const & pt) - { - if (points.empty() || !points.back().EqualDxDy(pt, mercator::kPointEqualityEps)) - points.push_back(pt); - }, scales::GetUpperScale()); - }, std::vector{feature}); + if (ft.GetGeomType() == feature::GeomType::Line) + assign_range(points, ft.GetPoints(scales::GetUpperScale())); + }, {feature}); } else { @@ -247,11 +239,10 @@ drape_ptr SelectionShapeGenerator::GenerateSelectionGeometry(ref_ptr if (points.size() < 2) return nullptr; - m2::PointD pivot = m2::PointD(0.0, 0.0); m2::RectD rect; for (auto const & p : points) rect.Add(p); - pivot = rect.Center(); + m2::PointD const pivot = rect.Center(); dp::TextureManager::ColorRegion color; mng->GetColorRegion(df::GetColorConstant(df::kSelectionColor), color); -- 2.45.3 From d2f16d58d8dcf3a2732f91a01c66fca53f871129 Mon Sep 17 00:00:00 2001 From: Viktor Govako Date: Mon, 8 Apr 2024 15:48:21 -0300 Subject: [PATCH 4/7] [search] Do not emit private swimming pools. Signed-off-by: Viktor Govako --- data/categories.txt | 4 +++ .../processor_test.cpp | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/data/categories.txt b/data/categories.txt index ef831fd34d..16eb46ea89 100644 --- a/data/categories.txt +++ b/data/categories.txt @@ -8049,6 +8049,10 @@ sw:Bwawa la kuogelea fa:استخرشنا mr:जलतरण तलाव +# Not searchable +leisure-swimming_pool-private +en:DoNotMatchThisType_OneLanguageDefinitionIsEnoughHere + sport-american_football en:American Football ar:كرة القدم الأمريكية diff --git a/search/search_integration_tests/processor_test.cpp b/search/search_integration_tests/processor_test.cpp index ee7be1f336..8f8a268209 100644 --- a/search/search_integration_tests/processor_test.cpp +++ b/search/search_integration_tests/processor_test.cpp @@ -3641,4 +3641,30 @@ UNIT_CLASS_TEST(ProcessorTest, NonDrawable_Categories) } } +UNIT_CLASS_TEST(ProcessorTest, NonSearchable_Categories) +{ + TestPOI yesPool({0, 0}, {}, {}); + yesPool.SetTypes({{"leisure", "swimming_pool"}}); + + TestPOI noPool({0.1, 0.1}, {}, {}); + noPool.SetTypes({{"leisure", "swimming_pool", "private"}}); + + auto wonderlandId = BuildCountry("Wonderland", [&](TestMwmBuilder & builder) + { + builder.Add(yesPool); + builder.Add(noPool); + }); + + SetViewport(m2::RectD(-0.5, -0.5, 0.5, 0.5)); + + { + Rules const rules = {ExactMatch(wonderlandId, yesPool)}; + TEST(ResultsMatch("swimming pool", rules), ()); + } + { + Rules const rules = {ExactMatch(wonderlandId, yesPool)}; + TEST(ResultsMatch("бассейн", rules, "ru"), ()); + } +} + } // namespace processor_test -- 2.45.3 From e8dd17c37e252b56b4c1ad21a37c706a90024847 Mon Sep 17 00:00:00 2001 From: Anton Date: Wed, 6 Mar 2024 17:18:16 +0100 Subject: [PATCH 5/7] [strings] Amend German translations Signed-off-by: Anton --- data/strings/strings.txt | 140 +++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/data/strings/strings.txt b/data/strings/strings.txt index 5e8c751677..10fad908a4 100644 --- a/data/strings/strings.txt +++ b/data/strings/strings.txt @@ -372,7 +372,7 @@ ca = Deixa un comentari cs = Zpětná vazba da = Lav en bedømmelse - de = Bericht abgeben + de = Bewertung abgeben el = Αφήστε μια κριτική es = Escribir una opinión et = Jäta arvamus @@ -723,7 +723,7 @@ ca = Teniu tots els serveis de geolocalització d'aquest aparell desactivats. Activeu-los a la configuració. cs = Aktuálně máte všechny možnosti pro určování polohy vypnuté. Prosím, povolte je v Nastavení. da = Du har alle lokationstjenester for denne enhed eller applikation slukket. Slå dem venligst til i Indstillinger. - de = Ortungsdienste sind für dieses Gerät oder die App deaktiviert. Bitte aktivieren Sie diese in den Einstellungen. + de = Standortdienste sind für dieses Gerät oder App deaktiviert. Bitte aktivieren Sie diese in den Einstellungen. el = Οι υπηρεσίες εντοπισμού τοποθεσίας είναι προς το παρόν απενεργοποιημένες σε αυτή τη συσκευή ή για αυτή την εφαρμογή. Ενεργοποιήστε τες από τις Ρυθμίσεις. es = No se puede acceder a los servicios de localización en este dispositivo o aplicación. Por favor, actívelos en los ajustes. et = Seadme või rakenduse kõik asukohateenused on praegu välja lülitatud. Luba need Seadetes. @@ -1078,7 +1078,7 @@ ca = • Sense consum de bateria, funciona fora de línia cs = • Žádné vybíjení baterie, funguje offline da = • Intet batteridræn, fungerer offline - de = • Kein Datenverbrauch, funktioniert offline + de = • Minimaler Batterieverbrauch, funktioniert offline el = • Δεν εξαντλεί τη μπαταρία, λειτουργεί εκτός σύνδεσης es = • No consume batería, funciona sin conexión es-MX = • Sin consumo de batería, funciona sin conexión @@ -1125,7 +1125,7 @@ ca = • Ràpid, minimalista, desenvolupat per la comunitat cs = • Rychlé, minimalistické, vyvinutý komunitou da = • Hurtig, minimalistisk, udviklet af fællesskabet - de = • Schnell, minimalistisch, von der Gemeinschaft entwickelt + de = • Schnell, minimalistisch, von der Community entwickelt el = • Γρήγορο, μινιμαλιστικό, αναπτυγμένο από την κοινότητα es = • Rápido, minimalista, desarrollado por la comunidad es-MX = • Rápido, minimalista, desarrollado por la comunidad. @@ -1170,7 +1170,7 @@ bg = Приложение с отворен код, създадено от ентусиасти и доброволци. cs = Otevřená aplikace vytvořená nadšenci a dobrovolníky. da = Open source-applikation oprettet af entusiaster og frivillige. - de = Open-Source-Anwendung von Enthusiasten und Freiwilligen. + de = Open-Source-Anwendung, entwickelt von Enthusiasten und Freiwilligen. el = Εφαρμογή ανοιχτού κώδικα που δημιουργήθηκε από θιασώτες και εθελοντές. es = Aplicación de código abierto creada por entusiastas y voluntarios. eu = Kode irekiko aplikazioa zaleek eta boluntarioek sortutakoa. @@ -1834,7 +1834,7 @@ ca = Afegeix una llista nova cs = Přidat novou skupinu záložek da = Tilføj nyt sæt - de = Neue Gruppe hinzufügen + de = Neue Liste hinzufügen el = Δημιουργία νέας λίστας es = Agregar un grupo nuevo et = Lisa uus loetelu @@ -1925,7 +1925,7 @@ ca = Nom de la llista de marcadors cs = Název záložky da = Indstil bogmærkenavn - de = Name des Lesezeichens + de = Name der Lesezeichenliste el = Όνομα λίστας αγαπημένων es = Nombre del grupo de marcadores et = Järjehoidjate loetelu nimi @@ -1968,7 +1968,7 @@ ca = Llistes de marcadors cs = Skupiny záložek da = Bogmærk sæt - de = Lesezeichenmappe + de = Lesezeichenliste el = Λίστα αγαπημένων es = Grupos de marcadores et = Järjehoidjate loetelud @@ -2418,7 +2418,7 @@ ca = Mapes baixats cs = Mapy da = Kort - de = Karten + de = Heruntergeladene Karten el = Κατεβασμένοι Χάρτες es = Mapas descargados et = Kaardid @@ -3913,7 +3913,7 @@ ca = Marcadors d'Organic Maps compartits cs = Sdílené záložky Organic Maps da = Organic Maps bogmærker er blevet delt med dig - de = Organic Maps-Lesezeichen mit Ihnen geteilt + de = Organic Maps Lesezeichen wurden mit Ihnen geteilt el = Κοινοποιήθηκαν τα αγαπημένα από το Organic Maps σε εσάς es = Marcadores de Organic Maps compartidos con usted et = Organic Maps järjehoidjaid jagati Sinuga @@ -5231,7 +5231,7 @@ ca = Mostra'ls al mapa cs = Zobrazit na obrazovce da = Vis på skærmen - de = Auf dem Bildschirm anzeigen + de = Auf der Karte anzeigen el = Εμφάνιση στο χάρτη es = Visualización en la pantalla et = Kuva kaardil @@ -6791,7 +6791,7 @@ ca = Preguntes més freqüents cs = Otázky a odpovědi da = Spørgsmål og svar - de = Fragen und Antworten + de = Häufige Fragen und Antworten el = Συχνές ερωτήσεις es = Preguntas frecuentes et = Korduma kippuvad küsimused @@ -7020,7 +7020,7 @@ ca = Informació d'errors cs = Nahlásit chybu da = Rapportér fejl - de = Fehler melden + de = App-Fehler melden el = Αναφορά σφάλματος es = Informar de un fallo et = Teata veast @@ -7112,7 +7112,7 @@ ca = Fer-se voluntari cs = Dobrovolnictví da = At melde sig som frivillig - de = Für Freiwillige + de = Freiwillig helfen el = Γίνετε εθελοντής es = Voluntariado es-MX = Para ser voluntario @@ -7158,7 +7158,7 @@ ca = Segueix i contacta amb nosaltres: cs = Sledujte nás a kontaktujte nás: da = Følg og kontakt os: - de = Folge uns und kontaktiere uns: + de = Folge und kontaktiere uns: el = Ακολουθήστε και επικοινωνήστε μαζί μας: es = Síguenos y ponte en contacto con nosotros: es-MX = Síguenos y contáctanos: @@ -7205,7 +7205,7 @@ ca = No s'ha configurat cap client de correu electrònic. Configureu-lo o useu un altra via per contactar amb nosaltres a %@ cs = Emailový klient nebyl ještě nakonfigurován. Nastavte ho, prosím, nebo použijte jiný způsob k našemu kontaktování na %@ da = Emailklienten er ikke blevet sat op. Venligst konfigurér den eller brug en anden måde til at kontakte os på %@ - de = Der Email-Client ist noch nicht eingerichtet worden. Konfigurieren Sie ihn bitte oder nutzen Sie eine andere Möglichkeit, uns unter %@ zu erreichen. + de = Der Email-Client ist noch nicht eingerichtet worden. Konfigurieren Sie ihn bitte oder nutzen Sie eine andere Möglichkeit oder kontaktieren Sie uns unter %@ el = Το πρόγραμμα ηλεκτρονικού ταχυδρομείου δεν έχει ρυθμιστεί. Ρυθμίστε το ή χρησιμοποιήστε άλλο τρόπο να επικοινωνήσετε μαζί μας στη διεύθυνση %@ es = No se ha configurado el cliente de correo electrónico. Por favor, configúrelo o utilice alguna otra forma de ponerse en contacto con nosotros en %@ et = E-posti klienti ei ole seadistatud. Palun seadistage see või kasutage mõnda muud võimalust meiega ühenduse võtmiseks aadressil %@ @@ -7954,7 +7954,7 @@ ca = Per a esborrar el mapa, abans atureu la navegació. cs = Chcete-li odstranit mapu, pak prosím zastavte navigaci. da = For at slette kortet skal du stoppe navigeringen. - de = Zum Löschen der Karte bitte Navigation unterbrechen. + de = Zum Löschen der Karte bitte die Navigation unterbrechen. el = Για να διαγράψετε το χάρτη, σταματήστε την πλοήγηση. es = Para eliminar el mapa, por favor, detenga la navegación. et = Kaardi kustutamiseks palun lõpeta navigeerimine. @@ -8264,7 +8264,7 @@ ca = Determineu ràpidament la vostra ubicació aproximada mitjançant Bluetooth, WiFi o xarxa mòbil cs = Rychlé určení přibližné polohy pomocí Bluetooth, WiFi nebo mobilní sítě da = Find hurtigt din omtrentlige position via Bluetooth, WiFi eller mobilnetværk - de = Bestimme schnell deinen ungefähren Standort über Bluetooth, WiFi oder das mobile Netzwerk + de = Ermitteln Sie schnell Ihren ungefähren Standort über Bluetooth, WLAN oder das Mobilfunknetz el = Προσδιορίστε γρήγορα την κατά προσέγγιση τοποθεσία σας μέσω Bluetooth, WiFi ή δικτύου κινητής τηλεφωνίας es = Determina rápidamente tu ubicación aproximada mediante Bluetooth, WiFi o red móvil es-MX = Determine rápidamente su ubicación aproximada mediante Bluetooth, WiFi o red móvil @@ -8401,7 +8401,7 @@ ca = No hi ha prou espai cs = Nedostatek místa da = Ikke nok plads - de = Nicht genug Speicherplatz + de = Nicht genügend Speicherplatz el = Δεν υπάρχει αρκετός χώρος es = No hay suficiente espacio et = Ei ole piisavalt ruumi @@ -8489,7 +8489,7 @@ ca = Activeu els serveis de geolocalització cs = Prosím, povolte Služby určování polohy da = Aktiver venligst lokationstjenester - de = Aktivieren Sie bitte Ortungsdienste + de = Bitte aktivieren Sie die Standortdienste el = Ενεργοποιήστε τις υπηρεσίες εντοπισμού τοποθεσίας es = Por favor, active los servicios de localización et = Palun luba asukohateenused @@ -9429,7 +9429,7 @@ ca = — Les condicions de la carretera, les normes de trànsit i els senyals de circulació sempre tenen prioritat sobre les indicacions de navegació; cs = • Situace na silnici, dopravní předpisy a dopravní značení mají vždy prioritu před pokyny navigace. da = — Vejforhold, færdselsregler og skiltning skal prioriteres højere end anvisningerne fra navigationsappen; - de = – Straßenverhältnisse, die Verkehrsordnung und Straßenschilder haben stets Vorrang vor Navigationsanweisungen; + de = – Zustand der Straßen, die Verkehrsordnung und Straßenschilder haben stets Vorrang vor Navigationsanweisungen; el = — Οι οδικές συνθήκες, ο κώδικας οδικής κυκλοφορίας και οι σημάνσεις στο δρόμο έχουν πάντα μεγαλύτερη προτεραιότητα από τις συμβουλές πλοήγησης, es = — Las condiciones de la ruta, las reglas de tráfico y las señales de carretera siempre tienen prioridad sobre las sugerencias de navegación; et = - Teeolud, liikluseeskirjad ja liiklusmärgid omavad alati prioriteeti navigeerimisjuhiste üle; @@ -9780,7 +9780,7 @@ ca = Activa els serveis de geolocalització cs = Povolit služby určování polohy da = Slå lokaliseringstjenester til - de = Ortungsdienste aktivieren + de = Standortdienste aktivieren el = Ενεργοποιήστε τις υπηρεσίες εντοπισμού τοποθεσίας es = Activar servicios de ubicación et = Luba asukoha teenused @@ -9823,7 +9823,7 @@ ca = No s'han pogut trobar les coordenaes GPS actuals. Activeu els serveis de geolocalització per a calcular la ruta. cs = Aktuální souřadnice GPS se nepodařilo zjistit. Pro výpočet trasy povolte služby určování polohy. da = Det lykkedes ikke at finde de aktuelle GPS-koordinater. Slå lokaliseringstjenester til for at beregne en rute. - de = Aktuelle GPS-Koordinaten können nicht ermittelt werden. Aktivieren Sie Ortungsdienste, um die Route zu berechnen. + de = Aktuelle GPS-Koordinaten können nicht ermittelt werden. Aktivieren Sie Standortdiensten, um die Route zu berechnen. el = Δεν είναι δυνατός ο εντοπισμός των τρεχουσών συντεταγμένων GPS. Ενεργοποιήστε τις υπηρεσίες εντοπισμού τοποθεσίας για τον υπολογισμό της διαδρομής. es = No se pueden encontrar las coordenadas del GPS. Active los servicios de ubicación para calcular la ruta. et = Ei suuda praeguseid GPS koordinaate määrata. Marsruudi arvutamiseks luba asukoha teenused. @@ -9910,7 +9910,7 @@ ca = Baixeu i actualitzeu tots els mapes i informació de rutes del trajecte per a calcular-ne la ruta. cs = Stáhnout a aktualizovat všechny mapy a data tras pro výpočet trasy podél navrhované cesty. da = Download og opdatér alle kort og ruteoplysninger for at beregne en rute. - de = Laden Sie alle Karten- und Routeninformationen für den geplanten Weg herunter und aktualisieren Sie sie, um die Route zu berechnen. + de = Laden Sie alle Karten- und Routeninformationen für den geplanten Weg herunter oder aktualisieren Sie sie, um die Route zu berechnen. el = Κατεβάσετε ή ενημερώστε όλους τους χάρτες για όλο το μήκος της προβαλλόμενης διαδρομής ώστε να γίνει ο υπολογισμός της. es = Descargue y actualice toda la información de mapas y rutas junto con el trayecto proyectado para calcular la ruta. et = Marsruudi arvutamiseks lae alla ja värskenda kogu kavandatud teekonna kaart ja marsruuditeave. @@ -10171,7 +10171,7 @@ ca = Indiqueu un punt inicial més proper a una via. cs = Zvolte výchozí bod blíže k silnici. da = Angiv et startpunkt, der ligger tættere på en vej. - de = Bitte wählen Sie einen Startpunkt in der Nähe einer Straße aus. + de = Bitte wählen Sie einen Startpunkt, der näher an einer Straße liegt. el = Επιλέξτε σημείο εκκίνησης πιο κοντά σε κάποιο δρόμο. es = Seleccione un punto de inicio cercano a una carretera. et = Palun vali alguspunkt teele lähemal. @@ -10301,7 +10301,7 @@ ca = Indiqueu un punt de destinació més proper a una via. cs = Vyberte cílový bod blíže k silnici. da = Angiv en destination, der ligger tættere på en vej. - de = Bitte wählen Sie einen Zielort in der Nähe einer Straße aus. + de = Bitte wählen Sie einen Zielort, der näher an einer Straße liegt. el = Επιλέξτε ένα σημείο προορισμού πιο κοντά σε κάποιο δρόμο. es = Seleccione un punto de destino cercano a una carretera. et = Palun vali sihtkoht teele lähemal. @@ -10648,7 +10648,7 @@ ca = Baixeu mapes addicionals per a crear una ruta millor que creua els límits d'aquest mapa. cs = Stáhnout mapu a vytvořit optimálnější trasu, která překračuje hranice této mapy. da = Download kortet for at planlægge en mere optimal rute, der strækker sig ud over dette korts grænser. - de = Laden Sie die Karte herunter, um eine bessere Route zu erstellen, die den Rand dieser Karte überschreitet. + de = Laden Sie zusätzliche Karten herunter, um eine bessere Route zu erstellen, die die Grenzen dieser Karte überschreitet. el = Κατεβάστε επιπλέον χάρτες για να δημιουργηθεί μια καλύτερη διαδρομή που διασχίζει τα όρια αυτού του χάρτη. es = Descargue mapas adicionales para crear una ruta mejor que cruce los límites de este mapa. et = Lae alla täiendavad kaardid, et luua parem, selle kaardi piire ületav marsruut. @@ -12253,7 +12253,7 @@ ca = Ubicació cs = Umístění da = Sted - de = Position + de = Standort el = Τοποθεσία es = Ubicación et = Asukoht @@ -12382,7 +12382,7 @@ ca = Descriviu el problema detalladament perquè la comunitat d'OpenStreetMap pugui corregir l'error. cs = Popište prosím detailně problém, aby vám komunita OpenStreetMap mohla pomoct opravit chybu. da = Beskriv problemet i detaljer, så OpenStreetMap-fællesskabet kan løse fejlen. - de = Bitte beschreiben Sie das Problem detailliert, damit die OpenStreetMap-Gemeinschaft den Fehler beheben kann. + de = Bitte beschreiben Sie das Problem detailliert, damit die OpenStreetMap-Community den Fehler korrigieren kann. el = Περιγράψτε το πρόβλημα αναλυτικά ώστε η κοινότητα του OpenStreetMap να το διορθώσει. es = Por favor, describa el problema en detalle para que la comunidad de OpenStreetMap pueda corregir el error. et = Palun kirjelda probleemi üksikasjalikult, et OpenStreetMap kommuun saaks selle parandada. @@ -12817,7 +12817,7 @@ ca = 24/7 cs = Nonstop da = Dag og nat - de = Tag und Nacht + de = 24/7 el = 24/7 es = 24/7 et = 24/7 @@ -13210,7 +13210,7 @@ ca = Afegeix horari d'obertura cs = Přidat otevírací dobu da = Tilføj arbejdstid - de = Geschäftszeiten hinzufügen + de = Öffnungszeiten hinzufügen el = Προσθέστε ώρες λειτουργίας es = Añadir horarios de apertura et = Lisa tööaeg @@ -13341,7 +13341,7 @@ ca = Registre a OpenStreetMap cs = Registrace da = Tilmeld dig - de = Registrieren + de = Bei OpenStretMap registrieren el = Εγγραφή στο OpenStreetMap es = Registrarse en OpenStreetMap et = Registreeru @@ -13471,7 +13471,7 @@ ca = Inicia sessió cs = Přihlásit se da = Log ind - de = Anmelden + de = Bei OpenStreetMap anmelden el = Σύνδεση es = Iniciar sesión et = Logi sisse @@ -15619,7 +15619,7 @@ ca = Dades d'OpenStreetMap creades per la comunitat a partir de %@. Obteniu més informació sobre com editar i actualitzar el mapa a OpenStreetMap.org cs = Data OpenStreetMap vytvořená komunitou ke dni %@. Další informace o tom, jak upravovat a aktualizovat mapu, najdete na stránkách OpenStreetMap.org. da = Fællesskabsskabte OpenStreetMap-data fra %@. Få mere at vide om, hvordan du redigerer og opdaterer kortet på OpenStreetMap.org - de = Von der Gemeinschaft erstellte OpenStreetMap-Daten (Stand: %@). Erfahre mehr darüber, wie du die Karte bearbeiten und aktualisieren kannst unter OpenStreetMap.org + de = Von der Community erstellte OpenStreetMap-Daten (Stand: %@). Erfahre mehr darüber, wie du die Karte bearbeiten und aktualisieren kannst unter OpenStreetMap.org el = Δεδομένα OpenStreetMap που δημιουργήθηκαν από την κοινότητα στις %@. Μάθετε περισσότερα για τον τρόπο επεξεργασίας και ενημέρωσης του χάρτη στο OpenStreetMap.org es = Datos de OpenStreetMap creados por la comunidad a partir de %@. Más información sobre cómo editar y actualizar el mapa en OpenStreetMap.org es-MX = Datos de OpenStreetMap creados por la comunidad a partir de %@. Obtenga más información sobre cómo editar y actualizar el mapa en OpenStreetMap.org @@ -15665,7 +15665,7 @@ ca = Inicieu sessió perquè altres usuaris puguin veure els canvis que heu fet cs = Přihlaste se, aby ostatní uživatelé mohli vidět změny, které jste provedli. da = Log på så andre brugere kan se ændringerne som du har foretaget. - de = Melden Sie sich an, damit andere Benutzer Ihre Änderungen sehen können. + de = Melden Sie sich bei openstreetmap.org an, um Ihre Änderungen weltweit zu veröffentlichen. el = Συνδεθείτε ώστε άλλοι χρήστες να μπορούν να δουν τις αλλαγές που έχετε κάνει es = Inicie sesión en OpenStreetMap.org para que otros usuarios puedan ver los cambios que haya efectuado. et = Logi sisse OpenStreetMap.org keskkonda, et teised kasutajad näeksid Sinu tehtud muudatusi. @@ -16191,7 +16191,7 @@ ca = Envia una ota als editors d'OSM cs = Odeslat poznámku editorům OSM da = Send en besked til OSM-redaktører - de = Notiz an OSM-Redakteure senden + de = Notiz an Freiwillige von OpenStreetMap senden el = Σημείωμα στους συντάκτες του OSM es = Enviar nota a los editores de OSM es-MX = Enviar nota a los editores de OSM @@ -16369,7 +16369,7 @@ ca = Propietari cs = Operátor da = Bruger - de = Betreiber oder Eigentümer + de = Eigentümer el = Ιδιοκτήτης es = Operador et = Omanik @@ -16413,7 +16413,7 @@ ca = No heu baixat cap mapa cs = Nemáte stažené žádné mapy da = Du har ikke hentet alle kort - de = Keine Karten geladen + de = Keine Karten heruntergeladen el = Δεν έχετε κατεβάσει χάρτες es = No ha descargado ningún mapa et = Sa ei ole kaarte alla laadinud @@ -16456,7 +16456,7 @@ ca = Baixeu mapes per a cercar una ubicacio i usar la navegació sense connexió. cs = Stáhněte si mapy a hledejte cestu a její cíl, i když jste offline. da = Download kort for at finde position og navigere offline. - de = Laden Sie die für die Suche nach Orten erforderlichen Karten und verwenden Sie die Navigation offline. + de = Laden Sie Karten für die Offline-Suche und Navigation herunter. el = Κατεβάστε χάρτες για να αναζητήσετε μια τοποθεσία και να χρησιμοποιήσετε την πλοήγησης χωρίς σύνδεση. es = Descargue mapas para encontrar la ubicación y navegar sin conexión. et = Lae alla kaardid asukoha otsimiseks ja võrguühenduseta navigeerimise kasutamiseks. @@ -16499,7 +16499,7 @@ ca = Es desconeix la ubicació actual. cs = Současná poloha nezjištěna. da = Aktuel position er ukendt. - de = Standort nicht gefunden. + de = Aktueller Standort unbekannt el = Η τρέχουσα τοποθεσία είναι άγνωστη. es = La ubicación actual es desconocida. et = Hetkeasukoht on teadmata. @@ -16585,7 +16585,7 @@ ca = Els serveis de geolocalització estan desactivats cs = Určení polohy je zakázáno da = Placeringsservices er slået fra - de = Standort-Identifizierung ist deaktiviert + de = Standortdienste sind deaktiviert el = Οι υπηρεσίες εντοπισμού τοποθεσίας είναι απενεργοποιημένες es = La identificación de la ubicación está desactivada et = Asukohateenused on keelatud @@ -17455,7 +17455,7 @@ ca = La bonificació de referència rebuda per cada reserva a través d'aquest enllaç es destina al desenvolupament de Organic Maps. cs = Bonus za každou rezervaci provedenou prostřednictvím tohoto odkazu je určen na rozvoj služby Organic Maps. da = Henvisningsbonussen, der modtages for hver booking via dette link, går til udviklingen af Organic Maps. - de = Der empfehlungsbonus, den wir für jede buchung über diesen link erhalten, fließt in die entwicklung von Organic Maps. + de = Der Empfehlungsbonus, den wir für jede Buchung über diesen Link erhalten, fließt in die Entwicklung von Organic Maps. el = Το μπόνους παραπομπής που λαμβάνετε για κάθε κράτηση μέσω αυτού του συνδέσμου πηγαίνει στην ανάπτυξη του Organic Maps. es = La bonificación por recomendación recibida por cada reserva a través de este enlace se destina al desarrollo de Organic Maps. es-MX = El bono de recomendación recibido por cada reserva a través de este enlace se destina al desarrollo de Organic Maps. @@ -17544,7 +17544,7 @@ ca = Truca-hi cs = Volat da = Ring - de = Anruf + de = Anrufen el = Κλήση es = Llamar et = Helista @@ -17672,7 +17672,7 @@ ca = Notes personals cs = Vlastní poznámka da = Personlige notater - de = Anmerkung + de = Persönliche Notizen el = Προσωπικές σημειώσεις es = Notas personales et = Isiklikud märkmed @@ -17844,7 +17844,7 @@ ca = Voleu descartar tots els canvis locals? cs = Vymazat všechny místní změny? da = Nulstil alle lokale ændringer? - de = Alle lokalen Korrekturen verwerfen + de = Alle lokalen Korrekturen verwerfen? el = Απόρριψη όλων των τοπικών αλλαγών; es = ¿Restablecer todos los cambios locales? et = Loobu kõigist kohalikest muudatustest? @@ -18451,7 +18451,7 @@ ca = Afegeix un lloc a OpenStreetMap cs = Přidat místo do OpenStreetMap da = Tilføj sted til OpenStreetMap - de = Einen Ort zu OpenStreetMap hinzufügen + de = Ort zu OpenStreetMap hinzufügen el = Προσθήκη τοποθεσίας στο OpenStreetMap es = Añadir lugar a OpenStreetMap es-MX = Agregar lugar a OpenStreetMap @@ -18542,7 +18542,7 @@ ca = Assegureu-vos que no heu introduït cap dada personal. cs = Ujistěte se, že jste nezadali žádná osobní data. da = Sørg for at du ikke indtastede personlige oplysninger. - de = Stellen Sie sicher, dass Sie keine persönlichen Daten eingegeben haben. + de = Stellen Sie sicher, dass Sie keine persönlichen oder privaten Daten eingegeben haben. el = Βεβαιωθείτε ότι δεν έχετε εισάγει προσωπικά δεδομένα. es = Asegúrate de que no has introducido ningún dato personal. et = Palun kontrolli, et Sa ei sisestanud isiklikke andmeid. @@ -18585,7 +18585,7 @@ ca = Revisarem els canvis. Si tenim cap pregunta contactem amb vós via correu electrònic. cs = Redaktoři OpenStreetMap zkontrolují změny a budou vás kontaktovat, pokud budou mít nějaké dotazy. da = OpenStreetMap-redaktører vil tjekke ændringerne og kontakte dig, hvis de har spørgsmål. - de = OpenStreetMap-Redakteure werden die Änderungen prüfen und sich bei Fragen mit Ihnen in Verbindung setzen. + de = Freiwillige von OpenStreetMap werden die Änderungen prüfen und sich bei Fragen mit Ihnen in Verbindung setzen. el = Οι συντάκτες του OpenStreetMap θα ελέγξουν τις αλλαγές και θα επικοινωνήσουν μαζί σας εάν έχουν απορίες. es = Los editores de OpenStreetMap comprobarán los cambios y se pondrán en contacto con usted si tienen alguna pregunta. et = OpenStreetMap muutjad kontrollivad muudatused üle ja võtavad küsimuste korral Sinuga ühendust. @@ -19242,7 +19242,7 @@ ca = Es necessita Internet mòbil per a les notifiacions d'actualitzacions del mapa i per a mostrar informació detallada dels llocs i marcadors. cs = K zobrazení podrobných informací o místech, jako jsou fotografie, ceny a recenze je třeba mobilní internet. da = Mobile internet er nødvendigt til visning af detaljerede oplysninger om steder, såsom fotos, priser og anmeldelser. - de = Es wird mobiles Internet benötigt, um über Kartenaktualisierungen informiert zu werden und genauere Informationen über Orte anzuzeigen. + de = Für Benachrichtigungen über Kartenaktualisierungen und das Hochladen von Änderungen ist eine mobile Internetverbindung erforderlich. el = Απαιτείται πρόσβαση στο ίντερνετ μέσω δικτύου κινητής για την εμφάνιση αναλυτικών πληροφοριών για τις τοποθεσίες, όπως φωτογραφίες, τιμές και κριτικές. es = Se necesita Internet móvil para mostrar información detallada de los lugares, como fotografías, precios y reseñas. et = Mobiilne internet on vajalik kaardi värskendamise märguannete jaoks ning kohtade ja järjehoidjate üksikasjaliku teabe kuvamiseks. @@ -20761,7 +20761,7 @@ ca = Amaga-ho tot cs = Skrýt vše da = Skjul alle - de = Alle verbergen + de = Alle ausblenden el = Απόκρυψη όλων es = Ocultar todo es-MX = Ocultar todo @@ -21005,7 +21005,7 @@ ca = Oculta la pantalla cs = Skrýt obrazovku da = Skjul skærm - de = Bildschirm verbergen + de = Bildschirm ausblenden el = Απόκρυψη οθόνης es = Ocultar pantalla es-MX = Ocultar pantalla @@ -21187,7 +21187,7 @@ ca = No s'ha pogut compartir a causa d'un error de l'aplicació cs = Nelze sdílet kvůli chybě aplikace da = Ikke i stand til at dele på grund af en programfejl - de = Freigabe wegen eines Anwendungsfehlers nicht möglich + de = Teilen wegen eines Anwendungsfehlers nicht möglich el = Αδυναμία κοινοποίησης λόγω σφάλματος εφαρμογής es = No se puede compartir debido a un error de la aplicación es-MX = No se puede compartir debido a un error de la aplicación @@ -21233,7 +21233,7 @@ ca = Error al compartir cs = Chyba sdílení da = Delingsfejl - de = Fehler bei der Freigabe + de = Fehler beim Teilen el = Σφάλμα κατά την κοινοποίηση es = Error al compartir es-MX = Error al compartir @@ -21279,7 +21279,7 @@ ca = No es pot compartir una llista buida cs = Nelze sdílet s prázdným seznamem da = Kan ikke dele en tom liste - de = Eine leere Liste kann nicht freigegeben werden + de = Eine leere Liste kann nicht geteilt werden el = Δεν είναι δυνατή η κοινή χρήση μιας κενής λίστας es = No se puede compartir una lista vacía es-MX = No se puede compartir una lista vacía @@ -22460,7 +22460,7 @@ ca = Trànsit cs = Zácpy da = Trafik - de = Staus + de = Verkehr el = Κίνηση es = Tráfico es-MX = Tráfico @@ -23127,7 +23127,7 @@ ca = Privat cs = Osobní účet da = Privat - de = Persönlich + de = Privat el = Ιδιωτικό es = Privado es-MX = Privado @@ -24176,7 +24176,7 @@ ca = Definiu les vies a evitar cs = Definovat silnice, kterým se vyhnout da = Definer veje du vil undgå - de = Umwege einstellen + de = Routenbeschränkung einstellen el = Ορισμός δρόμων προς αποφυγή es = Defina las carreteras a evitar es-MX = Configurar rutas de desvío @@ -25588,7 +25588,7 @@ ca = Ordenació predeterminada cs = Třídit ve výchozím nastavení da = Sortér (std) - de = Default Sortierung + de = Nach Voreinstellung sortieren el = Ταξινόμηση κατά προεπιλογή es = Ordenar por defecto es-MX = Ordenar por defecto @@ -25632,7 +25632,7 @@ ca = Ordena per tipus cs = Třídit dle typu da = Sort (type) - de = Sortierung nach Kategorien + de = Nach Kategorien sortieren el = Ταξινόμηση ανά τύπο es = Ordenar por tipo es-MX = Ordenar por tipo @@ -25676,7 +25676,7 @@ ca = Ordena per distància cs = Třídit dle vzdálenosti da = Sort (Afs) - de = Sortieren nach Entfernung + de = Nach Entfernung sortieren el = Ταξινόμηση κατά απόσταση es = Ordenar por distancia es-MX = Ordenar por distancia @@ -25720,7 +25720,7 @@ ca = Ordena per data cs = Třídit dle data da = Sort (dato) - de = Sortieren nach Datum + de = Nach Datum sortieren el = Ταξινόμηση κατά ημερομηνία es = Ordenar por fecha es-MX = Ordenar por fecha @@ -25857,7 +25857,7 @@ ca = Per tipus cs = Podle typu da = Efter type - de = Nach Kategorie + de = Nach Typ el = Κατά τύπο es = Por tipo es-MX = Por tipo @@ -26215,7 +26215,7 @@ ca = Prop meu cs = Blízko mě da = I nærheden - de = In der Nähe + de = In meiner Nähe el = Δίπλα μου es = Cerca de mí es-MX = Cerca a mí @@ -26968,7 +26968,7 @@ ca = Llocs de culte cs = Posvátná místa da = Religiøse steder - de = Religiöse Stätten + de = Religiöse Orte el = Χώροι Λατρείας es = Lugares sagrados es-MX = Sitios religiosos @@ -27198,7 +27198,7 @@ ca = Corbes de nivell cs = Terén da = Terræn - de = Gelände + de = Höhelinien el = Υψομετρικά es = Alturas es-MX = Alturas @@ -27826,7 +27826,7 @@ ca = Aproplieu el mapa per a explorar les isolínies cs = Přiblížit pro prozkoumání izolinií da = Zoom ind for at udforske isolinjekort - de = Karte vergrößern, um Höhenlinien sichtbar zu machen + de = Karte vergrößern, um Höhelinien sichtbar zu machen el = Μεγεθύνετε για να δείτε περιγράμματα es = Amplíe el mapa para ver las isolíneas es-MX = Amplíe el mapa para ver las isolíneas @@ -28532,7 +28532,7 @@ az = Hərəkət edin be = Перамясціць ca = Mou - de = verschieben + de = Verschieben el = Μετακίνηση es = Mover et = Teisalda @@ -28724,7 +28724,7 @@ ca = Gràcies per utilitzar els nostres mapes creats per la comunitat! cs = Děkujeme, že používáte naše komunitní mapy! da = Tak, fordi du bruger vores community-byggede kort! - de = Danke, dass du unsere von der Gemeinschaft erstellten Karten benutzt! + de = Danke, dass du unsere von der Community erstellten Karten benutzt! el = Σας ευχαριστούμε που χρησιμοποιείτε τους χάρτες μας που δημιουργήθηκαν από την κοινότητα! es = ¡Gracias por utilizar nuestros mapas creados por la comunidad! et = Aitäh, et kasutate meie kogukonna koostatud kaarte! @@ -29068,7 +29068,7 @@ ca = Podeu corregir i millorar fàcilment les dades del mapa. cs = Mapová data můžete snadno opravit a vylepšit. da = Du kan nemt rette og forbedre kortdataene. - de = Sie können die Kartendaten einfach reparieren und verbessern. + de = Sie können die Kartendaten einfach korrigieren und verbessern. el = Μπορείτε εύκολα να διορθώσετε και να βελτιώσετε τα δεδομένα χάρτη. es = Puede arreglar y mejorar fácilmente los datos del mapa. et = Saate hõlpsasti kaardiandmeid parandada ja täiustada. @@ -29290,7 +29290,7 @@ ca = Continueu al telèfon cs = Pokračujte v telefonu da = Fortsæt i telefonen - de = Weiter auf Telefon + de = Weiter am Telefon el = Συνέχεια στο κινητό es = Continuar en el teléfono es-MX = Continuar en el teléfono -- 2.45.3 From 59672f52e67cb8c79f4bb60b1e226f40c6ee6dd0 Mon Sep 17 00:00:00 2001 From: Konstantin Pastbin Date: Tue, 9 Apr 2024 20:38:44 +0300 Subject: [PATCH 6/7] [strings] Regenerate Signed-off-by: Konstantin Pastbin --- .../app/src/main/res/values-de/strings.xml | 106 ++++++++--------- .../de.lproj/Localizable.strings | 112 +++++++++--------- 2 files changed, 109 insertions(+), 109 deletions(-) diff --git a/android/app/src/main/res/values-de/strings.xml b/android/app/src/main/res/values-de/strings.xml index a6a2e0aded..043b1803e0 100644 --- a/android/app/src/main/res/values-de/strings.xml +++ b/android/app/src/main/res/values-de/strings.xml @@ -28,7 +28,7 @@ Auf der Karte suchen - Ortungsdienste sind für dieses Gerät oder die App deaktiviert. Bitte aktivieren Sie diese in den Einstellungen. + Standortdienste sind für dieses Gerät oder App deaktiviert. Bitte aktivieren Sie diese in den Einstellungen. Auf der Karte anzeigen @@ -41,11 +41,11 @@ • Keine Werbung, kein Tracking, keine Datenerfassung - • Kein Datenverbrauch, funktioniert offline + • Minimaler Batterieverbrauch, funktioniert offline - • Schnell, minimalistisch, von der Gemeinschaft entwickelt + • Schnell, minimalistisch, von der Community entwickelt - Open-Source-Anwendung von Enthusiasten und Freiwilligen. + Open-Source-Anwendung, entwickelt von Enthusiasten und Freiwilligen. Standorteinstellungen Schließen @@ -67,11 +67,11 @@ %s Herunterladen fehlgeschlagen - Neue Gruppe hinzufügen + Neue Liste hinzufügen Lesezeichenfarbe - Name des Lesezeichens + Name der Lesezeichenliste Lesezeichen @@ -91,7 +91,7 @@ Wählen Sie den Speicherort für die heruntergeladenen Karten - Karten + Heruntergeladene Karten Interner persönlicher Speicher @@ -165,7 +165,7 @@ Notizen - Organic Maps-Lesezeichen mit Ihnen geteilt + Organic Maps Lesezeichen wurden mit Ihnen geteilt Hallo!\n\nIm Anhang sind meine Lesezeichen der Organic Maps App. Sie können sie mit Organic Maps öffnen. Wenn Sie die App nicht installiert haben, können Sie sie von https://omaps.app/get?kmz für iOS oder Android herunterladen.\n\nViel Spaß beim Reisen mit Organic Maps! Lesezeichen werden geladen @@ -216,7 +216,7 @@ Information Navigation Zoom-Tasten - Auf dem Bildschirm anzeigen + Auf der Karte anzeigen Nachtmodus @@ -261,7 +261,7 @@ Hilfe - Fragen und Antworten + Häufige Fragen und Antworten Spenden @@ -269,7 +269,7 @@ Copyright - Fehler melden + App-Fehler melden Verbessern Sie die Pfeilrichtung, indem Sie das Telefon in einer Achterbewegung bewegen, um den Kompass zu kalibrieren. @@ -288,7 +288,7 @@ Alle herunterladen Wird heruntergeladen: - Zum Löschen der Karte bitte Navigation unterbrechen. + Zum Löschen der Karte bitte die Navigation unterbrechen. Es können nur Routen erstellt werden, die vollständig in einer einzigen Karte enthalten sind. @@ -302,15 +302,15 @@ Google Play Standortdienste - Bestimme schnell deinen ungefähren Standort über Bluetooth, WiFi oder das mobile Netzwerk + Ermitteln Sie schnell Ihren ungefähren Standort über Bluetooth, WLAN oder das Mobilfunknetz Karten entlang der Route herunterladen Zum Erstellen einer Route müssen alle Karten von Ihrem Standort bis zum Ziel heruntergeladen und aktualisiert worden sein. - Nicht genug Speicherplatz + Nicht genügend Speicherplatz - Aktivieren Sie bitte Ortungsdienste + Bitte aktivieren Sie die Standortdienste Speichern Ihre Beschreibungen (Text oder HTML) erstellen @@ -349,7 +349,7 @@ Wenn Sie der Route folgen, beachten Sie bitte: - – Straßenverhältnisse, die Verkehrsordnung und Straßenschilder haben stets Vorrang vor Navigationsanweisungen; + – Zustand der Straßen, die Verkehrsordnung und Straßenschilder haben stets Vorrang vor Navigationsanweisungen; – Die Karte kann ungenau sein, und die vorgeschlagene Route ist möglicherweise nicht der optimale Weg, um das Ziel zu erreichen; — Die vorgeschlagenen Routen sind als Empfehlungen zu verstehen; — Bitte seien Sie vorsichtig bei Routen in Grenzgebieten: die Routen, die unsere App erstellt, können manchmal Landesgrenzen in gesperrten Gebieten überschreiten; @@ -357,24 +357,24 @@ GPS-Signal prüfen Route kann nicht erstellt werden. Aktuelle GPS-Koordinaten konnten nicht ermittelt werden. Bitte prüfen Sie Ihr GPS-Signal. WLAN verbessert Ihre Standortgenauigkeit. - Ortungsdienste aktivieren - Aktuelle GPS-Koordinaten können nicht ermittelt werden. Aktivieren Sie Ortungsdienste, um die Route zu berechnen. + Standortdienste aktivieren + Aktuelle GPS-Koordinaten können nicht ermittelt werden. Aktivieren Sie Standortdiensten, um die Route zu berechnen. Route kann nicht ermittelt werden Route kann nicht erstellt werden. Bitte passen Sie Ihren Startpunkt oder Ihr Ziel an. Startpunkt anpassen Route wurde nicht erstellt. Startpunkt kann nicht gefunden werden. - Bitte wählen Sie einen Startpunkt in der Nähe einer Straße aus. + Bitte wählen Sie einen Startpunkt, der näher an einer Straße liegt. Ziel anpassen Route wurde nicht erstellt. Ziel kann nicht gefunden werden. - Bitte wählen Sie einen Zielort in der Nähe einer Straße aus. + Bitte wählen Sie einen Zielort, der näher an einer Straße liegt. Zwischenstopp kann nicht gefunden werden. Bitte passen Sie Ihren Zwischenstopp an. Systemfehler Route kann wegen eines Anwendungsfehlers nicht erstellt werden. Bitte versuchen Sie es erneut Möchten Sie die Karte herunterladen und eine bessere Route erstellen, die mehr als eine Karte umfasst? - Laden Sie die Karte herunter, um eine bessere Route zu erstellen, die den Rand dieser Karte überschreitet. + Laden Sie zusätzliche Karten herunter, um eine bessere Route zu erstellen, die die Grenzen dieser Karte überschreitet. Um mit der Suche und dem Erstellen von Routen zu beginnen, laden Sie bitte die Karte herunter. Sie benötigen danach keine Internetverbindung mehr. @@ -415,8 +415,8 @@ Schließzeiten Beispiele Fehler korrigieren - Position - Bitte beschreiben Sie das Problem detailliert, damit die OpenStreetMap-Gemeinschaft den Fehler beheben kann. + Standort + Bitte beschreiben Sie das Problem detailliert, damit die OpenStreetMap-Community den Fehler korrigieren kann. Oder kümmern Sie sich selbst darum auf https://www.openstreetmap.org/ Senden Problem @@ -426,7 +426,7 @@ Automatisch herunterladen Täglich - Tag und Nacht + 24/7 Heute geschlossen Geschlossen Heute @@ -435,8 +435,8 @@ Geschlossen Geschäftszeiten bearbeiten Kein Konto bei OpenStreetMap? - Registrieren - Anmelden + Bei OpenStretMap registrieren + Bei OpenStreetMap anmelden Melden Sie sich bei OpenStreetMap an Passwort Passwort vergessen? @@ -479,8 +479,8 @@ Organisation hinzufügen Ein Objekt kann hier nicht positioniert werden - Von der Gemeinschaft erstellte OpenStreetMap-Daten (Stand: %s). Erfahre mehr darüber, wie du die Karte bearbeiten und aktualisieren kannst unter OpenStreetMap.org - Melden Sie sich an, damit andere Benutzer Ihre Änderungen sehen können. + Von der Community erstellte OpenStreetMap-Daten (Stand: %s). Erfahre mehr darüber, wie du die Karte bearbeiten und aktualisieren kannst unter OpenStreetMap.org + Melden Sie sich bei openstreetmap.org an, um Ihre Änderungen weltweit zu veröffentlichen. %1$d von %2$d Über eine Mobilfunknetzverbindung herunterladen? @@ -493,13 +493,13 @@ Geben Sie die korrekte Postleitzahl ein Unbekannter Ort - Notiz an OSM-Redakteure senden + Notiz an Freiwillige von OpenStreetMap senden Ausführlicher Kommentar Ihre Änderungsvorschläge für die Karte werden an OpenStreetMap gesendet: Beschreiben Sie die Details der Objekte, die Sie in Organic Maps nicht bearbeiten können. Mehr Informationen über OpenStreetMap - Betreiber oder Eigentümer - Keine Karten geladen - Laden Sie die für die Suche nach Orten erforderlichen Karten und verwenden Sie die Navigation offline. + Eigentümer + Keine Karten heruntergeladen + Laden Sie Karten für die Offline-Suche und Navigation herunter. m @@ -517,12 +517,12 @@ Fotos, bewertungen, buchung - Der empfehlungsbonus, den wir für jede buchung über diesen link erhalten, fließt in die entwicklung von Organic Maps. + Der Empfehlungsbonus, den wir für jede Buchung über diesen Link erhalten, fließt in die Entwicklung von Organic Maps. Einzelheiten bei Kayak Lesezeichen bearbeiten Kommentar… - Alle lokalen Korrekturen verwerfen + Alle lokalen Korrekturen verwerfen? Verwerfen Hinzugefügtes Objekt löschen? Löschen @@ -538,12 +538,12 @@ Geben Sie eine gültige Twitter-Webadresse oder einen Benutzernamen ein Geben Sie eine gültige VK-Webadresse oder einen Kontonamen ein Geben Sie eine gültige LINE-Webadresse oder LINE ID ein - Einen Ort zu OpenStreetMap hinzufügen + Ort zu OpenStreetMap hinzufügen An alle Benutzer senden? - Stellen Sie sicher, dass Sie keine persönlichen Daten eingegeben haben. - OpenStreetMap-Redakteure werden die Änderungen prüfen und sich bei Fragen mit Ihnen in Verbindung setzen. + Stellen Sie sicher, dass Sie keine persönlichen oder privaten Daten eingegeben haben. + Freiwillige von OpenStreetMap werden die Änderungen prüfen und sich bei Fragen mit Ihnen in Verbindung setzen. Stopp Annehmen @@ -555,7 +555,7 @@ Heute nicht verwenden Mobiles Internet - Es wird mobiles Internet benötigt, um über Kartenaktualisierungen informiert zu werden und genauere Informationen über Orte anzuzeigen. + Für Benachrichtigungen über Kartenaktualisierungen und das Hochladen von Änderungen ist eine mobile Internetverbindung erforderlich. Nie verwenden Immer fragen Um Verkehrsdaten anzuzeigen, müssen die Karten aktualisiert werden. @@ -586,14 +586,14 @@ Bitte geben Sie einen korrekten Namen ein Listen - Alle verbergen + Alle ausblenden Alle anzeigen Neue Liste erstellen Lesezeichen und Tracks importieren - Freigabe wegen eines Anwendungsfehlers nicht möglich - Fehler bei der Freigabe - Eine leere Liste kann nicht freigegeben werden + Teilen wegen eines Anwendungsfehlers nicht möglich + Fehler beim Teilen + Eine leere Liste kann nicht geteilt werden Der Name darf nicht leer sein Bitte geben Sie den Listennamen ein Neue Liste @@ -622,7 +622,7 @@ Privatsphäre Datenschutzerklärung Nutzungsbedingungen - Staus + Verkehr U-Bahn Kartenstile und Ebenen Die U-Bahnkarte steht nicht zur Verfügung @@ -634,7 +634,7 @@ Öffentlicher Zugriff Privater Zugriff Fügen Sie die Beschreibung hinzu (Text oder html) - Persönlich + Privat Blitzer Ortsbeschreibung @@ -662,7 +662,7 @@ Autobahnen vermeiden Route kann nicht berechnet werden Leider konnten wir keine Route mit den gewählten Optionen erstellen. Ändern Sie die Einstellungen und versuchen Sie es erneut - Umwege einstellen + Routenbeschränkung einstellen Routenbeschränkungen aktiv Mautstraße Unbefestigte Straße @@ -686,7 +686,7 @@ Nach Voreinstellung - Nach Kategorie + Nach Typ Nach Entfernung @@ -697,7 +697,7 @@ Vor einem Monat Vor über einem Monat Vor über einem Jahr - In der Nähe + In meiner Nähe Sonstiges @@ -716,12 +716,12 @@ Tankstellen Medizin In der Liste suchen - Religiöse Stätten + Religiöse Orte Wählen Sie die Liste Die U-Bahn-Navigation ist in dieser Region noch nicht verfügbar Keine U-Bahn-Route gefunden Wählen Sie einen zu einer U-Bahn-Station nähergelegenen Start- oder Endpunkt - Gelände + Höhelinien Um die Topographieebene nutzen zu können, aktualisieren Sie die Karte des betreffenden Gebiets oder laden Sie diese herunter Topographieebene ist für dieses Gebiet noch nicht verfügbar Bergauf @@ -731,7 +731,7 @@ Schwierigkeitsgrad Entf.: Dauer: - Karte vergrößern, um Höhenlinien sichtbar zu machen + Karte vergrößern, um Höhelinien sichtbar zu machen Herunterladen Herunterladen der Weltkarte @@ -756,7 +756,7 @@ https://wiki.openstreetmap.org/wiki/DE:Über_OSM - Danke, dass du unsere von der Gemeinschaft erstellten Karten benutzt! + Danke, dass du unsere von der Community erstellten Karten benutzt! Mit Ihren Spenden und Ihrer Unterstützung können wir die besten Karten der Welt erstellen! @@ -772,7 +772,7 @@ Unsere App wird von einigen Enthusiasten und der Community entwickelt. - Sie können die Kartendaten einfach reparieren und verbessern. + Sie können die Kartendaten einfach korrigieren und verbessern. Unser Hauptziel ist es, schnelle, datenschutzorientierte und benutzerfreundliche Karten zu erstellen, die Sie lieben werden. @@ -782,7 +782,7 @@ Du bist mit Android Auto verbunden - Weiter auf Telefon + Weiter am Telefon Zum Autobildschirm diff --git a/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings index 72a4ced75f..4a28536ee5 100644 --- a/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/de.lproj/Localizable.strings @@ -24,7 +24,7 @@ "kilometres" = "Kilometer"; /* Leave Review dialog - Review button */ -"leave_a_review" = "Bericht abgeben"; +"leave_a_review" = "Bewertung abgeben"; /* Choose measurement on first launch alert - choose imperial system button */ "miles" = "Meilen"; @@ -57,10 +57,10 @@ "about_proposition_1" = "• Keine Werbung, kein Tracking, keine Datenerfassung"; /* Text in About screen */ -"about_proposition_2" = "• Kein Datenverbrauch, funktioniert offline"; +"about_proposition_2" = "• Minimaler Batterieverbrauch, funktioniert offline"; /* Text in About screen */ -"about_proposition_3" = "• Schnell, minimalistisch, von der Gemeinschaft entwickelt"; +"about_proposition_3" = "• Schnell, minimalistisch, von der Community entwickelt"; "close" = "Schließen"; @@ -70,13 +70,13 @@ "continue_download" = "Fortfahren"; /* "Add new bookmark list" dialog title */ -"add_new_set" = "Neue Gruppe hinzufügen"; +"add_new_set" = "Neue Liste hinzufügen"; /* Add Bookmark list dialog - hint when the list name is empty */ -"bookmark_set_name" = "Name des Lesezeichens"; +"bookmark_set_name" = "Name der Lesezeichenliste"; /* "Bookmark Lists" dialog title */ -"bookmark_sets" = "Lesezeichenmappe"; +"bookmark_sets" = "Lesezeichenliste"; /* Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. */ "bookmarks" = "Lesezeichen"; @@ -308,7 +308,7 @@ "help" = "Hilfe"; /* Button in the main Help dialog */ -"faq" = "Fragen und Antworten"; +"faq" = "Häufige Fragen und Antworten"; /* Button in the main menu */ "donate" = "Spenden"; @@ -320,19 +320,19 @@ "copyright" = "Copyright"; /* Text in menu + Button in the main Help dialog */ -"report_a_bug" = "Fehler melden"; +"report_a_bug" = "App-Fehler melden"; /* Button in the About screen */ "report_incorrect_map_bug" = "Falsche Kartendaten melden oder korrigieren"; /* Button in the About screen */ -"volunteer" = "Für Freiwillige"; +"volunteer" = "Freiwillig helfen"; /* "Social media" section header in the About screen */ -"follow_us" = "Folge uns und kontaktiere uns:"; +"follow_us" = "Folge und kontaktiere uns:"; /* Alert text */ -"email_error_body" = "Der Email-Client ist noch nicht eingerichtet worden. Konfigurieren Sie ihn bitte oder nutzen Sie eine andere Möglichkeit, uns unter %@ zu erreichen."; +"email_error_body" = "Der Email-Client ist noch nicht eingerichtet worden. Konfigurieren Sie ihn bitte oder nutzen Sie eine andere Möglichkeit oder kontaktieren Sie uns unter %@"; /* Alert title */ "email_error_title" = "Fehler beim Email-Versand"; @@ -370,7 +370,7 @@ "downloader_status_failed" = "Fehlgeschlagen"; /* Displayed in a dialog that appears when a user tries to delete a map while the app is in the follow route mode */ -"downloader_delete_map_while_routing_dialog" = "Zum Löschen der Karte bitte Navigation unterbrechen."; +"downloader_delete_map_while_routing_dialog" = "Zum Löschen der Karte bitte die Navigation unterbrechen."; /* PointsInDifferentMWM */ "routing_failed_cross_mwm_building" = "Es können nur Routen erstellt werden, die vollständig in einer einzigen Karte enthalten sind."; @@ -450,7 +450,7 @@ "dialog_routing_disclaimer_title" = "Wenn Sie der Route folgen, beachten Sie bitte:"; -"dialog_routing_disclaimer_priority" = "– Straßenverhältnisse, die Verkehrsordnung und Straßenschilder haben stets Vorrang vor Navigationsanweisungen;"; +"dialog_routing_disclaimer_priority" = "– Zustand der Straßen, die Verkehrsordnung und Straßenschilder haben stets Vorrang vor Navigationsanweisungen;"; "dialog_routing_disclaimer_precision" = "– Die Karte kann ungenau sein, und die vorgeschlagene Route ist möglicherweise nicht der optimale Weg, um das Ziel zu erreichen;"; @@ -466,13 +466,13 @@ "dialog_routing_location_turn_wifi" = "Bitte prüfen Sie Ihr GPS-Signal. WLAN verbessert Ihre Standortgenauigkeit."; -"dialog_routing_location_turn_on" = "Ortungsdienste aktivieren"; +"dialog_routing_location_turn_on" = "Standortdienste aktivieren"; -"dialog_routing_location_unknown_turn_on" = "Aktuelle GPS-Koordinaten können nicht ermittelt werden. Aktivieren Sie Ortungsdienste, um die Route zu berechnen."; +"dialog_routing_location_unknown_turn_on" = "Aktuelle GPS-Koordinaten können nicht ermittelt werden. Aktivieren Sie Standortdiensten, um die Route zu berechnen."; "dialog_routing_download_files" = "Erforderliche Dateien herunterladen"; -"dialog_routing_download_and_update_all" = "Laden Sie alle Karten- und Routeninformationen für den geplanten Weg herunter und aktualisieren Sie sie, um die Route zu berechnen."; +"dialog_routing_download_and_update_all" = "Laden Sie alle Karten- und Routeninformationen für den geplanten Weg herunter oder aktualisieren Sie sie, um die Route zu berechnen."; "dialog_routing_unable_locate_route" = "Route kann nicht ermittelt werden"; @@ -482,13 +482,13 @@ "dialog_routing_start_not_determined" = "Route wurde nicht erstellt. Startpunkt kann nicht gefunden werden."; -"dialog_routing_select_closer_start" = "Bitte wählen Sie einen Startpunkt in der Nähe einer Straße aus."; +"dialog_routing_select_closer_start" = "Bitte wählen Sie einen Startpunkt, der näher an einer Straße liegt."; "dialog_routing_change_end" = "Ziel anpassen"; "dialog_routing_end_not_determined" = "Route wurde nicht erstellt. Ziel kann nicht gefunden werden."; -"dialog_routing_select_closer_end" = "Bitte wählen Sie einen Zielort in der Nähe einer Straße aus."; +"dialog_routing_select_closer_end" = "Bitte wählen Sie einen Zielort, der näher an einer Straße liegt."; "dialog_routing_change_intermediate" = "Zwischenstopp kann nicht gefunden werden."; @@ -504,7 +504,7 @@ "dialog_routing_download_and_build_cross_route" = "Möchten Sie die Karte herunterladen und eine bessere Route erstellen, die mehr als eine Karte umfasst?"; -"dialog_routing_download_cross_route" = "Laden Sie die Karte herunter, um eine bessere Route zu erstellen, die den Rand dieser Karte überschreitet."; +"dialog_routing_download_cross_route" = "Laden Sie zusätzliche Karten herunter, um eine bessere Route zu erstellen, die die Grenzen dieser Karte überschreitet."; /********** Strings for downloading map from search **********/ @@ -579,7 +579,7 @@ "editor_example_values" = "Beispiele"; -"editor_add_select_location" = "Position"; +"editor_add_select_location" = "Standort"; "editor_done_dialog_1" = "Sie haben die Weltkarte geändert. Behalten Sie das nicht für sich! Erzählen Sie Ihren Freunden davon und bearbeiten Sie sie zusammen."; @@ -595,7 +595,7 @@ /* Place Page opening hours text */ "daily" = "Täglich"; -"twentyfour_seven" = "Tag und Nacht"; +"twentyfour_seven" = "24/7"; "day_off_today" = "Heute geschlossen"; @@ -617,17 +617,17 @@ "closed" = "Geschlossen"; -"add_opening_hours" = "Geschäftszeiten hinzufügen"; +"add_opening_hours" = "Öffnungszeiten hinzufügen"; "no_osm_account" = "Kein Konto bei OpenStreetMap?"; -"register_at_openstreetmap" = "Registrieren"; +"register_at_openstreetmap" = "Bei OpenStretMap registrieren"; "password_8_chars_min" = "Passwort (mindestens 8 Zeichen)"; "invalid_username_or_password" = "Ungültiger Benutzername oder Passwort."; -"login" = "Anmelden"; +"login" = "Bei OpenStreetMap anmelden"; "login_osm" = "Melden Sie sich bei OpenStreetMap an"; @@ -714,9 +714,9 @@ "message_invalid_feature_position" = "Ein Objekt kann hier nicht positioniert werden"; /* Text in About and OSM Login screens. First %@ is replaced by a local, human readable date. */ -"osm_presentation" = "Von der Gemeinschaft erstellte OpenStreetMap-Daten (Stand: %@). Erfahre mehr darüber, wie du die Karte bearbeiten und aktualisieren kannst unter OpenStreetMap.org"; +"osm_presentation" = "Von der Community erstellte OpenStreetMap-Daten (Stand: %@). Erfahre mehr darüber, wie du die Karte bearbeiten und aktualisieren kannst unter OpenStreetMap.org"; -"login_to_make_edits_visible" = "Melden Sie sich an, damit andere Benutzer Ihre Änderungen sehen können."; +"login_to_make_edits_visible" = "Melden Sie sich bei openstreetmap.org an, um Ihre Änderungen weltweit zu veröffentlichen."; /* Error dialog no space */ "migration_no_space_message" = "Zum Herunterladen benötigen Sie mehr Platz. Bitte löschen Sie unnötige Daten."; @@ -744,7 +744,7 @@ /* Place Page title for long tap */ "core_placepage_unknown_place" = "Unbekannter Ort"; -"editor_other_info" = "Notiz an OSM-Redakteure senden"; +"editor_other_info" = "Notiz an Freiwillige von OpenStreetMap senden"; "editor_detailed_description_hint" = "Ausführlicher Kommentar"; @@ -752,17 +752,17 @@ "editor_more_about_osm" = "Mehr Informationen über OpenStreetMap"; -"editor_operator" = "Betreiber oder Eigentümer"; +"editor_operator" = "Eigentümer"; -"downloader_no_downloaded_maps_title" = "Keine Karten geladen"; +"downloader_no_downloaded_maps_title" = "Keine Karten heruntergeladen"; -"downloader_no_downloaded_maps_message" = "Laden Sie die für die Suche nach Orten erforderlichen Karten und verwenden Sie die Navigation offline."; +"downloader_no_downloaded_maps_message" = "Laden Sie Karten für die Offline-Suche und Navigation herunter."; -"current_location_unknown_error_title" = "Standort nicht gefunden."; +"current_location_unknown_error_title" = "Aktueller Standort unbekannt"; "current_location_unknown_error_message" = "Bei der Standortsuche ist ein unbekannter Fehler aufgetreten. Prüfen Sie die Funktionstüchtigkeit Ihres Geräts und versuchen Sie es etwas später erneut."; -"location_services_disabled_header" = "Standort-Identifizierung ist deaktiviert"; +"location_services_disabled_header" = "Standortdienste sind deaktiviert"; "location_services_disabled_message" = "Aktivieren Sie den Zugang zur Positionsbestimmung in den Geräteeinstellungen"; @@ -810,18 +810,18 @@ "more_on_kayak" = "Fotos, bewertungen, buchung"; /* An explanation dialog shown when clicking on more_on_kayak link. */ -"dialog_kayak_disclaimer" = "Der empfehlungsbonus, den wir für jede buchung über diesen link erhalten, fließt in die entwicklung von Organic Maps."; +"dialog_kayak_disclaimer" = "Der Empfehlungsbonus, den wir für jede Buchung über diesen Link erhalten, fließt in die Entwicklung von Organic Maps."; /* A confirmation button text in the explanation dialog that opens hotel details page on Kayak website. */ "dialog_kayak_button" = "Einzelheiten bei Kayak"; -"placepage_call_button" = "Anruf"; +"placepage_call_button" = "Anrufen"; "placepage_edit_bookmark_button" = "Lesezeichen bearbeiten"; "placepage_bookmark_name_hint" = "Name des Lesezeichens"; -"placepage_personal_notes_hint" = "Anmerkung"; +"placepage_personal_notes_hint" = "Persönliche Notizen"; "placepage_delete_bookmark_button" = "Lesezeichen löschen"; @@ -829,7 +829,7 @@ "editor_comment_hint" = "Kommentar…"; -"editor_reset_edits_message" = "Alle lokalen Korrekturen verwerfen"; +"editor_reset_edits_message" = "Alle lokalen Korrekturen verwerfen?"; "editor_reset_edits_button" = "Verwerfen"; @@ -850,15 +850,15 @@ "refresh" = "Aktualisieren"; -"placepage_add_place_button" = "Einen Ort zu OpenStreetMap hinzufügen"; +"placepage_add_place_button" = "Ort zu OpenStreetMap hinzufügen"; /* Displayed when saving some edits to the map to warn against publishing personal data */ "editor_share_to_all_dialog_title" = "An alle Benutzer senden?"; /* Dialog before publishing the modifications to the public map. */ -"editor_share_to_all_dialog_message_1" = "Stellen Sie sicher, dass Sie keine persönlichen Daten eingegeben haben."; +"editor_share_to_all_dialog_message_1" = "Stellen Sie sicher, dass Sie keine persönlichen oder privaten Daten eingegeben haben."; -"editor_share_to_all_dialog_message_2" = "OpenStreetMap-Redakteure werden die Änderungen prüfen und sich bei Fragen mit Ihnen in Verbindung setzen."; +"editor_share_to_all_dialog_message_2" = "Freiwillige von OpenStreetMap werden die Änderungen prüfen und sich bei Fragen mit Ihnen in Verbindung setzen."; "navigation_stop_button" = "Stopp"; @@ -894,7 +894,7 @@ "mobile_data" = "Mobiles Internet"; /* NOTE to translators: please synchronize your translation with the English one. */ -"mobile_data_description" = "Es wird mobiles Internet benötigt, um über Kartenaktualisierungen informiert zu werden und genauere Informationen über Orte anzuzeigen."; +"mobile_data_description" = "Für Benachrichtigungen über Kartenaktualisierungen und das Hochladen von Änderungen ist eine mobile Internetverbindung erforderlich."; "mobile_data_option_never" = "Nie verwenden"; @@ -946,13 +946,13 @@ "bookmark_lists" = "Listen"; /* Do not display all bookmark lists on the map */ -"bookmark_lists_hide_all" = "Alle verbergen"; +"bookmark_lists_hide_all" = "Alle ausblenden"; "bookmark_lists_show_all" = "Alle anzeigen"; "bookmarks_create_new_group" = "Neue Liste erstellen"; -"downloader_hide_screen" = "Bildschirm verbergen"; +"downloader_hide_screen" = "Bildschirm ausblenden"; "downloader_percent" = "%@ (%@ von %@)"; @@ -960,11 +960,11 @@ "downloader_applying" = "%@ anwenden…"; -"bookmarks_error_message_share_general" = "Freigabe wegen eines Anwendungsfehlers nicht möglich"; +"bookmarks_error_message_share_general" = "Teilen wegen eines Anwendungsfehlers nicht möglich"; -"bookmarks_error_title_share_empty" = "Fehler bei der Freigabe"; +"bookmarks_error_title_share_empty" = "Fehler beim Teilen"; -"bookmarks_error_message_share_empty" = "Eine leere Liste kann nicht freigegeben werden"; +"bookmarks_error_message_share_empty" = "Eine leere Liste kann nicht geteilt werden"; "bookmarks_error_message_empty_list_name" = "Bitte geben Sie den Listennamen ein"; @@ -992,7 +992,7 @@ "terms_of_use" = "Nutzungsbedingungen"; -"button_layer_traffic" = "Staus"; +"button_layer_traffic" = "Verkehr"; "button_layer_subway" = "U-Bahn"; @@ -1056,7 +1056,7 @@ "unable_to_calc_alert_subtitle" = "Leider konnten wir keine Route mit den gewählten Optionen erstellen. Ändern Sie die Einstellungen und versuchen Sie es erneut"; -"define_to_avoid_btn" = "Umwege einstellen"; +"define_to_avoid_btn" = "Routenbeschränkung einstellen"; "change_driving_options_btn" = "Routenbeschränkungen aktiv"; @@ -1127,13 +1127,13 @@ "sort" = "Sortieren…"; /* iOS */ -"sort_default" = "Default Sortierung"; +"sort_default" = "Nach Voreinstellung sortieren"; -"sort_type" = "Sortierung nach Kategorien"; +"sort_type" = "Nach Kategorien sortieren"; -"sort_distance" = "Sortieren nach Entfernung"; +"sort_distance" = "Nach Entfernung sortieren"; -"sort_date" = "Sortieren nach Datum"; +"sort_date" = "Nach Datum sortieren"; "sort_name" = "Nach Name sortieren"; @@ -1145,7 +1145,7 @@ "moreyear_ago_sorttype" = "Vor über einem Jahr"; -"near_me_sorttype" = "In der Nähe"; +"near_me_sorttype" = "In meiner Nähe"; "others_sorttype" = "Sonstiges"; @@ -1182,7 +1182,7 @@ "search_in_the_list" = "In der Liste suchen"; -"religious_places" = "Religiöse Stätten"; +"religious_places" = "Religiöse Orte"; "transit_not_found" = "Die U-Bahn-Navigation ist in dieser Region noch nicht verfügbar"; @@ -1190,7 +1190,7 @@ "dialog_pedestrian_route_is_long_message" = "Wählen Sie einen zu einer U-Bahn-Station nähergelegenen Start- oder Endpunkt"; -"button_layer_isolines" = "Gelände"; +"button_layer_isolines" = "Höhelinien"; "isolines_activation_error_dialog" = "Um die Topographieebene nutzen zu können, aktualisieren Sie die Karte des betreffenden Gebiets oder laden Sie diese herunter"; @@ -1216,7 +1216,7 @@ "elevation_profile_time" = "Dauer:"; -"isolines_toast_zooms_1_10" = "Karte vergrößern, um Höhenlinien sichtbar zu machen"; +"isolines_toast_zooms_1_10" = "Karte vergrößern, um Höhelinien sichtbar zu machen"; "downloader_updating_ios" = "Aktualisierung"; @@ -1241,7 +1241,7 @@ "placepage_track_name_hint" = "Name des Tracks"; /* move track or bookmark from the list button text */ -"move" = "verschieben"; +"move" = "Verschieben"; /* edit track screen title */ "track_title" = "Track"; -- 2.45.3 From af7607fe779c3eeb7d25e4f2ed0597c1e6007515 Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Tue, 9 Apr 2024 22:52:26 +0200 Subject: [PATCH 7/7] Review fixes Signed-off-by: Alexander Borsuk --- drape/glyph_manager.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/drape/glyph_manager.cpp b/drape/glyph_manager.cpp index 244f30572e..cf26b13f0f 100644 --- a/drape/glyph_manager.cpp +++ b/drape/glyph_manager.cpp @@ -9,6 +9,7 @@ #include "base/string_utils.hpp" #include "base/logging.hpp" +#include "base/macros.hpp" #include "base/math.hpp" #include "3party/sdf_image/sdf_image.h" @@ -112,6 +113,7 @@ class Font { public: DECLARE_EXCEPTION(InvalidFontException, RootException); + DISALLOW_COPY_AND_MOVE(Font); Font(uint32_t sdfScale, ReaderPtr && fontReader, FT_Library lib) : m_fontReader(std::move(fontReader)) @@ -138,7 +140,6 @@ public: { ASSERT(m_fontFace, ()); FREETYPE_CHECK(FT_Done_Face(m_fontFace)); - m_fontFace = nullptr; } bool IsValid() const { return m_fontFace && m_fontFace->num_glyphs > 0; } @@ -215,8 +216,7 @@ public: while (gindex) charcodes.push_back(FT_Get_Next_Char(m_fontFace, charcodes.back(), &gindex)); - std::sort(charcodes.begin(), charcodes.end()); - charcodes.erase(std::unique(charcodes.begin(), charcodes.end()), charcodes.end()); + base::SortUnique(charcodes); } static unsigned long Read(FT_Stream stream, unsigned long offset, unsigned char * buffer, unsigned long count) @@ -304,19 +304,17 @@ using TUniBlockIter = TUniBlocks::const_iterator; struct GlyphManager::Impl { + DISALLOW_COPY_AND_MOVE(Impl); + Impl() = default; - ~Impl() { + ~Impl() + { m_fonts.clear(); if (m_library) FREETYPE_CHECK(FT_Done_FreeType(m_library)); } - Impl(Impl const &) = delete; - Impl(Impl &&) = delete; - Impl & operator=(Impl const &) = delete; - Impl & operator=(Impl &&) = delete; - FT_Library m_library; TUniBlocks m_blocks; TUniBlockIter m_lastUsedBlock; -- 2.45.3