Merge dev, add translation
This commit is contained in:
commit
31f6847b53
@ -1,4 +1,4 @@
|
||||
> # This is a fork of [Work Adventure](https://github.com/thecodingmachine/workadventure) with small adjustment and changes for production environment for Bastelei e. V. Partey
|
||||
> # This is a fork of [WorkAdventure](https://github.com/thecodingmachine/workadventure) with small adjustment and changes for production environment for Bastelei e. V. Partey
|
||||
|
||||
![WorkAdventure logo](README-LOGO.svg)
|
||||
![WorkAdventure office image](README-MAP.png)
|
||||
@ -111,7 +111,7 @@ Vagrant destroy
|
||||
|
||||
## Setting up a production environment
|
||||
|
||||
> The production environment of Partey is based on a single-domain deployment with some changed, minimized *Dockerfile*s based on the fork [workadventure-xce](https://github.com/workadventure-xce/workadventure-xce). An example can be found in [contrib/docker/docker-compose.single-domain.prod.yaml](/contrib/docker/docker-compose.single-domain.prod.yaml). To create a non-single-domain based environment, please adopt settings from the below *Work Adventure* provided file yourself. The changed *Dockerfile*s won't work directly with the file below!
|
||||
> The production environment of Partey is based on a single-domain deployment with some changed, minimized *Dockerfile*s based on the fork [workadventure-xce](https://github.com/workadventure-xce/workadventure-xce). An example can be found in [contrib/docker/docker-compose.single-domain.prod.yaml](/contrib/docker/docker-compose.single-domain.prod.yaml). To create a non-single-domain based environment, please adopt settings from the below *WorkAdventure* provided file yourself. The changed *Dockerfile*s won't work directly with the file below!
|
||||
|
||||
The way you set up your production environment will highly depend on your servers.
|
||||
We provide a production ready `docker-compose` file that you can use as a good starting point in the [contrib/docker](https://github.com/thecodingmachine/workadventure/tree/master/contrib/docker) directory.
|
||||
|
@ -4,6 +4,7 @@
|
||||
import { onDestroy, onMount } from "svelte";
|
||||
import { EmojiButton } from "@joeattardi/emoji-button";
|
||||
import { isMobile } from "../../Enum/EnvironmentVariable";
|
||||
import LL from "../../i18n/i18n-svelte";
|
||||
|
||||
let emojiContainer: HTMLElement;
|
||||
let picker: EmojiButton;
|
||||
@ -15,10 +16,31 @@
|
||||
rootElement: emojiContainer,
|
||||
styleProperties: {
|
||||
"--font": "Press Start 2P",
|
||||
"--text-color": "whitesmoke",
|
||||
"--secondary-text-color": "whitesmoke",
|
||||
"--category-button-color": "whitesmoke",
|
||||
},
|
||||
emojisPerRow: isMobile() ? 6 : 8,
|
||||
autoFocusSearch: false,
|
||||
style: "native",
|
||||
showPreview: false,
|
||||
i18n: {
|
||||
search: $LL.emoji.search(),
|
||||
categories: {
|
||||
recents: $LL.emoji.categories.recents(),
|
||||
smileys: $LL.emoji.categories.smileys(),
|
||||
people: $LL.emoji.categories.people(),
|
||||
animals: $LL.emoji.categories.animals(),
|
||||
food: $LL.emoji.categories.food(),
|
||||
activities: $LL.emoji.categories.activities(),
|
||||
travel: $LL.emoji.categories.travel(),
|
||||
objects: $LL.emoji.categories.objects(),
|
||||
symbols: $LL.emoji.categories.symbols(),
|
||||
flags: $LL.emoji.categories.flags(),
|
||||
custom: $LL.emoji.categories.custom(),
|
||||
},
|
||||
notFound: $LL.emoji.notFound(),
|
||||
},
|
||||
});
|
||||
//the timeout is here to prevent the menu from flashing
|
||||
setTimeout(() => picker.showPicker(emojiContainer), 100);
|
||||
|
@ -6,7 +6,27 @@
|
||||
callback();
|
||||
}
|
||||
|
||||
function sanitize(html) {
|
||||
function i18n(text: string | number | boolean | undefined): string {
|
||||
if (typeof text === "string") {
|
||||
if (text.trim().startsWith("{")) {
|
||||
try {
|
||||
let textObject = JSON.parse(text);
|
||||
if (textObject[$locale]) {
|
||||
return textObject[$locale];
|
||||
} else if (Object.keys(textObject).length > 0) {
|
||||
// fallback to first value
|
||||
return textObject[Object.keys(textObject)[0]];
|
||||
}
|
||||
} catch (err) {
|
||||
//
|
||||
}
|
||||
}
|
||||
return text;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
function sanitize(html : string | number | boolean | undefined): string {
|
||||
return HtmlUtils.sanitize(html);
|
||||
}
|
||||
</script>
|
||||
@ -14,7 +34,7 @@
|
||||
<div class="layout-manager-list">
|
||||
{#each $layoutManagerActionStore as action}
|
||||
<div class="nes-container is-dark {action.type}" on:click={() => onClick(action.callback)}>
|
||||
<p>{@html sanitize(action.message)}</p>
|
||||
<p>{@html sanitize(i18n(action.message))}</p>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
|
@ -104,13 +104,13 @@
|
||||
>
|
||||
<option value={40}
|
||||
>{isMobile()
|
||||
? $LL.menu.settings.gameQuality.short.minimum()
|
||||
: $LL.menu.settings.gameQuality.long.minimum()}</option
|
||||
? $LL.menu.settings.gameQuality.short.small()
|
||||
: $LL.menu.settings.gameQuality.long.small()}</option
|
||||
>
|
||||
<option value={20}
|
||||
>{isMobile()
|
||||
? $LL.menu.settings.gameQuality.short.small()
|
||||
: $LL.menu.settings.gameQuality.long.small()}</option
|
||||
? $LL.menu.settings.gameQuality.short.minimum()
|
||||
: $LL.menu.settings.gameQuality.long.minimum()}</option
|
||||
>
|
||||
</select>
|
||||
</div>
|
||||
@ -131,13 +131,13 @@
|
||||
>
|
||||
<option value={10}
|
||||
>{isMobile()
|
||||
? $LL.menu.settings.videoQuality.short.minimum()
|
||||
: $LL.menu.settings.videoQuality.long.minimum()}</option
|
||||
? $LL.menu.settings.videoQuality.short.small()
|
||||
: $LL.menu.settings.videoQuality.long.small()}</option
|
||||
>
|
||||
<option value={5}
|
||||
>{isMobile()
|
||||
? $LL.menu.settings.videoQuality.short.small()
|
||||
: $LL.menu.settings.videoQuality.long.small()}</option
|
||||
? $LL.menu.settings.videoQuality.short.minimum()
|
||||
: $LL.menu.settings.videoQuality.long.minimum()}</option
|
||||
>
|
||||
</select>
|
||||
</div>
|
||||
|
@ -33,18 +33,21 @@ export class HtmlUtils {
|
||||
return p.innerHTML;
|
||||
}
|
||||
|
||||
public static sanitize(html : string) {
|
||||
return sanitizeHtml(html, {
|
||||
allowedAttributes: {
|
||||
'span': ['style'],
|
||||
},
|
||||
allowedStyles: {
|
||||
'span': {
|
||||
'color': [/^#(0x)?[0-9a-f]+$/i, /^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/],
|
||||
'font-size': [/^\d+(?:px|em|%)$/]
|
||||
public static sanitize(html : string | number | boolean | undefined): string {
|
||||
if (typeof html === "string") {
|
||||
return sanitizeHtml(html, {
|
||||
allowedAttributes: {
|
||||
'span': ['style'],
|
||||
},
|
||||
allowedStyles: {
|
||||
'span': {
|
||||
'color': [/^#(0x)?[0-9a-f]+$/i, /^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/],
|
||||
'font-size': [/^\d+(?:px|em|%)$/]
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static urlify(text: string, style: string = ""): string {
|
||||
|
@ -2,9 +2,9 @@ import type { Translation } from "../i18n-types";
|
||||
|
||||
const audio: NonNullable<Translation["audio"]> = {
|
||||
manager: {
|
||||
reduce: "réduit dans les conversations",
|
||||
reduce: "Während Unterhaltungen verringern",
|
||||
},
|
||||
message: "Message audio",
|
||||
message: "Sprachnachricht",
|
||||
};
|
||||
|
||||
export default audio;
|
22
front/src/i18n/de-DE/camera.ts
Normal file
22
front/src/i18n/de-DE/camera.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const camera: NonNullable<Translation["camera"]> = {
|
||||
enable: {
|
||||
title: "Bitte schalte deine Kamera und dein Mikrofon ein.",
|
||||
start: "Los gehts!",
|
||||
},
|
||||
help: {
|
||||
title: "Zugriff auf Kamera / Mikrofon erforderlich",
|
||||
permissionDenied: "Zugriff verweigert",
|
||||
content: "Der Zugriff auf Kamera und Mikrofon muss im Browser freigegeben werden.",
|
||||
firefoxContent:
|
||||
'Bitte klicke auf "Diese Entscheidungen speichern" Schaltfläche um erneute Nachfragen nach der Freigabe in Firefox zu verhindern.',
|
||||
refresh: "Aktualisieren",
|
||||
continue: "Ohne Kamera fortfahren",
|
||||
},
|
||||
my: {
|
||||
silentZone: "Stiller Bereich",
|
||||
},
|
||||
};
|
||||
|
||||
export default camera;
|
12
front/src/i18n/de-DE/chat.ts
Normal file
12
front/src/i18n/de-DE/chat.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const chat: NonNullable<Translation["chat"]> = {
|
||||
intro: "Hier ist dein Nachrichtenverlauf:",
|
||||
enter: "Verfasse deine Nachricht...",
|
||||
menu: {
|
||||
visitCard: "Visitenkarte",
|
||||
addFriend: "Freund*In hinzufügen",
|
||||
},
|
||||
};
|
||||
|
||||
export default chat;
|
@ -2,9 +2,9 @@ import type { Translation } from "../i18n-types";
|
||||
|
||||
const companion: NonNullable<Translation["companion"]> = {
|
||||
select: {
|
||||
title: "Sélectionnez votre compagnon",
|
||||
any: "Pas de compagnon",
|
||||
continue: "Continuer",
|
||||
title: "Wähle einen Gefährten",
|
||||
any: "Kein Gefährte",
|
||||
continue: "Weiter",
|
||||
},
|
||||
};
|
||||
|
21
front/src/i18n/de-DE/emoji.ts
Normal file
21
front/src/i18n/de-DE/emoji.ts
Normal file
@ -0,0 +1,21 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const emoji: NonNullable<Translation["emoji"]> = {
|
||||
search: "Emojis suchent...",
|
||||
categories: {
|
||||
recents: "Letzte Emojis",
|
||||
smileys: "Smileys & Emotionen",
|
||||
people: "Menschen",
|
||||
animals: "Tiere & Natur",
|
||||
food: "Essen & Trinken",
|
||||
activities: "Aktivitäten",
|
||||
travel: "Reise & Orte",
|
||||
objects: "Objekte",
|
||||
symbols: "Symbole",
|
||||
flags: "Flaggen",
|
||||
custom: "Benutzerdefinier",
|
||||
},
|
||||
notFound: "Keine Emojis gefunden",
|
||||
};
|
||||
|
||||
export default emoji;
|
20
front/src/i18n/de-DE/error.ts
Normal file
20
front/src/i18n/de-DE/error.ts
Normal file
@ -0,0 +1,20 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const error: NonNullable<Translation["error"]> = {
|
||||
accessLink: {
|
||||
title: "Ungültiger Zugangslink",
|
||||
subTitle: "Karte konnte nicht gefunden werden. Prüfe bitte deinen Zugangslink.",
|
||||
details: "Für weitere Information kannst du die Administratoren kontaktieren oder melde dich bei uns unter: prty@bstly.de",
|
||||
},
|
||||
connectionRejected: {
|
||||
title: "Verbindungen zurückgewiesen",
|
||||
subTitle: "Du kannst diese Welt nicht betreten. Versuche es später noch einmal {error}.",
|
||||
details: "Für weitere Information kannst du die Administratoren kontaktieren oder melde dich bei uns unter: prty.bstly.de",
|
||||
},
|
||||
connectionRetry: {
|
||||
unableConnect: "Es konnte keine Verbindung zu WorkAdventure erstellt werden. Bist du mit dem Internet verbunden?",
|
||||
},
|
||||
error: "Fehler",
|
||||
};
|
||||
|
||||
export default error;
|
27
front/src/i18n/de-DE/follow.ts
Normal file
27
front/src/i18n/de-DE/follow.ts
Normal file
@ -0,0 +1,27 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const follow: NonNullable<Translation["follow"]> = {
|
||||
interactStatus: {
|
||||
following: "{leader} folgen",
|
||||
waitingFollowers: "Warte auf Bestätigung der Gefolgschaft",
|
||||
followed: {
|
||||
one: "{follower} folgt dir",
|
||||
two: "{firstFollower} und {secondFollower} folgen dir",
|
||||
many: "{followers} und {lastFollower} folgen dir",
|
||||
},
|
||||
},
|
||||
interactMenu: {
|
||||
title: {
|
||||
interact: "Interaktion",
|
||||
follow: "Möchtest du {leader} folgen?",
|
||||
},
|
||||
stop: {
|
||||
leader: "Möchtest du nicht weiter den Weg weisen?",
|
||||
follower: "Möchtest du nicht mehr {leader} folgen?",
|
||||
},
|
||||
yes: "Ja",
|
||||
no: "Nein",
|
||||
},
|
||||
};
|
||||
|
||||
export default follow;
|
@ -11,11 +11,12 @@ import menu from "./menu";
|
||||
import report from "./report";
|
||||
import warning from "./warning";
|
||||
import woka from "./woka";
|
||||
import emoji from "./emoji";
|
||||
|
||||
const fr_FR: Translation = {
|
||||
const de_DE: Translation = {
|
||||
...en_US,
|
||||
language: "Français",
|
||||
country: "France",
|
||||
language: "Deutsch",
|
||||
country: "Deutschland",
|
||||
audio,
|
||||
camera,
|
||||
chat,
|
||||
@ -27,6 +28,7 @@ const fr_FR: Translation = {
|
||||
menu,
|
||||
report,
|
||||
warning,
|
||||
emiji,
|
||||
};
|
||||
|
||||
export default fr_FR;
|
||||
export default de_DE;
|
14
front/src/i18n/de-DE/login.ts
Normal file
14
front/src/i18n/de-DE/login.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const login: NonNullable<Translation["login"]> = {
|
||||
input: {
|
||||
name: {
|
||||
placeholder: "Trage deinen Namen ein",
|
||||
empty: "Kein Name angegeben",
|
||||
},
|
||||
},
|
||||
terms: 'Wenn du fortfährst, akzeptierst du die <a href="https://workadventu.re/terms-of-use" target="_blank">Nutzungsbedingungen</a>, <a href="https://workadventu.re/privacy-policy" target="_blank">Datenschutzerklärung</a> und <a href="https://workadventu.re/cookie-policy" target="_blank">Cookierichtlinien</a>.',
|
||||
continue: "Fortfahren",
|
||||
};
|
||||
|
||||
export default login;
|
124
front/src/i18n/de-DE/menu.ts
Normal file
124
front/src/i18n/de-DE/menu.ts
Normal file
@ -0,0 +1,124 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const menu: NonNullable<Translation["menu"]> = {
|
||||
title: "Menu",
|
||||
icon: {
|
||||
open: {
|
||||
menu: "Menu öffnen",
|
||||
invite: "Einladung anzeigen",
|
||||
register: "Registrieren",
|
||||
chat: "Chat öffnen",
|
||||
},
|
||||
},
|
||||
visitCard: {
|
||||
close: "Schliessen",
|
||||
},
|
||||
profile: {
|
||||
edit: {
|
||||
name: "Deinen Namen ändern",
|
||||
woka: "Dein Avatar ändern",
|
||||
companion: "Deinen Begleiter ändern",
|
||||
camera: "Kameraeinstellungen ändern",
|
||||
},
|
||||
login: "Einloggen",
|
||||
logout: "Ausloggen",
|
||||
},
|
||||
settings: {
|
||||
gameQuality: {
|
||||
title: "Spiel Qualität",
|
||||
short: {
|
||||
high: "Hoch (120 BpS)",
|
||||
medium: "Mittel (60 BpS)",
|
||||
small: "Gering (40 BpS)",
|
||||
minimum: "Minimal (20 BpS)",
|
||||
},
|
||||
long: {
|
||||
high: "Hohe Video Qualität (120 BpS)",
|
||||
medium: "Mittlere Video Qualität (60 BpS, empfohlen)",
|
||||
small: "Geringe Video Qualität (40 BpS)",
|
||||
minimum: "Minimale Video Qualität (20 BpS)",
|
||||
},
|
||||
},
|
||||
videoQuality: {
|
||||
title: "Video Qualität",
|
||||
short: {
|
||||
high: "Hoch (30 BpS)",
|
||||
medium: "Mittel (20 BpS)",
|
||||
small: "Gering (10 BpS)",
|
||||
minimum: "Minimale (5 BpS)",
|
||||
},
|
||||
long: {
|
||||
high: "Hohe Video Qualität (30 BpS)",
|
||||
medium: "Mittlere Video Qualität (20 BpS, empfohlen)",
|
||||
small: "Geringe Video Qualität (10 BpS)",
|
||||
minimum: "Minimale Video Qualität (5 BpS)",
|
||||
},
|
||||
},
|
||||
language: {
|
||||
title: "Sprache",
|
||||
},
|
||||
save: {
|
||||
warning: "(Das Spiel wird nach dem Speichern neugestartet)",
|
||||
button: "Speichern",
|
||||
},
|
||||
fullscreen: "Vollbild",
|
||||
notifications: "Benachrichtigungen",
|
||||
cowebsiteTrigger: "Jedes mal nachfragen bevor Webseiten oder Jitsi Meet Räume geöffnet werden",
|
||||
ignoreFollowRequest: "Ignoriere Folgen-Anfragen anderer Nutzer",
|
||||
},
|
||||
invite: {
|
||||
description: "Link zu diesem Raum teilen!",
|
||||
copy: "Kopieren",
|
||||
share: "Teilen",
|
||||
},
|
||||
globalMessage: {
|
||||
text: "Text",
|
||||
audio: "Audio",
|
||||
warning: "An alle Räume dieser Welt senden",
|
||||
enter: "Trage hier deine Nachricht ein...",
|
||||
send: "Senden",
|
||||
},
|
||||
globalAudio: {
|
||||
uploadInfo: "Datei hochladen",
|
||||
error: "Keine Datei ausgewählt. Du musst vor dem Versenden eine Datei hochladen.",
|
||||
},
|
||||
contact: {
|
||||
gettingStarted: {
|
||||
title: "Erste Schritte",
|
||||
description:
|
||||
"Mit WorkAdventure kannst du eine Onlinewelt schaffen in der du dich spontan mit Anderen treffen und unterhalten kannst. Erstelle als erstes deine eigene Karte. Es steht dir eine großen Auswahl an vorgefertigten Karten von unserem Team zur Auswahl.",
|
||||
},
|
||||
createMap: {
|
||||
title: "Eigene Karte erstellen ",
|
||||
description: "Du kannst auch deine eigene Karte erstellen. Folge dazu unserer Schritt-für-Schritt Anleitung.",
|
||||
},
|
||||
},
|
||||
about: {
|
||||
mapInfo: "Informationen über diese Karte",
|
||||
mapLink: "Link zur Karte",
|
||||
copyrights: {
|
||||
map: {
|
||||
title: "Urheberrecht der Karte",
|
||||
empty: "Die Ersteller*In der Karte hat keine Informationen zum Urheberrecht hinterlegt.",
|
||||
},
|
||||
tileset: {
|
||||
title: "Urheberrecht der Tilesets",
|
||||
empty: "Die Ersteller*In der Karte hat keine Informationen zum Urheberrecht der Tilesets hinterlegt. Dies bedeutet nicht, dass die Tilesets keiner Lizenz unterliegen.",
|
||||
},
|
||||
audio: {
|
||||
title: "Urheberrecht der Audiodateien",
|
||||
empty: "Die Ersteller*In der Karte hat keine Informationen zum Urheberrecht der Audiodateien hinterlegt. Dies bedeutet nicht, dass die Audiodateien keiner Lizenz unterliegen.",
|
||||
},
|
||||
},
|
||||
},
|
||||
sub: {
|
||||
profile: "Profil",
|
||||
settings: "Einstellungen",
|
||||
invite: "Einladung",
|
||||
credit: "Über die Karte",
|
||||
globalMessages: "Globale Nachrichten",
|
||||
contact: "Kontakt",
|
||||
},
|
||||
};
|
||||
|
||||
export default menu;
|
25
front/src/i18n/de-DE/report.ts
Normal file
25
front/src/i18n/de-DE/report.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const report: NonNullable<Translation["report"]> = {
|
||||
block: {
|
||||
title: "Blockieren",
|
||||
content: "Blockiere jede Kommunikation von und zu {userName}. Kann jederzeit rückgängig gemacht werden.",
|
||||
unblock: "Blockierung für diesen User aufheben",
|
||||
block: "Blockiere diese User",
|
||||
},
|
||||
title: "Melden",
|
||||
content: "Verfasse eine Meldung an die Administratoren dieses Raums. Diese können den User anschließend bannen.",
|
||||
message: {
|
||||
title: "Deine Nachricht: ",
|
||||
empty: "Bitte einen Text angeben.",
|
||||
},
|
||||
submit: "Diesen User melden",
|
||||
moderate: {
|
||||
title: "{userName} moderieren",
|
||||
block: "Blockieren",
|
||||
report: "Melden",
|
||||
noSelect: "FEHLER : Es ist keine Handlung ausgewählt.",
|
||||
},
|
||||
};
|
||||
|
||||
export default report;
|
16
front/src/i18n/de-DE/warning.ts
Normal file
16
front/src/i18n/de-DE/warning.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const warning: NonNullable<Translation["warning"]> = {
|
||||
title: "Warnung!",
|
||||
content:
|
||||
'Diese Welt erreicht bald die maximale Kapazität. Du kannst die Kapazität <a href={upgradeLink} target="_blank">hier</a> erhöhen',
|
||||
limit: "Diese Welt erreicht bald die maximale Kapazität!",
|
||||
accessDenied: {
|
||||
camera: "Zugriff auf die Kamera verweigert. Hier klicken um deine Browser Berechtigungen zu prüfen.",
|
||||
screenSharing: "Zugriff auf die Bildschirmfreigabe verweigert. Hier klicken um deine Browser Berechtigungen zu prüfen.",
|
||||
},
|
||||
importantMessage: "Wichtige Nachricht",
|
||||
connectionLost: "Verbindungen unterbrochen. Wiederverbinden...",
|
||||
};
|
||||
|
||||
export default warning;
|
20
front/src/i18n/de-DE/woka.ts
Normal file
20
front/src/i18n/de-DE/woka.ts
Normal file
@ -0,0 +1,20 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const woka: NonNullable<Translation["woka"]> = {
|
||||
customWoka: {
|
||||
title: "Dein Avatar bearbeiten",
|
||||
navigation: {
|
||||
return: "Zurück",
|
||||
back: "Hoch",
|
||||
finish: "Auswählen",
|
||||
next: "Runter",
|
||||
},
|
||||
},
|
||||
selectWoka: {
|
||||
title: "Dein Avatar auswählen",
|
||||
continue: "Auswählen",
|
||||
customize: "Bearbeite dein Avatar",
|
||||
},
|
||||
};
|
||||
|
||||
export default woka;
|
21
front/src/i18n/en-US/emoji.ts
Normal file
21
front/src/i18n/en-US/emoji.ts
Normal file
@ -0,0 +1,21 @@
|
||||
import type { BaseTranslation } from "../i18n-types";
|
||||
|
||||
const emoji: BaseTranslation = {
|
||||
search: "Search emojis...",
|
||||
categories: {
|
||||
recents: "Recent Emojis",
|
||||
smileys: "Smileys & Emotion",
|
||||
people: "People & Body",
|
||||
animals: "Animals & Nature",
|
||||
food: "Food & Drink",
|
||||
activities: "Activities",
|
||||
travel: "Travel & Places",
|
||||
objects: "Objects",
|
||||
symbols: "Symbols",
|
||||
flags: "Flags",
|
||||
custom: "Custom",
|
||||
},
|
||||
notFound: "No emojis found",
|
||||
};
|
||||
|
||||
export default emoji;
|
@ -10,6 +10,7 @@ import login from "./login";
|
||||
import menu from "./menu";
|
||||
import report from "./report";
|
||||
import warning from "./warning";
|
||||
import emoji from "./emoji";
|
||||
|
||||
const en_US: BaseTranslation = {
|
||||
language: "English",
|
||||
@ -25,6 +26,7 @@ const en_US: BaseTranslation = {
|
||||
menu,
|
||||
report,
|
||||
warning,
|
||||
emoji,
|
||||
};
|
||||
|
||||
export default en_US;
|
||||
|
@ -29,14 +29,14 @@ const menu: BaseTranslation = {
|
||||
short: {
|
||||
high: "High (120 fps)",
|
||||
medium: "Medium (60 fps)",
|
||||
minimum: "Minimum (40 fps)",
|
||||
small: "Small (20 fps)",
|
||||
small: "Small (40 fps)",
|
||||
minimum: "Minimum (20 fps)",
|
||||
},
|
||||
long: {
|
||||
high: "High video quality (120 fps)",
|
||||
medium: "Medium video quality (60 fps, recommended)",
|
||||
minimum: "Minimum video quality (40 fps)",
|
||||
small: "Small video quality (20 fps)",
|
||||
small: "Small video quality (40 fps)",
|
||||
minimum: "Minimum video quality (20 fps)",
|
||||
},
|
||||
},
|
||||
videoQuality: {
|
||||
@ -44,14 +44,14 @@ const menu: BaseTranslation = {
|
||||
short: {
|
||||
high: "High (30 fps)",
|
||||
medium: "Medium (20 fps)",
|
||||
minimum: "Minimum (10 fps)",
|
||||
small: "Small (5 fps)",
|
||||
small: "Small (10 fps)",
|
||||
minimum: "Minimum (5 fps)",
|
||||
},
|
||||
long: {
|
||||
high: "High video quality (30 fps)",
|
||||
medium: "Medium video quality (20 fps, recommended)",
|
||||
minimum: "Minimum video quality (10 fps)",
|
||||
small: "Small video quality (5 fps)",
|
||||
small: "Small video quality (10 fps)",
|
||||
minimum: "Minimum video quality (5 fps)",
|
||||
},
|
||||
},
|
||||
language: {
|
||||
@ -113,7 +113,6 @@ const menu: BaseTranslation = {
|
||||
},
|
||||
sub: {
|
||||
profile: "Profile",
|
||||
worlds: "Worlds",
|
||||
settings: "Settings",
|
||||
invite: "Invite",
|
||||
credit: "Credit",
|
||||
|
@ -1,22 +0,0 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const camera: NonNullable<Translation["camera"]> = {
|
||||
enable: {
|
||||
title: "Allumez votre caméra et votre microphone",
|
||||
start: "C'est partie!",
|
||||
},
|
||||
help: {
|
||||
title: "Accès à la caméra / au microphone nécessaire",
|
||||
permissionDenied: "Permission refusée",
|
||||
content: "Vous devez autoriser l'accès à la caméra et au microphone dans votre navigateur.",
|
||||
firefoxContent:
|
||||
'Veuillez cocher la case "Se souvenir de cette décision" si vous ne voulez pas que Firefox vous demande sans cesse l\'autorisation.',
|
||||
refresh: "Rafraîchir",
|
||||
continue: "Continuer sans webcam",
|
||||
},
|
||||
my: {
|
||||
silentZone: "Zone silencieuse",
|
||||
},
|
||||
};
|
||||
|
||||
export default camera;
|
@ -1,12 +0,0 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const chat: NonNullable<Translation["chat"]> = {
|
||||
intro: "Voici l'historique de votre chat:",
|
||||
enter: "Entrez votre message...",
|
||||
menu: {
|
||||
visitCard: "Carte de visite",
|
||||
addFriend: "Ajouter un ami",
|
||||
},
|
||||
};
|
||||
|
||||
export default chat;
|
@ -1,22 +0,0 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const error: NonNullable<Translation["error"]> = {
|
||||
accessLink: {
|
||||
title: "Lien d'accès incorrect",
|
||||
subTitle: "Impossible de trouver la carte. Veuillez vérifier votre lien d'accès.",
|
||||
details:
|
||||
"Si vous souhaitez obtenir de plus amples informations, vous pouvez contacter l'administrateur ou nous contacter à l'adresse suivante: hello@workadventu.re",
|
||||
},
|
||||
connectionRejected: {
|
||||
title: "Connexion rejetée",
|
||||
subTitle: "Vous ne pouvez pas rejoindre le monde. Réessayer plus tard {error}.",
|
||||
details:
|
||||
"Si vous souhaitez obtenir de plus amples informations, vous pouvez contacter l'administrateur ou nous contacter à l'adresse suivante: hello@workadventu.re",
|
||||
},
|
||||
connectionRetry: {
|
||||
unableConnect: "Impossible de se connecter à WorkAdventure. Etes vous connecté à Internet?",
|
||||
},
|
||||
error: "Erreur",
|
||||
};
|
||||
|
||||
export default error;
|
@ -1,27 +0,0 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const follow: NonNullable<Translation["follow"]> = {
|
||||
interactStatus: {
|
||||
following: "Vous suivez {leader}",
|
||||
waitingFollowers: "En attente de la confirmation des suiveurs",
|
||||
followed: {
|
||||
one: "{follower} vous suit",
|
||||
two: "{firstFollower} et {secondFollower} vous suivent",
|
||||
many: "{followers} et {lastFollower} vous suivent",
|
||||
},
|
||||
},
|
||||
interactMenu: {
|
||||
title: {
|
||||
interact: "Interaction",
|
||||
follow: "Voulez-vous suivre {leader}?",
|
||||
},
|
||||
stop: {
|
||||
leader: "Voulez-vous qu'on arrête de vous suivre?",
|
||||
follower: "Voulez-vous arrêter de suivre {leader}?",
|
||||
},
|
||||
yes: "Oui",
|
||||
no: "Non",
|
||||
},
|
||||
};
|
||||
|
||||
export default follow;
|
@ -1,14 +0,0 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const login: NonNullable<Translation["login"]> = {
|
||||
input: {
|
||||
name: {
|
||||
placeholder: "Entrez votre nom",
|
||||
empty: "Le nom est vide",
|
||||
},
|
||||
},
|
||||
terms: 'En continuant, vous acceptez nos <a href="https://workadventu.re/terms-of-use" target="_blank">conditions d\'utilisation</a>, notre <a href="https://workadventu.re/privacy-policy" target="_blank">politique de confidentialité</a> et notre <a href="https://workadventu.re/cookie-policy" target="_blank">politique relative aux cookies</a>.',
|
||||
continue: "Continuer",
|
||||
};
|
||||
|
||||
export default login;
|
@ -1,125 +0,0 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const menu: NonNullable<Translation["menu"]> = {
|
||||
title: "Menu",
|
||||
icon: {
|
||||
open: {
|
||||
menu: "Ouvrir le menu",
|
||||
invite: "Afficher l'invitation",
|
||||
register: "Enregistrez vous",
|
||||
chat: "Ouvrir le chat",
|
||||
},
|
||||
},
|
||||
visitCard: {
|
||||
close: "Fermer",
|
||||
},
|
||||
profile: {
|
||||
edit: {
|
||||
name: "Modifier votre nom",
|
||||
woka: "Modifier votre WOKA",
|
||||
companion: "Modifier votre compagnon",
|
||||
camera: "Modifier votre caméra",
|
||||
},
|
||||
login: "S'identifier",
|
||||
logout: "Déconnexion",
|
||||
},
|
||||
settings: {
|
||||
gameQuality: {
|
||||
title: "Qualité du jeu",
|
||||
short: {
|
||||
high: "Haute (120 fps)",
|
||||
medium: "Moyenne (60 fps)",
|
||||
minimum: "Minimale (40 fps)",
|
||||
small: "Reduite (20 fps)",
|
||||
},
|
||||
long: {
|
||||
high: "Haute (120 fps)",
|
||||
medium: "Moyenne (60 fps, recommandée)",
|
||||
minimum: "Minimale (40 fps)",
|
||||
small: "Reduite (20 fps)",
|
||||
},
|
||||
},
|
||||
videoQuality: {
|
||||
title: "Qualité de la vidéo",
|
||||
short: {
|
||||
high: "Haute (30 fps)",
|
||||
medium: "Moyenne (20 fps)",
|
||||
minimum: "Minimale (10 fps)",
|
||||
small: "Reduite (5 fps)",
|
||||
},
|
||||
long: {
|
||||
high: "Haute (30 fps)",
|
||||
medium: "Moyenne (20 fps, recommandée)",
|
||||
minimum: "Minimale (10 fps)",
|
||||
small: "Reduite (5 fps)",
|
||||
},
|
||||
},
|
||||
language: {
|
||||
title: "Langage",
|
||||
},
|
||||
save: {
|
||||
warning: "(La sauvegarde de ces paramètres redémarre le jeu)",
|
||||
button: "Sauvegarder",
|
||||
},
|
||||
fullscreen: "Plein écran",
|
||||
notifications: "Notifications",
|
||||
cowebsiteTrigger: "Demander toujours avant d'ouvrir des sites web et des salles de réunion Jitsi",
|
||||
ignoreFollowRequest: "Ignorer les demandes de suivi des autres utilisateurs",
|
||||
},
|
||||
invite: {
|
||||
description: "Partager le lien de la salle!",
|
||||
copy: "Copier",
|
||||
share: "Partager",
|
||||
},
|
||||
globalMessage: {
|
||||
text: "Texte",
|
||||
audio: "Audio",
|
||||
warning: "Diffusion dans toutes les salles du monde",
|
||||
enter: "Entrez votre message ici...",
|
||||
send: "Envoyer",
|
||||
},
|
||||
globalAudio: {
|
||||
uploadInfo: "Télécharger un fichier",
|
||||
error: "Aucun fichier sélectionné. Vous devez télécharger un fichier avant de l'envoyer.",
|
||||
},
|
||||
contact: {
|
||||
gettingStarted: {
|
||||
title: "Pour commencer",
|
||||
description:
|
||||
"WorkAdventure vous permet de créer un espace en ligne pour communiquer spontanément avec d'autres personnes. Et tout commence par la création de votre propre espace. Choisissez parmi une large sélection de cartes préfabriquées par notre équipe.",
|
||||
},
|
||||
createMap: {
|
||||
title: "Créer votre carte",
|
||||
description: "Vous pouvez également créer votre propre carte personnalisée en suivant la documentation.",
|
||||
},
|
||||
},
|
||||
about: {
|
||||
mapInfo: "Informations sur la carte",
|
||||
mapLink: "lien vers cette carte",
|
||||
copyrights: {
|
||||
map: {
|
||||
title: "Droits d'auteur de la carte",
|
||||
empty: "Le créateur de la carte n'a pas déclaré de droit d'auteur pour la carte.",
|
||||
},
|
||||
tileset: {
|
||||
title: "Droits d'auteur des tilesets",
|
||||
empty: "Le créateur de la carte n'a pas déclaré de droit d'auteur pour les tilesets. Cela ne signifie pas que les tilesets n'ont pas de licence.",
|
||||
},
|
||||
audio: {
|
||||
title: "Droits d'auteur des fichiers audio",
|
||||
empty: "aré de droit d'auteur pour les fichiers audio. Cela ne signifie pas que les fichiers audio n'ont pas de licence.",
|
||||
},
|
||||
},
|
||||
},
|
||||
sub: {
|
||||
profile: "Profile",
|
||||
worlds: "Worlds",
|
||||
settings: "Paramètres",
|
||||
invite: "Inviter",
|
||||
credit: "Crédits",
|
||||
globalMessages: "Messages globaux",
|
||||
contact: "Contact",
|
||||
},
|
||||
};
|
||||
|
||||
export default menu;
|
@ -1,25 +0,0 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const report: NonNullable<Translation["report"]> = {
|
||||
block: {
|
||||
title: "Bloquer",
|
||||
content: "Bloquer toute communication en provenance et à destination de {userName}. Cela peut être annulé.",
|
||||
unblock: "Débloquer cet utilisateur",
|
||||
block: "Bloquer cet utilisateur",
|
||||
},
|
||||
title: "Signaler",
|
||||
content: "Signaler aux administrateurs de cette salle. Ils pourront par la suite bannir cet utilisateur.",
|
||||
message: {
|
||||
title: "Votre message: ",
|
||||
empty: "Le message du signalement ne peut pas être vide.",
|
||||
},
|
||||
submit: "Signaler cet utilisateur",
|
||||
moderate: {
|
||||
title: "Modérer {userName}",
|
||||
block: "Bloquer",
|
||||
report: "Signaler",
|
||||
noSelect: "ERREUR : Il n'y a pas d'action sélectionnée.",
|
||||
},
|
||||
};
|
||||
|
||||
export default report;
|
@ -1,16 +0,0 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const warning: NonNullable<Translation["warning"]> = {
|
||||
title: "Attention!",
|
||||
content:
|
||||
'Ce monde est proche de sa limite ! Vous pouvez améliorer sa capacité <a href={upgradeLink} target="_blank">içi</a>',
|
||||
limit: "Ce monde est proche de ses limites!",
|
||||
accessDenied: {
|
||||
camera: "Accès à la caméra refusé. Cliquez ici et vérifiez les autorisations de votre navigateur.",
|
||||
screenSharing: "Partage d'écran refusé. Cliquez ici et vérifiez les autorisations de votre navigateur.",
|
||||
},
|
||||
importantMessage: "Message important",
|
||||
connectionLost: "Connexion perdue. Reconnexion...",
|
||||
};
|
||||
|
||||
export default warning;
|
@ -1,20 +0,0 @@
|
||||
import type { Translation } from "../i18n-types";
|
||||
|
||||
const woka: NonNullable<Translation["woka"]> = {
|
||||
customWoka: {
|
||||
title: "Personnalisez votre WOKA",
|
||||
navigation: {
|
||||
return: "Retour",
|
||||
back: "Précédent",
|
||||
finish: "Terminer",
|
||||
next: "Suivant",
|
||||
},
|
||||
},
|
||||
selectWoka: {
|
||||
title: "Sélectionnez votre WOKA",
|
||||
continue: "Continuer",
|
||||
customize: "Personnalisez votre WOKA",
|
||||
},
|
||||
};
|
||||
|
||||
export default woka;
|
Loading…
Reference in New Issue
Block a user