Improved locales handling

This commit is contained in:
2023-03-19 12:14:10 +01:00
parent c7f19d003e
commit 3b36125f20
46 changed files with 360 additions and 388 deletions

View File

@ -23,27 +23,9 @@
import EastereggBanner from "@/components/easteregg-banner/EastereggBanner.vue";
import { useRoute } from 'vue-router'
import { useI18n } from "vue-i18n";
import title_locale from "@/locales/title";
const { t, locale } = useI18n({ messages: {
"en": {
"title_home": "Hello",
"title_about": "About",
"title_projects": "Projects",
"title_resume": "Résumé",
"title_contacts": "Say hello",
"log_hello": "Hello 🐡"
},
"it": {
"title_home": "Ciao",
"title_about": "Chi sono",
"title_projects": "Progetti",
"title_resume": "CV",
"title_contacts": "Salutami",
"log_hello": "Ciao 🐡"
}
} });
const { t, locale } = useI18n({ messages: title_locale });
const route = useRoute()
const easteregg = ref();

View File

@ -29,29 +29,9 @@
import { shouldShowCookie, acceptCookie, refuseCookie } from "@/utilities/cookie_handler";
import { useI18n } from "vue-i18n";
import { addFoundEasterEgg } from "@/utilities/easteregg_handler";
import locale from "@/locales/cookie";
const { t } = useI18n({ messages: {
"en": {
"cookie policy title": "Cookie policy",
"cookie policy": "This website uses cookies but not for analysis purposes and they are not sent to third parties. " +
"The only cookies here are those that I ate this morning, although I prefer a savory breakfast. " +
"I don't know why you are reading this, but thanks for keeping me company, I wish you a great day. " +
"If you would like some cookies too, do not hesitate to click on the following link:",
"cookie policy link": "Click here to read the policy",
"accept": "Accept",
"reject": "Reject"
},
"it": {
"cookie policy title": "Informativa cookie",
"cookie policy": "Questo sito utilizza cookie ma non per fini di profilazione e non sono inviati a terze parti. " +
"Gli unici cookie presenti sono quelli che ho mangiato questa mattina, anche se in realtà preferisco una colazione salata. " +
"Non so perché stai leggendo questo, ma ti ringrazio per avermi fatto compagnia e ti auguro una buona giornata. " +
"Se gradisci dei biscotti, non esitare a cliccare l'informativa al seguente link:",
"cookie policy link": "Clicca qui per l'informativa cookie",
"accept": "Accetta",
"reject": "Rifiuta"
}
} });
const { t } = useI18n({ messages: locale });
const container_cookie = ref();
const canvas_cookie = ref();

View File

@ -35,6 +35,7 @@
import SomethingEgg from "./eggs/Something.vue";
import PictureBrightEgg from "./eggs/PictureBright.vue";
import PictureNoLightEgg from "./eggs/PictureNoLight.vue";
import locale from "@/locales/easteregg";
const show_banner = ref(false);
const easteregg = ref("");
@ -42,16 +43,7 @@
const total_eastereggs = ref(getTotalEasterEggsCount());
const found_eastereggs = ref(getFoundEasterEggsCount());
const { t } = useI18n({ messages: {
"en": {
"easter eggs found": "easter eggs found",
"all easter eggs found": "You found all easter eggs 🥚"
},
"it": {
"easter eggs found": "easter egg trovati",
"all easter eggs found": "Hai trovato tutti gli easter egg 🥚"
}
} });
const { t } = useI18n({ messages: locale });
let current_dismiss_timeout:number|null = null;
@ -59,7 +51,6 @@
function show(easteregg_name:string) {
easteregg.value = easteregg_name;
found_eastereggs.value = getFoundEasterEggsCount();
console.log(getFoundEasterEggsCount())
show_banner.value = true;
if (current_dismiss_timeout) { clearTimeout(current_dismiss_timeout) }

View File

@ -8,8 +8,8 @@
</div>
<div class="flex-1 ml-2">
<p class="font-bold text-base">{{ t("title") }}</p>
<p>{{ t("description") }}</p>
<p class="font-bold text-base">{{ t("cookie.title") }}</p>
<p>{{ t("cookie.description") }}</p>
</div>
</div>
@ -18,15 +18,7 @@
<script setup lang="ts">
import { useI18n } from "vue-i18n";
import image from "@/assets/images/cookie.png";
const { t } = useI18n({ messages: {
"en": {
"title": "Who wants a cookie?",
"description": "It appears that you read the cookie policy"
},
"it": {
"title": "Chi vuole un biscotto?",
"description": "Sembra che hai letto l'informativa cookie"
}
} });
import locale from "@/locales/easteregg";
const { t } = useI18n({ messages: locale });
</script>

View File

@ -8,8 +8,8 @@
</div>
<div class="flex-1 ml-2">
<p class="font-bold text-base">{{ t("title") }}</p>
<p>{{ t("description") }}</p>
<p class="font-bold text-base">{{ t("future.title") }}</p>
<p>{{ t("future.description") }}</p>
</div>
</div>
@ -18,15 +18,7 @@
<script setup lang="ts">
import { useI18n } from "vue-i18n";
import image from "@/assets/images/future.png";
const { t } = useI18n({ messages: {
"en": {
"title": "What a wonderful future",
"description": "What will happen next?"
},
"it": {
"title": "Che bello il futuro",
"description": "Cosa ci riserverà?"
}
} });
import locale from "@/locales/easteregg";
const { t } = useI18n({ messages: locale });
</script>

View File

@ -8,33 +8,22 @@
</div>
<div class="flex-1 ml-2">
<p class="font-bold text-base">{{ t("title") }}</p>
<p>{{ t("description") }}</p>
<p class="font-bold text-base">{{ t("bright.title") }}</p>
<p v-if="!dark_unlocked">{{ t("bright.description") }}</p>
<p v-if="dark_unlocked">{{ t("bright_either.description") }}</p>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
import { useI18n } from "vue-i18n";
import image from "@/assets/images/sun.png";
import { getFoundEasterEggs } from "@/utilities/easteregg_handler";
let locale = {
"en": {
"title": "It's bright",
"description": "I don't like the light"
},
"it": {
"title": "È luminoso",
"description": "Non mi piace la luce"
}
};
if (getFoundEasterEggs().includes("picture-nolights")) {
locale["en"]["description"] = "I don't like the light either"
locale["it"]["description"] = "Non mi piace nemmeno la luce"
}
import locale from "@/locales/easteregg";
const { t } = useI18n({ messages: locale });
const dark_unlocked = ref(getFoundEasterEggs().includes("picture-nolights"));
</script>

View File

@ -8,33 +8,22 @@
</div>
<div class="flex-1 ml-2">
<p class="font-bold text-base">{{ t("title") }}</p>
<p>{{ t("description") }}</p>
<p class="font-bold text-base">{{ t("dark.title") }}</p>
<p v-if="!light_unlocked">{{ t("dark.description") }}</p>
<p v-if="light_unlocked">{{ t("dark_either.description") }}</p>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
import { useI18n } from "vue-i18n";
import image from "@/assets/images/moon.png";
import { getFoundEasterEggs } from "@/utilities/easteregg_handler";
let locale = {
"en": {
"title": "It's dark",
"description": "I don't like the dark"
},
"it": {
"title": "È buio",
"description": "Non mi piace il buio"
}
};
if (getFoundEasterEggs().includes("picture-bright")) {
locale["en"]["description"] = "I don't like the dark either"
locale["it"]["description"] = "Non mi piace nemmeno il buio"
}
import locale from "@/locales/easteregg";
const { t } = useI18n({ messages: locale });
const light_unlocked = ref(getFoundEasterEggs().includes("picture-bright"));
</script>

View File

@ -8,8 +8,8 @@
</div>
<div class="flex-1 ml-2">
<p class="font-bold text-base">{{ t("title") }}</p>
<p>{{ t("description") }}</p>
<p class="font-bold text-base">{{ t("something.title") }}</p>
<p>{{ t("something.description") }}</p>
</div>
</div>
@ -18,15 +18,7 @@
<script setup lang="ts">
import { useI18n } from "vue-i18n";
import image from "@/assets/images/sad.svg";
import locale from "@/locales/easteregg";
const { t } = useI18n({ messages: {
"en": {
"title": "You didn't like that?",
"description": "I hope this one is better"
},
"it": {
"title": "Non ti piaceva?",
"description": "Spero che questo sia meglio"
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -11,7 +11,7 @@
<ul class="p-3 space-y-1 text-sm text-gray-700 dark:text-gray-200" aria-labelledby="button-dropdown-locales">
<li v-for="locale in $i18n.availableLocales" :key="`locale-${locale}`">
<input :id="`radio-locale-${locale}`" type="radio" :value="locale" name="locale" class="hidden" v-model="$i18n.locale" :onChange="changeLocale">
<input :id="`radio-locale-${locale}`" type="radio" :value="locale" name="locale" class="hidden" :onChange="changeLocale">
<label :for="`radio-locale-${locale}`" class="text-sm font-medium uppercase text-gray-900 rounded dark:text-gray-300 ">
<div class="flex items-center p-2 px-5 rounded hover:bg-gray-100 dark:hover:bg-gray-600">
{{ locale }}
@ -28,14 +28,19 @@
import { initDropdowns } from "flowbite";
import { setLocale } from "@/utilities/locale_handler";
import { onMounted } from "vue";
import { useI18n } from "vue-i18n";
import globe_icon from "@/assets/images/icons/globe.svg";
let i18n = useI18n();
onMounted(() => {
initDropdowns();
})
function changeLocale(e:any) {
setLocale(e.target.value);
const locale = e.target.value;
setLocale(locale, i18n);
}
</script>

View File

@ -41,7 +41,7 @@
import LanguageSelector from "../language-selector/LanguageSelector.vue";
import { initCollapses } from "flowbite";
import { useI18n } from "vue-i18n";
import locale from "./locale.json";
import locale from "@/locales/navbar";
import { onMounted } from "vue";
import github_icon from "@/assets/images/icons/github.svg";

View File

@ -25,21 +25,9 @@
import picture_light from "@/assets/images/profile/picture-light.png";
import picture_bright from "@/assets/images/profile/picture-bright.png";
import picture_nolight from "@/assets/images/profile/picture-nolight.png";
import profile_locale from "@/locales/profile-picture";
const { t, locale } = useI18n({ messages: {
"en": {
"that's bright": "That's bright",
"better": "Better",
"where lights": "Who turned off the lights?",
"here lights": "Here they are"
},
"it": {
"that's bright": "È luminoso",
"better": "Meglio",
"where lights": "Chi ha spento le luci?",
"here lights": "Eccole"
}
} });
const { t, locale } = useI18n({ messages: profile_locale });
const picture = ref(picture_dark);
const message = ref("picture_dark");

View File

@ -15,23 +15,9 @@
import rock_image from "@/assets/images/rock.png";
import coconut_image from "@/assets/images/coconut.png";
import red_panda_image from "@/assets/images/red-panda.png";
import locale from "@/locales/something";
const { t } = useI18n({ messages: {
"en": {
"penguin": "This is a penguin",
"llama": "This is a llama",
"rock": "This is a rock",
"coconut": "This is a coconut",
"red panda": "This is a red panda"
},
"it": {
"penguin": "Questo è un pinguino",
"llama": "Questo è un lama",
"rock": "Questo è un sasso",
"coconut": "Questa è una noce di cocco",
"red panda": "Questo è un panda rosso"
}
} });
const { t } = useI18n({ messages: locale });
const things = [
{ name: "penguin", image: penguin_image },

16
src/locales/about.ts Normal file
View File

@ -0,0 +1,16 @@
export default {
"en": {
"about me": "About me",
"reading": "Currently I'm reading",
"that's bright": "That's bright",
"thanks": "Thanks"
},
"it": {
"about me": "Su di me",
"reading": "Attualmente sto leggendo",
"that's bright": "È luminoso",
"thanks": "Grazie"
}
}

View File

@ -1,4 +1,4 @@
{
export default {
"en": {
"contacts": "Contacts"
},

22
src/locales/cookie.ts Normal file
View File

@ -0,0 +1,22 @@
export default{
"en": {
"cookie policy title": "Cookie policy",
"cookie policy": "This website uses cookies but not for analysis purposes and they are not sent to third parties. " +
"The only cookies here are those that I ate this morning, although I prefer a savory breakfast. " +
"I don't know why you are reading this, but thanks for keeping me company, I wish you a great day. " +
"If you would like some cookies too, do not hesitate to click on the following link:",
"cookie policy link": "Click here to read the policy",
"accept": "Accept",
"reject": "Reject"
},
"it": {
"cookie policy title": "Informativa cookie",
"cookie policy": "Questo sito utilizza cookie ma non per fini di profilazione e non sono inviati a terze parti. " +
"Gli unici cookie presenti sono quelli che ho mangiato questa mattina, anche se in realtà preferisco una colazione salata. " +
"Non so perché stai leggendo questo, ma ti ringrazio per avermi fatto compagnia e ti auguro una buona giornata. " +
"Se gradisci dei biscotti, non esitare a cliccare l'informativa al seguente link:",
"cookie policy link": "Clicca qui per l'informativa cookie",
"accept": "Accetta",
"reject": "Rifiuta"
}
}

44
src/locales/easteregg.ts Normal file
View File

@ -0,0 +1,44 @@
export default {
"en": {
"easter eggs found": "easter eggs found",
"all easter eggs found": "You found all easter eggs 🥚",
"cookie.title": "Who wants a cookie?",
"cookie.description": "It appears that you read the cookie policy",
"future.title": "What a wonderful future",
"future.description": "What will happen next?",
"bright.title": "It's bright",
"bright.description": "I don't like the light",
"bright_either.description": "I don't like the light either",
"dark.title": "It's dark",
"dark.description": "I don't like the dark",
"dark_either.description": "I don't like the dark either",
"something.title": "You didn't like that?",
"something.description": "I hope this one is better",
},
"it": {
"easter eggs found": "easter egg trovati",
"all easter eggs found": "Hai trovato tutti gli easter egg 🥚",
"cookie.title": "Chi vuole un biscotto?",
"cookie.description": "Sembra che hai letto l'informativa cookie",
"future.title": "Che bello il futuro",
"future.description": "Cosa ci riserverà?",
"bright.title": "È luminoso",
"bright.description": "Non mi piace la luce",
"bright_either.description": "Non mi piace nemmeno la luce",
"dark.title": "È buio",
"dark.description": "Non mi piace il buio",
"dark_either.description": "Non mi piace nemmeno il buio",
"something.title": "Non ti piaceva?",
"something.description": "Spero che questo sia meglio",
}
}

View File

@ -1,4 +1,4 @@
{
export default {
"en": {
"i am a": "I'm a",
"cs student": "Computer Science Student",

View File

@ -1,4 +1,4 @@
{
export default {
"it": {
"open nav": "Apri menù di navigazione",
"home": "Home",

View File

@ -0,0 +1,14 @@
export default {
"en": {
"that's bright": "That's bright",
"better": "Better",
"where lights": "Who turned off the lights?",
"here lights": "Here they are"
},
"it": {
"that's bright": "È luminoso",
"better": "Meglio",
"where lights": "Chi ha spento le luci?",
"here lights": "Eccole"
}
}

98
src/locales/projects.ts Normal file
View File

@ -0,0 +1,98 @@
export default {
en: {
"projects": "Projects",
"wip": "Currently I'm working on",
"completed": "Completed projects",
"unibo_20-21": "University of Bologna, A.Y. 2020-2021",
"unibo_21-22": "University of Bologna, A.Y. 2021-2022",
"unibo_22-23": "University of Bologna, A.Y. 2022-2023",
"notxia.github.io.description": "Here's a secret preview of my website.",
"no recursion": "Recursion out of service, sorry for the inconvenience.",
"wirefilter.description":
"Virtual Distributed Ethernet (VDE) is an open source project that allows the creation of virtual networks through a set of plugins.\n" +
"Wirefilter is a plugin that allows to manipulate packet flow by changing the parameters of the virtual cable.",
"tweet_analysis.description":
"Project for the Software Engineering course.\n" +
"Twitter client with analytics features developed using the Scrum methodology.",
"animalhouse.description":
"Project for the Web Technology course.\n" +
"Web app with three sections:",
"animalhouse.description.game": "Game: area with games and facts about animals",
"animalhouse.description.frontoffice": "Frontoffice: area to access services as a logged user",
"animalhouse.description.backoffice": "Backoffice: administration panel",
"pandos+.description":
"Project for the Operating Systems course.\n" +
"Minimal operating system for the MIPS architecture.",
"imaging.description":
"Project for the Numerical Computing course.\n" +
"Image deblurring solved as a minimization problem.",
"mnk.description":
"Project for the Algorithms and Data Structures course.\n" +
"Algorithm able to efficiently play a generalized version of tic-tac-toe.",
"platform.description":
"Project for the Programmin course.\n" +
"Text based platform game with randomly generated levels.",
"pathfinding_visualizer.description": "Visualizer of some graph search algorithms.",
"sort_visualizer.description": "Visualizer of some sorting algorithms.",
},
it: {
"projects": "Progetti",
"wip": "Attualmente sto lavorando a",
"completed": "Progetti completati",
"unibo_20-21": "Università di Bologna, A.A. 2020-2021",
"unibo_21-22": "Università di Bologna, A.A. 2021-2022",
"unibo_22-23": "Università di Bologna, A.A. 2022-2023",
"notxia.github.io.description": "Ecco un'anteprima segreta del mio sito.",
"no recursion": "Ricorsione fuori servizio, mi scuso per il disagio.",
"wirefilter.description":
"Virtual Distributed Ethernet (VDE) è un progetto open source che consente di creare reti virtuali tramite l'utilizzo modulare di plugin.\n" +
"Wirefilter è un plugin che consente di manipolare il flusso dei pacchetti in transito impostando parametri per il cavo virtuale.",
"tweet_analysis.description":
"Progetto per il corso di Ingegneria del Software.\n" +
"Webapp per l'analisi di tweet sviluppata con metodologia Scrum.",
"animalhouse.description":
"Progetto per il corso di Tecnologie Web.\n" +
"Web app suddivisa in tre sezioni:",
"animalhouse.description.game": "Game: area con giochi e curiosità sugli animali",
"animalhouse.description.frontoffice": "Frontoffice: area con servizi per gli utenti autenticati",
"animalhouse.description.backoffice": "Backoffice: pannello di amministrazione",
"pandos+.description":
"Progetto per il corso di Sistemi Operativi.\n" +
"Sistema operativo minimale per architettura MIPS.",
"imaging.description":
"Progetto per il corso di Calcolo Numerico.\n" +
"Deblurring di immagini risolto come problema di minimizzazione.",
"mnk.description":
"Progetto per il corso di Algoritmi e Strutture Dati.\n" +
"Algoritmo in grado di giocare in modo efficiente ad una versione generalizzata del tris.",
"platform.description":
"Progetto per il corso di Programmazione.\n" +
"Gioco platform su terminale con livelli generati casualmente.",
"pathfinding_visualizer.description": "Visualizzazione di alcuni algoritmi di ricerca su grafi.",
"sort_visualizer.description": "Visualizzazione di alcuni algoritmi di ordinamento.",
}
}

View File

@ -1,3 +1,8 @@
import cv_it from "@/assets/cv/it.pdf";
import cv_en from "@/assets/cv/en.pdf";
import cv_it_color from "@/assets/cv/it_color.pdf";
import cv_en_color from "@/assets/cv/en_color.pdf";
export default ({
"en": {
"education": "Education",
@ -7,6 +12,11 @@ export default ({
"other": "Other activities",
"link to certificate": "Link to certificate",
"future": "What will happen?",
"like timelines": "I like timelines",
"cv_link": cv_en,
"cv_link_color": cv_en_color,
"with_colors": "but colored",
"january": "January", "february": "February", "march": "March", "april": "April", "may": "May", "june": "June",
"july": "July", "august": "August", "september": "September", "october": "October", "november": "November", "december": "December",
@ -25,9 +35,11 @@ export default ({
"data analysis": "Data analysis",
"other programming languages": "Other programming languages",
"cisco it essentials description": "Maintenance and administration of IT systems.\n" +
"Configuration and management of network devices.",
"cs50 ai description": "Problem solving through algorithms based on graphs, statistics, optimization and machine learning.",
"cs50 ai description": "Problem solving through algorithms based on graphs, statistics, optimization and machine learning.",
"pcto toyota": "IT/IS Office, Internship",
@ -35,6 +47,7 @@ export default ({
"IT support, maintenance and initial setup of network devices.\n" +
"SQL programming, automation with bash and batch scripts.",
"ois": "Informatics Olympiad in Teams",
"ois description": "Team based programming competition.",
@ -50,6 +63,11 @@ export default ({
"other": "Altre attività",
"link to certificate": "Link al certificato",
"future": "Chissà cosa succederà",
"like timelines": "Mi piacciono le linee del tempo",
"cv_link": cv_it,
"cv_link_color": cv_it_color,
"with_colors": "ma colorato",
"january": "Gennaio", "february": "Febbraio", "march": "Marzo", "april": "Aprile", "may": "Maggio", "june": "Giugno",
"july": "Luglio", "august": "Agosto", "september": "Settembre", "october": "Ottobre", "november": "Novembre", "december": "Dicembre",
@ -68,8 +86,10 @@ export default ({
"data analysis": "Data analysis",
"other programming languages": "Altri linguaggi di programmazione",
"cisco it essentials description": "Manutenzione e amministrazione di sistemi informatici.\n" +
"Configurazione e gestione di apparati di rete.",
"cs50 ai description": "Risoluzione di problemi con algoritmi basati su grafi, statistica, ottimizzazione e machine learning.",

16
src/locales/something.ts Normal file
View File

@ -0,0 +1,16 @@
export default {
"en": {
"penguin": "This is a penguin",
"llama": "This is a llama",
"rock": "This is a rock",
"coconut": "This is a coconut",
"red panda": "This is a red panda"
},
"it": {
"penguin": "Questo è un pinguino",
"llama": "Questo è un lama",
"rock": "Questo è un sasso",
"coconut": "Questa è una noce di cocco",
"red panda": "Questo è un panda rosso"
}
}

20
src/locales/title.ts Normal file
View File

@ -0,0 +1,20 @@
export default {
"en": {
"title_home": "Hello",
"title_about": "About",
"title_projects": "Projects",
"title_resume": "Résumé",
"title_contacts": "Say hello",
"log_hello": "Hello 🐡"
},
"it": {
"title_home": "Ciao",
"title_about": "Chi sono",
"title_projects": "Progetti",
"title_resume": "CV",
"title_contacts": "Salutami",
"log_hello": "Ciao 🐡"
}
}

View File

@ -2,6 +2,9 @@ export function getLocale():string {
return localStorage.getItem("locale") ?? window.navigator.language.split("-")[0];
}
export function setLocale(locale:string):void {
export function setLocale(locale:string, i18n:any):void {
localStorage.setItem("locale", locale);
i18n.locale.value = locale;
document?.querySelector("html")?.setAttribute("lang", locale);
}

View File

@ -81,23 +81,9 @@
import { useI18n } from "vue-i18n";
import { type ComputedRef, computed, onMounted, watch, ref } from "vue";
import { initPopovers } from "flowbite";
import about_locale from "@/locales/about";
const { t, locale } = useI18n({ messages: {
"en": {
"about me": "About me",
"reading": "Currently I'm reading",
"that's bright": "That's bright",
"thanks": "Thanks"
},
"it": {
"about me": "Su di me",
"reading": "Attualmente sto leggendo",
"that's bright": "È luminoso",
"thanks": "Grazie"
}
} });
const { t, locale } = useI18n({ messages: about_locale });
const current_locale = ref(locale.value);

View File

@ -24,7 +24,7 @@
import Navbar from "@/components/navbar/Navbar.vue";
import ScreenCenter from "@/components/screen-center/ScreenCenter.vue";
import { useI18n } from "vue-i18n";
import locale from "./locale.json";
import locale from "@/locales/contacts";
import ContactLink from "./ContactLink.vue";
import mail_icon from "@/assets/images/icons/mail.svg";

View File

@ -26,7 +26,7 @@
import ScreenCenter from "@/components/screen-center/ScreenCenter.vue";
import RandomSomething from "@/components/random-something/RandomSomething.vue";
import { useI18n } from "vue-i18n";
import locale from "./locale.json";
import locale from "@/locales/home";
const { t } = useI18n({ messages: locale });
</script>

View File

@ -39,7 +39,7 @@
import AnimalHouse from "./cards/AnimalHouse.vue";
import TweetAnalysis from "./cards/TweetAnalysis.vue";
import { useI18n } from "vue-i18n";
import locale from "./locale.json";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: locale });
</script>

View File

@ -6,12 +6,12 @@
{ label: 'Repository', url: 'https://github.com/NotXia/animal-house' }
]">
<p class="text-center">{{ t("unibo") }}</p>
<p>{{ t('description') }}</p>
<p class="text-center">{{ t("unibo_21-22") }}</p>
<p>{{ t('animalhouse.description') }}</p>
<ul class="list-inside list-['-_']">
<li>{{ t('description game') }}</li>
<li>{{ t('description frontoffice') }}</li>
<li>{{ t('description backoffice') }}</li>
<li>{{ t('animalhouse.description.game') }}</li>
<li>{{ t('animalhouse.description.frontoffice') }}</li>
<li>{{ t('animalhouse.description.backoffice') }}</li>
</ul>
</ProjectCard>
</template>
@ -21,26 +21,7 @@
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import image from "@/assets/images/projects/animal-house.png";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: {
en: {
"unibo": "University of Bologna, A.Y. 2021-2022",
"description":
"Project for the Web Technology course.\n" +
"Web app with three sections:",
"description game": "Game: area with games and facts about animals",
"description frontoffice": "Frontoffice: area to access services as a logged user",
"description backoffice": "Backoffice: administration panel"
},
it: {
"unibo": "Università di Bologna, A.A. 2021-2022",
"description":
"Progetto per il corso di Tecnologie Web.\n" +
"Web app suddivisa in tre sezioni:",
"description game": "Game: area con giochi e curiosità sugli animali",
"description frontoffice": "Frontoffice: area con servizi per gli utenti autenticati",
"description backoffice": "Backoffice: pannello di amministrazione"
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -6,8 +6,8 @@
{ label: 'Repository', url: 'https://github.com/NotXia/imaging' }
]">
<p class="text-center">{{ t("unibo") }}</p>
<p>{{ t('description') }}</p>
<p class="text-center">{{ t("unibo_21-22") }}</p>
<p>{{ t('imaging.description') }}</p>
</ProjectCard>
</template>
@ -16,19 +16,7 @@
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import image from "@/assets/images/projects/imaging.png";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: {
en: {
unibo: "University of Bologna, A.Y. 2021-2022",
description:
"Project for the Numerical Computing course.\n" +
"Image deblurring solved as a minimization problem."
},
it: {
unibo: "Università di Bologna, A.A. 2021-2022",
description:
"Progetto per il corso di Calcolo Numerico.\n" +
"Deblurring di immagini risolto come problema di minimizzazione."
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -6,8 +6,8 @@
{ label: 'Repository', url: 'https://github.com/NotXia/MNKGame' }
]">
<p class="text-center">{{ t("unibo") }}</p>
<p>{{ t('description') }}</p>
<p class="text-center">{{ t("unibo_20-21") }}</p>
<p>{{ t('mnk.description') }}</p>
</ProjectCard>
</template>
@ -16,19 +16,7 @@
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import image from "@/assets/images/projects/mnkgame.png";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: {
en: {
unibo: "University of Bologna, A.Y. 2020-2021",
description:
"Project for the Algorithms and Data Structures course.\n" +
"Algorithm able to efficiently play a generalized version of tic-tac-toe."
},
it: {
unibo: "Università di Bologna, A.A. 2020-2021",
description:
"Progetto per il corso di Algoritmi e Strutture Dati.\n" +
"Algoritmo in grado di giocare in modo efficiente ad una versione generalizzata del tris."
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -5,7 +5,7 @@
{ label: 'Repository', url: 'https://github.com/NotXia/notxia.github.io' },
]">
<p v-if="!show_recursive_message">{{ t('description') }}</p>
<p v-if="!show_recursive_message">{{ t('notxia.github.io.description') }}</p>
<div class="w-full h-72 relative">
<div role="status" v-if="!iframe_loaded && !show_recursive_message" class="absolute top-0 left-0 w-full h-full flex justify-center items-center">
@ -29,6 +29,7 @@
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import { ref, onMounted } from "vue";
import locale from "@/locales/projects";
const iframe_loaded = ref(false);
const show_recursive_message = ref(false);
@ -42,14 +43,5 @@
catch (err) { show_recursive_message.value = false; }
});
const { t } = useI18n({ messages: {
en: {
description: "Here's a secret preview of my website.",
"no recursion": "Recursion out of service, sorry for the inconvenience."
},
it: {
description: "Ecco un'anteprima segreta del mio sito.",
"no recursion": "Ricorsione fuori servizio, mi scuso per il disagio."
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -6,8 +6,8 @@
{ label: 'Repository', url: 'https://github.com/NotXia/pandos-plus' }
]">
<p class="text-center">{{ t("unibo") }}</p>
<p>{{ t('description') }}</p>
<p class="text-center">{{ t("unibo_21-22") }}</p>
<p>{{ t('pandos+.description') }}</p>
</ProjectCard>
</template>
@ -15,19 +15,7 @@
<script setup lang="ts">
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: {
en: {
unibo: "University of Bologna, A.Y. 2021-2022",
description:
"Project for the Operating Systems course.\n" +
"Minimal operating system for the MIPS architecture."
},
it: {
unibo: "Università di Bologna, A.A. 2021-2022",
description:
"Progetto per il corso di Sistemi Operativi.\n" +
"Sistema operativo minimale per architettura MIPS."
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -7,7 +7,7 @@
{ label: 'Demo', url: 'https://notxia.github.io/pathfinding-visualizer/' }
]">
{{ t('description') }}
{{ t('pathfinding_visualizer.description') }}
</ProjectCard>
</template>
@ -16,15 +16,7 @@
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import image from "@/assets/images/projects/pathfinding-visualizer.png";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: {
en: {
description:
"Visualizer of some graph search algorithms."
},
it: {
description:
"Visualizzazione di alcuni algoritmi di ricerca su grafi."
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -6,8 +6,8 @@
{ label: 'Repository', url: 'https://github.com/NotXia/platform-game' }
]">
<p class="text-center">{{ t("unibo") }}</p>
<p>{{ t('description') }}</p>
<p class="text-center">{{ t("unibo_20-21") }}</p>
<p>{{ t('platform.description') }}</p>
</ProjectCard>
</template>
@ -16,19 +16,7 @@
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import image from "@/assets/images/projects/platform.png";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: {
en: {
unibo: "University of Bologna, A.Y. 2020-2021",
description:
"Project for the Programmin course.\n" +
"Text based platform game with randomly generated levels."
},
it: {
unibo: "Università di Bologna, A.A. 2020-2021",
description:
"Progetto per il corso di Programmazione.\n" +
"Gioco platform su terminale con livelli generati casualmente."
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -7,7 +7,7 @@
{ label: 'Demo', url: 'https://notxia.github.io/sorting-visualizer/' }
]">
{{ t('description') }}
{{ t('sort_visualizer.description') }}
</ProjectCard>
</template>
@ -16,15 +16,7 @@
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import image from "@/assets/images/projects/sorting-visualizer.png";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: {
en: {
description:
"Visualizer of some sorting algorithms."
},
it: {
description:
"Visualizzazione di alcuni algoritmi di ordinamento."
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -6,8 +6,8 @@
{ label: 'Repository', url: 'https://github.com/NotXia/tweet-analysis' }
]">
<p class="text-center">{{ t("unibo") }}</p>
<p>{{ t('description') }}</p>
<p class="text-center">{{ t("unibo_22-23") }}</p>
<p>{{ t('tweet_analysis.description') }}</p>
</ProjectCard>
</template>
@ -16,19 +16,7 @@
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import image from "@/assets/images/projects/tweet-analysis.png";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: {
en: {
unibo: "University of Bologna, A.Y. 2022-2023",
description:
"Project for the Software Engineering course.\n" +
"Twitter client with analytics features developed using the Scrum methodology."
},
it: {
unibo: "Università di Bologna, A.A. 2022-2023",
description:
"Progetto per il corso di Ingegneria del Software.\n" +
"Webapp per l'analisi di tweet sviluppata con metodologia Scrum."
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -6,8 +6,8 @@
{ label: 'VirtualSquare', url: 'http://wiki.virtualsquare.org/#!index.md' }
]">
<p class="text-center">{{ t("unibo") }}</p>
<p>{{ t('description') }}</p>
<p class="text-center">{{ t("unibo_22-23") }}</p>
<p>{{ t("wirefilter.description") }}</p>
</ProjectCard>
</template>
@ -15,19 +15,7 @@
<script setup lang="ts">
import ProjectCard from "../ProjectCard.vue";
import { useI18n } from "vue-i18n";
import locale from "@/locales/projects";
const { t } = useI18n({ messages: {
en: {
unibo: "University of Bologna, A.Y. 2022-2023",
description:
"Virtual Distributed Ethernet (VDE) is an open source project that allows the creation of virtual networks through a set of plugins.\n" +
"Wirefilter is a plugin that allows to manipulate packet flow by changing the parameters of the virtual cable."
},
it: {
unibo: "Università di Bologna, A.A. 2022-2023",
description:
"Virtual Distributed Ethernet (VDE) è un progetto open source che consente di creare reti virtuali tramite l'utilizzo modulare di plugin.\n" +
"Wirefilter è un plugin che consente di manipolare il flusso dei pacchetti in transito impostando parametri per il cavo virtuale."
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -1,12 +0,0 @@
{
"en": {
"projects": "Projects",
"wip": "Currently I'm working on",
"completed": "Completed projects"
},
"it": {
"projects": "Progetti",
"wip": "Attualmente sto lavorando a",
"completed": "Progetti completati"
}
}

View File

@ -44,23 +44,9 @@
import Work from "./sections/Work.vue";
import Other from "./sections/Other.vue";
import { useI18n } from "vue-i18n";
import locale from "@/locales/resume";
import pdf_image from "@/assets/images/icons/pdf.svg";
import cv_it from "@/assets/cv/it.pdf";
import cv_en from "@/assets/cv/en.pdf";
import cv_it_color from "@/assets/cv/it_color.pdf";
import cv_en_color from "@/assets/cv/en_color.pdf";
const { t } = useI18n({ messages: {
"en": {
"cv_link": cv_en,
"cv_link_color": cv_en_color,
"with_colors": "but colored"
},
"it": {
"cv_link": cv_it,
"cv_link_color": cv_it_color,
"with_colors": "ma colorato"
}
} });
const { t } = useI18n({ messages: locale });
</script>

View File

@ -17,8 +17,7 @@
<script setup lang="ts">
import { useI18n } from "vue-i18n";
import ActivityParagraph from "../components/ActivityParagraph.vue";
import locale from "../locale.js";
import locale from "@/locales/resume";
// @ts-ignore
const { t } = useI18n({ messages: locale});
const { t } = useI18n({ messages: locale });
</script>

View File

@ -15,8 +15,7 @@
<script setup lang="ts">
import { useI18n } from "vue-i18n";
import ActivityParagraph from "../components/ActivityParagraph.vue";
import locale from "../locale.js";
import locale from "@/locales/resume";
// @ts-ignore
const { t } = useI18n({ messages: locale });
</script>

View File

@ -49,19 +49,12 @@
<script setup lang="ts">
import Timeline from "@/components/timeline/Timeline.vue";
import { useI18n } from "vue-i18n";
import locale from "../locale.js";
import { initTooltips } from "flowbite";
import { onMounted } from "vue";
import { addFoundEasterEgg } from "@/utilities/easteregg_handler";
import locale from "@/locales/resume";
const timeline_locale = locale;
// @ts-ignore
timeline_locale.en["like timelines"] = "I like timelines";
// @ts-ignore
timeline_locale.it["like timelines"] = "Mi piacciono le linee del tempo";
// @ts-ignore
const { t } = useI18n({ messages: timeline_locale});
const { t } = useI18n({ messages: locale });
const january = 0, february = 1, march = 2, april = 3, may = 4, june = 5, july = 6, august = 7, september = 8, october = 9, november = 10, december = 11;

View File

@ -16,8 +16,7 @@
<script setup lang="ts">
import { useI18n } from "vue-i18n";
import ActivityParagraph from "../components/ActivityParagraph.vue";
import locale from "../locale.js";
import locale from "@/locales/resume";
// @ts-ignore
const { t } = useI18n({ messages: locale});
const { t } = useI18n({ messages: locale });
</script>

View File

@ -75,7 +75,7 @@
import { useI18n } from "vue-i18n";
import ActivityParagraph from "../components/ActivityParagraph.vue";
import ProgrammingLogo from "../components/ProgrammingLogo.vue";
import locale from "../locale.js";
import locale from "@/locales/resume";
import nodejs_logo from "@/assets/images/icons/nodejs.svg";
import php_logo from "@/assets/images/icons/php.svg";
@ -109,6 +109,5 @@
import python_logo from "@/assets/images/icons/python.svg";
import cpu_logo from "@/assets/images/icons/cpu.svg";
// @ts-ignore
const { t } = useI18n({ messages: locale });
</script>

View File

@ -13,8 +13,7 @@
<script setup lang="ts">
import { useI18n } from "vue-i18n";
import ActivityParagraph from "../components/ActivityParagraph.vue";
import locale from "../locale.js";
import locale from "@/locales/resume";
// @ts-ignore
const { t } = useI18n({ messages: locale });
</script>