a{8q1N>b2&fdWH(ETYr{(H;gW%kW5p4qjQ$hmpZRE8kW)T
z;~Z*$V)Da(CUe%%;(b}{10^O@%84;DuaoYWRuL^{Q8A!d&tdf#MnI(3=Zf%jLcGwk
zeFS7UQOaVQ6s)ZJMap<1`4ewuRy~o;`E!czYyZbgwvCUs36+7U?uW98OlQz+n7}>K
zWoRNob7V-DW+jbxn*bTrSU?2yNuf%g#0|gJcRQ+32zFwfjBu=5BkQlkYC{e*{2y&%
zsUPWtgDPSb8@#Cc2(e8?neBL9)2KeaG2g{v*h<+VC$@RL)81=4SjIj!FVlSnYGue<
zzbFZ@R#1@Mqfk;TTu1vzSEBWczH`@SE{q&+!IDl)CEHG6yf!`nmIN;?-@3+O&g>lD
zrM-^3YJTic^^o)#87_Q!szbKtpfG>P5>F9InnbKVg{G8p*5&}t{NT@HLO&(NG9{AD
zLk1lff=*nu8tKw&1@!>s_>!R4FluEKN`{y{vNFSij&$NO`j5-twZ1knDrX
z%^k&8v*N}~c*Sit-q^a?A4KD((?7hFsLfnJ*q5
PW&49};?J#h16KbAaK%Ji
literal 0
HcmV?d00001
diff --git a/i18n/de.po b/i18n/de.po
index 9e73439..c1eede1 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 9e73439..0000000
--- 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 b527fed..7e84f19 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 d43ee10..7a72efb 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 085b826..e404013 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 bd90103..800dacd 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}
>
diff --git a/src/components/Chat.jsx b/src/components/Chat.jsx
index 3b5bb8f..c4122da 100644
--- a/src/components/Chat.jsx
+++ b/src/components/Chat.jsx
@@ -8,6 +8,7 @@ import React, {
} from 'react';
import useStayScrolled from 'react-stay-scrolled';
import { connect } from 'react-redux';
+import { t } from 'ttag';
import type { State } from '../reducers';
import ChatMessage from './ChatMessage';
@@ -139,6 +140,7 @@ const Chat = ({
);
}}
role="button"
+ title={t`Channel settings`}
tabIndex={-1}
>⚙
@@ -147,6 +149,7 @@ const Chat = ({
↷
)}
@@ -162,7 +165,7 @@ const Chat = ({
&& (
@@ -194,7 +197,7 @@ const Chat = ({
id="chatmsginput"
maxLength="200"
type="text"
- placeholder="Chat here"
+ placeholder={t`Chat here`}
/>
- You must be logged in to chat
+ {t`You must be logged in to chat`}
)}
diff --git a/src/components/ChatButton.jsx b/src/components/ChatButton.jsx
index ecf9862..b399c15 100644
--- a/src/components/ChatButton.jsx
+++ b/src/components/ChatButton.jsx
@@ -8,6 +8,7 @@ import React, {
} from 'react';
import { connect } from 'react-redux';
import { MdForum } from 'react-icons/md';
+import { t } from 'ttag';
import { showChatModal } from '../actions';
@@ -57,6 +58,7 @@ const ChatButton = ({
className="actionbuttons"
onClick={open}
role="button"
+ title={(chatOpen) ? t`Close Chat` : t`Open Chat`}
tabIndex={0}
>
{(unreadAny) && (
diff --git a/src/components/CoordinatesBox.jsx b/src/components/CoordinatesBox.jsx
index 74d028a..d5064c2 100644
--- a/src/components/CoordinatesBox.jsx
+++ b/src/components/CoordinatesBox.jsx
@@ -5,6 +5,8 @@
import React from 'react';
import { connect } from 'react-redux';
+import { t } from 'ttag';
+
import copy from '../utils/clipboard';
import { notify } from '../actions';
@@ -21,7 +23,7 @@ const CoordinatesBox = ({ view, hover, notifyCopy }) => (
className="coorbox"
onClick={() => { copy(window.location.hash); notifyCopy(); }}
role="button"
- title="Copy to Clipboard"
+ title={t`Copy to Clipboard`}
tabIndex="0"
>{
renderCoordinates(hover
diff --git a/src/components/DownloadButton.jsx b/src/components/DownloadButton.jsx
index d587457..cb9b208 100644
--- a/src/components/DownloadButton.jsx
+++ b/src/components/DownloadButton.jsx
@@ -7,6 +7,7 @@ import React from 'react';
import { connect } from 'react-redux';
import { MdFileDownload } from 'react-icons/md';
import fileDownload from 'js-file-download';
+import { t } from 'ttag';
import { getRenderer } from '../ui/renderer';
@@ -33,6 +34,7 @@ const DownloadButton = ({ view }) => (
id="downloadbutton"
className="actionbuttons"
role="button"
+ title={t`Make Screenshot`}
tabIndex={0}
onClick={() => download(view)}
>
diff --git a/src/components/ExpandMenuButton.jsx b/src/components/ExpandMenuButton.jsx
index e2305af..5bbf80d 100644
--- a/src/components/ExpandMenuButton.jsx
+++ b/src/components/ExpandMenuButton.jsx
@@ -7,6 +7,7 @@
import React from 'react';
import { connect } from 'react-redux';
import { MdExpandMore, MdExpandLess } from 'react-icons/md';
+import { t } from 'ttag';
import { toggleOpenMenu } from '../actions';
@@ -15,6 +16,7 @@ const ExpandMenuButton = ({ menuOpen, expand }) => (
id="menubutton"
className="actionbuttons"
role="button"
+ title={(menuOpen) ? t`Close Menu` : t`Open Menu`}
tabIndex={-1}
onClick={expand}
>
diff --git a/src/components/GlobeButton.jsx b/src/components/GlobeButton.jsx
index 9222aa3..084c84b 100644
--- a/src/components/GlobeButton.jsx
+++ b/src/components/GlobeButton.jsx
@@ -6,6 +6,7 @@
import React from 'react';
import { connect } from 'react-redux';
import { Md3DRotation } from 'react-icons/md';
+import { t } from 'ttag';
import type { State } from '../reducers';
@@ -27,6 +28,7 @@ const GlobeButton = ({
role="button"
tabIndex={-1}
id="globebutton"
+ title={t`Globe View`}
className="actionbuttons"
onClick={() => globe(canvasId, canvasIdent, canvasSize, view)}
>
diff --git a/src/components/HelpButton.jsx b/src/components/HelpButton.jsx
index 158659e..a50aed0 100644
--- a/src/components/HelpButton.jsx
+++ b/src/components/HelpButton.jsx
@@ -6,6 +6,7 @@
import React from 'react';
import { connect } from 'react-redux';
import { FaQuestion } from 'react-icons/fa';
+import { t } from 'ttag';
import { showHelpModal } from '../actions';
@@ -16,6 +17,7 @@ const HelpButton = ({ open }) => (
className="actionbuttons"
onClick={open}
role="button"
+ title={t`Help`}
tabIndex={-1}
>
diff --git a/src/components/HelpModal.jsx b/src/components/HelpModal.jsx
index 90b6fdf..2729be3 100644
--- a/src/components/HelpModal.jsx
+++ b/src/components/HelpModal.jsx
@@ -4,77 +4,113 @@
*/
import React from 'react';
+import { c, t, jt } from 'ttag';
+import { GiMouse } from 'react-icons/gi';
+import { MdTouchApp } from 'react-icons/md';
/* eslint-disable max-len */
-const HelpModal = () => (
-
-
Place color pixels on a large canvas with other players online!
- 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.
- Higher zoomlevels take some time to update, the 3D globe gets updated at least once per day.
- Have fun!
- Guilded (recommended): pixelplanet.fun/guilded
- Source on github
- Reddit: r/PixelPlanetFun
- Map Data
- The bare map data that we use, together with converted OpenStreetMap tiles for orientation,
- can be downloaded from mega.nz here: pixelplanetmap.zip (422MB)
- Detected as Proxy?
- If you got detected as proxy, but you are none, please send us an e-mail with your IP to pixelplanetdev@gmail.com . Do not post your IP anywhere else. We are sorry for the inconvenience.
- 2D Controls
- Click a color in palette to select
- Press G to toggle grid
- Press X to toggle showing of pixel activity
- Press H to toggle historical view
- Press R to copy coordinates
- Press Q or E to zoom
- Press W ,A ,S , D to move
- Press ↑ ,← ,↓ , → to move
- Drag mouse to move
- Scroll mouse wheel to zoom
- Click middle mouse button to current hovering color
- Hold left shift for placing while moving mouse
- Hold right shift for placing while moving mouse according to historical view
- Pinch to zoom (on touch devices)
- Pan to move (on touch devices)
- Click or tap to place a pixel
- 3D Controls
- Press W ,A ,S , D to move
- Press ↑ ,← ,↓ , → to move
- Press E and C to fly up and down
- Scroll mouse wheel to zoom
- Left click and drag mouse to rotate
- Middle click and drag mouse to zoom
- Right click and drag mouse to pan
- Left Click or tap to place a pixel
- Right Click of double tap to remove a pixel
- Partners: crazygames.com
- { (typeof window.hcaptcha === 'undefined')
- ? (
-
- This site is protected by reCAPTCHA and the Google
- Privacy Policy and
- Terms of Service apply.
-
-
- ) : (
-
- This site is protected by hCAPTCHA and its
- Privacy Policy and
- Terms of Service apply.
-
-
- )}
-
-);
+const HelpModal = () => {
+ const bindG = {c('keybinds').t`G`} ;
+ const bindX = {c('keybinds').t`X`} ;
+ const bindH = {c('keybinds').t`H`} ;
+ const bindR = {c('keybinds').t`R`} ;
+ const bindQ = {c('keybinds').t`Q`} ;
+ const bindE = {c('keybinds').t`E`} ;
+ const bindW = {c('keybinds').t`W`} ;
+ const bindA = {c('keybinds').t`A`} ;
+ const bindS = {c('keybinds').t`S`} ;
+ const bindD = {c('keybinds').t`D`} ;
+ const bindAUp = ↑ ;
+ const bindALeft = ← ;
+ const bindADown = ↓ ;
+ const bindARight = → ;
+ const mouseSymbol = ;
+ const touchSymbol = ;
+ const bindShift = ⇧ {c('keybinds').t`Shift`} ;
+ const bindC = {c('keybinds').t`C`} ;
+
+ const hCaptchaPP = {t`Privacy Policy`} ;
+ const reCaptchaPP = {t`Privacy Policy`} ;
+ const hCaptchaTOS = {t`Terms of Service`} ;
+ const reCaptchaTOS = {t`Terms of Service`} ;
+
+ const guildedLink = guilded ;
+ const getIPLink = {t`your IP`} ;
+ const mailLink = pixelplanetdev@gmail.com ;
+
+ return (
+
+
+ {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.`}
+
+ 2D {t`Controls`}
+
+ {t`Click a color in palette to select it`}
+ {jt`Press ${bindG} to toggle grid`}
+ {jt`Press ${bindX} to toggle showing of pixel activity`}
+ {jt`Press ${bindH} to toggle historical view`}
+ {jt`Press ${bindR} to copy coordinates`}
+ {jt`Press ${bindQ} or ${bindE} to zoom`}
+ {jt`Press ${bindW}, ${bindA}, ${bindS}, ${bindD} to move`}
+ {jt`Press ${bindAUp}, ${bindALeft}, ${bindADown}, ${bindARight} to move`}
+ {jt`Drag ${mouseSymbol} mouse or ${touchSymbol} pan to move`}
+ {jt`Scroll ${mouseSymbol} mouse wheel or ${touchSymbol} pinch to zoom`}
+ {jt`Hold left ${bindShift} for placing while moving mouse`}
+ {jt`Hold right ${bindShift} for placing while moving mouse according to historical view`}
+ {jt`${mouseSymbol} Left click or ${touchSymbol} tap to place a pixel`}
+ {jt`Click ${mouseSymbol} middle mouse button or ${touchSymbol} long-tap to select current hovering color`}
+
+ 3D {t`Controls`}
+
+ {jt`Press ${bindW}, ${bindA}, ${bindS}, ${bindD} to move`}
+ {jt`Press ${bindAUp}, ${bindALeft}, ${bindADown}, ${bindARight} to move`}
+ {jt`Press ${bindE} and ${bindC} to fly up and down`}
+ {jt`${mouseSymbol} Hold left mouse button and drag mouse to rotate`}
+ {jt`${mouseSymbol} Scroll mouse wheel or hold ${mouseSymbol} middle mouse button and drag to zoom`}
+ {jt`${mouseSymbol} Right click and drag mouse to pan`}
+ {jt`${mouseSymbol} Left click or ${touchSymbol} tap to place a pixel`}
+ {jt`${mouseSymbol} Right click or ${touchSymbol} double-tap to remove a pixel`}
+ {jt`Click ${mouseSymbol} middle mouse button or ${touchSymbol} long-tap to select current hovering color`}
+
+ {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.`}
+
+
+ )}
+