Localize profile bio, link labels, and license text per language
Bio and colophon link labels move into i18n/*.toml (key "bio" and linkTweetsATmosphere etc.) so every language gets real translations instead of English text everywhere. Links themselves stay defined once in hugo.toml, referenced by i18n id, so url/value aren't duplicated per language just to translate a label. The footer's CC BY-SA link now points at each language's own deed page (deed.fr, deed.es, deed.pt-br, deed.ja) instead of the English default, and licenseText reads "Content" rather than "Text" since the license covers more than prose. The Instagram link inside the bio opens in a new tab via raw HTML (unsafe goldmark is already enabled) with rel="noopener noreferrer".
afcdfde parent: ab57bea modified
blog/hugo.toml +10 -9 | @@ -66,33 +66,34 @@ avatarAlt = "mykiwi's avatar" | ||
| 66 | 66 | firstName = "Romain" |
| 67 | 67 | lastName = "GAUTIER" |
| 68 | 68 | atprotoHandle = 'mykiwi.dev' |
| 69 | -# Markdown, rendered as-is in the colophon (links work: [text](url)). Also | |
| 70 | -# the source for the <meta name="description"> tag, unless params.description | |
| 71 | -# above is set to override it. | |
| 72 | -bio = "I'm a software engineer, passionate about technology, sharing knowledge and open source like #PHP, #Symfony, #Docker, #Dagger, #Nix, atproto:// and ATmosphere. Also [🐕️ & 🐈️](https://instagram.com/apy.leon \"Pictures of Apy & Léon\") dad." | |
| 69 | +# The bio itself lives in i18n/*.toml (key "bio") since it's translated text - | |
| 70 | +# see the colophon partial and baseof.html, which pull it via i18n "bio". | |
| 73 | 71 | |
| 72 | +# Links are defined once here (not per language) - `id` is an i18n key | |
| 73 | +# (see i18n/*.toml) so only the label translates; value/url stay identical | |
| 74 | +# across every language build. | |
| 74 | 75 | [[params.profile.links]] |
| 75 | -key = "Tweets on ATmosphere" | |
| 76 | +id = "linkTweetsATmosphere" | |
| 76 | 77 | value = "@mykiwi.dev" |
| 77 | 78 | url = "https://bsky.app/profile/mykiwi.dev" |
| 78 | 79 | |
| 79 | 80 | [[params.profile.links]] |
| 80 | -key = "Tweets on Fediverse" | |
| 81 | +id = "linkTweetsFediverse" | |
| 81 | 82 | value = "@mykiwi@mamot.fr" |
| 82 | 83 | url = "https://mamot.fr/@mykiwi" |
| 83 | 84 | |
| 84 | 85 | [[params.profile.links]] |
| 85 | -key = "Tweets on Twitter" | |
| 86 | +id = "linkTweetsTwitter" | |
| 86 | 87 | value = "@my_kiwi" |
| 87 | 88 | url = "https://x.com/mykiwi" |
| 88 | 89 | |
| 89 | 90 | [[params.profile.links]] |
| 90 | -key = "Code on ATmosphere" | |
| 91 | +id = "linkCodeATmosphere" | |
| 91 | 92 | value = "@mykiwi.dev" |
| 92 | 93 | url = "https://tangled.org/mykiwi.dev" |
| 93 | 94 | |
| 94 | 95 | [[params.profile.links]] |
| 95 | -key = "Code on GitHub" | |
| 96 | +id = "linkCodeGitHub" | |
| 96 | 97 | value = "@mykiwi" |
| 97 | 98 | url = "https://github.com/mykiwi" |
| 98 | 99 | |
| @@ -66,33 +66,34 @@ avatarAlt = "mykiwi's avatar" | |||
| 66 | firstName = "Romain" | 66 | firstName = "Romain" |
| 67 | lastName = "GAUTIER" | 67 | lastName = "GAUTIER" |
| 68 | atprotoHandle = 'mykiwi.dev' | 68 | atprotoHandle = 'mykiwi.dev' |
| 69 | -# Markdown, rendered as-is in the colophon (links work: [text](url)). Also | 69 | +# The bio itself lives in i18n/*.toml (key "bio") since it's translated text - |
| 70 | -# the source for the <meta name="description"> tag, unless params.description | 70 | +# see the colophon partial and baseof.html, which pull it via i18n "bio". |
| 71 | -# above is set to override it. | ||
| 72 | -bio = "I'm a software engineer, passionate about technology, sharing knowledge and open source like #PHP, #Symfony, #Docker, #Dagger, #Nix, atproto:// and ATmosphere. Also [🐕️ & 🐈️](https://instagram.com/apy.leon \"Pictures of Apy & Léon\") dad." | ||
| 73 | 71 | ||
| 72 | +# Links are defined once here (not per language) - `id` is an i18n key | ||
| 73 | +# (see i18n/*.toml) so only the label translates; value/url stay identical | ||
| 74 | +# across every language build. | ||
| 74 | [[params.profile.links]] | 75 | [[params.profile.links]] |
| 75 | -key = "Tweets on ATmosphere" | 76 | +id = "linkTweetsATmosphere" |
| 76 | value = "@mykiwi.dev" | 77 | value = "@mykiwi.dev" |
| 77 | url = "https://bsky.app/profile/mykiwi.dev" | 78 | url = "https://bsky.app/profile/mykiwi.dev" |
| 78 | 79 | ||
| 79 | [[params.profile.links]] | 80 | [[params.profile.links]] |
| 80 | -key = "Tweets on Fediverse" | 81 | +id = "linkTweetsFediverse" |
| 81 | value = "@mykiwi@mamot.fr" | 82 | value = "@mykiwi@mamot.fr" |
| 82 | url = "https://mamot.fr/@mykiwi" | 83 | url = "https://mamot.fr/@mykiwi" |
| 83 | 84 | ||
| 84 | [[params.profile.links]] | 85 | [[params.profile.links]] |
| 85 | -key = "Tweets on Twitter" | 86 | +id = "linkTweetsTwitter" |
| 86 | value = "@my_kiwi" | 87 | value = "@my_kiwi" |
| 87 | url = "https://x.com/mykiwi" | 88 | url = "https://x.com/mykiwi" |
| 88 | 89 | ||
| 89 | [[params.profile.links]] | 90 | [[params.profile.links]] |
| 90 | -key = "Code on ATmosphere" | 91 | +id = "linkCodeATmosphere" |
| 91 | value = "@mykiwi.dev" | 92 | value = "@mykiwi.dev" |
| 92 | url = "https://tangled.org/mykiwi.dev" | 93 | url = "https://tangled.org/mykiwi.dev" |
| 93 | 94 | ||
| 94 | [[params.profile.links]] | 95 | [[params.profile.links]] |
| 95 | -key = "Code on GitHub" | 96 | +id = "linkCodeGitHub" |
| 96 | value = "@mykiwi" | 97 | value = "@mykiwi" |
| 97 | url = "https://github.com/mykiwi" | 98 | url = "https://github.com/mykiwi" |
| 98 | 99 | ||
modified
blog/i18n/en.toml +22 -1 | @@ -12,7 +12,10 @@ one = "{{ .Count }} post" | ||
| 12 | 12 | other = "{{ .Count }} posts" |
| 13 | 13 | |
| 14 | 14 | [licenseText] |
| 15 | -other = "Text is" | |
| 15 | +other = "Content is" | |
| 16 | + | |
| 17 | +[licenseURL] | |
| 18 | +other = "https://creativecommons.org/licenses/by-sa/4.0/" | |
| 16 | 19 | |
| 17 | 20 | [subscribeRSS] |
| 18 | 21 | other = "Subscribe via RSS" |
| @@ -25,3 +28,21 @@ other = "Latest" | ||
| 25 | 28 | |
| 26 | 29 | [readMore] |
| 27 | 30 | other = "Read →" |
| 31 | + | |
| 32 | +[bio] | |
| 33 | +other = "I'm a software engineer, passionate about technology, sharing knowledge and open source like #PHP, #Symfony, #Dagger, #Docker, #Nix, atproto:// and ATmosphere.<br>Also <a href=\"https://instagram.com/apy.leon\" title=\"Pictures of Apy & Léon\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a> dad." | |
| 34 | + | |
| 35 | +[linkTweetsATmosphere] | |
| 36 | +other = "Tweets on ATmosphere" | |
| 37 | + | |
| 38 | +[linkTweetsFediverse] | |
| 39 | +other = "Tweets on Fediverse" | |
| 40 | + | |
| 41 | +[linkTweetsTwitter] | |
| 42 | +other = "Tweets on Twitter" | |
| 43 | + | |
| 44 | +[linkCodeATmosphere] | |
| 45 | +other = "Code on ATmosphere" | |
| 46 | + | |
| 47 | +[linkCodeGitHub] | |
| 48 | +other = "Code on GitHub" | |
| @@ -12,7 +12,10 @@ one = "{{ .Count }} post" | |||
| 12 | other = "{{ .Count }} posts" | 12 | other = "{{ .Count }} posts" |
| 13 | 13 | ||
| 14 | [licenseText] | 14 | [licenseText] |
| 15 | -other = "Text is" | 15 | +other = "Content is" |
| 16 | + | ||
| 17 | +[licenseURL] | ||
| 18 | +other = "https://creativecommons.org/licenses/by-sa/4.0/" | ||
| 16 | 19 | ||
| 17 | [subscribeRSS] | 20 | [subscribeRSS] |
| 18 | other = "Subscribe via RSS" | 21 | other = "Subscribe via RSS" |
| @@ -25,3 +28,21 @@ other = "Latest" | |||
| 25 | 28 | ||
| 26 | [readMore] | 29 | [readMore] |
| 27 | other = "Read →" | 30 | other = "Read →" |
| 31 | + | ||
| 32 | +[bio] | ||
| 33 | +other = "I'm a software engineer, passionate about technology, sharing knowledge and open source like #PHP, #Symfony, #Dagger, #Docker, #Nix, atproto:// and ATmosphere.<br>Also <a href=\"https://instagram.com/apy.leon\" title=\"Pictures of Apy & Léon\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a> dad." | ||
| 34 | + | ||
| 35 | +[linkTweetsATmosphere] | ||
| 36 | +other = "Tweets on ATmosphere" | ||
| 37 | + | ||
| 38 | +[linkTweetsFediverse] | ||
| 39 | +other = "Tweets on Fediverse" | ||
| 40 | + | ||
| 41 | +[linkTweetsTwitter] | ||
| 42 | +other = "Tweets on Twitter" | ||
| 43 | + | ||
| 44 | +[linkCodeATmosphere] | ||
| 45 | +other = "Code on ATmosphere" | ||
| 46 | + | ||
| 47 | +[linkCodeGitHub] | ||
| 48 | +other = "Code on GitHub" | ||
modified
blog/i18n/es.toml +22 -1 | @@ -12,7 +12,10 @@ one = "{{ .Count }} artículo" | ||
| 12 | 12 | other = "{{ .Count }} artículos" |
| 13 | 13 | |
| 14 | 14 | [licenseText] |
| 15 | -other = "Texto bajo licencia" | |
| 15 | +other = "Contenido bajo licencia" | |
| 16 | + | |
| 17 | +[licenseURL] | |
| 18 | +other = "https://creativecommons.org/licenses/by-sa/4.0/deed.es" | |
| 16 | 19 | |
| 17 | 20 | [subscribeRSS] |
| 18 | 21 | other = "Suscribirse vía RSS" |
| @@ -25,3 +28,21 @@ other = "Último" | ||
| 25 | 28 | |
| 26 | 29 | [readMore] |
| 27 | 30 | other = "Leer →" |
| 31 | + | |
| 32 | +[bio] | |
| 33 | +other = "Ingeniero de software, apasionado por la tecnología, compartir conocimiento y el open source como #PHP, #Symfony, #Dagger, #Docker, #Nix, atproto:// y la ATmosphere.<br>También papá de <a href=\"https://instagram.com/apy.leon\" title=\"Fotos de Apy y Léon\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a>." | |
| 34 | + | |
| 35 | +[linkTweetsATmosphere] | |
| 36 | +other = "Tweets en ATmosphere" | |
| 37 | + | |
| 38 | +[linkTweetsFediverse] | |
| 39 | +other = "Tweets en Fediverse" | |
| 40 | + | |
| 41 | +[linkTweetsTwitter] | |
| 42 | +other = "Tweets en Twitter" | |
| 43 | + | |
| 44 | +[linkCodeATmosphere] | |
| 45 | +other = "Código en ATmosphere" | |
| 46 | + | |
| 47 | +[linkCodeGitHub] | |
| 48 | +other = "Código en GitHub" | |
| @@ -12,7 +12,10 @@ one = "{{ .Count }} artículo" | |||
| 12 | other = "{{ .Count }} artículos" | 12 | other = "{{ .Count }} artículos" |
| 13 | 13 | ||
| 14 | [licenseText] | 14 | [licenseText] |
| 15 | -other = "Texto bajo licencia" | 15 | +other = "Contenido bajo licencia" |
| 16 | + | ||
| 17 | +[licenseURL] | ||
| 18 | +other = "https://creativecommons.org/licenses/by-sa/4.0/deed.es" | ||
| 16 | 19 | ||
| 17 | [subscribeRSS] | 20 | [subscribeRSS] |
| 18 | other = "Suscribirse vía RSS" | 21 | other = "Suscribirse vía RSS" |
| @@ -25,3 +28,21 @@ other = "Último" | |||
| 25 | 28 | ||
| 26 | [readMore] | 29 | [readMore] |
| 27 | other = "Leer →" | 30 | other = "Leer →" |
| 31 | + | ||
| 32 | +[bio] | ||
| 33 | +other = "Ingeniero de software, apasionado por la tecnología, compartir conocimiento y el open source como #PHP, #Symfony, #Dagger, #Docker, #Nix, atproto:// y la ATmosphere.<br>También papá de <a href=\"https://instagram.com/apy.leon\" title=\"Fotos de Apy y Léon\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a>." | ||
| 34 | + | ||
| 35 | +[linkTweetsATmosphere] | ||
| 36 | +other = "Tweets en ATmosphere" | ||
| 37 | + | ||
| 38 | +[linkTweetsFediverse] | ||
| 39 | +other = "Tweets en Fediverse" | ||
| 40 | + | ||
| 41 | +[linkTweetsTwitter] | ||
| 42 | +other = "Tweets en Twitter" | ||
| 43 | + | ||
| 44 | +[linkCodeATmosphere] | ||
| 45 | +other = "Código en ATmosphere" | ||
| 46 | + | ||
| 47 | +[linkCodeGitHub] | ||
| 48 | +other = "Código en GitHub" | ||
modified
blog/i18n/fr.toml +23 -2 | @@ -12,10 +12,13 @@ one = "{{ .Count }} article" | ||
| 12 | 12 | other = "{{ .Count }} articles" |
| 13 | 13 | |
| 14 | 14 | [licenseText] |
| 15 | -other = "Texte sous licence" | |
| 15 | +other = "Contenu sous licence" | |
| 16 | + | |
| 17 | +[licenseURL] | |
| 18 | +other = "https://creativecommons.org/licenses/by-sa/4.0/deed.fr" | |
| 16 | 19 | |
| 17 | 20 | [subscribeRSS] |
| 18 | -other = "S'abonner via RSS" | |
| 21 | +other = "S’abonner via RSS" | |
| 19 | 22 | |
| 20 | 23 | [rssLabel] |
| 21 | 24 | other = "RSS" |
| @@ -25,3 +28,21 @@ other = "Dernier" | ||
| 25 | 28 | |
| 26 | 29 | [readMore] |
| 27 | 30 | other = "Lire →" |
| 31 | + | |
| 32 | +[bio] | |
| 33 | +other = "Ingénieur logiciel, passionné par la technologie, le partage de connaissances et l’open source comme #PHP, #Symfony, #Dagger, #Docker, #Nix, atproto:// et l’ATmosphere.<br>Aussi papa de <a href=\"https://instagram.com/apy.leon\" title=\"Photos d’Apy & Léon\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a>." | |
| 34 | + | |
| 35 | +[linkTweetsATmosphere] | |
| 36 | +other = "Tweets sur l’ATmosphere" | |
| 37 | + | |
| 38 | +[linkTweetsFediverse] | |
| 39 | +other = "Tweets sur le Fediverse" | |
| 40 | + | |
| 41 | +[linkTweetsTwitter] | |
| 42 | +other = "Tweets sur Twitter" | |
| 43 | + | |
| 44 | +[linkCodeATmosphere] | |
| 45 | +other = "Code sur l’ATmosphere" | |
| 46 | + | |
| 47 | +[linkCodeGitHub] | |
| 48 | +other = "Code sur GitHub" | |
| @@ -12,10 +12,13 @@ one = "{{ .Count }} article" | |||
| 12 | other = "{{ .Count }} articles" | 12 | other = "{{ .Count }} articles" |
| 13 | 13 | ||
| 14 | [licenseText] | 14 | [licenseText] |
| 15 | -other = "Texte sous licence" | 15 | +other = "Contenu sous licence" |
| 16 | + | ||
| 17 | +[licenseURL] | ||
| 18 | +other = "https://creativecommons.org/licenses/by-sa/4.0/deed.fr" | ||
| 16 | 19 | ||
| 17 | [subscribeRSS] | 20 | [subscribeRSS] |
| 18 | -other = "S'abonner via RSS" | 21 | +other = "S’abonner via RSS" |
| 19 | 22 | ||
| 20 | [rssLabel] | 23 | [rssLabel] |
| 21 | other = "RSS" | 24 | other = "RSS" |
| @@ -25,3 +28,21 @@ other = "Dernier" | |||
| 25 | 28 | ||
| 26 | [readMore] | 29 | [readMore] |
| 27 | other = "Lire →" | 30 | other = "Lire →" |
| 31 | + | ||
| 32 | +[bio] | ||
| 33 | +other = "Ingénieur logiciel, passionné par la technologie, le partage de connaissances et l’open source comme #PHP, #Symfony, #Dagger, #Docker, #Nix, atproto:// et l’ATmosphere.<br>Aussi papa de <a href=\"https://instagram.com/apy.leon\" title=\"Photos d’Apy & Léon\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a>." | ||
| 34 | + | ||
| 35 | +[linkTweetsATmosphere] | ||
| 36 | +other = "Tweets sur l’ATmosphere" | ||
| 37 | + | ||
| 38 | +[linkTweetsFediverse] | ||
| 39 | +other = "Tweets sur le Fediverse" | ||
| 40 | + | ||
| 41 | +[linkTweetsTwitter] | ||
| 42 | +other = "Tweets sur Twitter" | ||
| 43 | + | ||
| 44 | +[linkCodeATmosphere] | ||
| 45 | +other = "Code sur l’ATmosphere" | ||
| 46 | + | ||
| 47 | +[linkCodeGitHub] | ||
| 48 | +other = "Code sur GitHub" | ||
modified
blog/i18n/ja.toml +22 -1 | @@ -11,7 +11,10 @@ other = "{{ .Count }}分で読了" | ||
| 11 | 11 | other = "{{ .Count }}件の投稿" |
| 12 | 12 | |
| 13 | 13 | [licenseText] |
| 14 | -other = "テキストは" | |
| 14 | +other = "コンテンツは" | |
| 15 | + | |
| 16 | +[licenseURL] | |
| 17 | +other = "https://creativecommons.org/licenses/by-sa/4.0/deed.ja" | |
| 15 | 18 | |
| 16 | 19 | [subscribeRSS] |
| 17 | 20 | other = "RSSで購読" |
| @@ -24,3 +27,21 @@ other = "最新" | ||
| 24 | 27 | |
| 25 | 28 | [readMore] |
| 26 | 29 | other = "続きを読む →" |
| 30 | + | |
| 31 | +[bio] | |
| 32 | +other = "ソフトウェアエンジニア。技術や知識の共有、そして #PHP、#Symfony、#Dagger、#Docker、#Nix、atproto://、ATmosphereなどのオープンソースに情熱を注いでいます。<br>また、<a href=\"https://instagram.com/apy.leon\" title=\"ApyとLéonの写真\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a>のパパでもあります。" | |
| 33 | + | |
| 34 | +[linkTweetsATmosphere] | |
| 35 | +other = "ATmosphereでのつぶやき" | |
| 36 | + | |
| 37 | +[linkTweetsFediverse] | |
| 38 | +other = "Fediverseでのつぶやき" | |
| 39 | + | |
| 40 | +[linkTweetsTwitter] | |
| 41 | +other = "Twitterでのつぶやき" | |
| 42 | + | |
| 43 | +[linkCodeATmosphere] | |
| 44 | +other = "ATmosphereのコード" | |
| 45 | + | |
| 46 | +[linkCodeGitHub] | |
| 47 | +other = "GitHubのコード" | |
| @@ -11,7 +11,10 @@ other = "{{ .Count }}分で読了" | |||
| 11 | other = "{{ .Count }}件の投稿" | 11 | other = "{{ .Count }}件の投稿" |
| 12 | 12 | ||
| 13 | [licenseText] | 13 | [licenseText] |
| 14 | -other = "テキストは" | 14 | +other = "コンテンツは" |
| 15 | + | ||
| 16 | +[licenseURL] | ||
| 17 | +other = "https://creativecommons.org/licenses/by-sa/4.0/deed.ja" | ||
| 15 | 18 | ||
| 16 | [subscribeRSS] | 19 | [subscribeRSS] |
| 17 | other = "RSSで購読" | 20 | other = "RSSで購読" |
| @@ -24,3 +27,21 @@ other = "最新" | |||
| 24 | 27 | ||
| 25 | [readMore] | 28 | [readMore] |
| 26 | other = "続きを読む →" | 29 | other = "続きを読む →" |
| 30 | + | ||
| 31 | +[bio] | ||
| 32 | +other = "ソフトウェアエンジニア。技術や知識の共有、そして #PHP、#Symfony、#Dagger、#Docker、#Nix、atproto://、ATmosphereなどのオープンソースに情熱を注いでいます。<br>また、<a href=\"https://instagram.com/apy.leon\" title=\"ApyとLéonの写真\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a>のパパでもあります。" | ||
| 33 | + | ||
| 34 | +[linkTweetsATmosphere] | ||
| 35 | +other = "ATmosphereでのつぶやき" | ||
| 36 | + | ||
| 37 | +[linkTweetsFediverse] | ||
| 38 | +other = "Fediverseでのつぶやき" | ||
| 39 | + | ||
| 40 | +[linkTweetsTwitter] | ||
| 41 | +other = "Twitterでのつぶやき" | ||
| 42 | + | ||
| 43 | +[linkCodeATmosphere] | ||
| 44 | +other = "ATmosphereのコード" | ||
| 45 | + | ||
| 46 | +[linkCodeGitHub] | ||
| 47 | +other = "GitHubのコード" | ||
modified
blog/i18n/pt.toml +22 -1 | @@ -12,7 +12,10 @@ one = "{{ .Count }} post" | ||
| 12 | 12 | other = "{{ .Count }} posts" |
| 13 | 13 | |
| 14 | 14 | [licenseText] |
| 15 | -other = "Texto sob licença" | |
| 15 | +other = "Conteúdo sob licença" | |
| 16 | + | |
| 17 | +[licenseURL] | |
| 18 | +other = "https://creativecommons.org/licenses/by-sa/4.0/deed.pt-br" | |
| 16 | 19 | |
| 17 | 20 | [subscribeRSS] |
| 18 | 21 | other = "Assine via RSS" |
| @@ -25,3 +28,21 @@ other = "Mais recente" | ||
| 25 | 28 | |
| 26 | 29 | [readMore] |
| 27 | 30 | other = "Ler →" |
| 31 | + | |
| 32 | +[bio] | |
| 33 | +other = "Engenheiro de software, apaixonado por tecnologia, compartilhamento de conhecimento e open source como #PHP, #Symfony, #Dagger, #Docker, #Nix, atproto:// e o ATmosphere. Também pai de <a href=\"https://instagram.com/apy.leon\" title=\"Fotos da Apy e do Léon\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a>." | |
| 34 | + | |
| 35 | +[linkTweetsATmosphere] | |
| 36 | +other = "Tweets no ATmosphere" | |
| 37 | + | |
| 38 | +[linkTweetsFediverse] | |
| 39 | +other = "Tweets no Fediverse" | |
| 40 | + | |
| 41 | +[linkTweetsTwitter] | |
| 42 | +other = "Tweets no Twitter" | |
| 43 | + | |
| 44 | +[linkCodeATmosphere] | |
| 45 | +other = "Código no ATmosphere" | |
| 46 | + | |
| 47 | +[linkCodeGitHub] | |
| 48 | +other = "Código no GitHub" | |
| @@ -12,7 +12,10 @@ one = "{{ .Count }} post" | |||
| 12 | other = "{{ .Count }} posts" | 12 | other = "{{ .Count }} posts" |
| 13 | 13 | ||
| 14 | [licenseText] | 14 | [licenseText] |
| 15 | -other = "Texto sob licença" | 15 | +other = "Conteúdo sob licença" |
| 16 | + | ||
| 17 | +[licenseURL] | ||
| 18 | +other = "https://creativecommons.org/licenses/by-sa/4.0/deed.pt-br" | ||
| 16 | 19 | ||
| 17 | [subscribeRSS] | 20 | [subscribeRSS] |
| 18 | other = "Assine via RSS" | 21 | other = "Assine via RSS" |
| @@ -25,3 +28,21 @@ other = "Mais recente" | |||
| 25 | 28 | ||
| 26 | [readMore] | 29 | [readMore] |
| 27 | other = "Ler →" | 30 | other = "Ler →" |
| 31 | + | ||
| 32 | +[bio] | ||
| 33 | +other = "Engenheiro de software, apaixonado por tecnologia, compartilhamento de conhecimento e open source como #PHP, #Symfony, #Dagger, #Docker, #Nix, atproto:// e o ATmosphere. Também pai de <a href=\"https://instagram.com/apy.leon\" title=\"Fotos da Apy e do Léon\" target=\"_blank\" rel=\"noopener noreferrer\">🐕️ & 🐈️</a>." | ||
| 34 | + | ||
| 35 | +[linkTweetsATmosphere] | ||
| 36 | +other = "Tweets no ATmosphere" | ||
| 37 | + | ||
| 38 | +[linkTweetsFediverse] | ||
| 39 | +other = "Tweets no Fediverse" | ||
| 40 | + | ||
| 41 | +[linkTweetsTwitter] | ||
| 42 | +other = "Tweets no Twitter" | ||
| 43 | + | ||
| 44 | +[linkCodeATmosphere] | ||
| 45 | +other = "Código no ATmosphere" | ||
| 46 | + | ||
| 47 | +[linkCodeGitHub] | ||
| 48 | +other = "Código no GitHub" | ||
modified
blog/layouts/_default/baseof.html +5 -5 | @@ -13,14 +13,14 @@ | ||
| 13 | 13 | <title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ .Title }} · {{ site.Title }}{{ end }}</title> |
| 14 | 14 | {{- /* |
| 15 | 15 | Priority: this page's own front matter > an explicit site-wide |
| 16 | - params.description override > params.profile.bio, stripped of markdown | |
| 17 | - down to plain text. Set params.description only when the SEO snippet | |
| 18 | - should say something different from the colophon bio; otherwise bio is | |
| 19 | - the single source of truth for both. | |
| 16 | + params.description override > i18n "bio", stripped of markdown down to | |
| 17 | + plain text. Set params.description only when the SEO snippet should say | |
| 18 | + something different from the colophon bio; otherwise bio is the single | |
| 19 | + source of truth for both. | |
| 20 | 20 | */}} |
| 21 | 21 | {{- $desc := .Description }} |
| 22 | 22 | {{- if not $desc }}{{ $desc = site.Params.description }}{{ end }} |
| 23 | - {{- if not $desc }}{{ with site.Params.profile.bio }}{{ $desc = . | markdownify | plainify }}{{ end }}{{ end }} | |
| 23 | + {{- if not $desc }}{{ with i18n "bio" }}{{ $desc = . | markdownify | plainify }}{{ end }}{{ end }} | |
| 24 | 24 | {{ with $desc -}} |
| 25 | 25 | <meta name="description" content="{{ . }}"> |
| 26 | 26 | {{- end }} |
| @@ -13,14 +13,14 @@ | |||
| 13 | <title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ .Title }} · {{ site.Title }}{{ end }}</title> | 13 | <title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ .Title }} · {{ site.Title }}{{ end }}</title> |
| 14 | {{- /* | 14 | {{- /* |
| 15 | Priority: this page's own front matter > an explicit site-wide | 15 | Priority: this page's own front matter > an explicit site-wide |
| 16 | - params.description override > params.profile.bio, stripped of markdown | 16 | + params.description override > i18n "bio", stripped of markdown down to |
| 17 | - down to plain text. Set params.description only when the SEO snippet | 17 | + plain text. Set params.description only when the SEO snippet should say |
| 18 | - should say something different from the colophon bio; otherwise bio is | 18 | + something different from the colophon bio; otherwise bio is the single |
| 19 | - the single source of truth for both. | 19 | + source of truth for both. |
| 20 | */}} | 20 | */}} |
| 21 | {{- $desc := .Description }} | 21 | {{- $desc := .Description }} |
| 22 | {{- if not $desc }}{{ $desc = site.Params.description }}{{ end }} | 22 | {{- if not $desc }}{{ $desc = site.Params.description }}{{ end }} |
| 23 | - {{- if not $desc }}{{ with site.Params.profile.bio }}{{ $desc = . | markdownify | plainify }}{{ end }}{{ end }} | 23 | + {{- if not $desc }}{{ with i18n "bio" }}{{ $desc = . | markdownify | plainify }}{{ end }}{{ end }} |
| 24 | {{ with $desc -}} | 24 | {{ with $desc -}} |
| 25 | <meta name="description" content="{{ . }}"> | 25 | <meta name="description" content="{{ . }}"> |
| 26 | {{- end }} | 26 | {{- end }} |
modified
blog/layouts/partials/colophon.html +5 -4 | @@ -1,7 +1,8 @@ | ||
| 1 | 1 | {{- /* |
| 2 | 2 | Bio card for the homepage. Ported from fzakaria.com's _includes/colophon.html. |
| 3 | - Reads entirely from site.Params.profile, so it renders nothing until that's | |
| 4 | - configured in hugo.toml, and the avatar itself no-ops if the file is missing. | |
| 3 | + Avatar/name/links come from site.Params.profile in hugo.toml, so it renders | |
| 4 | + nothing until that's configured, and the avatar itself no-ops if the file is | |
| 5 | + missing. The bio text itself comes from i18n "bio" (i18n/*.toml). | |
| 5 | 6 | */ -}} |
| 6 | 7 | {{- with site.Params.profile -}} |
| 7 | 8 | {{- $profile := . -}} |
| @@ -30,14 +31,14 @@ | ||
| 30 | 31 | {{- if or .firstName .lastName }} |
| 31 | 32 | <p class="colophon__name">{{ with .firstName }}{{ . }} {{ end }}<span class="colophon__name-last">{{ .lastName }}</span></p> |
| 32 | 33 | {{- end }} |
| 33 | - {{- with .bio | default site.Params.description }} | |
| 34 | + {{- with i18n "bio" | default site.Params.description }} | |
| 34 | 35 | <div class="colophon__bio">{{ . | markdownify }}</div> |
| 35 | 36 | {{- end }} |
| 36 | 37 | {{- with .links }} |
| 37 | 38 | <ul class="colophon__links"> |
| 38 | 39 | {{- range . }} |
| 39 | 40 | <li> |
| 40 | - <span class="key">{{ .key }}</span> | |
| 41 | + <span class="key">{{ i18n .id }}</span> | |
| 41 | 42 | <span class="val"><a href="{{ .url }}">{{ .value }}</a></span> |
| 42 | 43 | </li> |
| 43 | 44 | {{- end }} |
| @@ -1,7 +1,8 @@ | |||
| 1 | {{- /* | 1 | {{- /* |
| 2 | Bio card for the homepage. Ported from fzakaria.com's _includes/colophon.html. | 2 | Bio card for the homepage. Ported from fzakaria.com's _includes/colophon.html. |
| 3 | - Reads entirely from site.Params.profile, so it renders nothing until that's | 3 | + Avatar/name/links come from site.Params.profile in hugo.toml, so it renders |
| 4 | - configured in hugo.toml, and the avatar itself no-ops if the file is missing. | 4 | + nothing until that's configured, and the avatar itself no-ops if the file is |
| 5 | + missing. The bio text itself comes from i18n "bio" (i18n/*.toml). | ||
| 5 | */ -}} | 6 | */ -}} |
| 6 | {{- with site.Params.profile -}} | 7 | {{- with site.Params.profile -}} |
| 7 | {{- $profile := . -}} | 8 | {{- $profile := . -}} |
| @@ -30,14 +31,14 @@ | |||
| 30 | {{- if or .firstName .lastName }} | 31 | {{- if or .firstName .lastName }} |
| 31 | <p class="colophon__name">{{ with .firstName }}{{ . }} {{ end }}<span class="colophon__name-last">{{ .lastName }}</span></p> | 32 | <p class="colophon__name">{{ with .firstName }}{{ . }} {{ end }}<span class="colophon__name-last">{{ .lastName }}</span></p> |
| 32 | {{- end }} | 33 | {{- end }} |
| 33 | - {{- with .bio | default site.Params.description }} | 34 | + {{- with i18n "bio" | default site.Params.description }} |
| 34 | <div class="colophon__bio">{{ . | markdownify }}</div> | 35 | <div class="colophon__bio">{{ . | markdownify }}</div> |
| 35 | {{- end }} | 36 | {{- end }} |
| 36 | {{- with .links }} | 37 | {{- with .links }} |
| 37 | <ul class="colophon__links"> | 38 | <ul class="colophon__links"> |
| 38 | {{- range . }} | 39 | {{- range . }} |
| 39 | <li> | 40 | <li> |
| 40 | - <span class="key">{{ .key }}</span> | 41 | + <span class="key">{{ i18n .id }}</span> |
| 41 | <span class="val"><a href="{{ .url }}">{{ .value }}</a></span> | 42 | <span class="val"><a href="{{ .url }}">{{ .value }}</a></span> |
| 42 | </li> | 43 | </li> |
| 43 | {{- end }} | 44 | {{- end }} |
modified
blog/layouts/partials/site-foot.html +1 -1 | @@ -1,5 +1,5 @@ | ||
| 1 | 1 | <footer class="site-foot column"> |
| 2 | - <span>{{ i18n "licenseText" }} <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA</a></span> | |
| 2 | + <span>{{ i18n "licenseText" }} <a href="{{ i18n "licenseURL" }}">CC BY-SA</a></span> | |
| 3 | 3 | <span class="sep" aria-hidden="true">·</span> |
| 4 | 4 | <span> |
| 5 | 5 | <a class="rss" href="{{ "index.xml" | relLangURL }}" title="{{ i18n "subscribeRSS" }}" hx-boost="false"> |
| @@ -1,5 +1,5 @@ | |||
| 1 | <footer class="site-foot column"> | 1 | <footer class="site-foot column"> |
| 2 | - <span>{{ i18n "licenseText" }} <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA</a></span> | 2 | + <span>{{ i18n "licenseText" }} <a href="{{ i18n "licenseURL" }}">CC BY-SA</a></span> |
| 3 | <span class="sep" aria-hidden="true">·</span> | 3 | <span class="sep" aria-hidden="true">·</span> |
| 4 | <span> | 4 | <span> |
| 5 | <a class="rss" href="{{ "index.xml" | relLangURL }}" title="{{ i18n "subscribeRSS" }}" hx-boost="false"> | 5 | <a class="rss" href="{{ "index.xml" | relLangURL }}" title="{{ i18n "subscribeRSS" }}" hx-boost="false"> |