diff --git a/package-lock.json b/package-lock.json index bf8f6ac..94dd3b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13920,6 +13920,15 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/socks": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", @@ -14876,15 +14885,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 1360b5f..a205dc1 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -4,19 +4,20 @@ import { LandingPageComponent } from './components/landing-page/landing-page.com import { DocumentationComponent } from './components/documentation/documentation.component'; import { FormComponent } from './components/form/form.component'; import { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component'; -import { OurStoryComponent } from './components/our-story/our-story.component'; import { PrivacyPolicyComponent } from './components/privacy-policy/privacy-policy.component'; +import { WorksListComponent } from './components/works-list/works-list.component'; import { RegisterComponent } from './components/register/register.component'; import { LoginComponent } from './components/login/login.component'; // Toutes les routes de l'application sont définies ici export const routes: Routes = [ { path: '', component: LandingPageComponent }, + { path: 'work/:work', component: EditorComponent }, + { path: 'works', component: WorksListComponent }, { path: 'editor', component: EditorComponent }, { path: 'editor-live/:idRoom', component: EditorComponent }, { path: 'documentation', component: DocumentationComponent }, { path: 'contact', component: FormComponent }, - { path: 'our-story', component: OurStoryComponent }, { path: 'terms-of-service', component: TermsOfServiceComponent }, { path: 'privacy-policy', component: PrivacyPolicyComponent }, { path: 'register', component: RegisterComponent }, diff --git a/src/app/components/editor/editor.component.html b/src/app/components/editor/editor.component.html index d54dec5..f7cfc39 100644 --- a/src/app/components/editor/editor.component.html +++ b/src/app/components/editor/editor.component.html @@ -51,6 +51,27 @@ +
+ +
+ + + +
+ +
@if (errorMessage) { @@ -72,9 +93,10 @@
@@ -35,8 +33,8 @@
landing page + src="assets/img/logo.png" + alt="Sandkasten Logo" />
@@ -45,12 +43,11 @@

- Ce dont vous avez besoin de savoir sur notre éditeur + {{ 'LandingPage.Top.Tittle' | translate }}

- Astro comes batteries included. It takes the best parts of - state-of-the-art tools and adds its own innovations. + {{ + 'LandingPage.Top.Description' | translate + }}
@@ -73,12 +70,11 @@
-
Sécurisé
+
+ {{ 'LandingPage.List.Tittle1' | translate }} +
- Pour garantir la solidité de notre outil nous exécutons votre code - sur un environnement fermé et limitant les requêtes trop coûteuse. - Ce procédé nous protège ainsi des tentatives de mauvaise utilisation - du système. + {{ 'LandingPage.List.Text1' | translate }}
@@ -98,12 +94,10 @@
- Import / Export + {{ 'LandingPage.List.Tittle2' | translate }}
- Vous pouvez importez des fichiers et l'éditeur va reconnaître le - langage à partir de son extension. Vous pouvez aussi exporter le - code que vous avez fait en seulement un clic. + {{ 'LandingPage.List.Text2' | translate }}
@@ -139,11 +133,11 @@ -
Options
+
+ {{ 'LandingPage.List.Tittle3' | translate }} +
- Vous disposez de nombreuses options vous permettant de personnalisé - et d'optimiser votre utilisation de Sandkasten. Ces options sont - directement disponible depuis l'éditeur. + {{ 'LandingPage.List.Text3' | translate }}
@@ -172,13 +166,10 @@
- Multi-language + {{ 'LandingPage.List.Tittle4' | translate }}
- De nombreux langages de codes sont reconnus dans Sandkasten. Lorsque - vous taper du code ou en importer un fichier l'éditeur reconnaît - automatiquement le langage. Vous pouvez aussi directement le - sélectionner dans l'éditeur. + {{ 'LandingPage.List.Text4' | translate }}
@@ -197,11 +188,11 @@ -
Lorem ipsum
+
+ {{ 'LandingPage.List.Tittle5' | translate }} +
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, + {{ 'LandingPage.List.Text5' | translate }}
@@ -220,11 +211,11 @@ -
Lorem ipsum
+
+ {{ 'LandingPage.List.Tittle6' | translate }} +
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, + {{ 'LandingPage.List.Text6' | translate }}
@@ -233,9 +224,9 @@
- Languages disponibles dès maintenant + {{ + 'LandingPage.Technologie.Tittle' | translate + }}
@@ -313,12 +304,10 @@

- Empowering the world with Astro. + {{ 'LandingPage.About.Tittle' | translate }}

- We're a multi-cultural team from around the world! We come from - diverse backgrounds, bringing different personalities, experiences and - skills to the job. This is what makes our team so special. + {{ 'LandingPage.About.Text' | translate }}
@@ -330,7 +319,7 @@
Bastien
- Développeur + {{ 'LandingPage.MemberRole' | translate }}
@@ -342,7 +331,7 @@
Clément
- Développeur + {{ 'LandingPage.MemberRole' | translate }}
@@ -354,7 +343,7 @@
Colin
- Développeur + {{ 'LandingPage.MemberRole' | translate }}
@@ -366,7 +355,7 @@
Hugo
- Développeur + {{ 'LandingPage.MemberRole' | translate }}
@@ -378,7 +367,7 @@
Matis
- Développeur + {{ 'LandingPage.MemberRole' | translate }}
@@ -388,9 +377,9 @@
- Rejoinez-nous sur nos réseaux + {{ + 'LandingPage.SocialTittle' | translate + }}
@@ -454,13 +443,14 @@
-

Allez essayer Sandkasten

+

+ {{ 'LandingPage.GetStarted.Tittle' | translate }} +

- Rejoignez dès maintenant la communauté Sandkasten en testant notre - éditeur ! + {{ 'LandingPage.GetStarted.Description' | translate }}
diff --git a/src/app/components/login/login.component.ts b/src/app/components/login/login.component.ts index 51179e1..c193401 100644 --- a/src/app/components/login/login.component.ts +++ b/src/app/components/login/login.component.ts @@ -57,7 +57,7 @@ export class LoginComponent { this.userService .loginUser(formValue.login!, formValue.password!) - .subscribe((response) => { + .then((response) => { console.log('response :', response); if (response.success) { this.successLogin = 'Vous êtes connecté.'; diff --git a/src/app/components/our-story/our-story.component.html b/src/app/components/our-story/our-story.component.html deleted file mode 100644 index a1301b9..0000000 --- a/src/app/components/our-story/our-story.component.html +++ /dev/null @@ -1,36 +0,0 @@ - -
-
- Photo-Colin -

COLIN FRIZOT

-

Bonjour, je suis Colin, un poisson développeur. (fraude)

- - Photo-Hugo -

HUGO PRADIER

-

- Bonjour, je suis Hugo, un développeur bientôt chauve. (suit tous les - tutos en ligne, mais ça marche jamais) -

- - Photo-Bastien -

BASTIEN OLLIER

-

- Bonjour, je suis Bastien, un développeur visuellement parlant, très - puant. (connaît l'adresse de la grand-mère de Colin) -

- - Photo-Clement -

CLÉMENT FRÉVILLE

-

- Bonjour, je suis Clément, un développeur meilleur que tes profs. (dieu) -

- - Photo-Matis -

MATIS MAZINGUE

-

- Bonjour, je suis Matis, un "développeur". (est là que pour l'argent, - mais il est nul) -

-
-
- diff --git a/src/app/components/our-story/our-story.component.scss b/src/app/components/our-story/our-story.component.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/components/our-story/our-story.component.spec.ts b/src/app/components/our-story/our-story.component.spec.ts deleted file mode 100644 index b87feb2..0000000 --- a/src/app/components/our-story/our-story.component.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { OurStoryComponent } from './our-story.component'; - -describe('OurStoryComponent', () => { - let component: OurStoryComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [OurStoryComponent], - }).compileComponents(); - - fixture = TestBed.createComponent(OurStoryComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/components/our-story/our-story.component.ts b/src/app/components/our-story/our-story.component.ts deleted file mode 100644 index 9f0935c..0000000 --- a/src/app/components/our-story/our-story.component.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Component } from '@angular/core'; -import { Router } from '@angular/router'; - -@Component({ - selector: 'app-our-story', - templateUrl: './our-story.component.html', - styleUrl: './our-story.component.scss', - standalone: true, -}) -export class OurStoryComponent { - constructor(private router: Router) {} - colin: string = 'assets/img/colin.png'; - hugo: string = 'assets/img/hugo.png'; - bastien: string = 'assets/img/bastien.png'; - clement: string = 'assets/img/clement.png'; - matis: string = 'assets/img/matis.png'; - - // Si click sur "Run", on redirige vers la page de notre histoire - onContinue(): void { - this.router.navigateByUrl('/our-story'); - } -} diff --git a/src/app/components/privacy-policy/privacy-policy.component.scss b/src/app/components/privacy-policy/privacy-policy.component.scss index e69de29..0e1613a 100644 --- a/src/app/components/privacy-policy/privacy-policy.component.scss +++ b/src/app/components/privacy-policy/privacy-policy.component.scss @@ -0,0 +1,3 @@ +body { + margin: 0 150px 0 150px; +} diff --git a/src/app/components/terms-of-service/terms-of-service.component.scss b/src/app/components/terms-of-service/terms-of-service.component.scss index e69de29..0e1613a 100644 --- a/src/app/components/terms-of-service/terms-of-service.component.scss +++ b/src/app/components/terms-of-service/terms-of-service.component.scss @@ -0,0 +1,3 @@ +body { + margin: 0 150px 0 150px; +} diff --git a/src/app/components/work-list-detail/work-list-detail.component.html b/src/app/components/work-list-detail/work-list-detail.component.html new file mode 100644 index 0000000..9dcd285 --- /dev/null +++ b/src/app/components/work-list-detail/work-list-detail.component.html @@ -0,0 +1,9 @@ +
+

{{ work?.title }}

+ {{ + work?.content | slice: 0 : 50 + }} + +
diff --git a/src/app/components/work-list-detail/work-list-detail.component.scss b/src/app/components/work-list-detail/work-list-detail.component.scss new file mode 100644 index 0000000..4b23efb --- /dev/null +++ b/src/app/components/work-list-detail/work-list-detail.component.scss @@ -0,0 +1,26 @@ +.work-list-detail { + background: lightgray; + width: fit-content; + padding: 2rem; + border-radius: 1rem; + + display: flex; + flex-direction: column; + gap: 1rem; + + &--title { + margin: 0; + font-size: 1.5rem; + font-weight: bold; + } + + &--content { + } + + &--btn { + width: fit-content; + padding: 0.5rem 1rem; + border: 1px solid black; + border-radius: 0.5rem; + } +} diff --git a/src/app/components/work-list-detail/work-list-detail.component.spec.ts b/src/app/components/work-list-detail/work-list-detail.component.spec.ts new file mode 100644 index 0000000..cf4a10d --- /dev/null +++ b/src/app/components/work-list-detail/work-list-detail.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { WorkListDetailComponent } from './work-list-detail.component'; +import { HttpClientModule } from '@angular/common/http'; +import { RouterModule } from '@angular/router'; + +describe('WorkListDetailComponent', () => { + let component: WorkListDetailComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WorkListDetailComponent, HttpClientModule, RouterModule.forRoot([])], + }).compileComponents(); + + fixture = TestBed.createComponent(WorkListDetailComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/work-list-detail/work-list-detail.component.ts b/src/app/components/work-list-detail/work-list-detail.component.ts new file mode 100644 index 0000000..3ac9d7e --- /dev/null +++ b/src/app/components/work-list-detail/work-list-detail.component.ts @@ -0,0 +1,15 @@ +import { Component, Input } from '@angular/core'; +import { Work } from '../../models/work.model'; +import { RouterLink } from '@angular/router'; +import { SlicePipe } from '@angular/common'; + +@Component({ + selector: 'app-work-list-detail', + standalone: true, + imports: [RouterLink, SlicePipe], + templateUrl: './work-list-detail.component.html', + styleUrl: './work-list-detail.component.scss', +}) +export class WorkListDetailComponent { + @Input() work?: Work; +} diff --git a/src/app/components/works-list/works-list.component.html b/src/app/components/works-list/works-list.component.html new file mode 100644 index 0000000..23e2b20 --- /dev/null +++ b/src/app/components/works-list/works-list.component.html @@ -0,0 +1,15 @@ +
+

Works

+ +

Last Work

+
+ +
+ +

All Works

+
+
+ +
+
+
diff --git a/src/app/components/works-list/works-list.component.scss b/src/app/components/works-list/works-list.component.scss new file mode 100644 index 0000000..fd8289c --- /dev/null +++ b/src/app/components/works-list/works-list.component.scss @@ -0,0 +1,5 @@ +.all-works { + display: flex; + flex-wrap: wrap; + gap: 2rem; +} diff --git a/src/app/components/works-list/works-list.component.spec.ts b/src/app/components/works-list/works-list.component.spec.ts new file mode 100644 index 0000000..cc3130c --- /dev/null +++ b/src/app/components/works-list/works-list.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { WorksListComponent } from './works-list.component'; +import { RouterModule } from '@angular/router'; +import { HttpClientModule } from '@angular/common/http'; + +describe('WorksListComponent', () => { + let component: WorksListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WorksListComponent, HttpClientModule, RouterModule.forRoot([])], + }).compileComponents(); + + fixture = TestBed.createComponent(WorksListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/works-list/works-list.component.ts b/src/app/components/works-list/works-list.component.ts new file mode 100644 index 0000000..4c40409 --- /dev/null +++ b/src/app/components/works-list/works-list.component.ts @@ -0,0 +1,36 @@ +import { Component, OnInit } from '@angular/core'; +import { Work } from '../../models/work.model'; +import { WorkService } from '../../services/work.service'; +import { NgForOf, SlicePipe } from '@angular/common'; +import { FormsModule, NgForm } from '@angular/forms'; +import { WorkListDetailComponent } from '../work-list-detail/work-list-detail.component'; + +@Component({ + selector: 'app-works-list', + standalone: true, + imports: [NgForOf, FormsModule, SlicePipe, WorkListDetailComponent], + templateUrl: './works-list.component.html', + styleUrl: './works-list.component.scss', +}) +export class WorksListComponent implements OnInit { + works: Work[] = []; + + // TODO - REMOVE WHEN USER MANAGEMENT DONE + FAKE_USER_ID = 1; + + constructor(protected workService: WorkService) {} + + ngOnInit() { + this.workService.getWorks().then((works: Work[]) => { + works.map((work: Work) => { + if (work.user_id === this.FAKE_USER_ID) { + this.works.push(work); + } + }); + }); + } + + onSubmit(form: NgForm) { + this.workService.saveWork(form); + } +} diff --git a/src/app/models/work.model.ts b/src/app/models/work.model.ts new file mode 100644 index 0000000..0fac73d --- /dev/null +++ b/src/app/models/work.model.ts @@ -0,0 +1,8 @@ +export interface Work { + id_work: number; + link: string; + user_id: number; + language: string; + title: string; + content: string; +} diff --git a/src/app/services/user.service.ts b/src/app/services/user.service.ts index d2ca330..13c23e2 100644 --- a/src/app/services/user.service.ts +++ b/src/app/services/user.service.ts @@ -1,15 +1,12 @@ import { Injectable } from '@angular/core'; -import { User } from '../models/user.model'; -import { HttpClient, HttpResponse } from '@angular/common/http'; +import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; -import { NgForm } from '@angular/forms'; +import { environment } from '../../environments/environment'; @Injectable({ providedIn: 'root', }) export class UserService { - API_URL = 'http://127.0.0.1:3000'; - constructor(private http: HttpClient) {} postUser( @@ -24,22 +21,27 @@ export class UserService { permissions: 0, }; - return this.http.post(`${this.API_URL}/users`, body); + return this.http.post(`${environment.apiUrl}/users`, body); } - loginUser(login: string, password: string): Observable { + loginUser(login: string, password: string): Promise { const body = { login: login, password: password, }; - return this.http.post(`${this.API_URL}/users/login`, body, { - withCredentials: true, - }); + return fetch(`${environment.apiUrl}/users/login`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(body), + credentials: 'include', + }).then((response) => response.json()); } logoutUser(): Observable { - return this.http.post(`${this.API_URL}/users/logout`, { + return this.http.post(`${environment.apiUrl}/users/logout`, { withCredentials: true, }); } diff --git a/src/app/services/work.service.spec.ts b/src/app/services/work.service.spec.ts new file mode 100644 index 0000000..6ddb976 --- /dev/null +++ b/src/app/services/work.service.spec.ts @@ -0,0 +1,19 @@ +import { TestBed } from '@angular/core/testing'; + +import { WorkService } from './work.service'; +import { HttpClientModule } from '@angular/common/http'; + +describe('WorkService', () => { + let service: WorkService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientModule] + }); + service = TestBed.inject(WorkService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/work.service.ts b/src/app/services/work.service.ts new file mode 100644 index 0000000..a5df748 --- /dev/null +++ b/src/app/services/work.service.ts @@ -0,0 +1,48 @@ +import { Injectable } from '@angular/core'; +import { Work } from '../models/work.model'; +import { HttpClient } from '@angular/common/http'; +import { map, Observable } from 'rxjs'; +import { NgForm } from '@angular/forms'; +import { environment } from '../../environments/environment'; + +@Injectable({ + providedIn: 'root', +}) +export class WorkService { + constructor(private http: HttpClient) {} + + getWorks(): Promise { + return fetch(`${environment.apiUrl}/works`, { + method: 'GET', + credentials: 'include', + }).then((response) => response.json()); + } + + getWorkByLink(link: string): Observable { + return this.http.get(`${environment.apiUrl}/works/${link}`); + } + + saveWork(form: NgForm): void { + const code = form.value.content; + + this.http.post(`${environment.apiUrl}/works/save`, code, { withCredentials: true }); + } + + postWork(code: string, language: string): Observable { + const body = { + language, + title: `Basic ${language}`, + code, + }; + + return this.http.post(`${environment.apiUrl}/works`, body).pipe(map((work) => work.link)); + } + + updateWork(id: string, code: string, language: string): void { + const body = { + newContent: code, + language: language, + }; + this.http.put(`${environment.apiUrl}/works/${id}/content`, body, { withCredentials: true }); + } +} diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index cd1a481..443c8d5 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -2,21 +2,53 @@ "LandingPage": { "Welcome": "Welcome to Sandkasten", "Description": "You've arrived at the best code testing sandbox site! We let you test all your programs in your favorite languages. Thanks to the Code Mirror editor and our personalized management of execution on containers, your code becomes completely harmless, so you can have as much fun as you like!", - "Try": "Try it now !" + "Try": "Try it now !", + "Bouton1": "Code editor", + "Bouton2": "Git repository", + "Top": { + "Tittle": "What you need to know about our editor", + "Description": "Sandkasten, the editor with all the options you need. With these advantages, you can test your code and see the results." + }, + "List": { + "Tittle1": "Security", + "Text1": "To guarantee the robustness of our tool, we run your code in a closed environment, limiting costly requests. This protects us from attempts to misuse the system.", + "Tittle2": "Import / Export", + "Text2": "You can import files and the editor will recognize the language by its extension. You can also export the code you've made with just one click.", + "Tittle3": "Options", + "Text3": "You have numerous options for customizing and optimizing your use of Sandkasten. These options are available directly from the editor.", + "Tittle4": "Multi-langues", + "Text4": "Sandkasten supports a wide range of code languages. When you type code or import a file, the editor automatically recognizes the language. You can also select it directly in the editor.", + "Tittle5": "Lorem Ipsum", + "Text5": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam", + "Tittle6": "Lorem Ipsum", + "Text6": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam" + }, + "Technologie": { + "Tittle": "Languages disponibles dès maintenant" + }, + "About": { + "Tittle": "Empowering the world with Sandkasten.", + "Text": "We're a team professionally engaged in the world of technology! We bring different personalities, experiences and skills to the table. That's what makes our team so special." + }, + "MemberRole": "Developper", + "SocialTittle": "Join us on our networks", + "GetStarted": { + "Tittle": "Try Sandkasten", + "Description": "Join the Sandkasten community now by testing our editor!", + "Button": "Get Started !" + } }, "HeaderPage": { + "Work": "Work", "Editor": "Editor", "Documentation": "Documentation", "Contact": "Contact us" }, "FooterPage": { - "About": "About Sandkasten", - "Contact": "Contact us", - "Story": "Our story", "Legal": "Legal mentions", "Terms": "Terms of use", "Privacy": "Privacy policy", - "Rights": "©2024 Sandkasten, Inc. All rights reserved." + "Rights": "Copyright © 2024 Sandkasten. All rights reserved." }, "TermsOfServicePage": { "Mentions": "LEGALS MENTIONS", @@ -115,5 +147,11 @@ "Text2": "We will attempt to resolve complaints and disputes and make every reasonable effort to honor your wish to exercise your rights as quickly as possible and in any event, within the timescales provided by applicable data protection laws." }, "Date": "This document was last updated on January 10, 2024" + }, + "Editor": { + "Share": "Share", + "Save": "Save", + "Run": "RUN", + "Add": "ADD BDD" } } diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 53dc6ef..bd63647 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -2,21 +2,53 @@ "LandingPage": { "Welcome": "Bienvenue sur Sandkasten", "Description": "Vous voici arrivé sur le meilleur site bac à sable de test de code ! Nous vous permettons de tester tous vos programmes sur vos langages préférés. Grâce à l’éditeur Code Mirror et à notre gestion personalisée de l’exécution sur des conteneurs, votre code devient complétement inoffensif et vous pouvez donc vous amusez autant que vous le souhaitez !", - "Try": "Essayez maintenant !" + "Try": "Essayez maintenant !", + "Bouton1": "Editeur de code", + "Bouton2": "Dépôt Git", + "Top": { + "Tittle": "Ce dont vous avez besoin de savoir sur notre éditeur", + "Description": "Sandkasten, l'éditeur qui possède toutes les options dont vous avez besoin. Avec ces avantages vous pourrez tester votre code et en voir le résultat." + }, + "List": { + "Tittle1": "Sécurité", + "Text1": "Pour garantir la solidité de notre outil nous exécutons votre code sur un environnement fermé et limitant les requêtes trop coûteuse. Ce procédé nous protège ainsi des tentatives de mauvaise utilisation du système.", + "Tittle2": "Importer / Exporter", + "Text2": "Vous pouvez importez des fichiers et l'éditeur va reconnaître le langage à partir de son extension. Vous pouvez aussi exporter le code que vous avez fait en seulement un clic.", + "Tittle3": "Options", + "Text3": "Vous disposez de nombreuses options vous permettant de personnalisé et d'optimiser votre utilisation de Sandkasten. Ces options sont directement disponible depuis l'éditeur.", + "Tittle4": "Multi-languages", + "Text4": "De nombreux langages de codes sont reconnus dans Sandkasten. Lorsque vous taper du code ou en importer un fichier l'éditeur reconnaît automatiquement le langage. Vous pouvez aussi directement le sélectionner dans l'éditeur.", + "Tittle5": "Lorem Ipsum", + "Text5": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam", + "Tittle6": "Lorem Ipsum", + "Text6": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam" + }, + "Technologie": { + "Tittle": "Languages disponibles dès maintenant" + }, + "About": { + "Tittle": "Renforcer le monde avec Sandkasten.", + "Text": "Nous sommes une équipe se professionalisant dans le monde des technologies ! Nous apportons des personnalités, des expériences et des compétences différentes. C'est ce qui rend notre équipe si spéciale." + }, + "MemberRole": "Développeur", + "SocialTittle": "Rejoinez-nous sur nos réseaux", + "GetStarted": { + "Tittle": "Allez essayer Sandkasten", + "Description": "Rejoignez dès maintenant la communauté Sandkasten en testant notre éditeur !", + "Button": "Commencez !" + } }, "HeaderPage": { + "Work": "Travail", "Editor": "Éditeur", "Documentation": "Documentation", "Contact": "Nous contacter" }, "FooterPage": { - "About": "À propos de Sandkasten", - "Contact": "Nous contacter", - "Story": "Notre histoire", "Legal": "Mentions légales", "Terms": "Conditions d'utilisation", "Privacy": "Politique de confidentialité", - "Rights": "©2024 Sandkasten, Inc. Tous droits réservés" + "Rights": "Copyright © 2024 Sandkasten. Tous droits réservés" }, "TermsOfServicePage": { "Mentions": "MENTIONS LÉGALES", @@ -115,5 +147,11 @@ "Text2": "Nous nous efforcerons de résoudre les plaintes et les litiges et ferons tous les efforts raisonnables pour répondre à votre souhait d'exercer vos droits le plus rapidement possible et, en tout état de cause, dans les délais prévus par les lois applicables en matière de protection des données." }, "Date": "Ce document a été mis à jour pour la dernière fois le 10 janvier 2024." + }, + "Editor": { + "Share": "Partager", + "Save": "Sauvegarder", + "Run": "EXECUTER", + "Add": "AJOUTER A LA BDD" } }