Skip to content

Commit 7ab6681

Browse files
author
octospacc
committed
Tweak footer e layout categorie, fix metapagine, aggiornamento traduttore
1 parent c1bac2d commit 7ab6681

File tree

11 files changed

+198
-133
lines changed

11 files changed

+198
-133
lines changed

Scripts/Translate/Main.py

Lines changed: 58 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
#!/usr/bin/env python3
2+
ModificationMetadataKey = "lastmod"
3+
KeepOriginalMetadata = ["draft", "date", "lastmod"]
24
DestinationLanguages = ["it", "en", "es", "fr"] # "de", "eo"
35
IncludePaths = ["/"]
4-
ExcludePaths = ["/categories", "/note/2024-09-19-Raspberry-Output-Audio-Both.md", "/miscellanea/Devlogs.md"] # "/miscellanea/PicoBlog.md"
6+
ExcludePaths = ["/note/2024-09-19-Raspberry-Output-Audio-Both.md", "/miscellanea/Devlogs.md"] # "/miscellanea/PicoBlog.md"
57

68
import subprocess
79
from os import getcwd, listdir
810
from os.path import dirname, realpath, isfile, isdir
911
from pathlib import Path
1012
from translate_shell.translate import translate
1113

12-
# TODO somehow handle overriding frontmatter data for some translation (title, slug, ...)
14+
# TODO somehow handle overriding frontmatter data for some translation (title, slug, ...) (via in other files or commented metadata lines?)
1315
# TODO handle deleted files? (it should probably be done in another sh script, not here)
1416

1517
def printf(*objects):
@@ -26,11 +28,11 @@ def make_destination_path(document_path, destination_language):
2628
+ '/'.join(document_path.split('/')[1:]))
2729

2830
def is_translation_uptodate(source_path, destination_path):
29-
original_lines = split_text_with_frontmatter(read_original_document(source_path))[1].splitlines()
30-
translated_lines = split_text_with_frontmatter(open(destination_path, 'r').read())[1].splitlines()
31+
original_lines = split_with_frontmatter(read_original_document(source_path))[1].splitlines()
32+
translated_lines = split_with_frontmatter(open(destination_path, 'r').read())[1].splitlines()
3133
for [index, original_line] in enumerate(original_lines):
3234
line_key = original_line.split('=')[0]
33-
if line_key.strip().lower() == "lastmod":
35+
if line_key.strip().lower() == ModificationMetadataKey:
3436
if original_line != translated_lines[index]:
3537
return False
3638
break
@@ -40,7 +42,7 @@ def is_translation_uptodate(source_path, destination_path):
4042
def needs_translation(source_path, destination_language=None):
4143
for exclude_path in ExcludePaths:
4244
document_path = ('/' + '/'.join(source_path.split('/')[1:]))
43-
if (document_path == exclude_path) or document_path.startswith(exclude_path + '/'):
45+
if (document_path == exclude_path) or document_path.startswith(exclude_path.rstrip('/') + '/'):
4446
return False
4547
if not read_original_document(source_path).strip():
4648
return False
@@ -63,7 +65,7 @@ def find_documents(folder_path):
6365
documents[document].append(destination_language)
6466
return documents
6567

66-
def split_text_with_frontmatter(document_text):
68+
def split_with_frontmatter(document_text):
6769
text_header = document_text.strip().splitlines()[0].strip()
6870
if text_header in ["---", "+++"]:
6971
text_tokens = document_text.split(text_header)
@@ -76,7 +78,7 @@ def fix_frontmatter(translated_text, reference_text):
7678
if translated_line.strip() and (translated_line.lstrip() == translated_line):
7779
reference_line = reference_lines[index]
7880
line_key = reference_line.split('=')[0]
79-
if line_key.strip().lower() in ["draft", "date", "lastmod"]:
81+
if line_key.strip().lower() in KeepOriginalMetadata:
8082
translated_line = reference_line
8183
else:
8284
line_value = '='.join(translated_line.split('=')[1:])
@@ -86,11 +88,50 @@ def fix_frontmatter(translated_text, reference_text):
8688
result += (translated_line + '\n')
8789
return result
8890

91+
# <https://stackoverflow.com/a/18815890>
92+
def ascii_to_number(text:str) -> int:
93+
return int(''.join(format(ord(i), 'b').zfill(8) for i in text), 2)
94+
95+
# <https://stackoverflow.com/a/699891>, <https://stackoverflow.com/a/40559005>
96+
def number_to_ascii(number:int) -> str:
97+
binary = format(int(number), '016b')
98+
binary = binary.zfill(len(binary) + (8 - (len(binary) % 8)))
99+
return ''.join(chr(int(binary[(i * 8):((i * 8) + 8)], 2)) for i in range(len(binary) // 8))
100+
101+
# TODO add checks for number-strings to ensure they aren't already in the literal text
102+
# TODO handle code blocks and .notranslate HTML elements
103+
# TODO fix strange bugs
104+
def wrap_for_translation(original_text):
105+
#return original_text
106+
original_text = (original_text
107+
.replace("{{%", "{{@%").replace("%}}", "%@}}")
108+
.replace("{{<", "{{@<").replace(">}}", ">@}}"))
109+
original_tokens = original_text.split("{{@")
110+
#[(("{{@" if i else '') + c) for [i, c] in enumerate(original_text.split("{{@"))]
111+
for i in range(1, len(original_tokens)):
112+
token_tokens = original_tokens[i].split("@}}")
113+
token_tokens[0] = (f"{TranslationMagic}__" + str(ascii_to_number("{{@" + token_tokens[0] + "@}}")) + "__").replace("9", "9_")
114+
original_tokens[i] = ''.join(token_tokens)
115+
#print(unwrap_from_translation(''.join(original_tokens)))
116+
#exit(1)
117+
return ''.join(original_tokens)
118+
119+
def unwrap_from_translation(translated_text):
120+
#return translated_text
121+
translated_tokens = translated_text.split(f"{TranslationMagic}__")
122+
for i in range(1, len(translated_tokens)):
123+
token_tokens = translated_tokens[i].split("__")
124+
token_tokens[0] = number_to_ascii(token_tokens[0].replace(' ', '').replace('_', ''))
125+
translated_tokens[i] = (token_tokens[0] + "__".join(token_tokens[1:]))
126+
return (''.join(translated_tokens)
127+
.replace("{{@%", "{{%").replace("%@}}", "%}}")
128+
.replace("{{@<", "{{<").replace(">@}}", ">}}"))
129+
89130
def translate_document(document_path, documents):
90131
printf(f"* {document_path} ->")
91132
for destination_language in documents[document_path]:
92133
source_language = get_source_language(document_path)
93-
original_text = read_original_document(document_path)
134+
original_text = wrap_for_translation(read_original_document(document_path))
94135
printf('', destination_language)
95136
try:
96137
is_python_translator = True
@@ -101,10 +142,13 @@ def translate_document(document_path, documents):
101142
printf('❌', exception)
102143
try:
103144
is_python_translator = False
145+
temporary_path = ("./tmp/" + document_path)
146+
Path('/'.join(temporary_path.split('/')[:-1])).mkdir(parents=True, exist_ok=True)
147+
open(temporary_path, 'w').write(original_text)
104148
translated = subprocess.run(
105149
("bash", "../Scripts/Lib/translate-shell.bash", "-brief", "-no-autocorrect",
106150
"-t", destination_language, "-s", source_language,
107-
("file://" + "../content/" + document_path)),
151+
("file://" + temporary_path)),
108152
stdout=subprocess.PIPE,
109153
stderr=subprocess.PIPE)
110154
if translated.stderr:
@@ -116,7 +160,7 @@ def translate_document(document_path, documents):
116160
translated_text = (translated.results[0].paraphrase
117161
if is_python_translator else translated.stdout.decode())
118162
translated_preamble = ("\n\n{{< noticeAutomaticTranslation " + source_language + " >}}\n\n")
119-
if (translated_tokens := split_text_with_frontmatter(translated_text)):
163+
if (translated_tokens := split_with_frontmatter(translated_text)):
120164
translated_tokens[1] = fix_frontmatter(translated_tokens[1], original_text.split(translated_tokens[0])[1])
121165
if translated_tokens[3].strip():
122166
translated_tokens.insert(3, translated_preamble)
@@ -125,7 +169,7 @@ def translate_document(document_path, documents):
125169
translated_text = (translated_preamble + translated_text)
126170
destination_path = make_destination_path(document_path, destination_language)
127171
Path('/'.join(destination_path.split('/')[:-1])).mkdir(parents=True, exist_ok=True)
128-
open(destination_path, 'w').write(translated_text)
172+
open(destination_path, 'w').write(unwrap_from_translation(translated_text))
129173
printf('\n')
130174

131175
def main():
@@ -139,6 +183,8 @@ def main():
139183
def read_from_scripts(relative_path:str):
140184
return open((dirname(realpath(__file__)) + '/../' + relative_path), 'r').read()
141185

186+
TranslationMagic = ("__" + str(ascii_to_number("sitoctt")))
187+
142188
if __name__ == "__main__":
143189
globals_text = read_from_scripts('Lib/Globals.sh')
144190
exec(globals_text.split('#' + globals_text.splitlines()[0].split('#!')[1] + '!')[0])

assets/ButtonBadges.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@ file = "Follow-me-on-mastodon.png"
7474
href = "https://mastodon.uno/@octo"
7575
rel = "me"
7676

77+
[[20-me]]
78+
alt = "Visita la OctoSpacc Hub"
79+
file = "Sites/octospacc-hub-1.png"
80+
href = "https://hub.octt.eu.org"
81+
rel = "me"
82+
7783
[[20-me]]
7884
alt = "Visita il mio Fritto Misto di OctoSpacc"
7985
file = "Sites/fritto-misto-di-octospacc-1.png"

content/it/_index.md

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,16 @@
11
+++
22
Title = "il ✨sitoctt✨ — Home"
33
Description = "Octt sono io... e questo è letteralmente il mio sito (uwu)."
4-
Lastmod = 2024-08-27
4+
Lastmod = 2024-09-21
55
+++
66

77
Una volta qui era tutta campagn— ehm, volevo dire... era tutta una lista di parole ammassate alla male e peggio. Non solo non piaceva più nemmeno a me, ma non è proprio buona creanza nell'anno del Signore 2024 (e oltre), quindi...
88

99
Ora c'è questa lista di tutti i miei ultimissimi articoli, e pagine sfuse che ho aggiornato di recente, mentre la vecchia home è a ["Sul sitoctt"]({{< relref "/miscellanea/Sul-sitoctt/" >}}) finché non avrò riorganizzato tutto. Benvenut<code class="notranslate" data-lang="it"><!--
1010
--><span class="BlinkA">a</span><!--
11-
--><span class="dn">/</span><!--
11+
--><span class="Blink_">/</span><!--
1212
--><span class="BlinkO">o</span></code> nel ✨sitoctt✨!
1313

14-
(Lavori in corso per ancora qualche giorno, quindi forse link rotti e pagine sformate, mi dispiace!!!)
14+
<!-- (Lavori in corso per ancora qualche giorno, quindi forse link rotti e pagine sformate, mi dispiace!!!) -->
1515

16-
<style>
17-
/* Animazioni per le desinenze */
18-
.BlinkA {
19-
Animation: BlinkerA 0.25s Step-Start Infinite;
20-
}
21-
@Keyframes BlinkerA {
22-
0% {Position: Absolute; Visibility: Hidden;}
23-
50% {Position: Static; Visibility: Visible;}
24-
100% {Position: Absolute; Visibility: Hidden;}
25-
}
26-
.BlinkO {
27-
Animation: BlinkerO 0.25s Step-Start Infinite;
28-
}
29-
@Keyframes BlinkerO {
30-
0% {Position: Static; Visibility: Visible;}
31-
50% {Position: Absolute; Visibility: Hidden;}
32-
100% {Position: Static; Visibility: Visible;}
33-
}
34-
</style>
16+
<link rel="stylesheet" href="/desinenze-blink.css"/>

content/it/blog/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
+++
2-
Title = "Blog"
2+
Title = "Blog📚️"
33
Aliases = [
44
"/Posts/index.html",
55
"/Categories/Blog.html",

content/it/categories/MicroBlog/_index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
Title = "📒 Vecchi MicroBlog"
33
#Index = True
44
#URLs = MicroBlog.html Diarylog.html
5-
Categories = [ "Blog" ]
5+
#Categories = [ "Blog" ]
66
+++
77

8-
Come annunciato nell'articolo "[🎇 Il resocontoctt di questo 2023, almeno in termini di posting!](../Posts/2023-12-31-Resocontoctt-2023.html#-Il-MicroBlog-nuovissimo-alla-fa)", il Vecchio MicroBlog è ora deprecato, e non verrà più aggiornato. Quello che segue è l'archivio dei vecchi contenuti, che rimarrà leggibile. I nuovi post verranno quindi pubblicati sul Nuovo MicroBlog unificato, raggiungibile dal menu del sito.
8+
Come annunciato nell'articolo "[🎇 Il resocontoctt di questo 2023, almeno in termini di posting!]({{< relref "/blog/2023-12-31-Resocontoctt-2023/#il-microblog-nuovissimo-alla-faccia-du-rove" >}})", il Vecchio MicroBlog è ora deprecato, e non verrà più aggiornato. Quello che segue è l'archivio dei vecchi contenuti, che rimarrà leggibile. I nuovi post verranno quindi pubblicati sul Nuovo MicroBlog unificato, raggiungibile dal menu del sito.
99

1010
_Nota: I contenuti negli archivi possono aver subito redazioni non segnalate._

0 commit comments

Comments
 (0)