diff --git a/portfolio/en/radio.html b/portfolio/en/radio.html
index 296b4f3..1814228 100644
--- a/portfolio/en/radio.html
+++ b/portfolio/en/radio.html
@@ -41,7 +41,7 @@ $endfor$
$for(fielddays)$
- | $date$ |
+ $formatted_date$ |
$title$ $if(pota-locator)$POTA: $pota-locator$ $endif$ $if(wwff-locator)$WW-FF: $wwff-locator$ $endif$ |
$mode$ - $bands$ - $antenna$ antenna $transceiver$ |
$total-unique-qso$ |
diff --git a/portfolio/jp/radio.html b/portfolio/jp/radio.html
index 93ec2cc..2b1e453 100644
--- a/portfolio/jp/radio.html
+++ b/portfolio/jp/radio.html
@@ -41,7 +41,7 @@ $endfor$
$for(fielddays)$
- | $date$ |
+ $formatted_date$ |
$title$ $if(pota-locator)$POTA: $pota-locator$ $endif$ $if(wwff-locator)$WW-FF: $wwff-locator$ $endif$ |
$mode$ - $bands$ - $antenna$ アンテナ $transceiver$ |
$total-unique-qso$ |
diff --git a/portfolio/nl/radio.html b/portfolio/nl/radio.html
index c4797f6..37022e1 100644
--- a/portfolio/nl/radio.html
+++ b/portfolio/nl/radio.html
@@ -41,7 +41,7 @@ $endfor$
$for(fielddays)$
- | $date$ |
+ $formatted_date$ |
$title$ $if(pota-locator)$POTA: $pota-locator$ $endif$ $if(wwff-locator)$WW-FF: $wwff-locator$ $endif$ |
$mode$ - $bands$ - $antenna$ antenne $transceiver$ |
$total-unique-qso$ |
diff --git a/portfolio/site.hs b/portfolio/site.hs
index 704a792..bdca600 100644
--- a/portfolio/site.hs
+++ b/portfolio/site.hs
@@ -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
diff --git a/portfolio/templates/event.html b/portfolio/templates/event.html
index 732149b..3f7c31b 100644
--- a/portfolio/templates/event.html
+++ b/portfolio/templates/event.html
@@ -1,6 +1,6 @@