1
0

Introduce formatted dates per language.

This commit is contained in:
Kevin Matsubara 2026-01-09 23:44:37 +01:00
parent 8059296e73
commit ae7cf0a117
12 changed files with 98 additions and 54 deletions

View File

@ -41,7 +41,7 @@ $endfor$
</tr>
$for(fielddays)$
<tr>
<td>$date$</td>
<td>$formatted_date$</td>
<td><a href="$url$">$title$</a><br/>$if(pota-locator)$<strong>POTA</strong>: $pota-locator$ $endif$ $if(wwff-locator)$<strong>WW-FF</strong>: $wwff-locator$ $endif$</td>
<td class="d-none d-md-table-cell">$mode$ - $bands$ - $antenna$ antenna<br/>$transceiver$</td>
<td class="d-none d-md-table-cell">$total-unique-qso$</td>

View File

@ -41,7 +41,7 @@ $endfor$
</tr>
$for(fielddays)$
<tr>
<td>$date$</td>
<td>$formatted_date$</td>
<td><a href="$url$">$title$</a><br/>$if(pota-locator)$<strong>POTA</strong>: $pota-locator$ $endif$ $if(wwff-locator)$<strong>WW-FF</strong>: $wwff-locator$ $endif$</td>
<td class="d-none d-md-table-cell">$mode$ - $bands$ - $antenna$ アンテナ<br/>$transceiver$</td>
<td class="d-none d-md-table-cell">$total-unique-qso$</td>

View File

@ -41,7 +41,7 @@ $endfor$
</tr>
$for(fielddays)$
<tr>
<td>$date$</td>
<td>$formatted_date$</td>
<td><a href="$url$">$title$</a><br/>$if(pota-locator)$<strong>POTA</strong>: $pota-locator$ $endif$ $if(wwff-locator)$<strong>WW-FF</strong>: $wwff-locator$ $endif$</td>
<td class="d-none d-md-table-cell">$mode$ - $bands$ - $antenna$ antenne<br/>$transceiver$</td>
<td class="d-none d-md-table-cell">$total-unique-qso$</td>

View File

@ -35,10 +35,11 @@ main = hakyll $ do
identifier <- getUnderlying
metadata <- getMetadata identifier
let language = lookupString "language" metadata
let lang = fromMaybe "en" language
pandocCompiler
>>= loadAndApplyTemplate "templates/post.html" (postCtx language)
>>= loadAndApplyTemplate "templates/default.html" (postCtx language)
>>= loadAndApplyTemplate "templates/post.html" (postCtx lang)
>>= loadAndApplyTemplate "templates/default.html" (postCtx lang)
>>= relativizeUrls
match "events/*" $ do
@ -47,10 +48,11 @@ main = hakyll $ do
identifier <- getUnderlying
metadata <- getMetadata identifier
let language = lookupString "language" metadata
let lang = fromMaybe "en" language
pandocCompiler
>>= loadAndApplyTemplate "templates/event.html" (postCtx language)
>>= loadAndApplyTemplate "templates/default.html" (postCtx language)
>>= loadAndApplyTemplate "templates/event.html" (postCtx lang)
>>= loadAndApplyTemplate "templates/default.html" (postCtx lang)
>>= relativizeUrls
match "pages/en/japan/language/**" $ do
@ -59,10 +61,11 @@ main = hakyll $ do
identifier <- getUnderlying
metadata <- getMetadata identifier
let language = lookupString "language" metadata
let lang = fromMaybe "en" language
pandocCompiler
>>= loadAndApplyTemplate "templates/japan-language-note.html" (postCtx language)
>>= loadAndApplyTemplate "templates/default.html" (postCtx language)
>>= loadAndApplyTemplate "templates/japan-language-note.html" (postCtx lang)
>>= loadAndApplyTemplate "templates/default.html" (postCtx lang)
>>= relativizeUrls
match "pages/*/plamo/equipment/**" $ do
@ -71,10 +74,11 @@ main = hakyll $ do
identifier <- getUnderlying
metadata <- getMetadata identifier
let language = lookupString "language" metadata
let lang = fromMaybe "en" language
pandocCompiler
>>= loadAndApplyTemplate "templates/equipment.html" (postCtx language)
>>= loadAndApplyTemplate "templates/default.html" (postCtx language)
>>= loadAndApplyTemplate "templates/equipment.html" (postCtx lang)
>>= loadAndApplyTemplate "templates/default.html" (postCtx lang)
>>= relativizeUrls
match "pages/*/plamo/model-kits/**" $ do
@ -83,16 +87,17 @@ main = hakyll $ do
identifier <- getUnderlying
metadata <- getMetadata identifier
let language = lookupString "language" metadata
let lang = fromMaybe "en" language
let dateValue = lookupString "date" metadata
purchaseDateValue = lookupString "purchase_date" metadata
formattedPurchaseDate = maybe "" formatDate purchaseDateValue
formattedPurchaseDate = maybe "" (formatDate lang) purchaseDateValue
modelKitTemplate =
if dateValue == Just "1990-01-01"
then "templates/model-kit-not-ready.html"
else "templates/model-kit.html"
extendedCtx = constField "formatted_purchase_date" formattedPurchaseDate <> (postCtx language)
extendedCtx = constField "formatted_purchase_date" formattedPurchaseDate <> (postCtx lang)
pandocCompiler
>>= loadAndApplyTemplate modelKitTemplate extendedCtx
@ -105,10 +110,11 @@ main = hakyll $ do
identifier <- getUnderlying
metadata <- getMetadata identifier
let language = lookupString "language" metadata
let lang = fromMaybe "en" language
pandocCompiler
>>= loadAndApplyTemplate "templates/radio.html" (postCtx language)
>>= loadAndApplyTemplate "templates/default.html" (postCtx language)
>>= loadAndApplyTemplate "templates/radio.html" (postCtx lang)
>>= loadAndApplyTemplate "templates/default.html" (postCtx lang)
>>= relativizeUrls
match "pages/*/software/**" $ do
@ -117,10 +123,11 @@ main = hakyll $ do
identifier <- getUnderlying
metadata <- getMetadata identifier
let language = lookupString "language" metadata
let lang = fromMaybe "en" language
pandocCompiler
-- >>= loadAndApplyTemplate "templates/software-post.html" (postCtx language)
>>= loadAndApplyTemplate "templates/default.html" (postCtx language)
-- >>= loadAndApplyTemplate "templates/software-post.html" (postCtx lang)
>>= loadAndApplyTemplate "templates/default.html" (postCtx lang)
>>= relativizeUrls
create ["archive.html"] $ do
@ -133,7 +140,7 @@ main = hakyll $ do
posts <- recentFirst =<< loadAll "posts/*"
let archiveCtx =
listField "posts" (postCtx language) (return posts) <>
listField "posts" (postCtx lang) (return posts) <>
constField "title" "Archives" <>
constField "language" lang <>
langDict lang <>
@ -151,19 +158,16 @@ main = hakyll $ do
]) $ do
route idRoute
compile $ do
-- ident <- getUnderlying
-- language <- getMetadataField' ident "language"
identifier <- getUnderlying
metadata <- getMetadata identifier
let language = lookupString "language" metadata
let lang = fromMaybe "en" language
let urla = "pages/" ++ lang ++ "/plamo/model-kits/**"
kits <- recentFirst =<< loadAll (fromGlob (urla))
let url = "pages/" ++ lang ++ "/plamo/model-kits/**"
kits <- recentFirst =<< loadAll (fromGlob (url))
let plamoCtx =
listField "kits" kitCtx (return kits) <>
listField "kits" (kitCtx lang) (return kits) <>
langDict lang <>
defaultContext
@ -187,7 +191,7 @@ main = hakyll $ do
notes <- loadAll "pages/en/japan/language/notes/*"
let japanCtx =
listField "notes" (postCtx language) (return notes) <>
listField "notes" (postCtx lang) (return notes) <>
langDict lang <>
defaultContext
@ -213,8 +217,8 @@ main = hakyll $ do
fielddays <- recentFirst fielddays
let radioCtx =
listField "antenna" (postCtx language) (return antenna) <>
listField "fielddays" (postCtx language) (return fielddays) <>
listField "antenna" (postCtx lang) (return antenna) <>
listField "fielddays" (postCtx lang) (return fielddays) <>
langDict lang <>
defaultContext
@ -239,7 +243,7 @@ main = hakyll $ do
projects <- recentFirst projects
let softwareCtx =
listField "projects" (postCtx language) (return projects) <>
listField "projects" (postCtx lang) (return projects) <>
langDict lang <>
defaultContext
@ -263,7 +267,7 @@ main = hakyll $ do
blazorPages <- loadAll "pages/en/software/code/blazor/*"
let softwareCtx =
listField "blazorPages" (postCtx language) (return blazorPages) <>
listField "blazorPages" (postCtx lang) (return blazorPages) <>
langDict lang <>
defaultContext
@ -287,7 +291,7 @@ main = hakyll $ do
elmPages <- loadAll "pages/en/software/code/elm/*"
let softwareCtx =
listField "elmPages" (postCtx language) (return elmPages) <>
listField "elmPages" (postCtx lang) (return elmPages) <>
langDict lang <>
defaultContext
@ -311,7 +315,7 @@ main = hakyll $ do
haskellPages <- loadAll "pages/en/software/code/haskell/*"
let softwareCtx =
listField "haskellPages" (postCtx language) (return haskellPages) <>
listField "haskellPages" (postCtx lang) (return haskellPages) <>
langDict lang <>
defaultContext
@ -335,7 +339,7 @@ main = hakyll $ do
equipment <- loadAll $ (fromGlob ("pages/" ++ lang ++ "/plamo/equipment/*"))
let equipmentCtx =
listField "equipment" (postCtx language) (return equipment) <>
listField "equipment" (postCtx lang) (return equipment) <>
langDict lang <>
defaultContext
@ -393,8 +397,8 @@ main = hakyll $ do
let indexCtx =
-- (<> is the modern version of `mappend`.)
listField "posts" (postCtx language) (return posts) <>
listField "events" (postCtx language) (return events) <>
listField "posts" (postCtx lang) (return posts) <>
listField "events" (postCtx lang) (return events) <>
langDict lang <>
defaultContext
@ -413,29 +417,69 @@ staticPageContext =
langDict "en" <>
defaultContext
formatDate :: String -> String
formatDate s =
localeFor :: String -> TimeLocale
localeFor "nl" = dutchLocale
localeFor "jp" = japaneseLocale
localeFor _ = defaultTimeLocale
dutchLocale :: TimeLocale
dutchLocale = defaultTimeLocale
{ months =
[ ("januari", "jan"), ("februari", "feb"), ("maart", "mrt")
, ("april", "apr"), ("mei", "mei"), ("juni", "jun")
, ("juli", "jul"), ("augustus", "aug"), ("september", "sep")
, ("oktober", "okt"), ("november", "nov"), ("december", "dec")
]
}
japaneseLocale :: TimeLocale
japaneseLocale = defaultTimeLocale
{ months =
[ ("1月","1月"), ("2月","2月"), ("3月","3月")
, ("4月","4月"), ("5月","5月"), ("6月","6月")
, ("7月","7月"), ("8月","8月"), ("9月","9月")
, ("10月","10月"), ("11月","11月"), ("12月","12月")
]
}
formatStringFor :: String -> String
formatStringFor "en" = "%e %B %Y"
formatStringFor "nl" = "%e %B %Y"
formatStringFor "jp" = "%Y年 %m月 %e日"
formatStringFor _ = "%e %B %Y"
formatDate :: String -> String -> String
formatDate lang s =
case parseTimeM True defaultTimeLocale "%Y-%m-%d" s :: Maybe Day of
Just day -> formatTime defaultTimeLocale "%e %B %Y" day
Just day -> formatTime (localeFor lang) (formatStringFor lang) day
Nothing -> s
postCtx :: Maybe String -> Context String
postCtx :: String -> Context String
postCtx language =
let lang = fromMaybe "en" language
in
let
-- Custom field for formatted date
formattedDateField :: Context String
formattedDateField = field "formatted_date" $ \item -> do
-- Get the metadata for this item
meta <- getMetadata (itemIdentifier item)
let mDate = lookupString "date" meta
return $ maybe "" (formatDate language) mDate
in -- Keep the original "date" field.
dateField "date" "%e %B %Y" <>
constField "language" lang <>
langDict lang <>
constField "language" language <>
formattedDateField <>
langDict language <>
defaultContext
kitCtx :: Context String
kitCtx =
kitCtx :: String -> Context String
kitCtx language =
(field "formatted_purchase_date" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
let purchaseDateValue = lookupString "purchase_date" metadata
return $ maybe "" formatDate purchaseDateValue
return $ maybe "" (formatDate language) purchaseDateValue
)
<> postCtx Nothing
<> (postCtx language)
isUpcoming :: UTCTime -> Item a -> Compiler Bool
isUpcoming cutoff item = do

View File

@ -1,6 +1,6 @@
<article>
<section class="header">
Posted on $date$
Posted on $formatted_date$
$if(author)$
by $author$
$endif$

View File

@ -1,7 +1,7 @@
<ul>
$for(events)$
<li>
$date$ - <a href="$url$">$title$</a>
$formatted_date$ - <a href="$url$">$title$</a>
</li>
$endfor$
</ul>

View File

@ -1,7 +1,7 @@
<article>
<section class="header">
<a href="/$language$/plamo.html" class="back-link">$text-plamo-back$</a><br/>
<span class="text-body-secondary">Posted on: $date$</span>
<span class="text-body-secondary">Posted on: $formatted_date$</span>
</section>
<section>
<hr/>

View File

@ -9,7 +9,7 @@
<div class="col-6 col-md-8">
<div class="card-body">
<p class="card-text fs-xs-smaller">
<em class="text-body-secondary">$date$</em><br/>
<em class="text-body-secondary">$formatted_date$</em><br/>
$model_name$<br/>
<span class="badge rounded-pill text-bg-secondary ms-4 text-center">$scale$</span><br/>
$if(series)$

View File

@ -1,7 +1,7 @@
<ul>
$for(posts)$
<li>
<a href="$url$">$title$</a> - $date$
<a href="$url$">$title$</a> - $formatted_date$
</li>
$endfor$
</ul>

View File

@ -1,6 +1,6 @@
<article>
<section class="header">
Posted on $date$
Posted on $formatted_date$
$if(author)$
by $author$
$endif$

View File

@ -1,7 +1,7 @@
<article>
<section class="header">
<a href="/$language$/radio.html" class="back-link">$text-radio-back$</a><br/>
Posted on $date$
Posted on $formatted_date$
</section>
<section>
$body$

View File

@ -1,7 +1,7 @@
<ul>
$for(posts)$
<li>
<a href="$url$">$title$</a> - $date$
$formatted_date$ - <a href="$url$">$title$</a>
</li>
$endfor$
</ul>