mirror of
https://github.com/alrayyes/wiki.git
synced 2025-06-01 03:40:59 +00:00
* fix: alt error mix with height/width More granular detection of alt and resize in image * fix: format * feat: init i18n * feat: add translation * style: prettier for test * fix: build-up the locale to fusion with dateLocale * style: run prettier * remove cursed file * refactor: remove i18n library and use locale way instead * format with prettier * forgot to remove test * prevent merging error * format * format * fix: allow string for locale - Check during translation if valid / existing locale - Allow to use "en" and "en-US" for example - Add fallback directly in the function - Add default key in the function - Add docstring to cfg.ts * forgot item translation * remove unused locale variable * forgot to remove fr-FR testing * format
This commit is contained in:
parent
3fb3930df8
commit
dbbc672c67
17 changed files with 180 additions and 32 deletions
quartz/i18n
37
quartz/i18n/i18next.ts
Normal file
37
quartz/i18n/i18next.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import en from "./locales/en.json"
|
||||
import fr from "./locales/fr.json"
|
||||
|
||||
const TRANSLATION = {
|
||||
"en-US": en,
|
||||
"fr-FR": fr,
|
||||
} as const
|
||||
|
||||
type TranslationOptions = {
|
||||
[key: string]: string
|
||||
}
|
||||
|
||||
export const i18n = (lang = "en-US", key: string, options?: TranslationOptions) => {
|
||||
const locale =
|
||||
Object.keys(TRANSLATION).find(
|
||||
(key) =>
|
||||
key.toLowerCase() === lang.toLowerCase() || key.toLowerCase().includes(lang.toLowerCase()),
|
||||
) ?? "en-US"
|
||||
const getTranslation = (key: string) => {
|
||||
const keys = key.split(".")
|
||||
let translationString: string | Record<string, unknown> =
|
||||
TRANSLATION[locale as keyof typeof TRANSLATION]
|
||||
keys.forEach((key) => {
|
||||
// @ts-ignore
|
||||
translationString = translationString[key]
|
||||
})
|
||||
return translationString
|
||||
}
|
||||
if (options) {
|
||||
let translationString = getTranslation(key).toString()
|
||||
Object.keys(options).forEach((key) => {
|
||||
translationString = translationString.replace(`{{${key}}}`, options[key])
|
||||
})
|
||||
return translationString
|
||||
}
|
||||
return getTranslation(key).toString()
|
||||
}
|
37
quartz/i18n/locales/en.json
Normal file
37
quartz/i18n/locales/en.json
Normal file
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"404": "Either this page is private or doesn't exist.",
|
||||
"backlinks": {
|
||||
"backlinks": "Backlinks",
|
||||
"noBlacklinksFound": "No backlinks found"
|
||||
},
|
||||
"common": {
|
||||
"item": "item"
|
||||
},
|
||||
"darkmode": {
|
||||
"lightMode": "Light mode"
|
||||
},
|
||||
"folderContent": {
|
||||
"underThisFolder": "under this folder"
|
||||
},
|
||||
"footer": {
|
||||
"createdWith": "Created with"
|
||||
},
|
||||
"graph": {
|
||||
"graphView": "Graph View"
|
||||
},
|
||||
"head": {
|
||||
"noDescriptionProvided": "No description provided",
|
||||
"untitled": "Untitled"
|
||||
},
|
||||
"recentNotes": {
|
||||
"seeRemainingMore": "See {{remaining}} more"
|
||||
},
|
||||
"search": "Search",
|
||||
"tableOfContent": "Table of Contents",
|
||||
"tagContent": {
|
||||
"showingFirst": "Showing first",
|
||||
"totalTags": "total tags",
|
||||
"withThisTag": "with this tag",
|
||||
"found": "Found"
|
||||
}
|
||||
}
|
38
quartz/i18n/locales/fr.json
Normal file
38
quartz/i18n/locales/fr.json
Normal file
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"404": "Soit cette page est privée, soit elle n'existe pas.",
|
||||
"backlinks": {
|
||||
"backlinks": "Rétroliens",
|
||||
"noBlacklinksFound": "Aucun rétrolien trouvé"
|
||||
},
|
||||
"common": {
|
||||
"item": "fichier"
|
||||
},
|
||||
"darkmode": {
|
||||
"darkmode": "Thème sombre",
|
||||
"lightMode": "Thème clair"
|
||||
},
|
||||
"folderContent": {
|
||||
"underThisFolder": "dans ce dossier"
|
||||
},
|
||||
"footer": {
|
||||
"createdWith": "Créé avec"
|
||||
},
|
||||
"graph": {
|
||||
"graphView": "Vue Graphique"
|
||||
},
|
||||
"head": {
|
||||
"noDescriptionProvided": "Aucune description n'a été fournie",
|
||||
"untitled": "Sans titre"
|
||||
},
|
||||
"recentNotes": {
|
||||
"seeRemainingMore": "Voir {{remaining}} plus"
|
||||
},
|
||||
"search": "Rechercher",
|
||||
"tableOfContent": "Table des Matières",
|
||||
"tagContent": {
|
||||
"showingFirst": "Afficher en premier",
|
||||
"totalTags": "tags totaux",
|
||||
"withThisTag": "avec ce tag",
|
||||
"found": "Trouvé"
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue