diff --git a/i18n/de.po b/i18n/de.po index 50071c0..529d16a 100644 --- a/i18n/de.po +++ b/i18n/de.po @@ -134,32 +134,16 @@ msgid "User online" msgstr "Spieler anwesend" #: src/components/OnlineBox.jsx:25 -msgid "Pixel gesetzt" -msgstr "Pixel plaziert" +msgid "Pixels placed" +msgstr "Pixels gesetzt" #: src/components/Converter.jsx:609 src/components/CoordinatesBox.jsx:26 msgid "Copy to Clipboard" msgstr "Kopiere in die Zwischenablage" -#: src/components/DownloadButton.jsx:37 -msgid "Make Screenshot" -msgstr "Erstelle eine Bildschirmaufnahme" - -#: src/components/LogInButton.jsx:20 src/components/UserAreaModal.jsx:160 -msgid "User Area" -msgstr "Spielerbereich" - -#: src/components/SettingsButton.jsx:20 src/components/SettingsModal.jsx:267 -msgid "Settings" -msgstr "Einstellungen" - -#: src/components/HelpButton.jsx:20 -msgid "Help" -msgstr "Hilfe" - #: src/components/Chat.jsx:143 msgid "Channel settings" -msgstr "Channel Einstellungen" +msgstr "Kanal Einstellungen" #: src/components/Chat.jsx:152 msgid "maximize" @@ -177,6 +161,22 @@ msgstr "Chatte hier" msgid "You must be logged in to chat" msgstr "Melde dich an um dich zu unterhalten" +#: src/components/DownloadButton.jsx:37 +msgid "Make Screenshot" +msgstr "Erstelle eine Bildschirmaufnahme" + +#: src/components/LogInButton.jsx:20 src/components/UserAreaModal.jsx:160 +msgid "User Area" +msgstr "Spielerbereich" + +#: src/components/SettingsButton.jsx:20 src/components/SettingsModal.jsx:267 +msgid "Settings" +msgstr "Einstellungen" + +#: src/components/HelpButton.jsx:20 +msgid "Help" +msgstr "Hilfe" + #: src/components/GlobeButton.jsx:31 msgid "Globe View" msgstr "Globus Ansicht" @@ -203,7 +203,7 @@ msgstr "Deaktiviere Spiel Ton" #: src/components/SettingsModal.jsx:139 msgid "All sound effects will be disabled." -msgstr "alle Toneffekte werden ausgeschaltet" +msgstr "Alle Toneffekte werden ausgeschaltet." #: src/components/SettingsModal.jsx:145 msgid "Enable chat notifications" @@ -232,7 +232,7 @@ msgstr "Kompakte Palette" #: src/components/SettingsModal.jsx:160 msgid "Display Palette in a compact form that takes less screen space." msgstr "" -"Zeige die Palette in einer kleineren Form an, welche weniger Platz benötigt" +"Zeige die Palette in einer kleineren Form an, welche weniger Platz benötigt." #: src/components/SettingsModal.jsx:165 msgid "Potato Mode" @@ -248,7 +248,7 @@ msgstr "Helles Raster" #: src/components/SettingsModal.jsx:172 msgid "Show Grid in white instead of black." -msgstr "Zeige das Raster in weiß anstatt schwarz" +msgstr "Zeige das Raster in weiß anstatt schwarz." #: src/components/SettingsModal.jsx:179 msgid "Historical View" @@ -256,7 +256,7 @@ msgstr "Historische Ansicht" #: src/components/SettingsModal.jsx:180 msgid "Check out past versions of the canvas." -msgstr "Siehe vergangene Versionen der Leinwand" +msgstr "Siehe vergangene Versionen der Leinwand." #: src/components/SettingsModal.jsx:188 msgid "Themes" @@ -264,7 +264,7 @@ msgstr "Themen" #: src/components/SettingsModal.jsx:189 msgid "How pixelplanet should look like." -msgstr "Wähle aus wie pixelplanet aussehen soll" +msgstr "Wähle aus wie pixelplanet aussehen soll." #: src/components/HelpModal.jsx:34 src/components/HelpModal.jsx:35 msgid "Privacy Policy" @@ -497,19 +497,19 @@ msgstr "Willkommen auf PixelPlanet.fun" #: src/components/ChannelContextMenu.jsx:73 msgid "Mute" -msgstr "" +msgstr "Stummschalten" #: src/components/UserContextMenu.jsx:72 msgid "Ping" -msgstr "" +msgstr "Erwähnen" #: src/components/UserContextMenu.jsx:97 msgid "DM" -msgstr "" +msgstr "DM" #: src/components/UserContextMenu.jsx:107 msgid "Block" -msgstr "" +msgstr "Blocke" #: src/components/PalselButton.jsx:25 msgid "Close Palette" @@ -537,12 +537,12 @@ msgid "Login to access more features and stats." msgstr "Melde dich and um mehr Funktionen und Statistikan zu sehen." #: src/components/UserAreaModal.jsx:35 -msgid "Login with Mail:" -msgstr "Mit Mail anmelden:" +msgid "Login with Name or Mail:" +msgstr "Mit Name oder Mail anmelden:" #: src/components/UserAreaModal.jsx:42 msgid "I forgot my Password." -msgstr "Ich habe mein Passwort vergessen" +msgstr "Ich habe mein Passwort vergessen." #: src/components/UserAreaModal.jsx:43 msgid "or login with:" @@ -582,7 +582,7 @@ msgstr "Lade..." #: src/components/ForgotPasswordModal.jsx:16 msgid "Enter your mail adress and we will send you a new password:" -msgstr "Gib deine Mail Adresse an und wir senden dir ein neues Passwort." +msgstr "Gib deine Mail Adresse an und wir senden dir ein neues Passwort:" #: src/components/ForgotPasswordModal.jsx:37 msgid "Restore my Password" @@ -599,6 +599,11 @@ msgid "" "boring after a while and after weeks of no major change and if they really " "aren't worth being kept active, we decide to remove them." msgstr "" +"Wir versuchen so wenig wie möglich Leinwände zu entfernen. Manche werden " +"allerding aus Spaß gestarted oder von Spielern angefragt oder sind nur " +"Memes. Diese Leinwände können nach einiger Zeit langweilig werden und nach " +"Wochen ohne erwähnenswerte Aktivität und falls sie es wirklich nicht wert " +"sind, behalten zu werden, entscheiden wir uns side zu entfernen." #: src/components/ArchiveModal.jsx:22 msgid "" @@ -619,6 +624,10 @@ msgid "" "with a 5s coolodwn and 60s stacking. It got launched on May 11th and " "remained active for months till it got shut down on November 30th." msgstr "" +"Diese Leinwand wurde zu Zeiten politscher Konlikte auf der Erd-Leinwand " +"gestarted. Es war eine 1024x1024 Abbildung des politischen Kompass mit 5s " +"Abklingzeit und 60s gesamter Wartezeit. Es wurde am 11. Mai 2020 gestartet " +"und war für Monate aktiv bis es am 30. November geschlossen wurde." #: src/components/ArchiveModal.jsx:32 msgid "" @@ -640,17 +649,27 @@ msgid "" "palettes, cooldown and requirements. Archive of closed canvases can be " "accessed here:" msgstr "" +"Wähle die Leinwand aus welche du benutzen willst. Jede Leinwand ist " +"einzigartig und hat unterschiedliche Parletten, Abklingzeiten und " +"Vorraussetzungen. Archiv von vergangenen Leinwänden kann hier gesehen werden:" #: src/components/CanvasSelectModal.jsx:37 msgid "Archive" msgstr "Archiv" +#: src/components/ChangeMail.jsx:104 src/components/ChangeName.jsx:82 +#: src/components/ChangePassword.jsx:120 src/components/DeleteAccount.jsx:82 +#: src/components/LogInForm.jsx:97 src/components/NewPasswordForm.jsx:93 +#: src/components/SignUpForm.jsx:118 +msgid "Error" +msgstr "Fehler" + #: src/components/LogInForm.jsx:104 msgid "Name or Email" msgstr "Name oder Email" -#: src/components/ChangeMail.jsx:109 src/components/DeleteAccount.jsx:88 -#: src/components/LogInForm.jsx:111 src/components/SignUpForm.jsx:139 +#: src/components/ChangeMail.jsx:112 src/components/DeleteAccount.jsx:89 +#: src/components/LogInForm.jsx:111 src/components/SignUpForm.jsx:140 msgid "Password" msgstr "Passwort" @@ -658,6 +677,20 @@ msgstr "Passwort" msgid "LogIn" msgstr "Einloggen" +#: src/components/Rankings.jsx:37 +msgid "Total" +msgstr "Gesamt" + +#: src/components/Rankings.jsx:45 +msgid "Daily" +msgstr "Täglich" + +#: src/components/Rankings.jsx:49 +msgid "Ranking updates every 5 min. Daily rankings get reset at midnight UTC." +msgstr "" +"Die Rangliste wird alle 5min aktualisiert. Die tägliche Liste wird um " +"Mitternacht UTC zurückgestellt." + #: src/components/UserArea.jsx:57 msgid "Todays Placed Pixels" msgstr "Heutige Pixel" @@ -703,23 +736,38 @@ msgstr "Lösche Konto" msgid "Social Settings" msgstr "Soziale Einstellungen" -#: src/components/Rankings.jsx:37 -msgid "Total" -msgstr "Gesamt" +#: src/components/SignUpForm.jsx:126 +msgid "Name" +msgstr "Name" -#: src/components/Rankings.jsx:45 -msgid "Daily" -msgstr "Täglich" +#: src/components/NewPasswordForm.jsx:100 src/components/SignUpForm.jsx:133 +msgid "Email" +msgstr "Email" -#: src/components/Rankings.jsx:49 -msgid "Ranking updates every 5 min. Daily rankings get reset at midnight UTC." -msgstr "" -"Die Rangliste wird alle 5min aktualisiert. Die tägliche Liste wird um " -"Mitternacht UTC zurückgestellt." +#: src/components/SignUpForm.jsx:149 +msgid "Confirm Password" +msgstr "Passwort bestätigen" + +#: src/components/Admintools.jsx:306 src/components/Admintools.jsx:387 +#: src/components/Admintools.jsx:461 src/components/Admintools.jsx:505 +#: src/components/Admintools.jsx:589 src/components/NewPasswordForm.jsx:104 +#: src/components/SignUpForm.jsx:152 +msgid "Submit" +msgstr "Absenden" + +#: src/components/ChangeMail.jsx:125 src/components/ChangeName.jsx:94 +#: src/components/ChangePassword.jsx:152 src/components/DeleteAccount.jsx:95 +#: src/components/NewPasswordForm.jsx:106 src/components/SignUpForm.jsx:158 +msgid "Cancel" +msgstr "Abbrechen" + +#: src/components/NewPasswordForm.jsx:83 +msgid "Sent you a mail with instructions to reset your password." +msgstr "Sendete eine E-Mail mit Instruktionen um das Passwort zurückzusetzen." #: src/components/CanvasItem.jsx:46 msgid "Cooldown" -msgstr "Wartezeit" +msgstr "Abklingzeit" #: src/components/CanvasItem.jsx:52 msgid "Stacking till" @@ -746,103 +794,6 @@ msgstr "und ${ canvas.req } gesetzte Pixel" msgid "Dimensions" msgstr "Dimensionen" -#: src/components/Admintools.jsx:179 -msgid "Build image on canvas." -msgstr "" - -#: src/components/Admintools.jsx:182 -msgid "Build image and set it to protected." -msgstr "" - -#: src/components/Admintools.jsx:185 -msgid "Build image, but reset cooldown to unset-pixel cd." -msgstr "" - -#: src/components/Admintools.jsx:248 -msgid "Image Upload" -msgstr "" - -#: src/components/Admintools.jsx:249 -msgid "Upload images to canvas" -msgstr "Lade ein Bild zur Leinwand hoch" - -#: src/components/Admintools.jsx:251 -msgid "File" -msgstr "" - -#: src/components/Admintools.jsx:271 -msgid "Coordinates in X_Y format:" -msgstr "" - -#: src/components/Admintools.jsx:306 src/components/Admintools.jsx:387 -#: src/components/Admintools.jsx:461 src/components/Admintools.jsx:505 -#: src/components/Admintools.jsx:589 src/components/SignUpForm.jsx:151 -msgid "Submit" -msgstr "" - -#: src/components/Admintools.jsx:311 -msgid "Pixel Protection" -msgstr "Pixel beschützen" - -#: src/components/Admintools.jsx:313 -msgid "" -"Set protection of areas (if you need finer grained control, " -"use protect with image upload and alpha layers)" -msgstr "" - -#: src/components/Admintools.jsx:392 -msgid "Rollback to Date" -msgstr "" - -#: src/components/Admintools.jsx:394 -msgid "Rollback an area of the canvas to a set date (00:00 UTC)" -msgstr "" - -#: src/components/Admintools.jsx:468 -msgid "IP Actions" -msgstr "" - -#: src/components/Admintools.jsx:470 -msgid "Do stuff with IPs (one IP per line)" -msgstr "" - -#: src/components/Admintools.jsx:510 -msgid "Manage Moderators" -msgstr "" - -#: src/components/Admintools.jsx:512 -msgid "Remove Moderator" -msgstr "" - -#: src/components/Admintools.jsx:544 -msgid "There are no mods" -msgstr "" - -#: src/components/Admintools.jsx:549 -msgid "Assign new Mod" -msgstr "" - -#: src/components/Admintools.jsx:552 -msgid "Enter UserName of new Mod" -msgstr "" - -#: src/components/SignUpForm.jsx:125 -msgid "Name" -msgstr "" - -#: src/components/SignUpForm.jsx:132 -msgid "Email" -msgstr "" - -#: src/components/SignUpForm.jsx:148 -msgid "Confirm Password" -msgstr "Passwort bestätigen" - -#: src/components/ChangeMail.jsx:122 src/components/ChangePassword.jsx:151 -#: src/components/DeleteAccount.jsx:94 src/components/SignUpForm.jsx:157 -msgid "Cancel" -msgstr "Abbrechen" - #: src/components/Converter.jsx:274 msgid "Choose Canvas" msgstr "Wähle Leinwand" @@ -913,169 +864,305 @@ msgstr "Zurücksetzen" msgid "Download Template" msgstr "Bild herunterladen" -#: src/utils/validation.js:15 -msgid "Email can't be empty." -msgstr "" +#: src/components/Admintools.jsx:179 +msgid "Build image on canvas." +msgstr "Zeiche Bild auf Leinwand." -#: src/utils/validation.js:16 -msgid "Email should be at least 5 characters long." -msgstr "" +#: src/components/Admintools.jsx:182 +msgid "Build image and set it to protected." +msgstr "Lade Bild und schütze es." -#: src/utils/validation.js:17 -msgid "Email can't be longer than 40 characters." +#: src/components/Admintools.jsx:185 +msgid "Build image, but reset cooldown to unset-pixel cd." +msgstr "Lade Bild und setze Abklingzeit wenn möglich zurück." + +#: src/components/Admintools.jsx:248 +msgid "Image Upload" +msgstr "Bild Hochladen" + +#: src/components/Admintools.jsx:249 +msgid "Upload images to canvas" +msgstr "Lade ein Bild zur Leinwand hoch" + +#: src/components/Admintools.jsx:251 +msgid "File" +msgstr "Datei" + +#: src/components/Admintools.jsx:271 +msgid "Coordinates in X_Y format:" +msgstr "Koordinaten in X_Y Format:" + +#: src/components/Admintools.jsx:311 +msgid "Pixel Protection" +msgstr "Pixel beschützen" + +#: src/components/Admintools.jsx:313 +msgid "" +"Set protection of areas (if you need finer grained control, " +"use protect with image upload and alpha layers)" msgstr "" +"Setze Gebiet auf geschützt (falls genauere Kontrolle erwünscht, lade Bild " +"mit Transparenz mit \"protect\" hoch)" + +#: src/components/Admintools.jsx:392 +msgid "Rollback to Date" +msgstr "Spule zum Datum zurück" + +#: src/components/Admintools.jsx:394 +msgid "Rollback an area of the canvas to a set date (00:00 UTC)" +msgstr "" +"Spule einen Beraich auf der Leinwand zum angegebenen Datum zurück (00:00 UTC)" + +#: src/components/Admintools.jsx:468 +msgid "IP Actions" +msgstr "IP Aktionen" + +#: src/components/Admintools.jsx:470 +msgid "Do stuff with IPs (one IP per line)" +msgstr "Mache etwas mit IPs (eine IP pro Zeile)" + +#: src/components/Admintools.jsx:510 +msgid "Manage Moderators" +msgstr "Verwalte Moderatoren" + +#: src/components/Admintools.jsx:512 +msgid "Remove Moderator" +msgstr "Entferne Moderator" + +#: src/components/Admintools.jsx:544 +msgid "There are no mods" +msgstr "Es gibt keine Moderatoren" + +#: src/components/Admintools.jsx:549 +msgid "Assign new Mod" +msgstr "Moderator zuweisen" + +#: src/components/Admintools.jsx:552 +msgid "Enter UserName of new Mod" +msgstr "Gebe Name des neuen Moderators ein" + +#: src/components/Admintools.jsx:561 +msgid "User Name" +msgstr "Spielerbereich" #: src/utils/validation.js:18 -msgid "Email should at least contain a dot" -msgstr "" +msgid "Email can't be empty." +msgstr "Email Feld kann nicht leer sein." + +#: src/utils/validation.js:19 +msgid "Email should be at least 5 characters long." +msgstr "Email sollte zumindest 5 Zeichen lang sein." #: src/utils/validation.js:20 +msgid "Email can't be longer than 40 characters." +msgstr "Email kann nicht länger als 40 Zeichen sein." + +#: src/utils/validation.js:21 +msgid "Email should at least contain a dot" +msgstr "Email sollte zumindest einen Punkt beinhalten" + +#: src/utils/validation.js:23 msgid "Email should contain a @" -msgstr "" +msgstr "Email sollte ein @ beinhalten" -#: src/utils/validation.js:27 +#: src/utils/validation.js:30 msgid "Name can't be empty." -msgstr "" +msgstr "Email Feld kann nicht leer sein." -#: src/utils/validation.js:28 +#: src/utils/validation.js:31 msgid "Name must be at least 4 characters long" -msgstr "" +msgstr "Name muss mindestens 4 Zeichen lang sein" -#: src/utils/validation.js:29 +#: src/utils/validation.js:32 msgid "Name must be shorter than 26 characters" -msgstr "" +msgstr "Name muss kleiner als 26 Zeichen sein" -#: src/utils/validation.js:36 +#: src/utils/validation.js:39 msgid "Name contains invalid character like @, /, \\ or #" -msgstr "" - -#: src/utils/validation.js:51 -msgid "Password must be at least 6 characters long." -msgstr "Passwort muss mindestens 6 Zeichen lang sein" +msgstr "Ungültige Zeichen im Namen wie @,/.\\ oder #" #: src/utils/validation.js:54 -msgid "Password must be shorter than 60 characters." -msgstr "" +msgid "No password given." +msgstr "Kein Passwort eingegeben." -#: src/utils/validation.js:68 -msgid "Could not connect to server, please try again later :(" -msgstr "" +#: src/utils/validation.js:57 +msgid "Password must be at least 6 characters long." +msgstr "Passwort muss mindestens 6 Zeichen lang sein." + +#: src/utils/validation.js:60 +msgid "Password must be shorter than 60 characters." +msgstr "Passwort muss kleiner als 60 Zeichen sein." #: src/utils/validation.js:74 -msgid "I think we experienced some error :(" +msgid "Could not connect to server, please try again later :(" msgstr "" +"Kann nich zum Server verbinden, bitte versuche es später noch einmal :(" -#: src/components/DeleteAccount.jsx:92 +#: src/utils/validation.js:80 +msgid "I think we experienced some error :(" +msgstr "Ich glaube wir haben einen Fehler :(" + +#: src/components/DeleteAccount.jsx:93 msgid "Yes, Delete My Account!" msgstr "Ja, löche mein Konto!" +#: src/components/SocialSettings.jsx:39 +msgid "Block all Private Messages" +msgstr "Blockiere alle Privaten Nachrichten" + +#: src/components/SocialSettings.jsx:57 +msgid "Unblock Users" +msgstr "Entblocke Spieler" + +#: src/components/SocialSettings.jsx:81 +msgid "You have no users blocked" +msgstr "Du hast keinen Spieler geblockt" + #: src/components/ChangeMail.jsx:89 msgid "" "Changed Mail successfully. We sent you a verification mail, " "please verify your new mail adress." msgstr "" +"Erfolgreich änderte Mail Adresse. Wir haben dir eine neue Bestätigungsmail " +"gesendet." -#: src/components/ChangeMail.jsx:116 +#: src/components/ChangeMail.jsx:119 msgid "New Mail" msgstr "Neue Mail" -#: src/components/ChangeMail.jsx:120 src/components/ChangePassword.jsx:149 +#: src/components/ChangeMail.jsx:123 src/components/ChangeName.jsx:92 +#: src/components/ChangePassword.jsx:150 msgid "Save" -msgstr "" +msgstr "Speichern" #: src/components/ChangePassword.jsx:18 msgid "Passwords do not match." -msgstr "" +msgstr "Passwörter stimmen nicht überein." #: src/components/ChangePassword.jsx:103 msgid "Changed Password successfully." -msgstr "Passwort erfolgreich geändert" +msgstr "Passwort erfolgreich geändert." -#: src/components/ChangePassword.jsx:128 +#: src/components/ChangePassword.jsx:129 msgid "Old Password" msgstr "Altes Passwort" -#: src/components/ChangePassword.jsx:136 +#: src/components/ChangePassword.jsx:137 msgid "New Password" msgstr "Neues Passwort" -#: src/components/ChangePassword.jsx:145 +#: src/components/ChangePassword.jsx:146 msgid "Confirm New Password" msgstr "Neues Passwort bestätigen" -#: src/components/SocialSettings.jsx:39 -msgid "Block all Private Messages" -msgstr "" +#: src/components/ChangeName.jsx:88 +msgid "New Username" +msgstr "Neuer Name" -#: src/components/SocialSettings.jsx:57 -msgid "Unblock Users" -msgstr "" +#: src/components/UserMessages.jsx:41 +msgid "A new verification mail is getting sent to you." +msgstr "Eine neue Bestätigungsmail wurde gesendet." -#: src/components/SocialSettings.jsx:81 -msgid "You have no users blocked" +#: src/components/UserMessages.jsx:75 +msgid "You successfully linked your mc account." +msgstr "Minecraft Konto wurde erfolgreich verknüpft." + +#: src/components/UserMessages.jsx:76 +msgid "You denied." +msgstr "Abgelehnt." + +#: src/components/UserMessages.jsx:94 +msgid "" +"Please verify your mail address \n" +"or your account could get deleted after a few days." msgstr "" +"Bitte bestätige deine E-Mail Adresse oder dein Konto könnte nach einigen " +"Tagen gelöscht werden." + +#: src/components/UserMessages.jsx:111 +msgid "Click here to request a new verification mail." +msgstr "Klicke hier um eine neue Bestätigungsmail zu beantragen." + +#: src/components/UserMessages.jsx:120 +#, javascript-format +msgid "You requested to link your mc account ${ minecraftname }." +msgstr "Anfrage um das Minecraft Konto ${ minecraftname } zu verknüpfen." + +#: src/components/UserMessages.jsx:140 +msgid "Accept" +msgstr "Annehmen" + +#: src/components/UserMessages.jsx:150 +msgid "Deny" +msgstr "Ablehnen" #: src/components/HelpModal.jsx:15 src/components/SettingsModal.jsx:125 msgctxt "keybinds" msgid "G" -msgstr "" +msgstr "G" #: src/components/HelpModal.jsx:16 src/components/SettingsModal.jsx:132 msgctxt "keybinds" msgid "X" -msgstr "" +msgstr "X" #: src/components/SettingsModal.jsx:140 msgctxt "keybinds" msgid "M" -msgstr "" +msgstr "M" #: src/components/HelpModal.jsx:17 src/components/SettingsModal.jsx:182 msgctxt "keybinds" msgid "H" -msgstr "" +msgstr "H" #: src/components/HelpModal.jsx:18 msgctxt "keybinds" msgid "R" -msgstr "" +msgstr "R" #: src/components/HelpModal.jsx:19 msgctxt "keybinds" msgid "Q" -msgstr "" +msgstr "Q" #: src/components/HelpModal.jsx:20 msgctxt "keybinds" msgid "E" -msgstr "" +msgstr "E" #: src/components/HelpModal.jsx:21 msgctxt "keybinds" msgid "W" -msgstr "" +msgstr "W" #: src/components/HelpModal.jsx:22 msgctxt "keybinds" msgid "A" -msgstr "" +msgstr "A" #: src/components/HelpModal.jsx:23 msgctxt "keybinds" msgid "S" -msgstr "" +msgstr "S" #: src/components/HelpModal.jsx:24 msgctxt "keybinds" msgid "D" -msgstr "" +msgstr "D" #: src/components/HelpModal.jsx:31 msgctxt "keybinds" msgid "Shift" -msgstr "" +msgstr "Shift" #: src/components/HelpModal.jsx:32 msgctxt "keybinds" msgid "C" -msgstr "" +msgstr "C" + +#~ msgid "Error: ${ error }" +#~ msgstr "Fehler: ${ error }" + +#~ msgid "Pixel gesetzt" +#~ msgstr "Pixel plaziert" diff --git a/i18n/ssr-de.po b/i18n/ssr-de.po index 13e8d2f..e5d7569 100644 --- a/i18n/ssr-de.po +++ b/i18n/ssr-de.po @@ -12,9 +12,17 @@ msgstr "" "Plural-Forms: nplurals = 2; plural = (n != 1);\n" "X-Generator: Poedit 2.3\n" +#: src/ssr-components/Main.jsx:53 +msgid "PixelPlanet.fun" +msgstr "PixelPlanet.Fun" + +#: src/ssr-components/Main.jsx:55 +msgid "Place color pixels on an map styled canvas with other players online" +msgstr "Zeichne mit farbigen Pixel auf einer Weltkarte mit anderen Spielern" + #: src/ssr-components/Globe.jsx:44 msgid "Double click on globe to go back." -msgstr "Doppelklick um zurück zu gehen" +msgstr "Doppelklick um zurück zu gehen." #: src/ssr-components/Globe.jsx:45 msgid "Loading..." @@ -28,35 +36,37 @@ msgstr "PixelPlanet.Fun 3D Globus" msgid "A 3D globe of our whole map" msgstr "Ein interaktvier 3D Globus unserer gesamten Karte" -#: src/routes/reset_password.js:63 +#: src/routes/reset_password.js:65 msgid "You sent an empty password or invalid data :(" -msgstr "" +msgstr "Du hast ein ungültiges Passwort oder Daten gesendet :(" -#: src/routes/reset_password.js:74 +#: src/routes/reset_password.js:77 msgid "This password-reset link isn't valid anymore :(" -msgstr "" +msgstr "Dieser Passwort-Wiederherstellungslink ist nichtmehr gültig :(" -#: src/routes/reset_password.js:84 +#: src/routes/reset_password.js:88 msgid "Your passwords do not match :(" -msgstr "" +msgstr "Passwörter stimmen nicht überein :(" -#: src/routes/reset_password.js:98 +#: src/routes/reset_password.js:103 msgid "User doesn't exist in our database :(" -msgstr "" +msgstr "Spieler existiert nicht in unserer Datenbank :(" -#: src/routes/reset_password.js:109 +#: src/routes/reset_password.js:115 msgid "Passowrd successfully changed." -msgstr "" +msgstr "Passwort erfolgreich geändert." -#: src/routes/reset_password.js:126 +#: src/routes/reset_password.js:134 msgid "Invalid url :( Please check your mail again." -msgstr "" +msgstr "Ungültige Adresse :( Bitte kontrolliere die Mail nochmal." -#: src/routes/reset_password.js:138 +#: src/routes/reset_password.js:147 msgid "" "This passwort reset link is wrong or already expired, please request a new " "one (Note: you can use those links just once)" msgstr "" +"Dieser Passwort Wiederherstellungslink ist falsch oder abgelaufen, bitte " +"beantrage einen neuen (Hinweis: Du kannst diese Links nur einmal verwenden)" #: src/core/mail.js:65 #, javascript-format @@ -64,66 +74,79 @@ msgid "" "We already sent you a verification mail, you can request another one in " "${ minLeft } minutes." msgstr "" +"Wir sendeten dir bereits eine Wiederherstellung Mail, du kannst die nächste " +"in ${ minLeft } minuten anfordern." #: src/core/mail.js:75 msgid "Welcome ${ name } to PixelPlanet, plese verify your mail" msgstr "" +"Willkommen ${ name } auf PixelPlnet, bitte verifiziere deine Mail Adresse" #: src/core/mail.js:77 #, javascript-format msgid "Hello ${ name }" -msgstr "" +msgstr "Hallo ${ name }" #: src/core/mail.js:78 msgid "" "welcome to our little community of pixelplacers, to use your account, you " "have to verify your mail. You can do that here: " msgstr "" +"wilkommen in unserer kleinen Gemeinschaft aus Pixel schubser, um dein Konto " +"zu verwenden musst du deine E-Mail Adresse verifizieren. Du kannst das hier " +"erledigen: " #: src/core/mail.js:78 msgid "Click to Verify" -msgstr "" +msgstr "Klicke zum verifizieren" #: src/core/mail.js:78 src/core/mail.js:128 msgid "Or by copying following url:" -msgstr "" +msgstr "Oder kopiere den folgenden Link:" #: src/core/mail.js:79 msgid "" "Have fun and don't hesitate to contact us if you encouter any problems :)" msgstr "" +"Viel Spaß und scheue dich nicht uns zu kontaktieren wenn du Probleme hast :)" #: src/core/mail.js:80 src/core/mail.js:130 msgid "Thanks" -msgstr "" +msgstr "Danke" #: src/core/mail.js:98 msgid "" "We already sent you a mail with instructions. Please wait before requesting " "another mail." msgstr "" +"Wir sendeten dir bereits eine E-Mail mit Instruktionen. Bitte warte bevor du " +"eine neue beantragts." #: src/core/mail.js:106 msgid "Couldn't find this mail in our database" -msgstr "" +msgstr "Konnten diese E-Mail nicht in unserer Datenbank finden" #: src/core/mail.js:125 msgid "You forgot your password for PixelPlanet? Get a new one here" msgstr "" +"Du hast dein Passwort für PixelPlanet vergessen? Bekomme ein neues hier" #: src/core/mail.js:127 msgid "Hello" -msgstr "" +msgstr "Hallo" #: src/core/mail.js:128 msgid "" "You requested to get a new password. You can change your password within the " "next 30min here: " msgstr "" +"Du hast ein neues Passwort beantragt. Du kannst es nun während der nächsten " +"30min hier ändern:" -#: src/core/mail.js:128 +#: src/core/mail.js:128 src/ssr-components/PasswordReset.jsx:19 +#: src/ssr-components/PasswordReset.jsx:28 msgid "Reset Password" -msgstr "" +msgstr "Passwort zurücksetzen" #: src/core/mail.js:129 #, javascript-format @@ -131,107 +154,216 @@ msgid "" "If you did not request this mail, please just ignore it (the ip that " "requested this mail was ${ ip })." msgstr "" +"Falls du diese Mail nicht beantragt hast, bitte ignoriere sie (die IP welche " +"diese Nachricht beantragt hat war ${ ip })." -#: src/utils/validation.js:15 -msgid "Email can't be empty." -msgstr "" +#: src/ssr-components/PasswordReset.jsx:21 +#: src/ssr-components/RedirectionPage.jsx:15 +msgid "Click here" +msgstr "Klicke hier" -#: src/utils/validation.js:16 -msgid "Email should be at least 5 characters long." -msgstr "" +#: src/ssr-components/PasswordReset.jsx:22 +msgid "to go back to pixelplanet" +msgstr "um zu pixelplanet zurückzukehren" -#: src/utils/validation.js:17 -msgid "Email can't be longer than 40 characters." -msgstr "" +#: src/ssr-components/PasswordReset.jsx:29 +#, javascript-format +msgid "Hello ${ name }, you can set your new password here:" +msgstr "Hallo ${ name }, du kannst dein neues Passwort hier setzen:" + +#: src/ssr-components/PasswordReset.jsx:33 +msgid "New Password" +msgstr "Neues Passwort" + +#: src/ssr-components/PasswordReset.jsx:41 +msgid "Confirm New Password" +msgstr "Bestätige neues Passwort" + +#: src/ssr-components/PasswordReset.jsx:47 +msgid "Submit" +msgstr "Absenden" + +#: src/ssr-components/PasswordReset.jsx:52 +msgid "PixelPlanet.fun Password Reset" +msgstr "PixelPlanet.Fun Passwort Wiederherstellung" + +#: src/ssr-components/PasswordReset.jsx:53 +msgid "Reset your password here" +msgstr "Setze hier dein Passwort zurück" #: src/utils/validation.js:18 -msgid "Email should at least contain a dot" -msgstr "" +msgid "Email can't be empty." +msgstr "E-Mail Feld kann nicht leer sein." + +#: src/utils/validation.js:19 +msgid "Email should be at least 5 characters long." +msgstr "E-Mail sollte mindestens 5 Zeichen lang sein." #: src/utils/validation.js:20 +msgid "Email can't be longer than 40 characters." +msgstr "E-Mail kann nicht länger als 40 Zeichen sein." + +#: src/utils/validation.js:21 +msgid "Email should at least contain a dot" +msgstr "E-Mail sollte zumindest einen Punkt beinhalten" + +#: src/utils/validation.js:23 msgid "Email should contain a @" -msgstr "" +msgstr "E-Mail sollte zumindest ein @ beinhalten" -#: src/utils/validation.js:27 +#: src/utils/validation.js:30 msgid "Name can't be empty." -msgstr "" +msgstr "Name kann nicht leer sein." -#: src/utils/validation.js:28 +#: src/utils/validation.js:31 msgid "Name must be at least 4 characters long" -msgstr "" +msgstr "Name muss mindestens 4 Zeichen lang sein" -#: src/utils/validation.js:29 +#: src/utils/validation.js:32 msgid "Name must be shorter than 26 characters" -msgstr "" +msgstr "Name muss kürzer als 26 Zeichen sein" -#: src/utils/validation.js:36 +#: src/utils/validation.js:39 msgid "Name contains invalid character like @, /, \\ or #" -msgstr "" +msgstr "Name beinhalted ungültige Zeichen wie @,/.\\ oder #" -#: src/utils/validation.js:51 +#: src/utils/validation.js:54 +msgid "No password given." +msgstr "Kein Passwort angegeben." + +#: src/utils/validation.js:57 msgid "Password must be at least 6 characters long." msgstr "Passwort muss mindestens 6 Zeichen lang sein." -#: src/utils/validation.js:54 +#: src/utils/validation.js:60 msgid "Password must be shorter than 60 characters." -msgstr "" - -#: src/utils/validation.js:68 -msgid "Could not connect to server, please try again later :(" -msgstr "" +msgstr "Passwort muss kürzer als 60 Zeichen sein" #: src/utils/validation.js:74 +msgid "Could not connect to server, please try again later :(" +msgstr "Konnte nicht zum Server verbinden, bitte versuche es später erneut :(" + +#: src/utils/validation.js:80 msgid "I think we experienced some error :(" -msgstr "" +msgstr "Ich glaube wir haben ein Problem :(" #: src/routes/api/auth/change_mail.js:41 #: src/routes/api/auth/change_passwd.js:37 #: src/routes/api/auth/delete_account.js:38 msgid "You are not authenticated." -msgstr "" +msgstr "Du bist nicht auhtentifiziert." #: src/routes/api/auth/change_mail.js:50 #: src/routes/api/auth/change_passwd.js:46 #: src/routes/api/auth/delete_account.js:48 msgid "Incorrect password!" +msgstr "Falsches Passwort!" + +#: src/routes/api/auth/logout.js:13 +msgid "You are not even logged in." +msgstr "Du bist nichteinmal angemeldet." + +#: src/routes/api/auth/verify.js:25 src/routes/api/auth/verify.js:32 +msgid "Mail verification" +msgstr "E-Mail verifizieren" + +#: src/routes/api/auth/verify.js:26 +msgid "You are now verified :)" +msgstr "Du bist nun verifiziert :)" + +#: src/routes/api/auth/verify.js:32 +msgid "" +"Your mail verification code is invalid or already expired :(, please request " +"a new one." msgstr "" +"Dein E-Mail verifikations Code ist ungültig oder bereits abgelaufen :(, " +"bitte fordere einen neuen an." + +#: src/routes/api/auth/register.js:31 +msgid "E-Mail already in use." +msgstr "E-Mail wird bereits verwendet." + +#: src/routes/api/auth/register.js:33 +msgid "Username already in use." +msgstr "Name wird bereits verwendet." #: src/routes/api/auth/register.js:61 msgid "Failed to create new user :(" -msgstr "" +msgstr "Konnte keinen neuen Benutzer erstellen :(" #: src/routes/api/auth/register.js:77 msgid "Failed to establish session after register :(" -msgstr "" +msgstr "Konnte keine Sitzung nach registrierung starten :(" + +#: src/ssr-components/RedirectionPage.jsx:20 +msgid "You will be automatically redirected after 15s" +msgstr "Du wirst automatisch weitergeleitet nach 15s" + +#: src/ssr-components/RedirectionPage.jsx:21 +#, javascript-format +msgid "Or ${ clickHere } to go back to pixelplanet" +msgstr "oder ${ clickHere } um zu pixelplanet zurückzukehren" + +#: src/ssr-components/RedirectionPage.jsx:25 +msgid "PixelPlanet.fun Accounts" +msgstr "PixelPlanet.Fun Konten" #: src/canvasesDesc.js:19 -msgid "Our main canvas, a huge map of the world. Place everywhere you like" -msgstr "" -"Unsere Hauptleinwand, eine große Weltkarte. Zeichnen ist überall möglich." +msgid "Earth" +msgstr "Erde" #: src/canvasesDesc.js:20 +msgid "Moon" +msgstr "Mond" + +#: src/canvasesDesc.js:21 +msgid "3D Canvas" +msgstr "3D Leinwand" + +#: src/canvasesDesc.js:22 +msgid "Coronavirus" +msgstr "Coronavirus" + +#: src/canvasesDesc.js:23 +msgid "PixelZone" +msgstr "PixelZone" + +#: src/canvasesDesc.js:24 +msgid "PixelCanvas" +msgstr "PixelCanvas" + +#: src/canvasesDesc.js:25 +msgid "1bit" +msgstr "1bit" + +#: src/canvasesDesc.js:28 +msgid "Our main canvas, a huge map of the world. Place everywhere you like" +msgstr "" +"Unsere Hauptleinwand, eine große Weltkarte. Zeichnen ist überall möglich" + +#: src/canvasesDesc.js:29 msgid "" "Moon canvas. Safe space for art. No flags or large text (unless part of art)" msgstr "" "Mond Leinwand. Kunst erwünscht. Keine Flaggen oder großer Text außer als " "Teil von Kunst." -#: src/canvasesDesc.js:21 +#: src/canvasesDesc.js:30 msgid "Place Voxels on a 3D canvas with others" -msgstr "Zeichne mit Voxeln in einer 3D Umgebung." +msgstr "Zeichne mit Voxeln in einer 3D Umgebung" -#: src/canvasesDesc.js:22 +#: src/canvasesDesc.js:31 msgid "Special canvas to spread awareness of SARS-CoV2" msgstr "Kleine Leinwand im SARS-CoV2 Thema" -#: src/canvasesDesc.js:23 +#: src/canvasesDesc.js:32 msgid "Mirror of PixelZone" msgstr "Kopie von PixelZone" -#: src/canvasesDesc.js:24 +#: src/canvasesDesc.js:33 msgid "Mirror of PixelCanvas" msgstr "Kopie von PixelCanvas" -#: src/canvasesDesc.js:25 +#: src/canvasesDesc.js:34 msgid "Black and White canvas" msgstr "Schwarz/Weiß Leinwand" diff --git a/i18n/template-ssr.pot b/i18n/template-ssr.pot index e250753..b89d32b 100644 --- a/i18n/template-ssr.pot +++ b/i18n/template-ssr.pot @@ -3,6 +3,14 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" +#: src/ssr-components/Main.jsx:53 +msgid "PixelPlanet.fun" +msgstr "" + +#: src/ssr-components/Main.jsx:55 +msgid "Place color pixels on an map styled canvas with other players online" +msgstr "" + #: src/ssr-components/Globe.jsx:44 msgid "Double click on globe to go back." msgstr "" @@ -19,31 +27,31 @@ msgstr "" msgid "A 3D globe of our whole map" msgstr "" -#: src/routes/reset_password.js:63 +#: src/routes/reset_password.js:65 msgid "You sent an empty password or invalid data :(" msgstr "" -#: src/routes/reset_password.js:74 +#: src/routes/reset_password.js:77 msgid "This password-reset link isn't valid anymore :(" msgstr "" -#: src/routes/reset_password.js:84 +#: src/routes/reset_password.js:88 msgid "Your passwords do not match :(" msgstr "" -#: src/routes/reset_password.js:98 +#: src/routes/reset_password.js:103 msgid "User doesn't exist in our database :(" msgstr "" -#: src/routes/reset_password.js:109 +#: src/routes/reset_password.js:115 msgid "Passowrd successfully changed." msgstr "" -#: src/routes/reset_password.js:126 +#: src/routes/reset_password.js:134 msgid "Invalid url :( Please check your mail again." msgstr "" -#: src/routes/reset_password.js:138 +#: src/routes/reset_password.js:147 msgid "" "This passwort reset link is wrong or already expired, please request a new " "one (Note: you can use those links just once)" @@ -114,6 +122,8 @@ msgid "" msgstr "" #: src/core/mail.js:128 +#: src/ssr-components/PasswordReset.jsx:19 +#: src/ssr-components/PasswordReset.jsx:28 msgid "Reset Password" msgstr "" @@ -124,55 +134,93 @@ msgid "" "requested this mail was ${ ip })." msgstr "" -#: src/utils/validation.js:15 -msgid "Email can't be empty." +#: src/ssr-components/PasswordReset.jsx:21 +#: src/ssr-components/RedirectionPage.jsx:15 +msgid "Click here" msgstr "" -#: src/utils/validation.js:16 -msgid "Email should be at least 5 characters long." +#: src/ssr-components/PasswordReset.jsx:22 +msgid "to go back to pixelplanet" msgstr "" -#: src/utils/validation.js:17 -msgid "Email can't be longer than 40 characters." +#: src/ssr-components/PasswordReset.jsx:29 +#, javascript-format +msgid "Hello ${ name }, you can set your new password here:" +msgstr "" + +#: src/ssr-components/PasswordReset.jsx:33 +msgid "New Password" +msgstr "" + +#: src/ssr-components/PasswordReset.jsx:41 +msgid "Confirm New Password" +msgstr "" + +#: src/ssr-components/PasswordReset.jsx:47 +msgid "Submit" +msgstr "" + +#: src/ssr-components/PasswordReset.jsx:52 +msgid "PixelPlanet.fun Password Reset" +msgstr "" + +#: src/ssr-components/PasswordReset.jsx:53 +msgid "Reset your password here" msgstr "" #: src/utils/validation.js:18 -msgid "Email should at least contain a dot" +msgid "Email can't be empty." +msgstr "" + +#: src/utils/validation.js:19 +msgid "Email should be at least 5 characters long." msgstr "" #: src/utils/validation.js:20 +msgid "Email can't be longer than 40 characters." +msgstr "" + +#: src/utils/validation.js:21 +msgid "Email should at least contain a dot" +msgstr "" + +#: src/utils/validation.js:23 msgid "Email should contain a @" msgstr "" -#: src/utils/validation.js:27 +#: src/utils/validation.js:30 msgid "Name can't be empty." msgstr "" -#: src/utils/validation.js:28 +#: src/utils/validation.js:31 msgid "Name must be at least 4 characters long" msgstr "" -#: src/utils/validation.js:29 +#: src/utils/validation.js:32 msgid "Name must be shorter than 26 characters" msgstr "" -#: src/utils/validation.js:36 +#: src/utils/validation.js:39 msgid "Name contains invalid character like @, /, \\ or #" msgstr "" -#: src/utils/validation.js:51 +#: src/utils/validation.js:54 +msgid "No password given." +msgstr "" + +#: src/utils/validation.js:57 msgid "Password must be at least 6 characters long." msgstr "" -#: src/utils/validation.js:54 +#: src/utils/validation.js:60 msgid "Password must be shorter than 60 characters." msgstr "" -#: src/utils/validation.js:68 +#: src/utils/validation.js:74 msgid "Could not connect to server, please try again later :(" msgstr "" -#: src/utils/validation.js:74 +#: src/utils/validation.js:80 msgid "I think we experienced some error :(" msgstr "" @@ -188,6 +236,33 @@ msgstr "" msgid "Incorrect password!" msgstr "" +#: src/routes/api/auth/logout.js:13 +msgid "You are not even logged in." +msgstr "" + +#: src/routes/api/auth/verify.js:25 +#: src/routes/api/auth/verify.js:32 +msgid "Mail verification" +msgstr "" + +#: src/routes/api/auth/verify.js:26 +msgid "You are now verified :)" +msgstr "" + +#: src/routes/api/auth/verify.js:32 +msgid "" +"Your mail verification code is invalid or already expired :(, please " +"request a new one." +msgstr "" + +#: src/routes/api/auth/register.js:31 +msgid "E-Mail already in use." +msgstr "" + +#: src/routes/api/auth/register.js:33 +msgid "Username already in use." +msgstr "" + #: src/routes/api/auth/register.js:61 msgid "Failed to create new user :(" msgstr "" @@ -196,30 +271,71 @@ msgstr "" msgid "Failed to establish session after register :(" msgstr "" +#: src/ssr-components/RedirectionPage.jsx:20 +msgid "You will be automatically redirected after 15s" +msgstr "" + +#: src/ssr-components/RedirectionPage.jsx:21 +#, javascript-format +msgid "Or ${ clickHere } to go back to pixelplanet" +msgstr "" + +#: src/ssr-components/RedirectionPage.jsx:25 +msgid "PixelPlanet.fun Accounts" +msgstr "" + #: src/canvasesDesc.js:19 -msgid "Our main canvas, a huge map of the world. Place everywhere you like" +msgid "Earth" msgstr "" #: src/canvasesDesc.js:20 -msgid "Moon canvas. Safe space for art. No flags or large text (unless part of art)" +msgid "Moon" msgstr "" #: src/canvasesDesc.js:21 -msgid "Place Voxels on a 3D canvas with others" +msgid "3D Canvas" msgstr "" #: src/canvasesDesc.js:22 -msgid "Special canvas to spread awareness of SARS-CoV2" +msgid "Coronavirus" msgstr "" #: src/canvasesDesc.js:23 -msgid "Mirror of PixelZone" +msgid "PixelZone" msgstr "" #: src/canvasesDesc.js:24 -msgid "Mirror of PixelCanvas" +msgid "PixelCanvas" msgstr "" #: src/canvasesDesc.js:25 +msgid "1bit" +msgstr "" + +#: src/canvasesDesc.js:28 +msgid "Our main canvas, a huge map of the world. Place everywhere you like" +msgstr "" + +#: src/canvasesDesc.js:29 +msgid "Moon canvas. Safe space for art. No flags or large text (unless part of art)" +msgstr "" + +#: src/canvasesDesc.js:30 +msgid "Place Voxels on a 3D canvas with others" +msgstr "" + +#: src/canvasesDesc.js:31 +msgid "Special canvas to spread awareness of SARS-CoV2" +msgstr "" + +#: src/canvasesDesc.js:32 +msgid "Mirror of PixelZone" +msgstr "" + +#: src/canvasesDesc.js:33 +msgid "Mirror of PixelCanvas" +msgstr "" + +#: src/canvasesDesc.js:34 msgid "Black and White canvas" msgstr "" \ No newline at end of file diff --git a/i18n/template.pot b/i18n/template.pot index 68c7726..cdf02c0 100644 --- a/i18n/template.pot +++ b/i18n/template.pot @@ -128,7 +128,7 @@ msgid "User online" msgstr "" #: src/components/OnlineBox.jsx:25 -msgid "Pixel gesetzt" +msgid "Pixels placed" msgstr "" #: src/components/Converter.jsx:609 @@ -136,24 +136,6 @@ msgstr "" msgid "Copy to Clipboard" msgstr "" -#: src/components/DownloadButton.jsx:37 -msgid "Make Screenshot" -msgstr "" - -#: src/components/LogInButton.jsx:20 -#: src/components/UserAreaModal.jsx:160 -msgid "User Area" -msgstr "" - -#: src/components/SettingsButton.jsx:20 -#: src/components/SettingsModal.jsx:267 -msgid "Settings" -msgstr "" - -#: src/components/HelpButton.jsx:20 -msgid "Help" -msgstr "" - #: src/components/Chat.jsx:143 msgid "Channel settings" msgstr "" @@ -174,6 +156,24 @@ msgstr "" msgid "You must be logged in to chat" msgstr "" +#: src/components/DownloadButton.jsx:37 +msgid "Make Screenshot" +msgstr "" + +#: src/components/LogInButton.jsx:20 +#: src/components/UserAreaModal.jsx:160 +msgid "User Area" +msgstr "" + +#: src/components/SettingsButton.jsx:20 +#: src/components/SettingsModal.jsx:267 +msgid "Settings" +msgstr "" + +#: src/components/HelpButton.jsx:20 +msgid "Help" +msgstr "" + #: src/components/GlobeButton.jsx:31 msgid "Globe View" msgstr "" @@ -497,7 +497,7 @@ msgid "Login to access more features and stats." msgstr "" #: src/components/UserAreaModal.jsx:35 -msgid "Login with Mail:" +msgid "Login with Name or Mail:" msgstr "" #: src/components/UserAreaModal.jsx:42 @@ -600,14 +600,24 @@ msgstr "" msgid "Archive" msgstr "" +#: src/components/ChangeMail.jsx:104 +#: src/components/ChangeName.jsx:82 +#: src/components/ChangePassword.jsx:120 +#: src/components/DeleteAccount.jsx:82 +#: src/components/LogInForm.jsx:97 +#: src/components/NewPasswordForm.jsx:93 +#: src/components/SignUpForm.jsx:118 +msgid "Error" +msgstr "" + #: src/components/LogInForm.jsx:104 msgid "Name or Email" msgstr "" -#: src/components/ChangeMail.jsx:109 -#: src/components/DeleteAccount.jsx:88 +#: src/components/ChangeMail.jsx:112 +#: src/components/DeleteAccount.jsx:89 #: src/components/LogInForm.jsx:111 -#: src/components/SignUpForm.jsx:139 +#: src/components/SignUpForm.jsx:140 msgid "Password" msgstr "" @@ -615,6 +625,18 @@ msgstr "" msgid "LogIn" msgstr "" +#: src/components/Rankings.jsx:37 +msgid "Total" +msgstr "" + +#: src/components/Rankings.jsx:45 +msgid "Daily" +msgstr "" + +#: src/components/Rankings.jsx:49 +msgid "Ranking updates every 5 min. Daily rankings get reset at midnight UTC." +msgstr "" + #: src/components/UserArea.jsx:57 msgid "Todays Placed Pixels" msgstr "" @@ -660,16 +682,40 @@ msgstr "" msgid "Social Settings" msgstr "" -#: src/components/Rankings.jsx:37 -msgid "Total" +#: src/components/SignUpForm.jsx:126 +msgid "Name" msgstr "" -#: src/components/Rankings.jsx:45 -msgid "Daily" +#: src/components/NewPasswordForm.jsx:100 +#: src/components/SignUpForm.jsx:133 +msgid "Email" msgstr "" -#: src/components/Rankings.jsx:49 -msgid "Ranking updates every 5 min. Daily rankings get reset at midnight UTC." +#: src/components/SignUpForm.jsx:149 +msgid "Confirm Password" +msgstr "" + +#: src/components/Admintools.jsx:306 +#: src/components/Admintools.jsx:387 +#: src/components/Admintools.jsx:461 +#: src/components/Admintools.jsx:505 +#: src/components/Admintools.jsx:589 +#: src/components/NewPasswordForm.jsx:104 +#: src/components/SignUpForm.jsx:152 +msgid "Submit" +msgstr "" + +#: src/components/ChangeMail.jsx:125 +#: src/components/ChangeName.jsx:94 +#: src/components/ChangePassword.jsx:152 +#: src/components/DeleteAccount.jsx:95 +#: src/components/NewPasswordForm.jsx:106 +#: src/components/SignUpForm.jsx:158 +msgid "Cancel" +msgstr "" + +#: src/components/NewPasswordForm.jsx:83 +msgid "Sent you a mail with instructions to reset your password." msgstr "" #: src/components/CanvasItem.jsx:46 @@ -701,108 +747,6 @@ msgstr "" msgid "Dimensions" msgstr "" -#: src/components/Admintools.jsx:179 -msgid "Build image on canvas." -msgstr "" - -#: src/components/Admintools.jsx:182 -msgid "Build image and set it to protected." -msgstr "" - -#: src/components/Admintools.jsx:185 -msgid "Build image, but reset cooldown to unset-pixel cd." -msgstr "" - -#: src/components/Admintools.jsx:248 -msgid "Image Upload" -msgstr "" - -#: src/components/Admintools.jsx:249 -msgid "Upload images to canvas" -msgstr "" - -#: src/components/Admintools.jsx:251 -msgid "File" -msgstr "" - -#: src/components/Admintools.jsx:271 -msgid "Coordinates in X_Y format:" -msgstr "" - -#: src/components/Admintools.jsx:306 -#: src/components/Admintools.jsx:387 -#: src/components/Admintools.jsx:461 -#: src/components/Admintools.jsx:505 -#: src/components/Admintools.jsx:589 -#: src/components/SignUpForm.jsx:151 -msgid "Submit" -msgstr "" - -#: src/components/Admintools.jsx:311 -msgid "Pixel Protection" -msgstr "" - -#: src/components/Admintools.jsx:313 -msgid "" -"Set protection of areas (if you need finer grained control, " -"use protect with image upload and alpha layers)" -msgstr "" - -#: src/components/Admintools.jsx:392 -msgid "Rollback to Date" -msgstr "" - -#: src/components/Admintools.jsx:394 -msgid "Rollback an area of the canvas to a set date (00:00 UTC)" -msgstr "" - -#: src/components/Admintools.jsx:468 -msgid "IP Actions" -msgstr "" - -#: src/components/Admintools.jsx:470 -msgid "Do stuff with IPs (one IP per line)" -msgstr "" - -#: src/components/Admintools.jsx:510 -msgid "Manage Moderators" -msgstr "" - -#: src/components/Admintools.jsx:512 -msgid "Remove Moderator" -msgstr "" - -#: src/components/Admintools.jsx:544 -msgid "There are no mods" -msgstr "" - -#: src/components/Admintools.jsx:549 -msgid "Assign new Mod" -msgstr "" - -#: src/components/Admintools.jsx:552 -msgid "Enter UserName of new Mod" -msgstr "" - -#: src/components/SignUpForm.jsx:125 -msgid "Name" -msgstr "" - -#: src/components/SignUpForm.jsx:132 -msgid "Email" -msgstr "" - -#: src/components/SignUpForm.jsx:148 -msgid "Confirm Password" -msgstr "" - -#: src/components/ChangeMail.jsx:122 -#: src/components/ChangePassword.jsx:151 -#: src/components/DeleteAccount.jsx:94 -#: src/components/SignUpForm.jsx:157 -msgid "Cancel" -msgstr "" - #: src/components/Converter.jsx:274 msgid "Choose Canvas" msgstr "" @@ -874,97 +818,144 @@ msgstr "" msgid "Download Template" msgstr "" -#: src/utils/validation.js:15 -msgid "Email can't be empty." +#: src/components/Admintools.jsx:179 +msgid "Build image on canvas." msgstr "" -#: src/utils/validation.js:16 -msgid "Email should be at least 5 characters long." +#: src/components/Admintools.jsx:182 +msgid "Build image and set it to protected." msgstr "" -#: src/utils/validation.js:17 -msgid "Email can't be longer than 40 characters." +#: src/components/Admintools.jsx:185 +msgid "Build image, but reset cooldown to unset-pixel cd." +msgstr "" + +#: src/components/Admintools.jsx:248 +msgid "Image Upload" +msgstr "" + +#: src/components/Admintools.jsx:249 +msgid "Upload images to canvas" +msgstr "" + +#: src/components/Admintools.jsx:251 +msgid "File" +msgstr "" + +#: src/components/Admintools.jsx:271 +msgid "Coordinates in X_Y format:" +msgstr "" + +#: src/components/Admintools.jsx:311 +msgid "Pixel Protection" +msgstr "" + +#: src/components/Admintools.jsx:313 +msgid "" +"Set protection of areas (if you need finer grained control, " +"use protect with image upload and alpha layers)" +msgstr "" + +#: src/components/Admintools.jsx:392 +msgid "Rollback to Date" +msgstr "" + +#: src/components/Admintools.jsx:394 +msgid "Rollback an area of the canvas to a set date (00:00 UTC)" +msgstr "" + +#: src/components/Admintools.jsx:468 +msgid "IP Actions" +msgstr "" + +#: src/components/Admintools.jsx:470 +msgid "Do stuff with IPs (one IP per line)" +msgstr "" + +#: src/components/Admintools.jsx:510 +msgid "Manage Moderators" +msgstr "" + +#: src/components/Admintools.jsx:512 +msgid "Remove Moderator" +msgstr "" + +#: src/components/Admintools.jsx:544 +msgid "There are no mods" +msgstr "" + +#: src/components/Admintools.jsx:549 +msgid "Assign new Mod" +msgstr "" + +#: src/components/Admintools.jsx:552 +msgid "Enter UserName of new Mod" +msgstr "" + +#: src/components/Admintools.jsx:561 +msgid "User Name" msgstr "" #: src/utils/validation.js:18 -msgid "Email should at least contain a dot" +msgid "Email can't be empty." +msgstr "" + +#: src/utils/validation.js:19 +msgid "Email should be at least 5 characters long." msgstr "" #: src/utils/validation.js:20 +msgid "Email can't be longer than 40 characters." +msgstr "" + +#: src/utils/validation.js:21 +msgid "Email should at least contain a dot" +msgstr "" + +#: src/utils/validation.js:23 msgid "Email should contain a @" msgstr "" -#: src/utils/validation.js:27 +#: src/utils/validation.js:30 msgid "Name can't be empty." msgstr "" -#: src/utils/validation.js:28 +#: src/utils/validation.js:31 msgid "Name must be at least 4 characters long" msgstr "" -#: src/utils/validation.js:29 +#: src/utils/validation.js:32 msgid "Name must be shorter than 26 characters" msgstr "" -#: src/utils/validation.js:36 +#: src/utils/validation.js:39 msgid "Name contains invalid character like @, /, \\ or #" msgstr "" -#: src/utils/validation.js:51 +#: src/utils/validation.js:54 +msgid "No password given." +msgstr "" + +#: src/utils/validation.js:57 msgid "Password must be at least 6 characters long." msgstr "" -#: src/utils/validation.js:54 +#: src/utils/validation.js:60 msgid "Password must be shorter than 60 characters." msgstr "" -#: src/utils/validation.js:68 +#: src/utils/validation.js:74 msgid "Could not connect to server, please try again later :(" msgstr "" -#: src/utils/validation.js:74 +#: src/utils/validation.js:80 msgid "I think we experienced some error :(" msgstr "" -#: src/components/DeleteAccount.jsx:92 +#: src/components/DeleteAccount.jsx:93 msgid "Yes, Delete My Account!" msgstr "" -#: src/components/ChangeMail.jsx:89 -msgid "" -"Changed Mail successfully. We sent you a verification mail, " -"please verify your new mail adress." -msgstr "" - -#: src/components/ChangeMail.jsx:116 -msgid "New Mail" -msgstr "" - -#: src/components/ChangeMail.jsx:120 -#: src/components/ChangePassword.jsx:149 -msgid "Save" -msgstr "" - -#: src/components/ChangePassword.jsx:18 -msgid "Passwords do not match." -msgstr "" - -#: src/components/ChangePassword.jsx:103 -msgid "Changed Password successfully." -msgstr "" - -#: src/components/ChangePassword.jsx:128 -msgid "Old Password" -msgstr "" - -#: src/components/ChangePassword.jsx:136 -msgid "New Password" -msgstr "" - -#: src/components/ChangePassword.jsx:145 -msgid "Confirm New Password" -msgstr "" - #: src/components/SocialSettings.jsx:39 msgid "Block all Private Messages" msgstr "" @@ -977,6 +968,81 @@ msgstr "" msgid "You have no users blocked" msgstr "" +#: src/components/ChangeMail.jsx:89 +msgid "" +"Changed Mail successfully. We sent you a verification mail, " +"please verify your new mail adress." +msgstr "" + +#: src/components/ChangeMail.jsx:119 +msgid "New Mail" +msgstr "" + +#: src/components/ChangeMail.jsx:123 +#: src/components/ChangeName.jsx:92 +#: src/components/ChangePassword.jsx:150 +msgid "Save" +msgstr "" + +#: src/components/ChangePassword.jsx:18 +msgid "Passwords do not match." +msgstr "" + +#: src/components/ChangePassword.jsx:103 +msgid "Changed Password successfully." +msgstr "" + +#: src/components/ChangePassword.jsx:129 +msgid "Old Password" +msgstr "" + +#: src/components/ChangePassword.jsx:137 +msgid "New Password" +msgstr "" + +#: src/components/ChangePassword.jsx:146 +msgid "Confirm New Password" +msgstr "" + +#: src/components/ChangeName.jsx:88 +msgid "New Username" +msgstr "" + +#: src/components/UserMessages.jsx:41 +msgid "A new verification mail is getting sent to you." +msgstr "" + +#: src/components/UserMessages.jsx:75 +msgid "You successfully linked your mc account." +msgstr "" + +#: src/components/UserMessages.jsx:76 +msgid "You denied." +msgstr "" + +#: src/components/UserMessages.jsx:94 +msgid "" +"Please verify your mail address \n" +"or your account could get deleted after a few days." +msgstr "" + +#: src/components/UserMessages.jsx:111 +msgid "Click here to request a new verification mail." +msgstr "" + +#: src/components/UserMessages.jsx:120 +#, javascript-format +msgid "You requested to link your mc account ${ minecraftname }." +msgstr "" + +#: src/components/UserMessages.jsx:140 +msgid "Accept" +msgstr "" + +#: src/components/UserMessages.jsx:150 +msgid "Deny" +msgstr "" + #: src/components/HelpModal.jsx:15 #: src/components/SettingsModal.jsx:125 msgctxt "keybinds" diff --git a/src/canvases.json b/src/canvases.json index 266b776..1ae93cb 100644 --- a/src/canvases.json +++ b/src/canvases.json @@ -44,7 +44,8 @@ "cds": 60000, "ranked" : true, "req": -1, - "sd": "2020-01-07" + "sd": "2020-01-07", + "desc": "Our main canvas, a huge map of the world. Place everywhere you like" }, "1": { "ident": "m", @@ -91,7 +92,8 @@ "cds": 900000, "ranked" : true, "req": 20000, - "sd": "2020-01-08" + "sd": "2020-01-08", + "desc": "Moon canvas. Safe space for art. No flags or large text (unless part of art)" }, "2": { "ident":"v", @@ -169,7 +171,8 @@ "cds": 60000, "ranked" : false, "req": 0, - "sd": "2020-01-08" + "sd": "2020-01-08", + "desc": "Place Voxels on a 3D canvas with others" }, "3": { "ident": "c", @@ -206,7 +209,8 @@ "cds": 60000, "ranked" : false, "req": 0, - "sd": "2020-03-15" + "sd": "2020-03-15", + "desc": "Special canvas to spread awareness of SARS-CoV2" }, "5": { "ident": "y", @@ -237,7 +241,8 @@ "cds": 4000, "ranked": false, "req": -1, - "sd": "2020-07-05" + "sd": "2020-07-05", + "desc": "Mirror of PixelZone" }, "6": { "ident": "z", @@ -268,7 +273,8 @@ "cds": 10000, "ranked": false, "req": -1, - "sd": "2020-07-05" + "sd": "2020-07-05", + "desc": "Mirror of PixelCanvas" }, "7": { "ident": "w", @@ -287,6 +293,7 @@ "cds": 1000000, "ranked": true, "req": 5000, - "sd": "2020-11-09" + "sd": "2020-11-09", + "desc": "Black and White canvas" } } diff --git a/src/canvasesDesc.js b/src/canvasesDesc.js index d91560c..0efd39a 100644 --- a/src/canvasesDesc.js +++ b/src/canvasesDesc.js @@ -12,9 +12,18 @@ import ttag from './core/ttag'; function getCanvases(t) { /* - * add descriptions of canvases here + * add descriptions and titles of canvases here * Use the t tab and right `backquotes` */ + const canvasTitles = { + 0: t`Earth`, + 1: t`Moon`, + 2: t`3D Canvas`, + 3: t`Coronavirus`, + 5: t`PixelZone`, + 6: t`PixelCanvas`, + 7: t`1bit`, + }; const canvasDesc = { 0: t`Our main canvas, a huge map of the world. Place everywhere you like`, 1: t`Moon canvas. Safe space for art. No flags or large text (unless part of art)`, @@ -34,6 +43,7 @@ function getCanvases(t) { for (let i = 0; i < canvasKeys.length; i += 1) { const key = canvasKeys[i]; localicedCanvases[key].desc = canvasDesc[key] || `Canvas ${key}`; + localicedCanvases[key].title = canvasTitles[key] || `Canvas ${key}`; } return localicedCanvases; diff --git a/src/components/Admintools.jsx b/src/components/Admintools.jsx index 972029e..667c375 100644 --- a/src/components/Admintools.jsx +++ b/src/components/Admintools.jsx @@ -558,7 +558,7 @@ function Admintools({ maxWidth: '20em', }} type="text" - placeholder="User Name" + placeholder={t`User Name`} onChange={(evt) => { const co = evt.target.value.trim(); selectModName(co); diff --git a/src/components/ChangeMail.jsx b/src/components/ChangeMail.jsx index 845f9aa..8436c04 100644 --- a/src/components/ChangeMail.jsx +++ b/src/components/ChangeMail.jsx @@ -100,7 +100,10 @@ class ChangeMail extends React.Component {
{errors.map((error) => ( -

Error: {error}

+

+ {t`Error`}:  + {error} +

))} {errors.map((error) => ( -

Error: {error}

+

+ {t`Error`}: {error}

))} this.setState({ name: evt.target.value })} type="text" - placeholder="New Username" + placeholder={t`New Username`} />
- +
); diff --git a/src/components/ChangePassword.jsx b/src/components/ChangePassword.jsx index 892067c..37306ef 100644 --- a/src/components/ChangePassword.jsx +++ b/src/components/ChangePassword.jsx @@ -117,7 +117,8 @@ class ChangePassword extends React.Component {
{errors.map((error) => ( -

Error: {error}

+

{t`Error`} + : {error}

))} {(mailreg) && ( diff --git a/src/components/DeleteAccount.jsx b/src/components/DeleteAccount.jsx index 490c3c0..d4ec2df 100644 --- a/src/components/DeleteAccount.jsx +++ b/src/components/DeleteAccount.jsx @@ -79,7 +79,8 @@ class DeleteAccount extends React.Component {
{errors.map((error) => ( -

Error: {error}

+

{t`Error`} + : {error}

))} {errors.map((error) => ( -

Error: {error}

+

{t`Error`}: {error}

))}

- Sent you a mail with instructions to reset your password. + {t`Sent you a mail with instructions to reset your password.`}

@@ -89,20 +90,20 @@ class NewPasswordForm extends React.Component { return ( {errors.map((error) => ( -

Error: {error}

+

{t`Error`}: {error}

))} this.setState({ email: evt.target.value })} type="text" - placeholder="Email" + placeholder={t`Email`} />
- +
); } diff --git a/src/components/OnlineBox.jsx b/src/components/OnlineBox.jsx index e30d1bb..80bc835 100644 --- a/src/components/OnlineBox.jsx +++ b/src/components/OnlineBox.jsx @@ -22,7 +22,7 @@ const OnlineBox = ({ online, totalPixels, name }) => ( && {online}  } {(name != null) && ( - + {numberToString(totalPixels)} )} diff --git a/src/components/SignUpForm.jsx b/src/components/SignUpForm.jsx index 746c58d..153ebdf 100644 --- a/src/components/SignUpForm.jsx +++ b/src/components/SignUpForm.jsx @@ -115,7 +115,8 @@ class SignUpForm extends React.Component { return (
{errors.map((error) => ( -

Error: {error}

+

{t`Error`} + : {error}

))} (

{t`Login to access more features and stats.`}


-

{t`Login with Mail:`}

+

{t`Login with Name or Mail:`}

- Please verify your mail address  - or your account could get deleted after a few days.  + {t`Please verify your mail address  + or your account could get deleted after a few days.`}  {(verifyAnswer) ? ( - Click here to request a new verification mail. + {t`Click here to request a new verification mail.`} )}

@@ -116,7 +117,7 @@ class UserMessages extends React.Component { && messages.splice(messages.indexOf('not_mc_verified'), 1)) ? (

- You requested to link your mc account {minecraftname}. + {t`You requested to link your mc account ${minecraftname}.`}   {(linkAnswer) ? ( @@ -136,7 +137,7 @@ class UserMessages extends React.Component { this.submitMcLink(true); }} > - Accept + {t`Accept`}  or  - Deny + {t`Deny`} . )} diff --git a/src/core/ttag.js b/src/core/ttag.js index 10f986c..cb2f68c 100644 --- a/src/core/ttag.js +++ b/src/core/ttag.js @@ -3,22 +3,21 @@ * @flow */ import { TTag } from 'ttag'; -import deLocale from '../../i18n/ssr-de.po'; import { languageFromLocalisation } from '../utils/location'; -const LOCALES = { - de: deLocale, -}; +// eslint-disable-next-line max-len +const localeImports = require.context('../../i18n', false, /^\.[/\\]ssr-.+\.po$/); const ttags = { default: new TTag(), }; (() => { - const langs = Object.keys(LOCALES); - langs.forEach((lang) => { + localeImports.keys().forEach((file) => { const ttag = new TTag(); - ttag.addLocale(lang, LOCALES[lang]); + // ./ssr-de.po + const lang = file.replace('./ssr-', '').replace('.po', ''); + ttag.addLocale(lang, localeImports(file).default); ttag.useLocale(lang); ttags[lang] = ttag; }); diff --git a/src/routes/api/auth/change_mail.js b/src/routes/api/auth/change_mail.js index e574c2d..4d4d6a2 100644 --- a/src/routes/api/auth/change_mail.js +++ b/src/routes/api/auth/change_mail.js @@ -16,7 +16,7 @@ function validate(email, password, gettext) { const passerror = gettext(validatePassword(password)); if (passerror) errors.push(passerror); - const mailerror = validateEMail(email); + const mailerror = gettext(validateEMail(email)); if (mailerror) errors.push(mailerror); return errors; diff --git a/src/routes/api/auth/index.js b/src/routes/api/auth/index.js index 3d240ad..a399f5a 100644 --- a/src/routes/api/auth/index.js +++ b/src/routes/api/auth/index.js @@ -108,7 +108,10 @@ export default (passport) => { if (err) { const host = getHostFromRequest(req); logger.info(`Authentification error ${err}`); - const index = getHtml('OAuth Authentification', err.message, host); + const index = getHtml( + 'OAuth Authentification', + err.message, host, req.lang, + ); res.status(400).send(index); } else { next(); diff --git a/src/routes/api/auth/logout.js b/src/routes/api/auth/logout.js index 44b37f2..05d6f68 100644 --- a/src/routes/api/auth/logout.js +++ b/src/routes/api/auth/logout.js @@ -6,10 +6,11 @@ import type { Request, Response } from 'express'; export default async (req: Request, res: Response) => { const { user } = req; + const { t } = req.ttag; if (!user) { res.status(401); res.json({ - errors: ['You are not even logged in.'], + errors: [t`You are not even logged in.`], }); return; } diff --git a/src/routes/api/auth/register.js b/src/routes/api/auth/register.js index b184568..06d193a 100644 --- a/src/routes/api/auth/register.js +++ b/src/routes/api/auth/register.js @@ -18,9 +18,9 @@ import { validatePassword, } from '../../../utils/validation'; -async function validate(email, name, password, gettext) { +async function validate(email, name, password, t, gettext) { const errors = []; - const emailerror = validateEMail(email); + const emailerror = gettext(validateEMail(email)); if (emailerror) errors.push(emailerror); const nameerror = validateName(name); if (nameerror) errors.push(nameerror); @@ -28,9 +28,9 @@ async function validate(email, name, password, gettext) { if (passworderror) errors.push(passworderror); let reguser = await RegUser.findOne({ where: { email } }); - if (reguser) errors.push('E-Mail already in use.'); + if (reguser) errors.push(t`E-Mail already in use.`); reguser = await RegUser.findOne({ where: { name } }); - if (reguser) errors.push('Username already in use.'); + if (reguser) errors.push(t`Username already in use.`); return errors; } @@ -38,7 +38,7 @@ async function validate(email, name, password, gettext) { export default async (req: Request, res: Response) => { const { email, name, password } = req.body; const { t, gettext } = req.ttag; - const errors = await validate(email, name, password, gettext); + const errors = await validate(email, name, password, t, gettext); if (errors.length > 0) { res.status(400); res.json({ diff --git a/src/routes/api/auth/restore_password.js b/src/routes/api/auth/restore_password.js index 1cd3f46..327810b 100644 --- a/src/routes/api/auth/restore_password.js +++ b/src/routes/api/auth/restore_password.js @@ -10,9 +10,9 @@ import mailProvider from '../../../core/mail'; import { validateEMail } from '../../../utils/validation'; import { getHostFromRequest } from '../../../utils/ip'; -async function validate(email) { +async function validate(email, gettext) { const errors = []; - const emailerror = validateEMail(email); + const emailerror = gettext(validateEMail(email)); if (emailerror) errors.push(emailerror); return errors; @@ -21,8 +21,9 @@ async function validate(email) { export default async (req: Request, res: Response) => { const ip = req.trueIp; const { email } = req.body; + const { gettext } = req.ttag; - const errors = await validate(email); + const errors = validate(email, gettext); if (errors.length > 0) { res.status(400); res.json({ diff --git a/src/routes/api/auth/verify.js b/src/routes/api/auth/verify.js index a044948..54bd470 100644 --- a/src/routes/api/auth/verify.js +++ b/src/routes/api/auth/verify.js @@ -12,6 +12,8 @@ import mailProvider from '../../../core/mail'; export default async (req: Request, res: Response) => { const { token } = req.query; + const { lang } = req; + const { t } = req.ttag; const name = await mailProvider.verify(token); const host = getHostFromRequest(req); if (name) { @@ -19,11 +21,15 @@ export default async (req: Request, res: Response) => { // thats a bit counter productive because it directly links to the websocket webSockets.notifyChangedMe(name); // --- - const index = getHtml('Mail verification', 'You are now verified :)', host); + const index = getHtml( + t`Mail verification`, + t`You are now verified :)`, + host, lang, + ); res.status(200).send(index); } else { // eslint-disable-next-line max-len - const index = getHtml('Mail verification', 'Your mail verification code is invalid or already expired :(, please request a new one.', host); + const index = getHtml(t`Mail verification`, t`Your mail verification code is invalid or already expired :(, please request a new one.`, host, lang); res.status(400).send(index); } }; diff --git a/src/routes/reset_password.js b/src/routes/reset_password.js index bac273f..9b96f18 100644 --- a/src/routes/reset_password.js +++ b/src/routes/reset_password.js @@ -54,12 +54,14 @@ router.use(expressTTag); */ router.post('/', async (req: Request, res: Response) => { const { pass, passconf, code } = req.body; + const { lang } = req; const { t } = req.ttag; if (!pass || !passconf || !code) { const html = getPasswordResetHtml( null, null, + lang, t`You sent an empty password or invalid data :(`, ); res.status(400).send(html); @@ -71,6 +73,7 @@ router.post('/', async (req: Request, res: Response) => { const html = getPasswordResetHtml( null, null, + lang, t`This password-reset link isn't valid anymore :(`, ); res.status(401).send(html); @@ -81,6 +84,7 @@ router.post('/', async (req: Request, res: Response) => { const html = getPasswordResetHtml( null, null, + lang, t`Your passwords do not match :(`, ); res.status(400).send(html); @@ -95,6 +99,7 @@ router.post('/', async (req: Request, res: Response) => { const html = getPasswordResetHtml( null, null, + lang, t`User doesn't exist in our database :(`, ); res.status(400).send(html); @@ -106,6 +111,7 @@ router.post('/', async (req: Request, res: Response) => { const html = getPasswordResetHtml( null, null, + lang, t`Passowrd successfully changed.`, ); res.status(200).send(html); @@ -117,12 +123,14 @@ router.post('/', async (req: Request, res: Response) => { */ router.get('/', async (req: Request, res: Response) => { const { token } = req.query; + const { lang } = req; const { t } = req.ttag; if (!token) { const html = getPasswordResetHtml( null, null, + lang, t`Invalid url :( Please check your mail again.`, ); res.status(400).send(html); @@ -134,6 +142,7 @@ router.get('/', async (req: Request, res: Response) => { const html = getPasswordResetHtml( null, null, + lang, // eslint-disable-next-line max-len t`This passwort reset link is wrong or already expired, please request a new one (Note: you can use those links just once)`, ); diff --git a/src/ssr-components/Main.jsx b/src/ssr-components/Main.jsx index 96852b4..b3c40eb 100644 --- a/src/ssr-components/Main.jsx +++ b/src/ssr-components/Main.jsx @@ -8,6 +8,7 @@ import React from 'react'; import ReactDOM from 'react-dom/server'; +import { getTTag } from '../core/ttag'; import Html from './Html'; /* this one is set by webpack */ // eslint-disable-next-line import/no-unresolved @@ -45,12 +46,13 @@ function generateMainPage(countryCoords: Cell, lang: string): string { const scripts = (assets[`client-${lang}`]) ? assets[`client-${lang}`].js.map((s) => ASSET_SERVER + s) : defaultScripts; + const { t } = getTTag(lang); // eslint-disable-next-line const html = ReactDOM.renderToStaticMarkup( ( - -

Reset Password

-

Hello {name}, you can set your new password here:

- - - - - -); +import { getTTag } from '../core/ttag'; -const PasswordResetError = ({ message }) => ( -
-

Reset Password

-

{message}

-

Click here to go back to pixelplanet

-
-); +export default function getPasswordResetHtml(name, code, lang, message = null) { + const { t } = getTTag(lang); + + let body = ''; + + if (message) { + body = ( +
+

{t`Reset Password`}

+

{message}

+

{t`Click here`}  + {t`to go back to pixelplanet`}

+
+ ); + } else { + body = ( +
+

{t`Reset Password`}

+

{t`Hello ${name}, you can set your new password here:`}

+ + + + +
+ ); + } + + const title = t`PixelPlanet.fun Password Reset`; + const description = t`Reset your password here`; -export default function getPasswordResetHtml(name, code, message = null) { - const title = 'PixelPlanet.fun Password Reset'; - const description = 'reset your password here'; - const body = (message) - ? - : ; const index = `${ ReactDOM.renderToStaticMarkup()}`; return index; } diff --git a/src/ssr-components/RedirectionPage.jsx b/src/ssr-components/RedirectionPage.jsx index 405761d..391b436 100644 --- a/src/ssr-components/RedirectionPage.jsx +++ b/src/ssr-components/RedirectionPage.jsx @@ -7,17 +7,22 @@ import React from 'react'; import ReactDOM from 'react-dom/server'; import Html from './Html'; -const RedirectionPage = ({ text, host }) => ( -
-

{text}

-

You will be automatically redirected after 15s

-

Or Click here to go back to pixelplanet

-
-); +import { getTTag } from '../core/ttag'; -function getHtml(description, text, host) { - const title = 'PixelPlanet.fun Accounts'; - const body = ; +function getHtml(description, text, host, lang) { + const { jt, t } = getTTag(lang); + + const clickHere = {t`Click here`}; + + const body = ( +
+

{text}

+

{t`You will be automatically redirected after 15s`}

+

{jt`Or ${clickHere} to go back to pixelplanet`}

+
+ ); + + const title = t`PixelPlanet.fun Accounts`; // eslint-disable-next-line max-len const code = `window.setTimeout(function(){window.location.href="${host}";},15000)`; diff --git a/src/utils/validation.js b/src/utils/validation.js index e471b67..ba09a54 100644 --- a/src/utils/validation.js +++ b/src/utils/validation.js @@ -9,7 +9,7 @@ * @flow */ -import { t } from 'ttag/dist/mock'; +import { t } from 'ttag'; // eslint-disable-next-line no-useless-escape, max-len const mailTester = /^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;