From 8f5e19f57da3fb2f222ad494b31a7fe008eba615 Mon Sep 17 00:00:00 2001 From: Cade Ayres Date: Fri, 20 Jun 2025 16:07:19 +0100 Subject: [PATCH 01/59] Switched path usages to call provider --- src/pages/LinuxNativeGameSetup.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/LinuxNativeGameSetup.vue b/src/pages/LinuxNativeGameSetup.vue index 2819d34e9..b90464f55 100644 --- a/src/pages/LinuxNativeGameSetup.vue +++ b/src/pages/LinuxNativeGameSetup.vue @@ -18,12 +18,12 @@ diff --git a/src/components/views/OnlineModListWithPanel.vue b/src/components/views/OnlineModListWithPanel.vue index 919a4340b..a70616bb7 100644 --- a/src/components/views/OnlineModListWithPanel.vue +++ b/src/components/views/OnlineModListWithPanel.vue @@ -16,18 +16,18 @@ @@ -43,8 +43,10 @@ import OnlineRowCard from '../OnlineRowCard.vue'; import { getStore } from '../../providers/generic/store/StoreProvider'; import { State } from '../../store'; import { computed } from 'vue'; +import {useI18n} from "vue-i18n"; const store = getStore(); +const { t } = useI18n(); type OnlineModListWithPanelProps = { pagedModList?: ThunderstoreMod[]; diff --git a/src/components/views/OnlineModView.vue b/src/components/views/OnlineModView.vue index babea326d..7c3b78d67 100644 --- a/src/components/views/OnlineModView.vue +++ b/src/components/views/OnlineModView.vue @@ -59,12 +59,12 @@ />

- {{ t('translations.pages.manager.online.navigation.changePageInfo') }} + {{ t('translations.pages.manager.online.pagination.changePageInfo') }}

- {{ t(`translations.pages.manager.online.navigation.${thunderstoreModList.length ? 'noFoundMods' : 'noMods'}`) }} + {{ t(`translations.pages.manager.online.pagination.${thunderstoreModList.length ? 'noFoundMods' : 'noMods'}`) }}

diff --git a/src/i18n/base/pages/ManagerMessageFormat.ts b/src/i18n/base/pages/ManagerMessageFormat.ts index bafc58aac..674cd1848 100644 --- a/src/i18n/base/pages/ManagerMessageFormat.ts +++ b/src/i18n/base/pages/ManagerMessageFormat.ts @@ -276,6 +276,27 @@ export type ManagerMessageFormat = { changePageInfo: string; noFoundMods: string; noMods: string; + }, + modList: { + tooltips: { + pinned: { + short: string; + long: string; + }, + deprecated: { + short: string; + long: string; + }, + donate: string; + installed: string; + }, + mod: { + author: string; + }, + actions: { + download: string; + website: string; + } } }, actions: { diff --git a/src/i18n/en/pages/ManagerTranslation.ts b/src/i18n/en/pages/ManagerTranslation.ts index 656f1aa04..7affc61e9 100644 --- a/src/i18n/en/pages/ManagerTranslation.ts +++ b/src/i18n/en/pages/ManagerTranslation.ts @@ -296,6 +296,27 @@ export const ManagerTranslation: ManagerMessageFormat = { changePageInfo: 'Use the numbers below to change page', noFoundMods: 'No mods matching search found', noMods: 'No mods available', + }, + modList: { + tooltips: { + pinned: { + short: 'Pinned', + long: 'Pinned on Thunderstore' + }, + deprecated: { + short: 'Deprecated', + long: 'This mod is potentially broken' + }, + donate: 'Donate to the mod author', + installed: 'Mod already installed', + }, + mod: { + author: 'By {author}' + }, + actions: { + download: 'Download', + website: 'Website', + } } }, actions: { From def1500094fc6dee2bf01416dff8b8dbf0f7775b Mon Sep 17 00:00:00 2001 From: cade Date: Tue, 12 Aug 2025 16:21:15 +0100 Subject: [PATCH 41/59] Added French translations for online view --- .../views/LocalModList/SearchAndSort.vue | 6 +- src/i18n/fr/enums/EnumTranslation.ts | 32 ++ src/i18n/fr/index.ts | 4 +- src/i18n/fr/pages/ManagerTranslation.ts | 293 ++++++++++++++++++ 4 files changed, 331 insertions(+), 4 deletions(-) create mode 100644 src/i18n/fr/enums/EnumTranslation.ts diff --git a/src/components/views/LocalModList/SearchAndSort.vue b/src/components/views/LocalModList/SearchAndSort.vue index 20de151c2..354f7e946 100644 --- a/src/components/views/LocalModList/SearchAndSort.vue +++ b/src/components/views/LocalModList/SearchAndSort.vue @@ -81,7 +81,7 @@ const disabledOptions = computed(() => Object.values(SortLocalDisabledMods)); v-model="order" id="local-sort-order" class="select select--content-spacing margin-right margin-right--half-width"> - @@ -89,7 +89,7 @@ const disabledOptions = computed(() => Object.values(SortLocalDisabledMods)); v-model="direction" id="local-sort-direction" class="select select--content-spacing"> - @@ -103,7 +103,7 @@ const disabledOptions = computed(() => Object.values(SortLocalDisabledMods)); v-model="disabledPosition" id="local-deprecated-position" class="select select--content-spacing"> - diff --git a/src/i18n/fr/enums/EnumTranslation.ts b/src/i18n/fr/enums/EnumTranslation.ts new file mode 100644 index 000000000..61410700c --- /dev/null +++ b/src/i18n/fr/enums/EnumTranslation.ts @@ -0,0 +1,32 @@ +import {EnumMessageFormat} from "../../base/enums/EnumMessageFormat"; + +export const EnumTranslation: EnumMessageFormat = { + sortNaming: { + CUSTOM: 'Personnalisé', + MOD_NAME: 'Nom du mod', + AUTHOR: 'Nom de l\'auteur', + INSTALL_DATE: 'Date d\'installation', + }, + sortDirection: { + STANDARD: 'Standard', + REVERSE: 'Inversé', + }, + sortLocalDisabledMods: { + NONE: 'Aucun', + CUSTOM: 'Personnalisé', + FIRST: 'En premier', + LAST: 'En dernier', + }, + sortingStyle: { + DEFAULT: 'Par défaut', + LAST_UPDATED: 'Dernière mise à jour', + ALPHABETICAL: 'Alphabétique', + DOWNLOADS: 'Nombre de téléchargements', + RATING: 'Évaluation', + }, + launchType: { + AUTO: 'Auto', + NATIVE: 'Natif', + PROTON: 'Proton', + } +} diff --git a/src/i18n/fr/index.ts b/src/i18n/fr/index.ts index 2e9858731..5cddc9411 100644 --- a/src/i18n/fr/index.ts +++ b/src/i18n/fr/index.ts @@ -4,6 +4,7 @@ import {PlatformTranslation} from "./platforms/PlatformTranslation"; import {ProfileSelectionTranslation} from "./pages/ProfileSelectionTranslation"; import {ManagerTranslation} from './pages/ManagerTranslation'; import { DateTimeFormat } from 'src/i18n'; +import { EnumTranslation } from './enums/EnumTranslation'; const message = { metadata: { @@ -17,7 +18,8 @@ const message = { profileSelection: ProfileSelectionTranslation, manager: ManagerTranslation, }, - platforms: PlatformTranslation + platforms: PlatformTranslation, + enums: EnumTranslation } }; diff --git a/src/i18n/fr/pages/ManagerTranslation.ts b/src/i18n/fr/pages/ManagerTranslation.ts index 686a1ec2b..352f73d17 100644 --- a/src/i18n/fr/pages/ManagerTranslation.ts +++ b/src/i18n/fr/pages/ManagerTranslation.ts @@ -26,4 +26,297 @@ export const ManagerTranslation: ManagerMessageFormat = { gameIconAltText: 'Image du jeu' }, }, + installed: { + noModsInstalled: { + title: 'On dirait que vous n\'avez aucun mod d\'installé', + content: 'Vous pouvez cliquer sur l\'onglet En ligne à gauche pour parcourir tous les mods disponibles.', + }, + updatableModsBanner: { + text: ` + Vous avez {numberOfModsWithUpdates} mod avec une mise à jour disponible. | + Vous avez {numberOfModsWithUpdates} mods avec des mises à jour disponibles. + `, + updateAction: 'Tout mettre à jour ?' + }, + searchAndSort: { + search: { + label: 'Rechercher', + placeholder: 'Rechercher un mod installé', + }, + sort: { + label: 'Trier', + disabledPositions: { + label: 'Désactivés', + } + } + }, + localModCard: { + labels: { + deprecated: 'Obsolète', + disabled: 'Désactivé' + }, + display: { + byline: 'v{version} par {author}', + installedAt: 'Installé le : {formattedDate}', + }, + tooltips: { + updateAvailable: 'Une mise à jour est disponible', + dependencyIssue: 'Il y a un problème de dépendance avec ce mod', + disable: 'Désactiver', + enable: 'Activer', + donate: 'Faire un don à l\'auteur du mod', + }, + actions: { + uninstall: 'Désinstaller', + disable: 'Désactiver', + enable: 'Activer', + associated: 'Associé', + openWebsite: 'Site web', + update: 'Mettre à jour', + downloadDependency: 'Télécharger la dépendance', + enableSpecific: 'Activer {dependencyName}', + donate: 'Faire un don', + } + }, + expandableCard: { + imageAltText: 'Image du mod', + funkyModeAltText: 'Superposition du mode funky', + tooltips: { + dragToReorder: 'Faire glisser pour réorganise', + expand: 'Développer', + collapse: 'Réduire', + } + }, + }, + modals: { + failedToSetSteamFolder: { + title: 'Échec de la configuration du dossier Steam', + steamExecutableNotSelected: 'L\'exécutable Steam n\'a pas été sélectionné.', + solution: 'Si cette erreur apparaît alors que l\'exécutable est correct, veuillez exécuter en tant qu\'administrateur.' + }, + failedToSetTheGameFolder: { + title: 'Échec du changement de dossier {gameName}', + listedExecutableNames: 'L\'exécutable doit être l\'un des suivants : "{options}".', + solution: 'Si cette erreur apparaît alors que l\'exécutable est correct, veuillez exécuter en tant qu\'administrateur.' + }, + clearingGameDirectory: { + title: 'Nettoyage du répertoire d\'installation de {gameName}', + waitToLaunchGame: 'Vous ne pourrez pas lancer le jeu tant que Steam n\'aura pas vérifié l\'intégrité des fichiers du jeu.', + steamWillBeStarted: 'Steam va démarrer et tenter de vérifier l\'intégrité de {gameName}.', + checkSteamForProgress: ` + Veuillez vérifier la fenêtre de Steam pour l'avancement de la validation. + Si la fenêtre n'est pas encore apparue, veuillez patienter. + `, + confirmation: 'Je comprends' + }, + dependencyStrings: { + title: 'Liste des identifiants de dépendance', + dependency: '{modName}-{versionNumber}', + close: 'Fermer' + }, + launchArguments: { + title: 'Définir des arguments de lancement personnalisés', + someProvidedByDefault: 'Certains arguments sont fournis par défaut :', + moddedLabel: 'Moddé :', + availableAfterInstallingLoader: 'Ces arguments seront disponibles après l\'installation d\'un chargeur de mods.', + vanillaLabel: 'Base :', + pleaseNote: ` + Veuillez noter que ceux-ci sont appelés via l'exécutable Steam. + Soyez prudent en saisissant des arguments de lancement personnalisés. + `, + placeholder: 'Saisissez les arguments', + updateArguments: 'Mettre à jour', + }, + categorySelector: { + selectCategory: 'Sélectionnez une catégorie', + noCategoriesSelected: 'Aucune catégorie sélectionnée', + }, + importLocalMod: { + title: 'Importer un mod depuis un fichier', + actions: { + selectFile: 'Sélectionner un fichier', + importLocalMod: 'Importer un mod local', + }, + content: { + instructToSelect: 'Veuillez sélectionner un fichier zip ou DLL à importer.', + dataEntryInfo: ` + Les fichiers zip qui contiennent un fichier manifeste verront certaines informations pré-remplies. + Si un manifeste n'est pas disponible, celles-ci devront être saisies manuellement. + `, + waitingForSelection: 'En attente de la sélection d\'un fichier. Cela peut prendre une minute.', + form: { + modName: { + label: 'Nom du mod', + placeholder: 'Saisissez le nom du mod', + }, + modAuthor: { + label: 'Auteur', + placeholder: 'Saisissez le nom de l\'auteur', + }, + description: { + label: 'Description (facultatif)', + placeholder: 'Saisissez une description' + }, + version: { + label: 'Version', + majorLabel: 'Majeure', + minorLabel: 'Mineure', + patchLabel: 'Correctif' + } + } + }, + validationMessages: { + modNameEmpty: 'Le nom du mod ne doit pas être vide.', + authorNameEmpty: 'L\'auteur du mod ne doit pas être vide.', + invalidVersion: 'Majeur, mineur et correctif doivent être des nombres entiers supérieurs à 0.', + nonNumericVersion: 'Majeur, mineur et correctif doivent tous être des nombres.', + noProfileSelected: 'Le profil n\'est pas sélectionné.' + } + }, + codeExport: { + title: 'Profil exporté', + description: 'Votre code a été copié dans votre presse-papiers, mais peut également être copié manuellement ci-dessous :', + done: 'Terminé', + }, + downloadProgress: { + states: { + downloading: 'Téléchargement de {modName}', + installing: 'Installation de {modName}', + }, + downloadProgress: 'Téléchargement : {progress}% terminé', + installProgress: 'Installation : {progress}% terminée', + waitingForDownload: 'Installation : en attente de la fin du téléchargement', + }, + downloadModVersionSelect: { + title: 'Sélectionnez une version de {modName} à télécharger', + content: { + recommendedDisclaimer: 'Il est recommandé de sélectionner la dernière version de tous les mods.', + outdatedModsAdvice: 'L\'utilisation de versions obsolètes peut causer des problèmes.', + }, + tags: { + select: 'Vous devez sélectionner une version', + recommended: '{version} est la version recommandée', + latest: '{version} est la dernière version', + outdated: '{version} n\'est pas à jour' + }, + download: 'Télécharger avec les dépendances', + }, + updateAllInstalledMods: { + noModsToUpdate: { + title: 'Aucun mod à mettre à jour', + content: 'Soit tous les mods installés sont à jour soit il n\'y a aucun mod d\'installé.', + close: 'Fermer', + }, + hasModsToUpdate: { + title: 'Mettre à jour tous les mods installés', + content: { + willBeUpdated: 'Tous les mods installés seront mis à jour vers leurs dernières versions.', + missingDependenciesInstalled: 'Toutes les dépendances manquantes seront installées.', + whatWillHappen: 'Les mods suivants seront téléchargés et installés :', + modUpdatedTo: '{modName} sera mis à jour vers : {version}', + }, + updateAll: 'Tout mettre à jour', + } + }, + launchType: { + title: 'Définir le comportement de lancement', + auto: { + NATIVE: 'Votre jeu sera démarré avec l\'option "Natif"', + PROTON: 'Votre jeu sera démarré avec l\'option "Proton"', + }, + native: { + unsureWrapperArgsPresent: 'Nous n\'avons pas pu déterminer si les arguments de wrapper requis ont été définis.', + addArgumentsInfo: 'Si vous ne l\'avez pas encore fait manuellement, veuillez ajouter les arguments de lancement suivants dans les propriétés du jeu sur Steam :', + }, + actions: { + copyLaunchArgs: 'Copier les arguments', + update: 'Mettre à jour' + } + } + }, + online: { + modals: { + modFilter: { + title: 'Filtrer les catégories de mods', + languageDisclaimer: 'Les catégories sont fournies par Thunderstore et ne peuvent pas être traduites.', + selectors: { + atLeastOneCategory: 'Les mods doivent contenir au moins une de ces catégories', + allCategories: 'Les mods doivent contenir toutes ces catégories', + noneCategories: 'Les mods ne peuvent pas contenir ces catégories' + }, + allowNsfw: 'Autoriser les mods NSFW (potentiellement explicites)', + showDeprecated: 'Afficher les mods obsolètes', + apply: 'Appliquer les filtres' + }, + sort: { + title: 'Modifier l\'ordre des mods', + sortBehaviour: 'Comportement de tri', + sortDirection: 'Sens du tri', + close: 'Fermer' + }, + }, + previewPanel: { + author: 'Par {author}', + metadata: { + downloads: 'Téléchargements : {downloads}', + likes: 'Appréciations : {likes}', + lastUpdated: 'Dernière mise à jour : {date}', + categories: 'Catégories : {categories}', + }, + actions: { + download: 'Télécharger', + viewOnline: 'Voir en ligne', + donate: 'Faire un don', + }, + tabs: { + readme: 'README', + changelog: 'CHANGELOG', + dependencies: 'Dépendances ({dependencyCount})', + }, + fetchingData: 'Récupération des données', + noDependencies: 'Ce mod n\'a pas de dépendances', + unableToFetchReadme: 'Impossible de récupérer le README', + unableToFetchChangelog: 'Impossible de récupérer le CHANGELOG', + }, + topbar: { + search: { + label: 'Rechercher', + placeholder: 'Rechercher', + }, + sort: 'Trier', + filter: 'Filtrer', + }, + pagination: { + changePageInfo: 'Utilisez les nombres ci-dessous pour changer de page', + noFoundMods: 'Aucun mod correspondant à la recherche trouvé', + noMods: 'Aucun mod disponible', + }, + modList: { + tooltips: { + pinned: { + short: 'Épinglé', + long: 'Épinglé sur Thunderstore' + }, + deprecated: { + short: 'Obsolète', + long: 'Ce mod est potentiellement cassé' + }, + donate: 'Faire un don à l\'auteur du mod', + installed: 'Mod déjà installé', + }, + mod: { + author: 'Par {author}' + }, + actions: { + download: 'Télécharger', + website: 'Site web', + } + } + }, + actions: { + locateGameExecutable: "Localiser l'exécutable de {gameName}", + selectExecutable: "Sélectionner l'exécutable", + locateGameLaunchHelper: "Localiser l'exécutable de gamelaunchhelper", + locateSteamExecutable: "Localiser l'exécutable de Steam" + } } From 9e12e774e0783eb5db2b4095bce718688e285db2 Mon Sep 17 00:00:00 2001 From: Cade Ayres Date: Wed, 27 Aug 2025 14:53:46 +0100 Subject: [PATCH 42/59] Fixed issue after rebase in LaunchTypeModal and improved "Par" capitalization in French --- src/components/modals/launch-type/LaunchTypeModal.vue | 1 + src/components/views/DownloadProgressModal.vue | 4 ++-- src/i18n/en/pages/ManagerTranslation.ts | 4 ++-- src/i18n/fr/pages/ManagerTranslation.ts | 8 ++++---- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/components/modals/launch-type/LaunchTypeModal.vue b/src/components/modals/launch-type/LaunchTypeModal.vue index 4c7f4d7f2..1107cdb7d 100644 --- a/src/components/modals/launch-type/LaunchTypeModal.vue +++ b/src/components/modals/launch-type/LaunchTypeModal.vue @@ -10,6 +10,7 @@ import {areWrapperArgumentsProvided, getDeterminedLaunchType, getWrapperLaunchAr import CopyToClipboardButton from "../../buttons/CopyToClipboardButton.vue"; import ManagerSettings from "../../../r2mm/manager/ManagerSettings"; import { useI18n } from 'vue-i18n'; +import EnumResolver from '../../../model/enums/_EnumResolver'; const store = getStore(); const { t } = useI18n(); diff --git a/src/components/views/DownloadProgressModal.vue b/src/components/views/DownloadProgressModal.vue index 11a94cf5a..676bd689b 100644 --- a/src/components/views/DownloadProgressModal.vue +++ b/src/components/views/DownloadProgressModal.vue @@ -34,14 +34,14 @@ function closeModal() { {{ t('translations.pages.manager.modals.downloadProgress.states.installing', { modName: store.getters['download/currentDownload'].modName }) }} -

- {{ t('translations.pages.manager.modals.downloadProgress.downloadProgress', { progress: store.getters['download/currentDownload'].downloadProgress, FileUtils.humanReadableSize(store.getters['download/currentDownload'].totalDownloadSize) }) }} + {{ t('translations.pages.manager.modals.downloadProgress.downloadProgress', { progress: store.getters['download/currentDownload'].downloadProgress, totalSize: FileUtils.humanReadableSize(store.getters['download/currentDownload'].totalDownloadSize) }) }}

+ // TODO - i18n/manager-view Extracting: {{store.getters['download/currentDownload'].downloadProgress}}% of {{FileUtils.humanReadableSize(store.getters['download/currentDownload'].totalDownloadSize)}}

diff --git a/src/i18n/en/pages/ManagerTranslation.ts b/src/i18n/en/pages/ManagerTranslation.ts index 7affc61e9..eaf86b9af 100644 --- a/src/i18n/en/pages/ManagerTranslation.ts +++ b/src/i18n/en/pages/ManagerTranslation.ts @@ -189,8 +189,8 @@ export const ManagerTranslation: ManagerMessageFormat = { downloading: 'Downloading {modName}', installing: 'Installing {modName}', }, - downloadProgress: 'Downloading: {progress}% complete', - installProgress: 'Installing: {progress}% complete', + downloadProgress: 'Downloading: {progress}% of {totalSize}', + installProgress: 'Installing: {progress}%', waitingForDownload: 'Installing: waiting for download to finish', }, downloadModVersionSelect: { diff --git a/src/i18n/fr/pages/ManagerTranslation.ts b/src/i18n/fr/pages/ManagerTranslation.ts index 352f73d17..0b5b11134 100644 --- a/src/i18n/fr/pages/ManagerTranslation.ts +++ b/src/i18n/fr/pages/ManagerTranslation.ts @@ -183,9 +183,9 @@ export const ManagerTranslation: ManagerMessageFormat = { downloading: 'Téléchargement de {modName}', installing: 'Installation de {modName}', }, - downloadProgress: 'Téléchargement : {progress}% terminé', - installProgress: 'Installation : {progress}% terminée', - waitingForDownload: 'Installation : en attente de la fin du téléchargement', + downloadProgress: 'Téléchargement en cours : {progress}% sur {totalSize}', + installProgress: 'Installation en cours : {progress}% terminée', + waitingForDownload: 'Installation en cours : en attente de la fin du téléchargement', }, downloadModVersionSelect: { title: 'Sélectionnez une version de {modName} à télécharger', @@ -305,7 +305,7 @@ export const ManagerTranslation: ManagerMessageFormat = { installed: 'Mod déjà installé', }, mod: { - author: 'Par {author}' + author: 'par {author}' }, actions: { download: 'Télécharger', From 5c6f0cde9aac7e57b1e36e9f6a0c5adef3aa03b1 Mon Sep 17 00:00:00 2001 From: Cade Ayres Date: Fri, 12 Sep 2025 15:32:10 +0100 Subject: [PATCH 43/59] Fixed imports and duplicate text after rebase --- src/components/v2/OnlinePreviewPanel.vue | 6 +++--- src/components/views/DownloadProgressModal.vue | 4 +--- src/i18n/base/pages/ManagerMessageFormat.ts | 1 + src/i18n/en/pages/ManagerTranslation.ts | 1 + 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/v2/OnlinePreviewPanel.vue b/src/components/v2/OnlinePreviewPanel.vue index 710f0cd7e..e40e93f3b 100644 --- a/src/components/v2/OnlinePreviewPanel.vue +++ b/src/components/v2/OnlinePreviewPanel.vue @@ -9,11 +9,11 @@ import { getCombosByDependencyStrings } from '../../r2mm/manager/PackageDexieSto import { ExternalLink } from '../all'; import R2Error from '../../model/errors/R2Error'; import { getFullDependencyList, InstallMode } from '../../utils/DependencyUtils'; -import debounce from 'lodash.debounce'; -import ManagerSettings from '../../r2mm/manager/ManagerSettings'; import { getStore } from '../../providers/generic/store/StoreProvider'; import { transformPackageUrl } from '../../providers/cdn/PackageUrlTransformer'; import {useI18n} from "vue-i18n"; +import ManagerSettings from '../../r2mm/manager/ManagerSettings'; +import debounce from 'lodash.debounce'; const store = getStore(); const { t, d, messages, locale } = useI18n(); @@ -198,7 +198,7 @@ function dragEnd(event: DragEvent) {

{{ mod.getDescription() }}

-

Downloads: +