diff --git a/i18n/de.mo b/i18n/de.mo
new file mode 100644
index 00000000..bf8b255d
Binary files /dev/null and b/i18n/de.mo differ
diff --git a/i18n/de.po b/i18n/de.po
index 9e73439c..c1eede18 100644
--- a/i18n/de.po
+++ b/i18n/de.po
@@ -3,11 +3,372 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Plural-Forms: nplurals = 2; plural = (n != 1);\n"
"Language: de\n"
-"MIME-Version: 1.0\n"
+"mime-version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"X-Generator: Poedit 2.3\n"
-#: src/components/ForgotPasswordModal.jsx:20
-#: src/components/RegisterModal.jsx:21
+#: src/components/ForgotPasswordModal.jsx:20 src/components/RegisterModal.jsx:21
#: src/components/UserAreaModal.jsx:128
msgid "Consider joining us on Guilded:"
-msgstr "Sprich zu uns und anderen Spielern auf guilded:"
+msgstr "Triff uns und andere Spieler auf guilded:"
+
+#: src/components/HelpModal.jsx:63 src/components/HelpModal.jsx:80
+msgid "Controls"
+msgstr "Steuerung"
+
+#: src/components/HelpModal.jsx:65
+msgid "Click a color in palette to select it"
+msgstr "Klicke auf eine Farbe in der Palette um sie auszuwählen"
+
+#: src/components/HelpModal.jsx:66
+#, javascript-format
+msgid "Press ${ bindG } to toggle grid"
+msgstr "Drücke ${ bindG } um das Raster ein- und auszuschalten"
+
+#: src/components/HelpModal.jsx:34 src/components/HelpModal.jsx:35
+msgid "Privacy Policy"
+msgstr "Datenschutzerklärung"
+
+#: src/components/HelpModal.jsx:36 src/components/HelpModal.jsx:37
+msgid "Terms of Service"
+msgstr "Nutzungsbedingungen"
+
+#: src/components/HelpModal.jsx:40
+msgid "your IP"
+msgstr "deine IP"
+
+#: src/components/HelpModal.jsx:46
+msgid "Place color pixels on a large canvas with other players online!"
+msgstr "Zeichne gemeinsam mit anderen Spielern auf einer großen Leinwand online!"
+
+#: src/components/HelpModal.jsx:52
+msgid "Have fun!"
+msgstr "Viel Spaß!"
+
+#: src/components/HelpModal.jsx:54
+msgid "recommended"
+msgstr "empfohlen"
+
+#: src/components/HelpModal.jsx:55
+msgid "Source on "
+msgstr "Quelltext auf "
+
+#: src/components/HelpModal.jsx:56
+msgid "Map Data"
+msgstr "Karten Dateien"
+
+#: src/components/HelpModal.jsx:59
+msgid "Detected as Proxy?"
+msgstr "Als Proxy erkannt?"
+
+#: src/components/HelpModal.jsx:61
+#, javascript-format
+msgid ""
+"If you got detected as proxy, but you are none, please go to our ${ guildedLink } "
+"or send us an e-mail with ${ getIPLink } to ${ mailLink }. Do not post your IP "
+"anywhere else. We are sorry for the inconvenience."
+msgstr ""
+"Solltest do als Proxy erkannt sein, aber du benutzt keines, bitte kontaktiere uns "
+"auf ${ guildedLink } oder sende uns eine Mail mit ${ getIPLink } auf "
+"${ mailLink }. Sende deine IP zu niemanden sonst. Wir entschuldigen uns für die "
+"Unannehmlichkeiten."
+
+#: src/components/HelpModal.jsx:67
+msgid "Press ${ bindX } to toggle showing of pixel activity"
+msgstr "Drücke ${ bindX } um Pixel Aktivität anzuzeigen"
+
+#: src/components/HelpModal.jsx:68
+#, javascript-format
+msgid "Press ${ bindH } to toggle historical view"
+msgstr "Drücke ${ bindH } um zur historischen Ansicht zu wechseln"
+
+#: src/components/HelpModal.jsx:69
+msgid "Press ${ bindR } to copy coordinates"
+msgstr "Drücke ${ bindR } um aktuelle Koordinaten zu kopieren"
+
+#: src/components/HelpModal.jsx:70
+#, javascript-format
+msgid "Press ${ bindQ } or ${ bindE } to zoom"
+msgstr "Drücke ${ bindQ } oder ${ bindE } um zu zoomen"
+
+#: src/components/HelpModal.jsx:71 src/components/HelpModal.jsx:82
+#, javascript-format
+msgid "Press ${ bindW }, ${ bindA }, ${ bindS }, ${ bindD } to move"
+msgstr "Drücke ${ bindW }, ${ bindA }, ${ bindS }, ${ bindD } zum navigieren"
+
+#: src/components/HelpModal.jsx:72 src/components/HelpModal.jsx:83
+#, javascript-format
+msgid "Press ${ bindAUp }, ${ bindALeft }, ${ bindADown }, ${ bindARight } to move"
+msgstr ""
+"Drücke ${ bindAUp }, ${ bindALeft }, ${ bindADown }, ${ bindARight } zum "
+"navigieren"
+
+#: src/components/HelpModal.jsx:73
+msgid "Drag ${ mouseSymbol } mouse or ${ touchSymbol } pan to move"
+msgstr ""
+"Ziehe mit der ${ mouseSymbol } Maus oder ${ touchSymbol } wische zum navigieren"
+
+#: src/components/HelpModal.jsx:74
+#, javascript-format
+msgid "Scroll ${ mouseSymbol } mouse wheel or ${ touchSymbol } pinch to zoom"
+msgstr ""
+"Scrolle ${ mouseSymbol } mit them Mausrad oder ${ touchSymbol } benutze Zwei-"
+"Finger-Zoom um zu zoomen"
+
+#: src/components/HelpModal.jsx:75
+msgid "Hold left ${ bindShift } for placing while moving mouse"
+msgstr ""
+"Halte die linke ${ bindShift } Taste gedrückt um Pixel unter der Maus zu setzen"
+
+#: src/components/HelpModal.jsx:76
+#, javascript-format
+msgid ""
+"Hold right ${ bindShift } for placing while moving mouse according to historical "
+"view"
+msgstr ""
+"Halte die rechte ${ bindShift } Taste gedrückt um Pixel unter der Maus nach der "
+"aktuellen historischen Ansicht zu setzen"
+
+#: src/components/HelpModal.jsx:78 src/components/HelpModal.jsx:90
+msgid ""
+"Click ${ mouseSymbol } middle mouse button or ${ touchSymbol } long-tap to select "
+"current hovering color"
+msgstr ""
+"Klicke ${ mouseSymbol } die mittlere Maustaste oder ${ touchSymbol } tippe lange "
+"um eine Farbe von der Leinwand auszuwählen"
+
+#: src/components/HelpModal.jsx:84
+msgid "Press ${ bindE } and ${ bindC } to fly up and down"
+msgstr "Drücke ${ bindE } oder ${ bindC } um hoch und runter zu fliegen"
+
+#: src/components/HelpModal.jsx:85
+#, javascript-format
+msgid "${ mouseSymbol } Hold left mouse button and drag mouse to rotate"
+msgstr "${ mouseSymbol } Halte die linke Maustaste gedrückt und ziehe um zu rotieren"
+
+#: src/components/HelpModal.jsx:86
+#, javascript-format
+msgid ""
+"${ mouseSymbol } Scroll mouse wheel or hold ${ mouseSymbol } middle mouse button "
+"and drag to zoom"
+msgstr ""
+"${ mouseSymbol } Scrolle mit dem Mausrad oder halte ${ mouseSymbol } die mittlere "
+"Maustaste gedrückt und ziehe um zu zoomen"
+
+#: src/components/HelpModal.jsx:87
+msgid "${ mouseSymbol } Right click and drag mouse to pan"
+msgstr ""
+"${ mouseSymbol } Halte die rechte Maustaste gedrückt und ziehe um dich zu bewegen"
+
+#: src/components/HelpModal.jsx:77 src/components/HelpModal.jsx:88
+#, javascript-format
+msgid "${ mouseSymbol } Left click or ${ touchSymbol } tap to place a pixel"
+msgstr ""
+"${ mouseSymbol } Linksklick oder ${ touchSymbol } tippe um ein Pixel zu platzieren"
+
+#: src/components/HelpModal.jsx:89
+#, javascript-format
+msgid ""
+"${ mouseSymbol } Right click or ${ touchSymbol } double-tap to remove a pixel"
+msgstr ""
+"${ mouseSymbol } Rechtsklick oder ${ touchSymbol } tippe zweimal um ein Voxel zu "
+"entfernen"
+
+#: src/components/HelpModal.jsx:92
+msgid "Partners:"
+msgstr "Partner:"
+
+#: src/components/HelpModal.jsx:97
+#, javascript-format
+msgid ""
+"This site is protected by reCAPTCHA and the Google ${ reCaptchaPP } and "
+"${ reCaptchaTOS } apply."
+msgstr ""
+"Diese Seite ist mit Google reCaptcha geschützt und deren ${ reCaptchaPP } und "
+"${ reCaptchaTOS } gelten."
+
+#: src/components/HelpModal.jsx:103
+msgid ""
+"This site is protected by hCAPTCHA and its ${ hCaptchaPP } and ${ hCaptchaTOS } "
+"apply."
+msgstr ""
+"Diese Seite ist mit hCaptcha geschützt und deren ${ hCaptchaPP } und "
+"${ hCaptchaTOS } gelten."
+
+#: src/components/HelpModal.jsx:113
+msgid "Welcome to PixelPlanet.fun"
+msgstr "Willkommen auf PixelPlanet.fun"
+
+#: src/components/HelpModal.jsx:47
+msgid ""
+"Our main canvas is a huge worldmap, you can place wherever you like, but you will "
+"have to wait a specific Cooldown between pixels. You can check out the cooldown "
+"and requiremnts on the Canvas Selection menu (globe button on top). Some canvases "
+"have a different cooldown for replacing a user-set pixels than placing on a unset "
+"pixel. i.e. 4s/7s means 4s on fresh pixels and 7s on already set pixels."
+msgstr ""
+"Unsere standard Leinwand ist eine große Weltkarte. Pixel können überall gesetzen "
+"werden, aber es kann nur eine begrenzte Anzahl and Pixels per Zeit platziert "
+"werden. Die Vorraussetzungen und die Wartezeit sind im Auswahlmenu zu sehen "
+"(Globus Taste am oberen Bildschirmrand). Manche Leinwände haben eine niedrigere "
+"Wartezeit für ungesetzte Pixel im Vergleich zu von anderen Spielern gesetzte "
+"Pixel. z.B. 4s/7s heißt dass man 4s für jedes neue Pixel warten muss, allerdings "
+"7s wenn man über ein Pixel eines anderen Spielers setzt."
+
+#: src/components/HelpModal.jsx:51
+msgid ""
+"Higher zoomlevels take some time to update, the 3D globe gets updated at least "
+"once per day."
+msgstr ""
+"Die höheren Zoomlevel brauchen etwas Zeit um aktualisiert zu werden, der 3D "
+"Globus wird mindestens einmal pro tag neu geladen."
+
+#: src/components/HelpModal.jsx:57
+msgid ""
+"The bare map data that we use, together with converted OpenStreetMap tiles for "
+"orientation, can be downloaded from mega.nz here: "
+msgstr ""
+"Die Kartendaten welche wir benutzen, zusammen mit konvertierten OpenStreetMap "
+"Kacheln zur orientierung können auf mega.nz heruntergeladen werden: "
+
+#: src/components/CanvasSwitchButton.jsx:20
+msgid "Canvas Selection"
+msgstr "Leinwand auswahl"
+
+#: src/components/Chat.jsx:143
+msgid "Channel settings"
+msgstr "Channel Einstellungen"
+
+#: src/components/Chat.jsx:152
+msgid "maximize"
+msgstr "maximieren"
+
+#: src/components/Chat.jsx:168
+msgid "Start chatting here"
+msgstr "Beginne hier zu chatten"
+
+#: src/components/Chat.jsx:200
+msgid "Chat here"
+msgstr "Chatte hier"
+
+#: src/components/ChatButton.jsx:61
+msgid "Close Chat"
+msgstr "Schließe Chat"
+
+#: src/components/ChatButton.jsx:61
+msgid "Open Chat"
+msgstr "Öffne Chat"
+
+#: 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/ExpandMenuButton.jsx:19
+msgid "Close Menu"
+msgstr "Schließe Menü"
+
+#: src/components/ExpandMenuButton.jsx:19
+msgid "Open Menu"
+msgstr "Öffne Menü"
+
+#: src/components/GlobeButton.jsx:31
+msgid "Globe View"
+msgstr "Globus Ansicht"
+
+#: src/components/HelpButton.jsx:20
+msgid "Help"
+msgstr "Hilfe"
+
+#: src/components/LogInButton.jsx:20
+msgid "User Area"
+msgstr "Spielerbereich"
+
+#: src/components/OnlineBox.jsx:21
+msgid "User online"
+msgstr "Spieler anwesend"
+
+#: src/components/OnlineBox.jsx:23
+msgid "Pixel gesetzt"
+msgstr "Pixel plaziert"
+
+#: src/components/PalselButton.jsx:25
+msgid "Close Palette"
+msgstr "Schließe Palette"
+
+#: src/components/PalselButton.jsx:25
+msgid "Open Palette"
+msgstr "Öffne Palette"
+
+#: src/components/SettingsButton.jsx:20
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: src/components/HelpModal.jsx:15
+msgctxt "keybinds"
+msgid "G"
+msgstr ""
+
+#: src/components/HelpModal.jsx:16
+msgctxt "keybinds"
+msgid "X"
+msgstr ""
+
+#: src/components/HelpModal.jsx:17
+msgctxt "keybinds"
+msgid "H"
+msgstr ""
+
+#: src/components/HelpModal.jsx:18
+msgctxt "keybinds"
+msgid "R"
+msgstr ""
+
+#: src/components/HelpModal.jsx:19
+msgctxt "keybinds"
+msgid "Q"
+msgstr ""
+
+#: src/components/HelpModal.jsx:21
+msgctxt "keybinds"
+msgid "W"
+msgstr ""
+
+#: src/components/HelpModal.jsx:22
+msgctxt "keybinds"
+msgid "A"
+msgstr ""
+
+#: src/components/HelpModal.jsx:23
+msgctxt "keybinds"
+msgid "S"
+msgstr ""
+
+#: src/components/HelpModal.jsx:24
+msgctxt "keybinds"
+msgid "D"
+msgstr ""
+
+#: src/components/HelpModal.jsx:20
+msgctxt "keybinds"
+msgid "E"
+msgstr ""
+
+#: src/components/HelpModal.jsx:31
+msgctxt "keybinds"
+msgid "Shift"
+msgstr ""
+
+#: src/components/HelpModal.jsx:32
+msgctxt "keybinds"
+msgid "C"
+msgstr ""
diff --git a/i18n/es.po b/i18n/es.po
deleted file mode 100644
index 9e73439c..00000000
--- a/i18n/es.po
+++ /dev/null
@@ -1,13 +0,0 @@
-msgid ""
-msgstr ""
-"Content-Type: text/plain; charset=utf-8\n"
-"Plural-Forms: nplurals = 2; plural = (n != 1);\n"
-"Language: de\n"
-"MIME-Version: 1.0\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: src/components/ForgotPasswordModal.jsx:20
-#: src/components/RegisterModal.jsx:21
-#: src/components/UserAreaModal.jsx:128
-msgid "Consider joining us on Guilded:"
-msgstr "Sprich zu uns und anderen Spielern auf guilded:"
diff --git a/scripts/bundle.js b/scripts/bundle.js
index b527fedb..7e84f193 100644
--- a/scripts/bundle.js
+++ b/scripts/bundle.js
@@ -41,11 +41,11 @@ async function bundle() {
const regex = /core-js\/fn\/set-immediate/g;
const files = [
path.resolve(
- '..', 'node_modules',
+ __dirname, '..', 'node_modules',
'image-q', 'dist', 'esm', 'basicAPI.js',
),
path.resolve(
- '..', 'node_modules',
+ __dirname, '..', 'node_modules',
'image-q', 'dist', 'esm', 'helper.js',
),
];
diff --git a/scripts/minifyCss.js b/scripts/minifyCss.js
index d43ee106..7a72efb8 100644
--- a/scripts/minifyCss.js
+++ b/scripts/minifyCss.js
@@ -25,7 +25,7 @@ async function minifyCss() {
console.log('Minifying css');
const assets = {};
FILES.forEach((file) => {
- const input = fs.readFileSync(`${FOLDER}/${file}`, 'utf8');
+ const input = fs.readFileSync(path.resolve(FOLDER, file), 'utf8');
const options = {};
const output = new CleanCSS(options).minify(input);
if (output.warnings && output.warnings.length > 0) {
@@ -44,11 +44,11 @@ async function minifyCss() {
const hash = crypto.createHash('md5').update(output.styles).digest('hex');
const key = file.substr(0, file.indexOf('.'));
const filename = `${key}.${hash.substr(0, 8)}.css`;
- fs.writeFileSync(`${assetdir}/${filename}`, output.styles, 'utf8');
+ fs.writeFileSync(path.resolve(assetdir,filename), output.styles, 'utf8');
assets[key] = `/assets/${filename}`;
});
const json = JSON.stringify(assets);
- fs.writeFileSync(`${builddir}/styleassets.json`, json);
+ fs.writeFileSync(path.resolve(builddir, styleassets.json), json);
}
export default minifyCss;
diff --git a/src/components/Admintools.jsx b/src/components/Admintools.jsx
index 085b826e..e4040134 100644
--- a/src/components/Admintools.jsx
+++ b/src/components/Admintools.jsx
@@ -1,6 +1,5 @@
/*
- * Html for adminpage
- *
+ * Admintools
* @flow
*/
diff --git a/src/components/CanvasSwitchButton.jsx b/src/components/CanvasSwitchButton.jsx
index bd90103b..800dacd7 100644
--- a/src/components/CanvasSwitchButton.jsx
+++ b/src/components/CanvasSwitchButton.jsx
@@ -6,6 +6,7 @@
import React from 'react';
import { connect } from 'react-redux';
import { FaGlobe } from 'react-icons/fa';
+import { t } from 'ttag';
import { showCanvasSelectionModal } from '../actions';
@@ -16,6 +17,7 @@ const CanvasSwitchButton = ({ open }) => (
className="actionbuttons"
onClick={open}
role="button"
+ title={t`Canvas Selection`}
tabIndex={-1}
>
+
+ {t`Place color pixels on a large canvas with other players online!`}
+ {t`Our main canvas is a huge worldmap, you can place wherever you like, but you will have to wait a specific \
+Cooldown between pixels. You can check out the cooldown and requiremnts on the Canvas Selection menu (globe button on top). \
+Some canvases have a different cooldown for replacing a user-set pixels than placing on a unset pixel. i.e. 4s/7s means 4s on fresh \
+pixels and 7s on already set pixels.`}
+ {t`Higher zoomlevels take some time to update, the 3D globe gets updated at least once per day.`}
+ {t`Have fun!`}
+
Guilded ({t`recommended`}): pixelplanet.fun/guilded
+{t`Source on `}github
+{t`Map Data`}
+{t`The bare map data that we use, together with converted OpenStreetMap tiles for orientation, \ +can be downloaded from mega.nz here: `}pixelplanetmap.zip (422MB)
+{t`Detected as Proxy?`}
+{jt`If you got detected as proxy, but you are none, please go to our ${guildedLink} or send us an e-mail with ${getIPLink} to ${mailLink}. Do not post your IP anywhere else. We are sorry for the inconvenience.`}
+{t`Partners:`} crazygames.com
+ { (typeof window.hcaptcha === 'undefined') + ? ( ++ + {jt`This site is protected by reCAPTCHA and the Google ${reCaptchaPP} and ${reCaptchaTOS} apply.`} + +
+ ) : ( ++ + {jt`This site is protected by hCAPTCHA and its ${hCaptchaPP} and ${hCaptchaTOS} apply.`} + +
+ )} + + ); +}; const data = { content: HelpModal, - title: 'Welcome to PixelPlanet.fun', + title: t`Welcome to PixelPlanet.fun`, }; export default data; diff --git a/src/components/LogInButton.jsx b/src/components/LogInButton.jsx index 1a4e333a..b4054a4a 100644 --- a/src/components/LogInButton.jsx +++ b/src/components/LogInButton.jsx @@ -6,6 +6,7 @@ import React from 'react'; import { connect } from 'react-redux'; import { MdPerson } from 'react-icons/md'; +import { t } from 'ttag'; import { showUserAreaModal } from '../actions'; @@ -16,6 +17,7 @@ const LogInButton = ({ open }) => ( className="actionbuttons" onClick={open} role="button" + title={t`User Area`} tabIndex={-1} >