Browse Source

Added version to footer. CSS and locale fixes.

master
Mike Cao 1 year ago
parent
commit
6bbe7800c2
16 changed files with 276 additions and 268 deletions
  1. +1
    -0
      components/common/LanguageButton.js
  2. +4
    -0
      components/common/LanguageButton.module.css
  3. +1
    -1
      components/common/UserButton.js
  4. +5
    -0
      components/common/UserButton.module.css
  5. +8
    -9
      components/layout/Footer.js
  6. +1
    -1
      components/layout/Footer.module.css
  7. +15
    -17
      components/layout/Header.js
  8. +2
    -8
      components/layout/Header.module.css
  9. +3
    -3
      components/settings/WebsiteSettings.js
  10. +220
    -220
      lang/de-DE.json
  11. +2
    -2
      lang/en.json
  12. +1
    -1
      lang/tr-TR.json
  13. +1
    -1
      lang/zh-CN.json
  14. +5
    -5
      lib/lang.js
  15. +4
    -0
      next.config.js
  16. +3
    -0
      package.json

+ 1
- 0
components/common/LanguageButton.js View File

@ -32,6 +32,7 @@ export default function LanguageButton({ menuPosition = 'bottom', menuAlign = 'l
</Button>
{showMenu && (
<Menu
className={styles.menu}
options={menuOptions}
onSelect={handleSelect}
float={menuPosition}


+ 4
- 0
components/common/LanguageButton.module.css View File

@ -3,3 +3,7 @@
position: relative;
cursor: pointer;
}
.menu {
z-index: 100;
}

+ 1
- 1
components/common/UserButton.js View File

@ -46,7 +46,7 @@ export default function UserButton() {
return (
<div ref={ref} className={styles.container}>
<div onClick={() => setShowMenu(state => !state)}>
<div className={styles.button} onClick={() => setShowMenu(state => !state)}>
<Icon icon={<User />} size="large" />
<Icon icon={<Chevron />} size="small" />
</div>


+ 5
- 0
components/common/UserButton.module.css View File

@ -4,6 +4,11 @@
cursor: pointer;
}
.button {
display: flex;
flex-wrap: nowrap;
}
.username {
border-bottom: 1px solid var(--gray500);
}


+ 8
- 9
components/layout/Footer.js View File

@ -1,23 +1,22 @@
import React from 'react';
import { FormattedMessage } from 'react-intl';
import Link from 'next/link';
import classNames from 'classnames';
import Button from 'components/common/Button';
import Logo from 'assets/logo.svg';
import styles from './Footer.module.css';
export default function Footer() {
const version = process.env.VERSION;
return (
<footer className="container">
<div className={classNames(styles.footer, 'row justify-content-center')}>
<FormattedMessage id="footer.powered-by" defaultMessage="powered by" />
<Link href="https://umami.is">
<a>
<Button className={styles.button} icon={<Logo />} size="small">
<b>umami</b>
</Button>
</a>
</Link>
<FormattedMessage id="footer.powered-by" defaultMessage="Powered by" />
<a href="https://umami.is">
<Button className={styles.button} icon={<Logo />} size="small">
<b>umami</b>
</Button>
</a>
<div>{`v${version}`}</div>
</div>
</footer>
);


+ 1
- 1
components/layout/Footer.module.css View File

@ -11,5 +11,5 @@
}
.button {
margin-left: 10px;
margin: 0 5px;
}

+ 15
- 17
components/layout/Header.js View File

@ -15,29 +15,27 @@ export default function Header() {
return (
<header className="container">
<div className={classNames(styles.header, 'row align-items-center')}>
<div className="col-12 col-md-6">
<div className="col-12 col-md-3">
<div className={styles.title}>
<Icon icon={<Logo />} size="large" className={styles.logo} />
<Link href={user ? '/' : 'https://umami.is'}>umami</Link>
</div>
</div>
<div className="col-12 col-md-6">
<div className={styles.nav}>
{user ? (
<>
<Link href="/dashboard">
<FormattedMessage id="header.nav.dashboard" defaultMessage="Dashboard" />
</Link>
<Link href="/settings">
<FormattedMessage id="header.nav.settings" defaultMessage="Settings" />
</Link>
<LanguageButton menuAlign="right" />
<UserButton />
</>
) : (
<div className="col-12 col-md-9">
{user ? (
<div className={styles.nav}>
<Link href="/dashboard">
<FormattedMessage id="header.nav.dashboard" defaultMessage="Dashboard" />
</Link>
<Link href="/settings">
<FormattedMessage id="header.nav.settings" defaultMessage="Settings" />
</Link>
<LanguageButton menuAlign="right" />
)}
</div>
<UserButton />
</div>
) : (
<LanguageButton menuAlign="right" />
)}
</div>
</div>
</header>


+ 2
- 8
components/layout/Header.module.css View File

@ -12,15 +12,14 @@
}
.nav {
list-style: none;
display: flex;
justify-content: flex-end;
align-items: center;
font-size: var(--font-size-normal);
font-weight: 600;
}
.nav > * {
font-size: var(--font-size-normal);
font-weight: 600;
margin-left: 40px;
}
@ -28,9 +27,4 @@
.title {
text-align: center;
}
.nav {
display: flex;
justify-content: space-evenly;
}
}

+ 3
- 3
components/settings/WebsiteSettings.js View File

@ -67,16 +67,16 @@ export default function WebsiteSettings() {
{
key: 'name',
label: <FormattedMessage id="label.name" defaultMessage="Name" />,
className: 'col-6 col-md-4',
className: 'col-6 col-xl-4',
},
{
key: 'domain',
label: <FormattedMessage id="label.domain" defaultMessage="Domain" />,
className: 'col-6 col-md-4',
className: 'col-6 col-xl-4',
},
{
key: 'action',
className: classNames(styles.buttons, 'col-12 col-md-4 pt-2 pt-md-0'),
className: classNames(styles.buttons, 'col-12 col-xl-4 pt-2 pt-xl-0'),
render: Buttons,
},
];


+ 220
- 220
lang/de-DE.json View File

@ -1,239 +1,239 @@
{
"active-users.message": {
"active-users.message": {
"defaultMessage": "{x} {x, plural, one {aktiver Besucher} other {aktive Besucher}}"
},
"button.add-account": {
"defaultMessage": "Konto hinzufügen"
},
"button.add-website": {
"defaultMessage": "Webseite hinzufügen"
},
"button.back": {
"defaultMessage": "Zurück"
},
"button.cancel": {
"defaultMessage": "Abbrechen"
},
"button.change-password": {
"defaultMessage": "Passwort ändern"
},
"button.copy-to-clipboard": {
},
"button.add-account": {
"defaultMessage": "Konto hinzufügen"
},
"button.add-website": {
"defaultMessage": "Webseite hinzufügen"
},
"button.back": {
"defaultMessage": "Zurück"
},
"button.cancel": {
"defaultMessage": "Abbrechen"
},
"button.change-password": {
"defaultMessage": "Passwort ändern"
},
"button.copy-to-clipboard": {
"defaultMessage": "In die Zwischenablage kopieren"
},
"button.delete": {
"defaultMessage": "Löschen"
},
"button.edit": {
"defaultMessage": "Bearbeiten"
},
"button.login": {
},
"button.delete": {
"defaultMessage": "Löschen"
},
"button.edit": {
"defaultMessage": "Bearbeiten"
},
"button.login": {
"defaultMessage": "Anmelden"
},
"button.more": {
"defaultMessage": "Mehr"
},
"button.save": {
"defaultMessage": "Speichern"
},
"button.view-details": {
},
"button.more": {
"defaultMessage": "Mehr"
},
"button.save": {
"defaultMessage": "Speichern"
},
"button.view-details": {
"defaultMessage": "Details anzeigen"
},
"footer.powered-by": {
"defaultMessage": "powered by"
},
"header.nav.dashboard": {
"defaultMessage": "Übersicht"
},
"header.nav.settings": {
"defaultMessage": "Einstellungen"
},
"label.administrator": {
"defaultMessage": "Administrator"
},
"label.confirm-password": {
"defaultMessage": "Passwort wiederholen"
},
"label.current-password": {
"defaultMessage": "Derzeitiges Passwort"
},
"label.domain": {
},
"footer.powered-by": {
"defaultMessage": "Powered by"
},
"header.nav.dashboard": {
"defaultMessage": "Übersicht"
},
"header.nav.settings": {
"defaultMessage": "Einstellungen"
},
"label.administrator": {
"defaultMessage": "Administrator"
},
"label.confirm-password": {
"defaultMessage": "Passwort wiederholen"
},
"label.current-password": {
"defaultMessage": "Derzeitiges Passwort"
},
"label.domain": {
"defaultMessage": "Domain"
},
"label.enable-share-url": {
},
"label.enable-share-url": {
"defaultMessage": "Freigabe-URL aktivieren"
},
"label.invalid": {
"defaultMessage": "Ungültig"
},
"label.invalid-domain": {
},
"label.invalid": {
"defaultMessage": "Ungültig"
},
"label.invalid-domain": {
"defaultMessage": "Ungültige Domain"
},
"label.last-days": {
"defaultMessage": "Letzten {x} Tage"
},
"label.last-hours": {
"defaultMessage": "Letzten {x} Stunden"
},
"label.logged-in-as": {
},
"label.last-days": {
"defaultMessage": "Letzten {x} Tage"
},
"label.last-hours": {
"defaultMessage": "Letzten {x} Stunden"
},
"label.logged-in-as": {
"defaultMessage": "Angemeldet als {username}"
},
"label.logout": {
"defaultMessage": "Abmelden"
},
"label.name": {
"defaultMessage": "Name"
},
"label.new-password": {
"defaultMessage": "Neues Passwort"
},
"label.password": {
"defaultMessage": "Passwort"
},
"label.passwords-dont-match": {
"defaultMessage": "Passwörter stimmen nicht überein"
},
"label.required": {
"defaultMessage": "Erforderlich"
},
"label.this-month": {
"defaultMessage": "Diesen Monat"
},
"label.this-week": {
"defaultMessage": "Diese Woche"
},
"label.this-year": {
"defaultMessage": "Dieses Jahr"
},
"label.today": {
"defaultMessage": "Heute"
},
"label.username": {
"defaultMessage": "Benutzername"
},
"message.confirm-delete": {
"defaultMessage": "Sind sie sich sicher {target} zu löschen?"
},
"message.copied": {
"defaultMessage": "In Zwischenablage kopiert!"
},
"message.delete-warning": {
},
"label.logout": {
"defaultMessage": "Abmelden"
},
"label.name": {
"defaultMessage": "Name"
},
"label.new-password": {
"defaultMessage": "Neues Passwort"
},
"label.password": {
"defaultMessage": "Passwort"
},
"label.passwords-dont-match": {
"defaultMessage": "Passwörter stimmen nicht überein"
},
"label.required": {
"defaultMessage": "Erforderlich"
},
"label.this-month": {
"defaultMessage": "Diesen Monat"
},
"label.this-week": {
"defaultMessage": "Diese Woche"
},
"label.this-year": {
"defaultMessage": "Dieses Jahr"
},
"label.today": {
"defaultMessage": "Heute"
},
"label.username": {
"defaultMessage": "Benutzername"
},
"message.confirm-delete": {
"defaultMessage": "Sind sie sich sicher {target} zu löschen?"
},
"message.copied": {
"defaultMessage": "In Zwischenablage kopiert!"
},
"message.delete-warning": {
"defaultMessage": "Alle zugehörigen Daten werden auch gelöscht."
},
"message.failure": {
"defaultMessage": "Es it ein Fehler aufgetreten."
},
"message.incorrect-username-password": {
"defaultMessage": "Falsches Passwort oder Benutzername."
},
"message.no-data-available": {
},
"message.failure": {
"defaultMessage": "Es it ein Fehler aufgetreten."
},
"message.incorrect-username-password": {
"defaultMessage": "Falsches Passwort oder Benutzername."
},
"message.no-data-available": {
"defaultMessage": "Keine Daten vorhanden."
},
"message.save-success": {
"defaultMessage": "Erfolgreich gespeichert."
},
"message.share-url": {
"defaultMessage": "Dies ist der öffentliche URL zum Teilen für {target}."
},
"message.track-stats": {
"defaultMessage": "Um die Statistiken für {target} zu übermitteln, platzieren Sie bitte den folgenden Quelltext im {head} ihrer Homepage."
},
"message.type-delete": {
},
"message.save-success": {
"defaultMessage": "Erfolgreich gespeichert."
},
"message.share-url": {
"defaultMessage": "Dies ist der öffentliche URL zum Teilen für {target}."
},
"message.track-stats": {
"defaultMessage": "Um die Statistiken für {target} zu übermitteln, platzieren Sie bitte den folgenden Quelltext im {head} ihrer Homepage."
},
"message.type-delete": {
"defaultMessage": "Geben Sie {delete} in das Feld unten ein um zu bestätigen."
},
"metrics.actions": {
"defaultMessage": "Aktionen"
},
"metrics.average-visit-time": {
},
"metrics.actions": {
"defaultMessage": "Aktionen"
},
"metrics.average-visit-time": {
"defaultMessage": "Durchschn. Besuchszeit"
},
"metrics.bounce-rate": {
},
"metrics.bounce-rate": {
"defaultMessage": "Absprungrate"
},
"metrics.browsers": {
"defaultMessage": "Browsers"
},
"metrics.countries": {
"defaultMessage": "Länder"
},
"metrics.devices": {
"defaultMessage": "Geräte"
},
"metrics.events": {
"defaultMessage": "Events"
},
"metrics.filter.combined": {
"defaultMessage": "Kombiniert"
},
"metrics.filter.domain-only": {
"defaultMessage": "Nur diese Domain"
},
"metrics.filter.raw": {
},
"metrics.browsers": {
"defaultMessage": "Browsers"
},
"metrics.countries": {
"defaultMessage": "Länder"
},
"metrics.devices": {
"defaultMessage": "Geräte"
},
"metrics.events": {
"defaultMessage": "Events"
},
"metrics.filter.combined": {
"defaultMessage": "Kombiniert"
},
"metrics.filter.domain-only": {
"defaultMessage": "Nur diese Domain"
},
"metrics.filter.raw": {
"defaultMessage": "Rohdaten"
},
"metrics.operating-system": {
"defaultMessage": "Betriebssystem"
},
"metrics.page-views": {
"defaultMessage": "Seitenaufrufe"
},
"metrics.pages": {
"defaultMessage": "Seiten"
},
"metrics.referrers": {
"defaultMessage": "Referrers"
},
"metrics.unique-visitors": {
"defaultMessage": "Eindeutige Besucher"
},
"metrics.views": {
},
"metrics.operating-system": {
"defaultMessage": "Betriebssystem"
},
"metrics.page-views": {
"defaultMessage": "Seitenaufrufe"
},
"metrics.pages": {
"defaultMessage": "Seiten"
},
"metrics.referrers": {
"defaultMessage": "Referrers"
},
"metrics.unique-visitors": {
"defaultMessage": "Eindeutige Besucher"
},
"metrics.views": {
"defaultMessage": "Aufrufe"
},
"metrics.visitors": {
"defaultMessage": "Besucher"
},
"placeholder.message.go-to-settings": {
},
"metrics.visitors": {
"defaultMessage": "Besucher"
},
"placeholder.message.go-to-settings": {
"defaultMessage": "Zu den Einstellungen"
},
"placeholder.message.no-websites-configured": {
"defaultMessage": "Es ist keine Webseite vorhanden."
},
"settings.accounts": {
"defaultMessage": "Konten"
},
"settings.profile": {
"defaultMessage": "Profil"
},
"settings.websites": {
"defaultMessage": "Webseiten"
},
"title.add-account": {
"defaultMessage": "Konto hinzugfügen"
},
"title.add-website": {
"defaultMessage": "Webseite hinzufügen"
},
"title.delete-account": {
"defaultMessage": "Konto löschen"
},
"title.delete-website": {
"defaultMessage": "Webseite löschen"
},
"title.edit-account": {
"defaultMessage": "Konto bearbeiten"
},
"title.edit-website": {
"defaultMessage": "Webseite bearbeiten"
},
"title.share-url": {
},
"placeholder.message.no-websites-configured": {
"defaultMessage": "Es ist keine Webseite vorhanden."
},
"settings.accounts": {
"defaultMessage": "Konten"
},
"settings.profile": {
"defaultMessage": "Profil"
},
"settings.websites": {
"defaultMessage": "Webseiten"
},
"title.add-account": {
"defaultMessage": "Konto hinzugfügen"
},
"title.add-website": {
"defaultMessage": "Webseite hinzufügen"
},
"title.delete-account": {
"defaultMessage": "Konto löschen"
},
"title.delete-website": {
"defaultMessage": "Webseite löschen"
},
"title.edit-account": {
"defaultMessage": "Konto bearbeiten"
},
"title.edit-website": {
"defaultMessage": "Webseite bearbeiten"
},
"title.share-url": {
"defaultMessage": "Freigabe-URL"
},
"title.tracking-code": {
"defaultMessage": "Tracking Kennung"
},
"tooltip.get-share-url": {
},
"title.tracking-code": {
"defaultMessage": "Tracking Kennung"
},
"tooltip.get-share-url": {
"defaultMessage": "Freigabe-URL abrufen"
},
"tooltip.get-tracking-code": {
"defaultMessage": "Erstelle Tracking Kennung"
}
}
},
"tooltip.get-tracking-code": {
"defaultMessage": "Erstelle Tracking Kennung"
}
}

+ 2
- 2
lang/en.json View File

@ -39,7 +39,7 @@
"defaultMessage": "View details"
},
"footer.powered-by": {
"defaultMessage": "powered by"
"defaultMessage": "Powered by"
},
"header.nav.dashboard": {
"defaultMessage": "Dashboard"
@ -236,4 +236,4 @@
"tooltip.get-tracking-code": {
"defaultMessage": "Get tracking code"
}
}
}

+ 1
- 1
lang/tr-TR.json View File

@ -236,4 +236,4 @@
"tooltip.get-tracking-code": {
"defaultMessage": "İzleme kodunu al"
}
}
}

+ 1
- 1
lang/zh-CN.json View File

@ -236,4 +236,4 @@
"tooltip.get-tracking-code": {
"defaultMessage": "获得跟踪代码"
}
}
}

+ 5
- 5
lib/lang.js View File

@ -1,11 +1,11 @@
import { format } from 'date-fns';
import { enUS, nl, zhCN, tr, ru, de } from 'date-fns/locale';
import enMessages from 'lang-compiled/en.json';
import nlMessages from 'lang-compiled/nl-NL.json';
import zhCNMessages from 'lang-compiled/zh-CN.json';
import trTRMessages from 'lang-compiled/tr-TR.json';
import ruRUMessages from 'lang-compiled/ru-RU.json';
import deDEMessages from 'lang-compiled/de-DE.json';
import { format } from 'date-fns';
import { enUS, nl, zhCN , tr, ru, de} from 'date-fns/locale';
export const messages = {
en: enMessages,
@ -27,10 +27,10 @@ export const dateLocales = {
export const menuOptions = [
{ label: 'English', value: 'en', display: 'EN' },
{ label: 'Nederlands', value: 'nl-NL', display: 'NL' },
{ label: '中文 (Chinese Simplified)', value: 'zh-CN', display: '中文' },
{ label: 'Deutsch' , value:"de-DE", display: 'DE'},
{ label: 'Русский', value: 'ru-RU', display: 'РУ' },
{ label: 'Deutsch (German)', value: 'de-DE', display: 'DE' },
{ label: 'Nederlands (Dutch)', value: 'nl-NL', display: 'NL' },
{ label: 'Русский (Russian)', value: 'ru-RU', display: 'РУ' },
{ label: 'Turkish', value: 'tr-TR', display: 'TR' },
];


+ 4
- 0
next.config.js View File

@ -1,6 +1,10 @@
require('dotenv').config();
const pkg = require('./package.json');
module.exports = {
env: {
VERSION: pkg.version,
},
webpack(config) {
config.module.rules.push({
test: /\.svg$/,


+ 3
- 0
package.json View File

@ -33,6 +33,9 @@
"**/*.css": [
"stylelint --fix",
"prettier --write"
],
"**/*.json": [
"prettier --write"
]
},
"husky": {


Loading…
Cancel
Save