From fd9a5db2107a484d280b26d259a9c7aa81728d05 Mon Sep 17 00:00:00 2001 From: Joachim Schmitz Date: Fri, 12 Jun 2026 15:30:37 +0200 Subject: [PATCH 1/2] Set the date macros' format in one place --- .../rendering/score/headerfooterlayout.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/engraving/rendering/score/headerfooterlayout.cpp b/src/engraving/rendering/score/headerfooterlayout.cpp index cf6d19191ad44..2e8bbd5c60f59 100644 --- a/src/engraving/rendering/score/headerfooterlayout.cpp +++ b/src/engraving/rendering/score/headerfooterlayout.cpp @@ -257,6 +257,7 @@ TextBlock HeaderFooterLayout::replaceTextMacros(LayoutContext& ctx, const Page* } for (size_t i = 0, n = s.size(); i < n; ++i) { + auto dateFormat = muse::DateFormat::ISODate; Char c = s.at(i); if (c == '$' && (i < (n - 1))) { Char nc = s.at(i + 1); @@ -306,17 +307,15 @@ TextBlock HeaderFooterLayout::replaceTextMacros(LayoutContext& ctx, const Page* newFragments.back().text += page->score()->masterScore()->fileInfo()->path().toString(); break; case 'd': - newFragments.back().text += muse::Date::currentDate().toString(muse::DateFormat::ISODate); + newFragments.back().text += muse::Date::currentDate().toString(dateFormat); break; case 'D': { String creationDate = page->score()->metaTag(u"creationDate"); if (creationDate.isEmpty()) { - newFragments.back().text += page->score()->masterScore()->fileInfo()->birthTime().date().toString( - muse::DateFormat::ISODate); + newFragments.back().text += page->score()->masterScore()->fileInfo()->birthTime().date().toString(dateFormat); } else { - newFragments.back().text += muse::Date::fromStringISOFormat(creationDate).toString( - muse::DateFormat::ISODate); + newFragments.back().text += muse::Date::fromStringISOFormat(creationDate).toString(dateFormat); } } break; @@ -325,7 +324,7 @@ TextBlock HeaderFooterLayout::replaceTextMacros(LayoutContext& ctx, const Page* if (fileInfo->isNewlyCreated()) { newFragments.back().text += String(u"HH:mm:ss"); } else { - newFragments.back().text += fileInfo->lastModified().time().toString(muse::DateFormat::ISODate); + newFragments.back().text += fileInfo->lastModified().time().toString(dateFormat); } } break; @@ -334,7 +333,7 @@ TextBlock HeaderFooterLayout::replaceTextMacros(LayoutContext& ctx, const Page* if (fileInfo->isNewlyCreated()) { newFragments.back().text += String(u"YYYY-MM-DD"); } else { - newFragments.back().text += fileInfo->lastModified().date().toString(muse::DateFormat::ISODate); + newFragments.back().text += fileInfo->lastModified().date().toString(dateFormat); } } break; From b2410c610a9af2e31ae9d7a5440007f616952ca1 Mon Sep 17 00:00:00 2001 From: Joachim Schmitz Date: Fri, 12 Jun 2026 15:39:44 +0200 Subject: [PATCH 2/2] Set the date macros' locale per a score style setting --- src/engraving/rendering/score/headerfooterlayout.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/engraving/rendering/score/headerfooterlayout.cpp b/src/engraving/rendering/score/headerfooterlayout.cpp index 2e8bbd5c60f59..6817e1428cfaa 100644 --- a/src/engraving/rendering/score/headerfooterlayout.cpp +++ b/src/engraving/rendering/score/headerfooterlayout.cpp @@ -257,7 +257,12 @@ TextBlock HeaderFooterLayout::replaceTextMacros(LayoutContext& ctx, const Page* } for (size_t i = 0, n = s.size(); i < n; ++i) { - auto dateFormat = muse::DateFormat::ISODate; + auto dateFormat = muse::DateFormat::LocaleShortFormat; + const char* locale = "de"; // TODO: get the actual locale from the score's style settings + if (!std::setlocale(LC_TIME, locale)) { + LOGW() << "Failed to set LC_TIME locale for language code:" << locale << "using ISO format instead"; + dateFormat = muse::DateFormat::ISODate; + } Char c = s.at(i); if (c == '$' && (i < (n - 1))) { Char nc = s.at(i + 1); @@ -322,7 +327,7 @@ TextBlock HeaderFooterLayout::replaceTextMacros(LayoutContext& ctx, const Page* case 'm': { IFileInfoProviderPtr fileInfo = page->score()->masterScore()->fileInfo(); if (fileInfo->isNewlyCreated()) { - newFragments.back().text += String(u"HH:mm:ss"); + newFragments.back().text += muse::Time::currentTime().toString(dateFormat); } else { newFragments.back().text += fileInfo->lastModified().time().toString(dateFormat); } @@ -331,7 +336,7 @@ TextBlock HeaderFooterLayout::replaceTextMacros(LayoutContext& ctx, const Page* case 'M': { IFileInfoProviderPtr fileInfo = page->score()->masterScore()->fileInfo(); if (fileInfo->isNewlyCreated()) { - newFragments.back().text += String(u"YYYY-MM-DD"); + newFragments.back().text += muse::Date::currentDate().toString(dateFormat); } else { newFragments.back().text += fileInfo->lastModified().date().toString(dateFormat); }