Merged PR 113: i18n into main

This commit is contained in:
Dominic Villemure
2024-08-25 15:00:03 +00:00
17 changed files with 169 additions and 62 deletions

View File

@@ -1,5 +1,54 @@
{
"general": {
"yes": "yes",
"no": "no"
},
"banner": {
"subscription": "Subscriptions"
},
"footer": {
"allRightsReserved": "All rights reserved"
},
"sitemenu": {
"HelpUs": "Help us",
"About": "About",
"ContentPolicy": "Content Policy",
"CreatorGuide": "Creator Guide",
"FAQ": "FAQ",
"HelpAndContact": "Help and Contact",
"Pricing": "Pricing",
"TermsAndConditions": "Terms and conditions"
},
"sidebar": {
"subscriptionTitle": "Subscription"
},
"subscribebutton": {
"subscribe": "Subscribe",
"unsubscribe": "Unsubscribe"
},
"profilemenu": {
"creator": "Creator",
"user": "User",
"accountmanagement": "Account Management",
"security": "security"
},
"header": {
"myprofile": "My profile",
"wallet": "Wallet",
"Signout": "Sign out"
},
"message": {
"edit" : "Edit",
"delete": "Delete",
"report": "Report",
"yourcomment": "Your comment..."
},
"contentCard": {
"commenttitle": "comments",
"edit" : "Edit",
"delete" : "delete",
"report" : "report",
"deletecontenttitle": "Delete this content?",
"deeletecontentwarning": "Are you sure you want to delete the content?"
}
}

View File

@@ -1,5 +1,54 @@
{
"general": {
"yes": "oui",
"no": "non"
},
"banner": {
"subscription": "Abonnés"
},
"footer": {
"allRightsReserved": "Tout droits réservés"
},
"sitemenu": {
"HelpUs": "Aidez-nous",
"About": "À propos",
"ContentPolicy": "Politique de contenu",
"CreatorGuide": "Guide pour les créateurs",
"FAQ": "FAQ",
"HelpAndContact": "Aide & Contact",
"Pricing": "Frais",
"TermsAndConditions": "Conditions générales"
},
"sidebar": {
"subscriptionTitle": "Abonnements"
},
"subscribebutton": {
"subscribe": "S'abonner",
"unsubscribe": "Se désabonner"
},
"profilemenu": {
"creator": "Créateur",
"user": "utilisateur",
"accountmanagement": "Gestion de comptes",
"security": "Sécurité"
},
"header": {
"myprofile": "Mon profil",
"wallet": "PorteFeuille",
"Signout": "se déconnecter"
},
"message": {
"edit" : "Modifier",
"delete": "Effacer",
"report": "Signaler",
"yourcomment": "Votre commentaire..."
},
"contentCard": {
"commenttitle": "commentaires",
"edit" : "Modifier",
"delete" : "Effacer",
"report" : "signaler",
"deletecontenttitle": " Supprimer ce contenu?",
"deeletecontentwarning": "Êtes-vous sûr de vouloir supprimer le contenu?"
}
}

View File

@@ -110,7 +110,7 @@
}">
<div class="flex items-center justify-between py-4 text-2xl font-bold border-b mb-2">
<div class="flex-1 text-center">
Supprimer ce contenu ?
{{$t('contentCard.deletecontenttitle')}}
</div>
<v-btn icon @click="openDeleteConfirmationModal = false" class="ml-auto mr-2" variant="text">

View File

@@ -26,13 +26,13 @@
</template>
<v-list>
<v-list-item v-if="creatorIsCurrentUser" @click="editContent">
<v-list-item-title>Modifier le contenu</v-list-item-title>
<v-list-item-title>{{$t('contentCard.edit')}}</v-list-item-title>
</v-list-item>
<v-list-item v-if="creatorIsCurrentUser" @click="openDeleteConfirmationDialog">
<v-list-item-title>Effacer le contenu</v-list-item-title>
<v-list-item-title>{{$t('contentCard.delete')}}</v-list-item-title>
</v-list-item>
<v-list-item @click="reportContent">
<v-list-item-title>Reporter le contenu</v-list-item-title>
<v-list-item-title>{{$t('contentCard.report')}}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
@@ -85,7 +85,7 @@
</div>
<div :class="{'hidden': !messagesVisible}">
<h2 class="font-sans font-semibold mt-2">Commentaires</h2>
<h2 class="font-sans font-semibold mt-2">{{ $t('contentCard.commenttitle') }}</h2>
<message-list
:subject-id="props.content.id"
:messages="messages"
@@ -110,7 +110,7 @@
}">
<div class="flex items-center justify-between py-4 text-2xl font-bold border-b mb-2">
<div class="flex-1 text-center">
Supprimer ce contenu ?
{{$t('contentCard.deletecontenttitle')}}
</div>
<v-btn icon @click="openDeleteConfirmationModal = false" class="ml-auto mr-2" variant="text">
@@ -120,17 +120,17 @@
</div>
<div class=" mr-2">
Êtes-vous sûr de vouloir supprimer le contenu ?
{{$t('contentCard.deeletecontentwarning')}}
</div>
<div class="py-2 space-x-3">
<v-btn variant="flat"
@click="deleteContent()" class=" mt-5">
Oui
{{$t('general.yes')}}
</v-btn>
<v-btn variant="outlined"
@click="openDeleteConfirmationModal = false" class=" mt-5">
Non
{{$t('general.no')}}
</v-btn>
</div>
</v-card>

View File

@@ -26,13 +26,13 @@
</template>
<v-list>
<v-list-item v-if="creatorIsCurrentUser" @click="editContent">
<v-list-item-title>Modifier le contenu</v-list-item-title>
<v-list-item-title>{{ $t('contentCard.edit') }}</v-list-item-title>
</v-list-item>
<v-list-item v-if="creatorIsCurrentUser" @click="openDeleteConfirmationDialog">
<v-list-item-title>Effacer le contenu</v-list-item-title>
<v-list-item-title>{{ $t('contentCard.delete') }}</v-list-item-title>
</v-list-item>
<v-list-item @click="reportContent">
<v-list-item-title>Reporter le contenu</v-list-item-title>
<v-list-item-title>{{ $t('contentCard.report') }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
@@ -85,7 +85,7 @@
</div>
<div :class="{'hidden': !messagesVisible}">
<h2 class="font-sans font-semibold ">Commentaires</h2>
<h2 class="font-sans font-semibold ">{{ $t('contentCard.commenttitle') }}</h2>
<message-list
:subject-id="props.content.id"
:messages="messages"
@@ -110,7 +110,7 @@
}">
<div class="flex items-center justify-between py-4 text-2xl font-bold border-b mb-2">
<div class="flex-1 text-center">
Supprimer ce contenu ?
{{$t('contentCard.deletecontenttitle')}}
</div>
<v-btn icon @click="openDeleteConfirmationModal = false" class="ml-auto mr-2" variant="text">
@@ -120,17 +120,17 @@
</div>
<div class=" mr-2">
Êtes-vous sûr de vouloir supprimer le contenu ?
{{$t('contentCard.deeletecontentwarning')}}
</div>
<div class="py-2 space-x-3">
<v-btn variant="flat"
@click="deleteContent()" class=" mt-5">
Oui
{{$t('general.yes')}}
</v-btn>
<v-btn variant="outlined"
@click="openDeleteConfirmationModal = false" class=" mt-5">
Non
{{$t('general.no')}}
</v-btn>
</div>
</v-card>

View File

@@ -1,5 +1,5 @@
<template>
<div class="flex h-[calc(100vh-118px)] -mt-2">
<div class="flex h-[calc(100vh-118px)] -mt-2 w-full">
<!-- Homemade carousel -->
<div class="flex-1 flex items-center justify-center bg-neutral-500 max-h-screen relative">

View File

@@ -32,7 +32,7 @@ function unsubscribeFromCreator() {
@click="subscribeToCreator"
color="white"
>
S'ABONNER
{{ $t('subscribebutton.subscribe') }}
</v-btn>
</template>
@@ -44,7 +44,7 @@ function unsubscribeFromCreator() {
style="transition: background-color 0.3s ease;"
color="white"
>
SE DESABONNER
{{ $t('subscribebutton.unsubscribe') }}
</v-btn>
</template>

View File

@@ -19,7 +19,7 @@
<div class="ml-60 text-white mr-10">
<div>
<p class="capitalize text-3xl font-bold ">{{ creator.name }}</p>
<div>{{ creator.subscriberCount }} Abonnés</div>
<div>{{ creator.subscriberCount }} {{ $t('banner.subscription') }}</div>
</div>
</div>

View File

@@ -19,7 +19,7 @@
<div class="flex justify-between">
<div>
<p class="capitalize text-2xl font-bold">{{ creator.name }}</p>
<div>{{ creator.subscriberCount }} Abonnés</div>
<div>{{ creator.subscriberCount }} {{ $t('banner.subscription') }}</div>
</div>
<div class="flex items-center">

View File

@@ -19,7 +19,7 @@
<div class="flex flex-column text-white capitalize px-2 mt-1">
<p class="capitalize text-2xl font-bold">{{ creator.name }}</p>
<div>{{ creator.subscriberCount }} Abonnés</div>
<div>{{ creator.subscriberCount }} {{ $t('banner.subscription')}}</div>
</div>
<div class="flex ml-auto text-right text-white text-lg px-3 mt-2">

View File

@@ -19,7 +19,7 @@
<div class="ml-60 text-white mr-10">
<div>
<p class="capitalize text-3xl font-bold ">{{ creator.name }}</p>
<div>{{ creator.subscriberCount }} Abonnés</div>
<div>{{ creator.subscriberCount }} {{ $t('banner.subscription') }}</div>
</div>
</div>

View File

@@ -7,7 +7,16 @@
<v-app-bar-nav-icon @click.stop="sideBarStore.toggle()">
</v-app-bar-nav-icon>
<RouterLink to="/">
<RouterLink class="d-sm-block d-md-block d-lg-none" to="/">
<v-img
src="/images/usersmedia/HutopyProfile/profilepictures/profileHutopyProfile01.png"
ref="popupButtonRef"
alt="Hutopy Logo"
class="w-10"
></v-img>
</RouterLink>
<RouterLink class="d-none d-lg-flex" to="/">
<v-img
src="/medias/hutopy.png"
ref="popupButtonRef"
@@ -68,10 +77,9 @@
<v-icon class="mx-2 cursor-pointer" @click.stop="toggleSearch">mdi-magnify</v-icon>
</template>
<v-icon class="mx-2">mdi-bell-outline</v-icon>
<v-btn variant="text" @click="changeLanguage('fr')">Français</v-btn>
<v-btn variant="text" class="mx-2" @click="changeLanguage('en')">English</v-btn>
<v-btn variant="text" style="margin:0" @click="toggleLanguage">
{{ selectedLanguage === 'fr' ? 'Fr' : 'En' }}
</v-btn>
<div class="text-center">
<v-menu open-on-hover>
@@ -114,17 +122,17 @@
<v-list-item class="nav-button">
<v-list-item-title>
<v-btn to="/profile" class="w-100" variant="plain">Mon profil</v-btn>
<v-btn to="/profile" class="w-100" variant="plain">{{ $t('header.myprofile') }}</v-btn>
</v-list-item-title>
</v-list-item>
<v-list-item class="nav-button">
<v-list-item-title>
<v-btn to="/wallet" class="w-100" variant="plain">Portefeuille</v-btn>
<v-btn to="/wallet" class="w-100" variant="plain">{{ $t('header.wallet') }}</v-btn>
</v-list-item-title>
</v-list-item>
<v-list-item class="nav-button">
<v-list-item-title>
<v-btn @click="authStore.logout" class="w-100" variant="plain">Déconnexion</v-btn>
<v-btn @click="authStore.logout" class="w-100" variant="plain">{{ $t('header.Signout') }}</v-btn>
</v-list-item-title>
</v-list-item>
</template>
@@ -136,25 +144,24 @@
</template>
<script setup>
import {ref, onBeforeUnmount, onBeforeMount} from "vue";
import {useRouter} from 'vue-router';
import {useSideBarStore} from '@/stores/sideBarStore.js';
import {useUserStore} from "@/stores/userStore.js";
import {useAuthStore} from "@/stores/authStore.js";
import { ref, onBeforeUnmount, onBeforeMount } from "vue";
import { useRouter } from 'vue-router';
import { useSideBarStore } from '@/stores/sideBarStore.js';
import { useUserStore } from "@/stores/userStore.js";
import { useAuthStore } from "@/stores/authStore.js";
import { useI18n } from 'vue-i18n';
const { locale } = useI18n();
const authStore = useAuthStore()
const userStore = useUserStore()
const sideBarStore = useSideBarStore()
const authStore = useAuthStore();
const userStore = useUserStore();
const sideBarStore = useSideBarStore();
const router = useRouter();
const searchQuery = ref("");
const showSearch = ref(false);
let selectedLanguage = ref('fr');
let selectedLanguage = ref(locale.value);
initializeLocale();
const onSearch = () => {
const query = searchQuery.value.trim();
if (!query) {
@@ -164,7 +171,7 @@ const onSearch = () => {
if (words.length === 1) {
router.push(`/@${words[0]}`);
} else {
router.push({name: "browse", query: {q: query}});
router.push({ name: "browse", query: { q: query } });
}
}
};
@@ -197,7 +204,8 @@ function initializeLocale(){
locale.value = selectedLanguage.value;
}
function changeLanguage(lang) {
function toggleLanguage() {
const lang = selectedLanguage.value === 'fr' ? 'en' : 'fr';
locale.value = lang;
selectedLanguage.value = lang;
localStorage.setItem('preferredLocale', lang);

View File

@@ -12,8 +12,8 @@ const authStore = useAuthStore()
<nav class="h-full grid grid-rows-[60px_1fr_auto]">
<div></div>
<div v-if="authStore.isAuthenticated" class="pt-4 px-4">
<h2>Abonnements</h2>
<div v-if="authStore.isAuthenticated" class="pt-4 px-5">
{{ $t('sidebar.subscriptionTitle') }}
<subscription-list>
<template v-slot:default>
<span>Aucun abonnement</span>

View File

@@ -17,17 +17,17 @@
</div>
<div class="py-4">
<RouterLink class="nav-button font-weight-bold" to="/join">Aidez-nous</RouterLink>
<RouterLink class="nav-button font-weight-bold" to="/join">{{ $t('sitemenu.HelpUs') }}</RouterLink>
</div>
<div class="text-center ">
<RouterLink class="nav-button" to="/helpandcontact">Aide & Contact</RouterLink>
<RouterLink class="nav-button" to="/faq">FAQ</RouterLink>
<RouterLink class="nav-button" to="/guideforcreators">Guide pour les créateurs</RouterLink>
<RouterLink class="nav-button" to="/termsandconditions">Conditions générales</RouterLink>
<RouterLink class="nav-button" to="/contentpolicy">Politique de Contenu</RouterLink>
<RouterLink class="nav-button" to="/about">À Propos</RouterLink>
<RouterLink class="nav-button" to="/pricing">Frais</RouterLink>
<RouterLink class="nav-button" to="/helpandcontact">{{ $t('sitemenu.HelpAndContact') }}</RouterLink>
<RouterLink class="nav-button" to="/faq">{{ $t('sitemenu.FAQ') }}</RouterLink>
<RouterLink class="nav-button" to="/guideforcreators">{{ $t('sitemenu.CreatorGuide') }}</RouterLink>
<RouterLink class="nav-button" to="/termsandconditions">{{ $t('sitemenu.TermsAndConditions') }}</RouterLink>
<RouterLink class="nav-button" to="/contentpolicy">{{ $t('sitemenu.ContentPolicy') }}</RouterLink>
<RouterLink class="nav-button" to="/about">{{ $t('sitemenu.About') }}</RouterLink>
<RouterLink class="nav-button" to="/pricing">{{ $t('sitemenu.Pricing') }}</RouterLink>
</div>
</div>
</template>

View File

@@ -35,13 +35,13 @@
</template>
<v-list>
<v-list-item @click="editMessage(message)">
<v-list-item-title>Edit</v-list-item-title>
<v-list-item-title>{{ $t('message.edit') }}</v-list-item-title>
</v-list-item>
<v-list-item @click="deleteMessage(message)">
<v-list-item-title>Delete</v-list-item-title>
<v-list-item-title>{{ $t('message.delete') }}</v-list-item-title>
</v-list-item>
<v-list-item @click="reportMessage(message)">
<v-list-item-title>Report</v-list-item-title>
<v-list-item-title>{{ $t('message.report') }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>

View File

@@ -8,7 +8,7 @@
v-model="value"
density="compact"
variant="underlined"
placeholder="Votre commentaire..."
:placeholder="$t('message.yourcomment')"
hide-details
auto-grow
rows="1"
@@ -72,6 +72,7 @@ const props = defineProps({
const emits = defineEmits(['message-posted'])
const loginModal = ref(false);
const client = useClient()
const value = ref("")

View File

@@ -24,22 +24,22 @@
<v-btn variant="text" @click="currentComponent = 'CreatorPage'">
<v-icon class="mr-2">mdi-file-edit-outline</v-icon>
Créateur
{{ $t('profilemenu.creator') }}
</v-btn>
<v-btn variant="text" @click="currentComponent = 'PersonnalInfo'">
<v-icon class="mr-2">mdi-information</v-icon>
Utilisateur
{{ $t('profilemenu.user') }}
</v-btn>
<v-btn variant="text" @click="currentComponent = 'ManageAccount'">
<v-icon class="mr-2">mdi-account</v-icon>
Gestion de Comptes
{{ $t('profilemenu.accountmanagement') }}
</v-btn>
<v-btn variant="text" @click="currentComponent = 'AccountSecurity'">
<v-icon class="mr-2">mdi-security</v-icon>
Sécurité
{{ $t('profilemenu.security') }}
</v-btn>
</div>