mirror of
https://github.com/kremalicious/umami.git
synced 2024-11-16 02:05:04 +01:00
commit
7be4d56bf7
@ -50,7 +50,8 @@
|
||||
"@next/next/no-img-element": "off",
|
||||
"@typescript-eslint/no-empty-function": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-var-requires": "off"
|
||||
"@typescript-eslint/no-var-requires": "off",
|
||||
"@typescript-eslint/no-empty-interface": "off"
|
||||
},
|
||||
"globals": {
|
||||
"React": "writable"
|
||||
|
2
.github/workflows/stale-issues.yml
vendored
2
.github/workflows/stale-issues.yml
vendored
@ -19,4 +19,6 @@ jobs:
|
||||
close-issue-message: 'This issue was closed because it has been inactive for 7 days since being marked as stale.'
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
operations-per-run: 200
|
||||
ascending: true
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
1
assets/magnet.svg
Normal file
1
assets/magnet.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg height="512" viewBox="0 0 508.467 508.467" width="512" xmlns="http://www.w3.org/2000/svg"><g><path d="m426.815 239.006c-11.722-11.724-30.702-11.729-42.427-.001-65.928 65.929 49.291-49.292-116.718 116.718-53.811 53.809-142.478 19.197-140.68-54.511.547-22.415 9.826-43.738 26.129-60.041l116.717-116.717c11.724-11.722 11.728-30.702 0-42.427l-46.668-46.669c-11.725-11.725-30.702-11.726-42.427 0-16.642 16.643-102.078 102.078-120.112 120.112-39.05 39.05-60.582 90.97-60.629 146.195-.093 110.827 88.182 206.288 206.244 206.394 56.778 0 109.204-21.924 148.29-61.01l118.948-118.948c11.724-11.722 11.728-30.702 0-42.427zm-224.861-182.434 46.669 46.669-58.455 58.456-46.669-46.669zm131.367 369.264c-69.043 69.043-182.868 70.02-251.708.933-68.763-69.009-68.66-181.196.229-250.086l40.443-40.443 46.669 46.669-37.049 37.049c-45.115 45.112-46.916 116.85-3.395 160.371 43.279 43.279 115.221 41.756 160.372-3.394l37.049-37.049 46.669 46.669zm60.494-60.493-46.669-46.669 58.456-58.456 46.669 46.669z"/><path d="m379.357 95.099c15.199 3.839 30.418 19.07 34.336 34.192 2.089 8.058 10.303 12.828 18.283 10.758 8.02-2.078 12.836-10.264 10.758-18.283-6.651-25.662-30.176-49.223-56.03-55.753-8.032-2.027-16.188 2.838-18.217 10.869-2.029 8.032 2.837 16.189 10.87 18.217z"/><path d="m507.984 102.124c-12.016-46.375-55.215-89.504-101.745-101.256-8.032-2.027-16.188 2.838-18.217 10.869-2.029 8.032 2.838 16.188 10.87 18.217 35.882 9.063 70.769 43.871 80.051 79.695 2.088 8.058 10.304 12.828 18.283 10.758 8.02-2.078 12.836-10.263 10.758-18.283z"/></g></svg>
|
After Width: | Height: | Size: 1.5 KiB |
45
components/common/Pager.js
Normal file
45
components/common/Pager.js
Normal file
@ -0,0 +1,45 @@
|
||||
import styles from './Pager.module.css';
|
||||
import { Button, Flexbox, Icon, Icons } from 'react-basics';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
|
||||
export function Pager({ page, pageSize, count, onPageChange }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const maxPage = Math.ceil(count / pageSize);
|
||||
const lastPage = page === maxPage;
|
||||
const firstPage = page === 1;
|
||||
|
||||
if (count === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const handlePageChange = value => {
|
||||
const nextPage = page + value;
|
||||
if (nextPage > 0 && nextPage <= maxPage) {
|
||||
onPageChange(nextPage);
|
||||
}
|
||||
};
|
||||
|
||||
if (maxPage === 1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Flexbox justifyContent="center" className={styles.container}>
|
||||
<Button onClick={() => handlePageChange(-1)} disabled={firstPage}>
|
||||
<Icon rotate={90}>
|
||||
<Icons.ChevronDown />
|
||||
</Icon>
|
||||
</Button>
|
||||
<Flexbox alignItems="center" className={styles.text}>
|
||||
{formatMessage(labels.pageOf, { current: page, total: maxPage })}
|
||||
</Flexbox>
|
||||
<Button onClick={() => handlePageChange(1)} disabled={lastPage}>
|
||||
<Icon rotate={270}>
|
||||
<Icons.ChevronDown />
|
||||
</Icon>
|
||||
</Button>
|
||||
</Flexbox>
|
||||
);
|
||||
}
|
||||
|
||||
export default Pager;
|
7
components/common/Pager.module.css
Normal file
7
components/common/Pager.module.css
Normal file
@ -0,0 +1,7 @@
|
||||
.container {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.text {
|
||||
margin: 0 16px;
|
||||
}
|
@ -1,37 +1,99 @@
|
||||
import { Table, TableHeader, TableBody, TableRow, TableCell, TableColumn } from 'react-basics';
|
||||
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import { useState } from 'react';
|
||||
import {
|
||||
SearchField,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableColumn,
|
||||
TableHeader,
|
||||
TableRow,
|
||||
} from 'react-basics';
|
||||
import styles from './SettingsTable.module.css';
|
||||
import Pager from 'components/common/Pager';
|
||||
|
||||
export function SettingsTable({
|
||||
columns = [],
|
||||
data,
|
||||
children,
|
||||
cellRender,
|
||||
showSearch,
|
||||
showPaging,
|
||||
onFilterChange,
|
||||
onPageChange,
|
||||
onPageSizeChange,
|
||||
filterValue,
|
||||
}) {
|
||||
const { formatMessage, messages } = useMessages();
|
||||
const [filter, setFilter] = useState(filterValue);
|
||||
const { data: value, page, count, pageSize } = data;
|
||||
|
||||
const handleFilterChange = value => {
|
||||
setFilter(value);
|
||||
onFilterChange(value);
|
||||
};
|
||||
|
||||
export function SettingsTable({ columns = [], data = [], children, cellRender }) {
|
||||
return (
|
||||
<Table columns={columns} rows={data}>
|
||||
<TableHeader className={styles.header}>
|
||||
{(column, index) => {
|
||||
return (
|
||||
<TableColumn key={index} className={styles.cell} style={columns[index].style}>
|
||||
{column.label}
|
||||
</TableColumn>
|
||||
);
|
||||
}}
|
||||
</TableHeader>
|
||||
<TableBody className={styles.body}>
|
||||
{(row, keys, rowIndex) => {
|
||||
row.action = children(row, keys, rowIndex);
|
||||
<>
|
||||
{showSearch && (
|
||||
<SearchField
|
||||
onChange={handleFilterChange}
|
||||
delay={1000}
|
||||
value={filter}
|
||||
autoFocus={true}
|
||||
placeholder="Search"
|
||||
style={{ maxWidth: '300px', marginBottom: '10px' }}
|
||||
/>
|
||||
)}
|
||||
{value.length === 0 && filterValue && (
|
||||
<EmptyPlaceholder message={formatMessage(messages.noResultsFound)}></EmptyPlaceholder>
|
||||
)}
|
||||
{value.length > 0 && (
|
||||
<Table columns={columns} rows={value}>
|
||||
<TableHeader className={styles.header}>
|
||||
{(column, index) => {
|
||||
return (
|
||||
<TableColumn key={index} className={styles.cell} style={columns[index].style}>
|
||||
{column.label}
|
||||
</TableColumn>
|
||||
);
|
||||
}}
|
||||
</TableHeader>
|
||||
<TableBody className={styles.body}>
|
||||
{(row, keys, rowIndex) => {
|
||||
row.action = children(row, keys, rowIndex);
|
||||
|
||||
return (
|
||||
<TableRow key={rowIndex} data={row} keys={keys} className={styles.row}>
|
||||
{(data, key, colIndex) => {
|
||||
return (
|
||||
<TableCell key={colIndex} className={styles.cell} style={columns[colIndex].style}>
|
||||
<label className={styles.label}>{columns[colIndex].label}</label>
|
||||
{cellRender ? cellRender(row, data, key, colIndex) : data[key]}
|
||||
</TableCell>
|
||||
);
|
||||
}}
|
||||
</TableRow>
|
||||
);
|
||||
}}
|
||||
</TableBody>
|
||||
</Table>
|
||||
return (
|
||||
<TableRow key={rowIndex} data={row} keys={keys} className={styles.row}>
|
||||
{(data, key, colIndex) => {
|
||||
return (
|
||||
<TableCell
|
||||
key={colIndex}
|
||||
className={styles.cell}
|
||||
style={columns[colIndex].style}
|
||||
>
|
||||
<label className={styles.label}>{columns[colIndex].label}</label>
|
||||
{cellRender ? cellRender(row, data, key, colIndex) : data[key]}
|
||||
</TableCell>
|
||||
);
|
||||
}}
|
||||
</TableRow>
|
||||
);
|
||||
}}
|
||||
</TableBody>
|
||||
{showPaging && (
|
||||
<Pager
|
||||
page={page}
|
||||
pageSize={pageSize}
|
||||
count={count}
|
||||
onPageChange={onPageChange}
|
||||
onPageSizeChange={onPageSizeChange}
|
||||
/>
|
||||
)}
|
||||
</Table>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ import Gear from 'assets/gear.svg';
|
||||
import Globe from 'assets/globe.svg';
|
||||
import Lock from 'assets/lock.svg';
|
||||
import Logo from 'assets/logo.svg';
|
||||
import Magnet from 'assets/magnet.svg';
|
||||
import Moon from 'assets/moon.svg';
|
||||
import Nodes from 'assets/nodes.svg';
|
||||
import Overview from 'assets/overview.svg';
|
||||
@ -35,6 +36,7 @@ const icons = {
|
||||
Globe,
|
||||
Lock,
|
||||
Logo,
|
||||
Magnet,
|
||||
Moon,
|
||||
Nodes,
|
||||
Overview,
|
||||
|
@ -3,7 +3,7 @@ import { Icon, Modal, Dropdown, Item, Text, Flexbox } from 'react-basics';
|
||||
import { endOfYear, isSameDay } from 'date-fns';
|
||||
import DatePickerForm from 'components/metrics/DatePickerForm';
|
||||
import useLocale from 'hooks/useLocale';
|
||||
import { dateFormat } from 'lib/date';
|
||||
import { formatDate } from 'lib/date';
|
||||
import Icons from 'components/icons';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
|
||||
@ -135,8 +135,8 @@ const CustomRange = ({ startDate, endDate, onClick }) => {
|
||||
<Icons.Calendar />
|
||||
</Icon>
|
||||
<Text>
|
||||
{dateFormat(startDate, 'd LLL y', locale)}
|
||||
{!isSameDay(startDate, endDate) && ` — ${dateFormat(endDate, 'd LLL y', locale)}`}
|
||||
{formatDate(startDate, 'd LLL y', locale)}
|
||||
{!isSameDay(startDate, endDate) && ` — ${formatDate(endDate, 'd LLL y', locale)}`}
|
||||
</Text>
|
||||
</Flexbox>
|
||||
);
|
||||
|
71
components/input/MonthSelect.js
Normal file
71
components/input/MonthSelect.js
Normal file
@ -0,0 +1,71 @@
|
||||
import { useRef } from 'react';
|
||||
import {
|
||||
Text,
|
||||
Icon,
|
||||
CalendarMonthSelect,
|
||||
CalendarYearSelect,
|
||||
Button,
|
||||
PopupTrigger,
|
||||
Popup,
|
||||
} from 'react-basics';
|
||||
import { startOfMonth, endOfMonth } from 'date-fns';
|
||||
import Icons from 'components/icons';
|
||||
import { useLocale } from 'hooks';
|
||||
import { formatDate } from 'lib/date';
|
||||
import { getDateLocale } from 'lib/lang';
|
||||
import styles from './MonthSelect.module.css';
|
||||
|
||||
export function MonthSelect({ date = new Date(), onChange }) {
|
||||
const { locale } = useLocale();
|
||||
const month = formatDate(date, 'MMMM', locale);
|
||||
const year = date.getFullYear();
|
||||
const ref = useRef();
|
||||
|
||||
const handleChange = (close, date) => {
|
||||
onChange(`range:${startOfMonth(date).getTime()}:${endOfMonth(date).getTime()}`);
|
||||
close();
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<div ref={ref} className={styles.container}>
|
||||
<PopupTrigger>
|
||||
<Button className={styles.input} variant="quiet">
|
||||
<Text>{month}</Text>
|
||||
<Icon size="sm">
|
||||
<Icons.ChevronDown />
|
||||
</Icon>
|
||||
</Button>
|
||||
<Popup className={styles.popup} alignment="start">
|
||||
{close => (
|
||||
<CalendarMonthSelect
|
||||
date={date}
|
||||
locale={getDateLocale(locale)}
|
||||
onSelect={handleChange.bind(null, close)}
|
||||
/>
|
||||
)}
|
||||
</Popup>
|
||||
</PopupTrigger>
|
||||
<PopupTrigger>
|
||||
<Button className={styles.input} variant="quiet">
|
||||
<Text>{year}</Text>
|
||||
<Icon size="sm">
|
||||
<Icons.ChevronDown />
|
||||
</Icon>
|
||||
</Button>
|
||||
<Popup className={styles.popup} alignment="start">
|
||||
{close => (
|
||||
<CalendarYearSelect
|
||||
date={date}
|
||||
locale={getDateLocale(locale)}
|
||||
onSelect={handleChange.bind(null, close)}
|
||||
/>
|
||||
)}
|
||||
</Popup>
|
||||
</PopupTrigger>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default MonthSelect;
|
22
components/input/MonthSelect.module.css
Normal file
22
components/input/MonthSelect.module.css
Normal file
@ -0,0 +1,22 @@
|
||||
.container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 1px solid var(--base400);
|
||||
border-radius: var(--border-radius);
|
||||
}
|
||||
|
||||
.input {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.popup {
|
||||
border: 1px solid var(--base400);
|
||||
background: var(--base50);
|
||||
border-radius: var(--border-radius);
|
||||
padding: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
@ -8,12 +8,12 @@ export function WebsiteSelect({ websiteId, onSelect }) {
|
||||
const { data } = useQuery(['websites:me'], () => get('/me/websites'));
|
||||
|
||||
const renderValue = value => {
|
||||
return data?.find(({ id }) => id === value)?.name;
|
||||
return data?.data?.find(({ id }) => id === value)?.name;
|
||||
};
|
||||
|
||||
return (
|
||||
<Dropdown
|
||||
items={data}
|
||||
items={data?.data}
|
||||
value={websiteId}
|
||||
renderValue={renderValue}
|
||||
onChange={onSelect}
|
||||
|
@ -2,9 +2,7 @@ import { Container } from 'react-basics';
|
||||
import Head from 'next/head';
|
||||
import NavBar from 'components/layout/NavBar';
|
||||
import UpdateNotice from 'components/common/UpdateNotice';
|
||||
import useRequireLogin from 'hooks/useRequireLogin';
|
||||
import useConfig from 'hooks/useConfig';
|
||||
import { CURRENT_VERSION } from 'lib/constants';
|
||||
import { useRequireLogin, useConfig } from 'hooks';
|
||||
import styles from './AppLayout.module.css';
|
||||
|
||||
export function AppLayout({ title, children }) {
|
||||
@ -16,7 +14,7 @@ export function AppLayout({ title, children }) {
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={styles.layout} data-app-version={CURRENT_VERSION}>
|
||||
<div className={styles.layout}>
|
||||
<UpdateNotice user={user} config={config} />
|
||||
<Head>
|
||||
<title>{title ? `${title} | umami` : 'umami'}</title>
|
||||
|
@ -10,6 +10,7 @@
|
||||
width: 100vw;
|
||||
grid-column: 1;
|
||||
grid-row: 1 / 2;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.body {
|
||||
|
@ -18,6 +18,8 @@ export function NavBar() {
|
||||
|
||||
const links = [
|
||||
{ label: formatMessage(labels.dashboard), url: '/dashboard' },
|
||||
{ label: formatMessage(labels.websites), url: '/websites' },
|
||||
{ label: formatMessage(labels.reports), url: '/reports' },
|
||||
!cloudMode && { label: formatMessage(labels.settings), url: '/settings' },
|
||||
].filter(n => n);
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-top: 40px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
.content {
|
||||
|
@ -21,6 +21,8 @@ export const labels = defineMessages({
|
||||
details: { id: 'label.details', defaultMessage: 'Details' },
|
||||
website: { id: 'label.website', defaultMessage: 'Website' },
|
||||
websites: { id: 'label.websites', defaultMessage: 'Websites' },
|
||||
myWebsites: { id: 'label.my-websites', defaultMessage: 'My websites' },
|
||||
teamWebsites: { id: 'label.team-websites', defaultMessage: 'Team websites' },
|
||||
created: { id: 'label.created', defaultMessage: 'Created' },
|
||||
edit: { id: 'label.edit', defaultMessage: 'Edit' },
|
||||
name: { id: 'label.name', defaultMessage: 'Name' },
|
||||
@ -28,6 +30,7 @@ export const labels = defineMessages({
|
||||
accessCode: { id: 'label.access-code', defaultMessage: 'Access code' },
|
||||
teamId: { id: 'label.team-id', defaultMessage: 'Team ID' },
|
||||
team: { id: 'label.team', defaultMessage: 'Team' },
|
||||
teamName: { id: 'label.team-name', defaultMessage: 'Team name' },
|
||||
regenerate: { id: 'label.regenerate', defaultMessage: 'Regenerate' },
|
||||
remove: { id: 'label.remove', defaultMessage: 'Remove' },
|
||||
join: { id: 'label.join', defaultMessage: 'Join' },
|
||||
@ -77,7 +80,7 @@ export const labels = defineMessages({
|
||||
referrers: { id: 'label.referrers', defaultMessage: 'Referrers' },
|
||||
screens: { id: 'label.screens', defaultMessage: 'Screens' },
|
||||
browsers: { id: 'label.browsers', defaultMessage: 'Browsers' },
|
||||
os: { id: 'label.operating-systems', defaultMessage: 'Operating systems' },
|
||||
os: { id: 'label.os', defaultMessage: 'OS' },
|
||||
devices: { id: 'label.devices', defaultMessage: 'Devices' },
|
||||
countries: { id: 'label.countries', defaultMessage: 'Countries' },
|
||||
languages: { id: 'label.languages', defaultMessage: 'Languages' },
|
||||
@ -133,35 +136,48 @@ export const labels = defineMessages({
|
||||
runQuery: { id: 'label.run-query', defaultMessage: 'Run query' },
|
||||
field: { id: 'label.field', defaultMessage: 'Field' },
|
||||
fields: { id: 'label.fields', defaultMessage: 'Fields' },
|
||||
createReport: { id: 'labels.create-report', defaultMessage: 'Create report' },
|
||||
description: { id: 'labels.description', defaultMessage: 'Description' },
|
||||
untitled: { id: 'labels.untitled', defaultMessage: 'Untitled' },
|
||||
type: { id: 'labels.type', defaultMessage: 'Type' },
|
||||
filters: { id: 'labels.filters', defaultMessage: 'Filters' },
|
||||
breakdown: { id: 'labels.breakdown', defaultMessage: 'Breakdown' },
|
||||
true: { id: 'labels.true', defaultMessage: 'True' },
|
||||
false: { id: 'labels.false', defaultMessage: 'False' },
|
||||
equals: { id: 'labels.equals', defaultMessage: 'Equals' },
|
||||
doesNotEqual: { id: 'labels.does-not-equal', defaultMessage: 'Does not equal' },
|
||||
greaterThan: { id: 'labels.greater-than', defaultMessage: 'Greater than' },
|
||||
lessThan: { id: 'labels.less-than', defaultMessage: 'Less than' },
|
||||
greaterThanEquals: { id: 'labels.greater-than-equals', defaultMessage: 'Greater than or equals' },
|
||||
lessThanEquals: { id: 'labels.less-than-equals', defaultMessage: 'Less than or equals' },
|
||||
contains: { id: 'labels.contains', defaultMessage: 'Contains' },
|
||||
doesNotContain: { id: 'labels.does-not-contain', defaultMessage: 'Does not contain' },
|
||||
before: { id: 'labels.before', defaultMessage: 'Before' },
|
||||
after: { id: 'labels.after', defaultMessage: 'After' },
|
||||
total: { id: 'labels.total', defaultMessage: 'Total' },
|
||||
sum: { id: 'labels.sum', defaultMessage: 'Sum' },
|
||||
average: { id: 'labels.average', defaultMessage: 'Average' },
|
||||
min: { id: 'labels.min', defaultMessage: 'Min' },
|
||||
max: { id: 'labels.max', defaultMessage: 'Max' },
|
||||
unique: { id: 'labels.unique', defaultMessage: 'Unique' },
|
||||
value: { id: 'labels.value', defaultMessage: 'Value' },
|
||||
overview: { id: 'labels.overview', defaultMessage: 'Overview' },
|
||||
totalRecords: { id: 'labels.total-records', defaultMessage: 'Total records' },
|
||||
createReport: { id: 'label.create-report', defaultMessage: 'Create report' },
|
||||
description: { id: 'label.description', defaultMessage: 'Description' },
|
||||
untitled: { id: 'label.untitled', defaultMessage: 'Untitled' },
|
||||
type: { id: 'label.type', defaultMessage: 'Type' },
|
||||
filters: { id: 'label.filters', defaultMessage: 'Filters' },
|
||||
breakdown: { id: 'label.breakdown', defaultMessage: 'Breakdown' },
|
||||
true: { id: 'label.true', defaultMessage: 'True' },
|
||||
false: { id: 'label.false', defaultMessage: 'False' },
|
||||
is: { id: 'label.is', defaultMessage: 'Is' },
|
||||
isNot: { id: 'label.is-not', defaultMessage: 'Is not' },
|
||||
isSet: { id: 'label.is-set', defaultMessage: 'Is set' },
|
||||
isNotSet: { id: 'label.is-not-set', defaultMessage: 'Is not set' },
|
||||
greaterThan: { id: 'label.greater-than', defaultMessage: 'Greater than' },
|
||||
lessThan: { id: 'label.less-than', defaultMessage: 'Less than' },
|
||||
greaterThanEquals: { id: 'label.greater-than-equals', defaultMessage: 'Greater than or equals' },
|
||||
lessThanEquals: { id: 'label.less-than-equals', defaultMessage: 'Less than or equals' },
|
||||
contains: { id: 'label.contains', defaultMessage: 'Contains' },
|
||||
doesNotContain: { id: 'label.does-not-contain', defaultMessage: 'Does not contain' },
|
||||
before: { id: 'label.before', defaultMessage: 'Before' },
|
||||
after: { id: 'label.after', defaultMessage: 'After' },
|
||||
total: { id: 'label.total', defaultMessage: 'Total' },
|
||||
sum: { id: 'label.sum', defaultMessage: 'Sum' },
|
||||
average: { id: 'label.average', defaultMessage: 'Average' },
|
||||
min: { id: 'label.min', defaultMessage: 'Min' },
|
||||
max: { id: 'label.max', defaultMessage: 'Max' },
|
||||
unique: { id: 'label.unique', defaultMessage: 'Unique' },
|
||||
value: { id: 'label.value', defaultMessage: 'Value' },
|
||||
overview: { id: 'label.overview', defaultMessage: 'Overview' },
|
||||
totalRecords: { id: 'label.total-records', defaultMessage: 'Total records' },
|
||||
insights: { id: 'label.insights', defaultMessage: 'Insights' },
|
||||
retention: { id: 'label.retention', defaultMessage: 'Retention' },
|
||||
dropoff: { id: 'label.dropoff', defaultMessage: 'Dropoff' },
|
||||
referrer: { id: 'label.referrer', defaultMessage: 'Referrer' },
|
||||
country: { id: 'label.country', defaultMessage: 'Country' },
|
||||
region: { id: 'label.region', defaultMessage: 'Region' },
|
||||
city: { id: 'label.city', defaultMessage: 'City' },
|
||||
browser: { id: 'label.browser', defaultMessage: 'Browser' },
|
||||
device: { id: 'label.device', defaultMessage: 'Device' },
|
||||
pageTitle: { id: 'label.pageTitle', defaultMessage: 'Page title' },
|
||||
day: { id: 'label.day', defaultMessage: 'Day' },
|
||||
date: { id: 'label.date', defaultMessage: 'Date' },
|
||||
pageOf: { id: 'label.page-of', defaultMessage: 'Page {current} of {total}' },
|
||||
});
|
||||
|
||||
export const messages = defineMessages({
|
||||
@ -230,7 +246,7 @@ export const messages = defineMessages({
|
||||
},
|
||||
noResultsFound: {
|
||||
id: 'message.no-results-found',
|
||||
defaultMessage: 'No results were found.',
|
||||
defaultMessage: 'No results found.',
|
||||
},
|
||||
noWebsitesConfigured: {
|
||||
id: 'message.no-websites-configured',
|
||||
|
@ -1,16 +1,17 @@
|
||||
import { useRouter } from 'next/router';
|
||||
import FilterLink from 'components/common/FilterLink';
|
||||
import MetricsTable from 'components/metrics/MetricsTable';
|
||||
import { BROWSERS } from 'lib/constants';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import { useRouter } from 'next/router';
|
||||
import useFormat from 'hooks/useFormat';
|
||||
|
||||
export function BrowsersTable({ websiteId, ...props }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { basePath } = useRouter();
|
||||
const { formatBrowser } = useFormat();
|
||||
|
||||
function renderLink({ x: browser }) {
|
||||
return (
|
||||
<FilterLink id="browser" value={browser} label={BROWSERS[browser] || browser}>
|
||||
<FilterLink id="browser" value={browser} label={formatBrowser(browser)}>
|
||||
<img
|
||||
src={`${basePath}/images/browsers/${browser || 'unknown'}.png`}
|
||||
alt={browser}
|
||||
|
@ -1,8 +1,7 @@
|
||||
import { useRouter } from 'next/router';
|
||||
import FilterLink from 'components/common/FilterLink';
|
||||
import useCountryNames from 'hooks/useCountryNames';
|
||||
import useLocale from 'hooks/useLocale';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import { useLocale, useMessages, useFormat } from 'hooks';
|
||||
import MetricsTable from './MetricsTable';
|
||||
|
||||
export function CountriesTable({ websiteId, ...props }) {
|
||||
@ -10,6 +9,7 @@ export function CountriesTable({ websiteId, ...props }) {
|
||||
const countryNames = useCountryNames(locale);
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { basePath } = useRouter();
|
||||
const { formatCountry } = useFormat();
|
||||
|
||||
function renderLink({ x: code }) {
|
||||
return (
|
||||
@ -17,7 +17,7 @@ export function CountriesTable({ websiteId, ...props }) {
|
||||
id="country"
|
||||
className={locale}
|
||||
value={countryNames[code] && code}
|
||||
label={countryNames[code]}
|
||||
label={formatCountry(code)}
|
||||
>
|
||||
<img src={`${basePath}/images/flags/${code?.toLowerCase() || 'xx'}.png`} alt={code} />
|
||||
</FilterLink>
|
||||
|
@ -2,18 +2,16 @@ import MetricsTable from './MetricsTable';
|
||||
import FilterLink from 'components/common/FilterLink';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import { useRouter } from 'next/router';
|
||||
import { useFormat } from 'hooks';
|
||||
|
||||
export function DevicesTable({ websiteId, ...props }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { basePath } = useRouter();
|
||||
const { formatDevice } = useFormat();
|
||||
|
||||
function renderLink({ x: device }) {
|
||||
return (
|
||||
<FilterLink
|
||||
id="device"
|
||||
value={labels[device] && device}
|
||||
label={formatMessage(labels[device] || labels.unknown)}
|
||||
>
|
||||
<FilterLink id="device" value={labels[device] && device} label={formatDevice(device)}>
|
||||
<img
|
||||
src={`${basePath}/images/device/${device?.toLowerCase() || 'unknown'}.png`}
|
||||
alt={device}
|
||||
|
@ -72,7 +72,7 @@ export function TestConsole() {
|
||||
}
|
||||
|
||||
const [websiteId] = id || [];
|
||||
const website = data.find(({ id }) => websiteId === id);
|
||||
const website = data?.data.find(({ id }) => websiteId === id);
|
||||
|
||||
return (
|
||||
<Page loading={isLoading} error={error}>
|
||||
|
@ -12,16 +12,17 @@ import useDashboard from 'store/dashboard';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import useLocale from 'hooks/useLocale';
|
||||
|
||||
export function Dashboard({ userId }) {
|
||||
export function Dashboard() {
|
||||
const { formatMessage, labels, messages } = useMessages();
|
||||
const dashboard = useDashboard();
|
||||
const { showCharts, limit, editing } = dashboard;
|
||||
const [max, setMax] = useState(limit);
|
||||
const { get, useQuery } = useApi();
|
||||
const { data, isLoading, error } = useQuery(['websites'], () =>
|
||||
get('/websites', { userId, includeTeams: 1 }),
|
||||
get('/websites', { includeTeams: 1 }),
|
||||
);
|
||||
const hasData = data && data.length !== 0;
|
||||
const hasData = data && data?.data.length !== 0;
|
||||
|
||||
const { dir } = useLocale();
|
||||
|
||||
function handleMore() {
|
||||
@ -47,8 +48,10 @@ export function Dashboard({ userId }) {
|
||||
)}
|
||||
{hasData && (
|
||||
<>
|
||||
{editing && <DashboardEdit websites={data} />}
|
||||
{!editing && <WebsiteChartList websites={data} showCharts={showCharts} limit={max} />}
|
||||
{editing && <DashboardEdit websites={data?.data} />}
|
||||
{!editing && (
|
||||
<WebsiteChartList websites={data?.data} showCharts={showCharts} limit={max} />
|
||||
)}
|
||||
{max < data.length && (
|
||||
<Flexbox justifyContent="center">
|
||||
<Button onClick={handleMore}>
|
||||
|
@ -28,6 +28,11 @@ export function EventDataMetricsBar({ websiteId }) {
|
||||
<MetricsBar isLoading={isLoading} isFetched={isFetched} error={error}>
|
||||
{!error && isFetched && (
|
||||
<>
|
||||
<MetricCard
|
||||
className={styles.card}
|
||||
label={formatMessage(labels.events)}
|
||||
value={data?.events}
|
||||
/>
|
||||
<MetricCard
|
||||
className={styles.card}
|
||||
label={formatMessage(labels.fields)}
|
||||
|
@ -2,6 +2,7 @@ import Link from 'next/link';
|
||||
import { GridTable, GridColumn } from 'react-basics';
|
||||
import { useMessages, usePageQuery } from 'hooks';
|
||||
import Empty from 'components/common/Empty';
|
||||
import { DATA_TYPES } from 'lib/constants';
|
||||
|
||||
export function EventDataTable({ data = [] }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
@ -13,15 +14,18 @@ export function EventDataTable({ data = [] }) {
|
||||
|
||||
return (
|
||||
<GridTable data={data}>
|
||||
<GridColumn name="event" label={formatMessage(labels.event)}>
|
||||
<GridColumn name="eventName" label={formatMessage(labels.event)}>
|
||||
{row => (
|
||||
<Link href={resolveUrl({ event: row.event })} shallow={true}>
|
||||
{row.event}
|
||||
<Link href={resolveUrl({ event: row.eventName })} shallow={true}>
|
||||
{row.eventName}
|
||||
</Link>
|
||||
)}
|
||||
</GridColumn>
|
||||
<GridColumn name="field" label={formatMessage(labels.field)}>
|
||||
{row => row.field}
|
||||
<GridColumn name="fieldName" label={formatMessage(labels.field)}>
|
||||
{row => row.fieldName}
|
||||
</GridColumn>
|
||||
<GridColumn name="dataType" label={formatMessage(labels.type)}>
|
||||
{row => DATA_TYPES[row.dataType]}
|
||||
</GridColumn>
|
||||
<GridColumn name="total" label={formatMessage(labels.totalRecords)}>
|
||||
{({ total }) => total.toLocaleString()}
|
||||
|
@ -1,9 +1,10 @@
|
||||
import { GridTable, GridColumn, Button, Icon, Text, Flexbox } from 'react-basics';
|
||||
import { GridTable, GridColumn, Button, Icon, Text } from 'react-basics';
|
||||
import { useMessages, usePageQuery } from 'hooks';
|
||||
import Link from 'next/link';
|
||||
import Icons from 'components/icons';
|
||||
import PageHeader from 'components/layout/PageHeader';
|
||||
import Empty from 'components/common/Empty';
|
||||
import { DATA_TYPES } from 'lib/constants';
|
||||
|
||||
export function EventDataValueTable({ data = [], event }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
@ -31,8 +32,11 @@ export function EventDataValueTable({ data = [], event }) {
|
||||
{data.length <= 0 && <Empty />}
|
||||
{data.length > 0 && (
|
||||
<GridTable data={data}>
|
||||
<GridColumn name="field" label={formatMessage(labels.field)} />
|
||||
<GridColumn name="value" label={formatMessage(labels.value)} />
|
||||
<GridColumn name="fieldName" label={formatMessage(labels.field)} />
|
||||
<GridColumn name="dataType" label={formatMessage(labels.type)}>
|
||||
{row => DATA_TYPES[row.dataType]}
|
||||
</GridColumn>
|
||||
<GridColumn name="fieldValue" label={formatMessage(labels.value)} />
|
||||
<GridColumn name="total" label={formatMessage(labels.totalRecords)} width="200px">
|
||||
{({ total }) => total.toLocaleString()}
|
||||
</GridColumn>
|
||||
|
@ -8,7 +8,7 @@ import useLocale from 'hooks/useLocale';
|
||||
import useCountryNames from 'hooks/useCountryNames';
|
||||
import { BROWSERS } from 'lib/constants';
|
||||
import { stringToColor } from 'lib/format';
|
||||
import { dateFormat } from 'lib/date';
|
||||
import { formatDate } from 'lib/date';
|
||||
import { safeDecodeURI } from 'next-basics';
|
||||
import Icons from 'components/icons';
|
||||
import styles from './RealtimeLog.module.css';
|
||||
@ -50,7 +50,7 @@ export function RealtimeLog({ data, websiteDomain }) {
|
||||
},
|
||||
];
|
||||
|
||||
const getTime = ({ createdAt }) => dateFormat(new Date(createdAt), 'pp', locale);
|
||||
const getTime = ({ createdAt }) => formatDate(new Date(createdAt), 'pp', locale);
|
||||
|
||||
const getColor = ({ id, sessionId }) => stringToColor(sessionId || id);
|
||||
|
||||
|
@ -6,7 +6,12 @@ import { useContext } from 'react';
|
||||
import { ReportContext } from './Report';
|
||||
import { useMessages } from 'hooks';
|
||||
|
||||
export function BaseParameters() {
|
||||
export function BaseParameters({
|
||||
showWebsiteSelect = true,
|
||||
allowWebsiteSelect = true,
|
||||
showDateSelect = true,
|
||||
allowDateSelect = true,
|
||||
}) {
|
||||
const { report, updateReport } = useContext(ReportContext);
|
||||
const { formatMessage, labels } = useMessages();
|
||||
|
||||
@ -24,17 +29,25 @@ export function BaseParameters() {
|
||||
|
||||
return (
|
||||
<>
|
||||
<FormRow label={formatMessage(labels.website)}>
|
||||
<WebsiteSelect websiteId={websiteId} onSelect={handleWebsiteSelect} />
|
||||
</FormRow>
|
||||
<FormRow label={formatMessage(labels.dateRange)}>
|
||||
<DateFilter
|
||||
value={value}
|
||||
startDate={startDate}
|
||||
endDate={endDate}
|
||||
onChange={handleDateChange}
|
||||
/>
|
||||
</FormRow>
|
||||
{showWebsiteSelect && (
|
||||
<FormRow label={formatMessage(labels.website)}>
|
||||
{allowWebsiteSelect && (
|
||||
<WebsiteSelect websiteId={websiteId} onSelect={handleWebsiteSelect} />
|
||||
)}
|
||||
</FormRow>
|
||||
)}
|
||||
{showDateSelect && (
|
||||
<FormRow label={formatMessage(labels.dateRange)}>
|
||||
{allowDateSelect && (
|
||||
<DateFilter
|
||||
value={value}
|
||||
startDate={startDate}
|
||||
endDate={endDate}
|
||||
onChange={handleDateChange}
|
||||
/>
|
||||
)}
|
||||
</FormRow>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -1,55 +1,58 @@
|
||||
import { useState } from 'react';
|
||||
import { Form, FormRow, Menu, Item, Flexbox, Dropdown, TextField, Button } from 'react-basics';
|
||||
import { useFilters } from 'hooks';
|
||||
import { Form, FormRow, Item, Flexbox, Dropdown, Button } from 'react-basics';
|
||||
import { useMessages, useFilters, useFormat } from 'hooks';
|
||||
import styles from './FieldFilterForm.module.css';
|
||||
|
||||
export default function FieldFilterForm({ name, type, onSelect }) {
|
||||
const [filter, setFilter] = useState('');
|
||||
const [value, setValue] = useState('');
|
||||
const { filters, types } = useFilters();
|
||||
const items = types[type];
|
||||
export default function FieldFilterForm({ name, label, type, values, onSelect }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const [filter, setFilter] = useState('eq');
|
||||
const [value, setValue] = useState();
|
||||
const { getFilters } = useFilters();
|
||||
const { formatValue } = useFormat();
|
||||
const filters = getFilters(type);
|
||||
|
||||
const renderValue = value => {
|
||||
return filters[value];
|
||||
const renderFilterValue = value => {
|
||||
return filters.find(f => f.value === value)?.label;
|
||||
};
|
||||
|
||||
if (type === 'boolean') {
|
||||
return (
|
||||
<Form>
|
||||
<FormRow label={name}>
|
||||
<Menu onSelect={value => onSelect({ name, type, value: ['eq', value] })}>
|
||||
{items.map(value => {
|
||||
return <Item key={value}>{filters[value]}</Item>;
|
||||
})}
|
||||
</Menu>
|
||||
</FormRow>
|
||||
</Form>
|
||||
);
|
||||
}
|
||||
const renderValue = value => {
|
||||
return formatValue(value, name);
|
||||
};
|
||||
|
||||
const handleAdd = () => {
|
||||
onSelect({ name, type, filter, value });
|
||||
};
|
||||
|
||||
return (
|
||||
<Form>
|
||||
<FormRow label={name} className={styles.filter}>
|
||||
<FormRow label={label} className={styles.filter}>
|
||||
<Flexbox gap={10}>
|
||||
<Dropdown
|
||||
className={styles.dropdown}
|
||||
items={items}
|
||||
items={filters}
|
||||
value={filter}
|
||||
renderValue={renderValue}
|
||||
renderValue={renderFilterValue}
|
||||
onChange={setFilter}
|
||||
>
|
||||
{value => {
|
||||
return <Item key={value}>{filters[value]}</Item>;
|
||||
{({ value, label }) => {
|
||||
return <Item key={value}>{label}</Item>;
|
||||
}}
|
||||
</Dropdown>
|
||||
<Dropdown
|
||||
className={styles.dropdown}
|
||||
menuProps={{ className: styles.menu }}
|
||||
items={values}
|
||||
value={value}
|
||||
renderValue={renderValue}
|
||||
onChange={setValue}
|
||||
>
|
||||
{value => {
|
||||
return <Item key={value}>{formatValue(value, name)}</Item>;
|
||||
}}
|
||||
</Dropdown>
|
||||
<TextField value={value} onChange={e => setValue(e.target.value)} autoFocus={true} />
|
||||
</Flexbox>
|
||||
<Button
|
||||
variant="primary"
|
||||
onClick={() => onSelect({ name, type, value: [filter, value] })}
|
||||
disabled={!filter || !value}
|
||||
>
|
||||
Add
|
||||
<Button variant="primary" onClick={handleAdd} disabled={!filter || !value}>
|
||||
{formatMessage(labels.add)}
|
||||
</Button>
|
||||
</FormRow>
|
||||
</Form>
|
||||
|
@ -15,3 +15,8 @@
|
||||
.dropdown {
|
||||
min-width: 180px;
|
||||
}
|
||||
|
||||
.menu {
|
||||
min-width: 360px;
|
||||
max-height: 300px;
|
||||
}
|
||||
|
@ -2,18 +2,18 @@ import { Menu, Item, Form, FormRow } from 'react-basics';
|
||||
import { useMessages } from 'hooks';
|
||||
import styles from './FieldSelectForm.module.css';
|
||||
|
||||
export default function FieldSelectForm({ fields, onSelect }) {
|
||||
export default function FieldSelectForm({ items, onSelect, showType = true }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
|
||||
return (
|
||||
<Form>
|
||||
<FormRow label={formatMessage(labels.fields)}>
|
||||
<Menu className={styles.menu} onSelect={key => onSelect(fields[key])}>
|
||||
{fields.map(({ label, name, type }, index) => {
|
||||
<Menu className={styles.menu} onSelect={key => onSelect(items[key])}>
|
||||
{items.map(({ name, label, type }, index) => {
|
||||
return (
|
||||
<Item key={index} className={styles.item}>
|
||||
<div>{label || name}</div>
|
||||
<div className={styles.type}>{type}</div>
|
||||
{showType && type && <div className={styles.type}>{type}</div>}
|
||||
</Item>
|
||||
);
|
||||
})}
|
||||
|
42
components/pages/reports/FilterSelectForm.js
Normal file
42
components/pages/reports/FilterSelectForm.js
Normal file
@ -0,0 +1,42 @@
|
||||
import { useState } from 'react';
|
||||
import FieldSelectForm from './FieldSelectForm';
|
||||
import FieldFilterForm from './FieldFilterForm';
|
||||
import { useApi } from 'hooks';
|
||||
import { Loading } from 'react-basics';
|
||||
|
||||
function useValues(websiteId, type) {
|
||||
const { get, useQuery } = useApi();
|
||||
const { data, error, isLoading } = useQuery(
|
||||
['websites:values', websiteId, type],
|
||||
() =>
|
||||
get(`/websites/${websiteId}/values`, {
|
||||
type,
|
||||
}),
|
||||
{ enabled: !!(websiteId && type) },
|
||||
);
|
||||
|
||||
return { data, error, isLoading };
|
||||
}
|
||||
|
||||
export default function FilterSelectForm({ websiteId, items, onSelect }) {
|
||||
const [field, setField] = useState();
|
||||
const { data, isLoading } = useValues(websiteId, field?.name);
|
||||
|
||||
if (!field) {
|
||||
return <FieldSelectForm items={items} onSelect={setField} showType={false} />;
|
||||
}
|
||||
|
||||
if (isLoading) {
|
||||
return <Loading position="center" icon="dots" />;
|
||||
}
|
||||
|
||||
return (
|
||||
<FieldFilterForm
|
||||
name={field?.name}
|
||||
label={field?.label}
|
||||
type={field?.type}
|
||||
values={data}
|
||||
onSelect={onSelect}
|
||||
/>
|
||||
);
|
||||
}
|
@ -1,29 +1,15 @@
|
||||
import { createPortal } from 'react-dom';
|
||||
import { useDocumentClick, useKeyDown } from 'react-basics';
|
||||
import classNames from 'classnames';
|
||||
import styles from './PopupForm.module.css';
|
||||
|
||||
export function PopupForm({ element, className, children, onClose }) {
|
||||
const { right, top } = element.getBoundingClientRect();
|
||||
const style = { position: 'absolute', left: right, top };
|
||||
|
||||
useKeyDown('Escape', onClose);
|
||||
|
||||
useDocumentClick(e => {
|
||||
if (e.target !== element && !element?.parentElement?.contains(e.target)) {
|
||||
onClose();
|
||||
}
|
||||
});
|
||||
|
||||
const handleClick = e => {
|
||||
e.stopPropagation();
|
||||
};
|
||||
|
||||
return createPortal(
|
||||
<div className={classNames(styles.form, className)} style={style} onClick={handleClick}>
|
||||
export function PopupForm({ className, style, children }) {
|
||||
return (
|
||||
<div
|
||||
className={classNames(styles.form, className)}
|
||||
style={style}
|
||||
onClick={e => e.stopPropagation()}
|
||||
>
|
||||
{children}
|
||||
</div>,
|
||||
document.body,
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -3,8 +3,8 @@
|
||||
background: var(--base50);
|
||||
min-width: 300px;
|
||||
padding: 20px;
|
||||
margin-left: 30px;
|
||||
border: 1px solid var(--base400);
|
||||
border-radius: var(--border-radius);
|
||||
box-shadow: 0 0 0 5px rgba(0, 0, 0, 0.1);
|
||||
z-index: 1000;
|
||||
}
|
||||
|
@ -8,6 +8,8 @@ export const ReportContext = createContext(null);
|
||||
export function Report({ reportId, defaultParameters, children, ...props }) {
|
||||
const report = useReport(reportId, defaultParameters);
|
||||
|
||||
//console.log({ report });
|
||||
|
||||
return (
|
||||
<ReportContext.Provider value={{ ...report }}>
|
||||
<Page {...props} className={styles.container}>
|
||||
|
@ -1,9 +1,13 @@
|
||||
import FunnelReport from './funnel/FunnelReport';
|
||||
import EventDataReport from './event-data/EventDataReport';
|
||||
import InsightsReport from './insights/InsightsReport';
|
||||
import RetentionReport from './retention/RetentionReport';
|
||||
|
||||
const reports = {
|
||||
funnel: FunnelReport,
|
||||
'event-data': EventDataReport,
|
||||
insights: InsightsReport,
|
||||
retention: RetentionReport,
|
||||
};
|
||||
|
||||
export default function ReportDetails({ reportId, reportType }) {
|
||||
|
@ -4,6 +4,7 @@ import Page from 'components/layout/Page';
|
||||
import PageHeader from 'components/layout/PageHeader';
|
||||
import Funnel from 'assets/funnel.svg';
|
||||
import Lightbulb from 'assets/lightbulb.svg';
|
||||
import Magnet from 'assets/magnet.svg';
|
||||
import styles from './ReportTemplates.module.css';
|
||||
import { useMessages } from 'hooks';
|
||||
|
||||
@ -33,20 +34,24 @@ export function ReportTemplates() {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
|
||||
const reports = [
|
||||
/*
|
||||
{
|
||||
title: formatMessage(labels.insights),
|
||||
description: 'Dive deeper into your data by using segments and filters.',
|
||||
url: '/reports/insights',
|
||||
icon: <Lightbulb />,
|
||||
},
|
||||
*/
|
||||
{
|
||||
title: formatMessage(labels.funnel),
|
||||
description: 'Understand the conversion and drop-off rate of users.',
|
||||
url: '/reports/funnel',
|
||||
icon: <Funnel />,
|
||||
},
|
||||
{
|
||||
title: formatMessage(labels.retention),
|
||||
description: 'Measure you website stickiness by tracking how often users return.',
|
||||
url: '/reports/retention',
|
||||
icon: <Magnet />,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
|
@ -2,7 +2,6 @@
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(360px, 1fr));
|
||||
gap: 20px;
|
||||
width: 360px;
|
||||
}
|
||||
|
||||
.report {
|
||||
|
@ -1,13 +1,25 @@
|
||||
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
|
||||
import Page from 'components/layout/Page';
|
||||
import PageHeader from 'components/layout/PageHeader';
|
||||
import { useMessages, useReports } from 'hooks';
|
||||
import Link from 'next/link';
|
||||
import { Button, Icon, Icons, Text } from 'react-basics';
|
||||
import { useMessages, useReports } from 'hooks';
|
||||
import ReportsTable from './ReportsTable';
|
||||
|
||||
export function ReportsPage() {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { reports, error, isLoading } = useReports();
|
||||
const { formatMessage, labels, messages } = useMessages();
|
||||
const {
|
||||
reports,
|
||||
error,
|
||||
isLoading,
|
||||
deleteReport,
|
||||
filter,
|
||||
handleFilterChange,
|
||||
handlePageChange,
|
||||
handlePageSizeChange,
|
||||
} = useReports();
|
||||
|
||||
const hasData = (reports && reports?.data.length !== 0) || filter;
|
||||
|
||||
return (
|
||||
<Page loading={isLoading} error={error}>
|
||||
@ -21,7 +33,23 @@ export function ReportsPage() {
|
||||
</Button>
|
||||
</Link>
|
||||
</PageHeader>
|
||||
<ReportsTable data={reports} />
|
||||
|
||||
{hasData && (
|
||||
<ReportsTable
|
||||
data={reports}
|
||||
showSearch={true}
|
||||
showPaging={true}
|
||||
onFilterChange={handleFilterChange}
|
||||
onPageChange={handlePageChange}
|
||||
onPageSizeChange={handlePageSizeChange}
|
||||
onDelete={deleteReport}
|
||||
filterValue={filter}
|
||||
showDomain={true}
|
||||
/>
|
||||
)}
|
||||
{!hasData && (
|
||||
<EmptyPlaceholder message={formatMessage(messages.noDataAvailable)}></EmptyPlaceholder>
|
||||
)}
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
@ -1,18 +1,36 @@
|
||||
import { useState } from 'react';
|
||||
import { Flexbox, Icon, Icons, Text, Button, Modal } from 'react-basics';
|
||||
import ConfirmDeleteForm from 'components/common/ConfirmDeleteForm';
|
||||
import LinkButton from 'components/common/LinkButton';
|
||||
import SettingsTable from 'components/common/SettingsTable';
|
||||
import ConfirmDeleteForm from 'components/common/ConfirmDeleteForm';
|
||||
import { useMessages } from 'hooks';
|
||||
import useUser from 'hooks/useUser';
|
||||
import { useState } from 'react';
|
||||
import { Button, Flexbox, Icon, Icons, Modal, Text } from 'react-basics';
|
||||
|
||||
export function ReportsTable({ data = [], onDelete = () => {} }) {
|
||||
export function ReportsTable({
|
||||
data = [],
|
||||
onDelete = () => {},
|
||||
filterValue,
|
||||
onFilterChange,
|
||||
onPageChange,
|
||||
onPageSizeChange,
|
||||
showDomain,
|
||||
}) {
|
||||
const [report, setReport] = useState(null);
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { user } = useUser();
|
||||
|
||||
const domainColumn = [
|
||||
{
|
||||
name: 'domain',
|
||||
label: formatMessage(labels.domain),
|
||||
},
|
||||
];
|
||||
|
||||
const columns = [
|
||||
{ name: 'name', label: formatMessage(labels.name) },
|
||||
{ name: 'description', label: formatMessage(labels.description) },
|
||||
{ name: 'type', label: formatMessage(labels.type) },
|
||||
...(showDomain ? domainColumn : []),
|
||||
{ name: 'action', label: ' ' },
|
||||
];
|
||||
|
||||
@ -22,13 +40,26 @@ export function ReportsTable({ data = [], onDelete = () => {} }) {
|
||||
|
||||
return (
|
||||
<>
|
||||
<SettingsTable columns={columns} data={data}>
|
||||
<SettingsTable
|
||||
columns={columns}
|
||||
data={data}
|
||||
showSearch={true}
|
||||
showPaging={true}
|
||||
onFilterChange={onFilterChange}
|
||||
onPageChange={onPageChange}
|
||||
onPageSizeChange={onPageSizeChange}
|
||||
filterValue={filterValue}
|
||||
>
|
||||
{row => {
|
||||
const { id } = row;
|
||||
const { id, userId: reportOwnerId, website } = row;
|
||||
if (showDomain) {
|
||||
row.domain = website.domain;
|
||||
}
|
||||
|
||||
return (
|
||||
<Flexbox gap={10}>
|
||||
<LinkButton href={`/reports/${id}`}>{formatMessage(labels.view)}</LinkButton>
|
||||
{!showDomain || user.id === reportOwnerId || user.id === website?.userId}
|
||||
<Button onClick={() => setReport(row)}>
|
||||
<Icon>
|
||||
<Icons.Trash />
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { useCallback, useContext, useMemo } from 'react';
|
||||
import { Loading } from 'react-basics';
|
||||
import { Loading, StatusLight } from 'react-basics';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import useTheme from 'hooks/useTheme';
|
||||
import BarChart from 'components/metrics/BarChart';
|
||||
@ -22,14 +22,25 @@ export function FunnelChart({ className, loading }) {
|
||||
);
|
||||
|
||||
const renderTooltipPopup = useCallback((setTooltipPopup, model) => {
|
||||
const { opacity, dataPoints } = model.tooltip;
|
||||
const { opacity, labelColors, dataPoints } = model.tooltip;
|
||||
|
||||
if (!dataPoints?.length || !opacity) {
|
||||
setTooltipPopup(null);
|
||||
return;
|
||||
}
|
||||
|
||||
setTooltipPopup(`${formatLongNumber(dataPoints[0].raw.y)} ${formatMessage(labels.visitors)}`);
|
||||
setTooltipPopup(
|
||||
<>
|
||||
<div>
|
||||
{formatLongNumber(dataPoints[0].raw.y)} {formatMessage(labels.visitors)}
|
||||
</div>
|
||||
<div>
|
||||
<StatusLight color={labelColors?.[0]?.backgroundColor}>
|
||||
{formatLongNumber(dataPoints[0].raw.z)}% {formatMessage(labels.dropoff)}
|
||||
</StatusLight>
|
||||
</div>
|
||||
</>,
|
||||
);
|
||||
}, []);
|
||||
|
||||
const datasets = useMemo(() => {
|
||||
|
@ -16,6 +16,7 @@ import UrlAddForm from './UrlAddForm';
|
||||
import { ReportContext } from 'components/pages/reports/Report';
|
||||
import BaseParameters from '../BaseParameters';
|
||||
import ParameterList from '../ParameterList';
|
||||
import PopupForm from '../PopupForm';
|
||||
|
||||
export function FunnelParameters() {
|
||||
const { report, runReport, updateReport, isRunning } = useContext(ReportContext);
|
||||
@ -53,7 +54,11 @@ export function FunnelParameters() {
|
||||
</Icon>
|
||||
<Popup position="bottom" alignment="start">
|
||||
{(close, element) => {
|
||||
return <UrlAddForm element={element} onAdd={handleAddUrl} onClose={close} />;
|
||||
return (
|
||||
<PopupForm element={element} onClose={close}>
|
||||
<UrlAddForm onAdd={handleAddUrl} />
|
||||
</PopupForm>
|
||||
);
|
||||
}}
|
||||
</Popup>
|
||||
</PopupTrigger>
|
||||
|
@ -6,9 +6,10 @@ import ReportHeader from '../ReportHeader';
|
||||
import ReportMenu from '../ReportMenu';
|
||||
import ReportBody from '../ReportBody';
|
||||
import Funnel from 'assets/funnel.svg';
|
||||
import { REPORT_TYPES } from 'lib/constants';
|
||||
|
||||
const defaultParameters = {
|
||||
type: 'funnel',
|
||||
type: REPORT_TYPES.funnel,
|
||||
parameters: { window: 60, urls: [] },
|
||||
};
|
||||
|
||||
|
@ -2,16 +2,14 @@ import { useState } from 'react';
|
||||
import { useMessages } from 'hooks';
|
||||
import { Button, Form, FormRow, TextField, Flexbox } from 'react-basics';
|
||||
import styles from './UrlAddForm.module.css';
|
||||
import PopupForm from '../PopupForm';
|
||||
|
||||
export function UrlAddForm({ defaultValue = '', element, onAdd, onClose }) {
|
||||
export function UrlAddForm({ defaultValue = '', onAdd }) {
|
||||
const [url, setUrl] = useState(defaultValue);
|
||||
const { formatMessage, labels } = useMessages();
|
||||
|
||||
const handleSave = () => {
|
||||
onAdd(url);
|
||||
setUrl('');
|
||||
onClose();
|
||||
};
|
||||
|
||||
const handleChange = e => {
|
||||
@ -26,25 +24,23 @@ export function UrlAddForm({ defaultValue = '', element, onAdd, onClose }) {
|
||||
};
|
||||
|
||||
return (
|
||||
<PopupForm element={element}>
|
||||
<Form>
|
||||
<FormRow label={formatMessage(labels.url)}>
|
||||
<Flexbox gap={10}>
|
||||
<TextField
|
||||
className={styles.input}
|
||||
value={url}
|
||||
onChange={handleChange}
|
||||
autoFocus={true}
|
||||
autoComplete="off"
|
||||
onKeyDown={handleKeyDown}
|
||||
/>
|
||||
<Button variant="primary" onClick={handleSave}>
|
||||
{formatMessage(labels.add)}
|
||||
</Button>
|
||||
</Flexbox>
|
||||
</FormRow>
|
||||
</Form>
|
||||
</PopupForm>
|
||||
<Form>
|
||||
<FormRow label={formatMessage(labels.url)}>
|
||||
<Flexbox gap={10}>
|
||||
<TextField
|
||||
className={styles.input}
|
||||
value={url}
|
||||
onChange={handleChange}
|
||||
autoFocus={true}
|
||||
autoComplete="off"
|
||||
onKeyDown={handleKeyDown}
|
||||
/>
|
||||
<Button variant="primary" onClick={handleSave}>
|
||||
{formatMessage(labels.add)}
|
||||
</Button>
|
||||
</Flexbox>
|
||||
</FormRow>
|
||||
</Form>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,69 +1,104 @@
|
||||
import { useContext, useRef } from 'react';
|
||||
import { useMessages } from 'hooks';
|
||||
import { Form, FormRow, FormButtons, SubmitButton, PopupTrigger, Icon, Popup } from 'react-basics';
|
||||
import { useFormat, useMessages, useFilters } from 'hooks';
|
||||
import {
|
||||
Form,
|
||||
FormRow,
|
||||
FormButtons,
|
||||
SubmitButton,
|
||||
PopupTrigger,
|
||||
Icon,
|
||||
Popup,
|
||||
TooltipPopup,
|
||||
} from 'react-basics';
|
||||
import { ReportContext } from 'components/pages/reports/Report';
|
||||
import { REPORT_PARAMETERS, WEBSITE_EVENT_FIELDS } from 'lib/constants';
|
||||
import Icons from 'components/icons';
|
||||
import BaseParameters from '../BaseParameters';
|
||||
import FieldAddForm from '../FieldAddForm';
|
||||
import ParameterList from '../ParameterList';
|
||||
import styles from './InsightsParameters.module.css';
|
||||
import PopupForm from '../PopupForm';
|
||||
import FilterSelectForm from '../FilterSelectForm';
|
||||
import FieldSelectForm from '../FieldSelectForm';
|
||||
|
||||
export function InsightsParameters() {
|
||||
const { report, runReport, updateReport, isRunning } = useContext(ReportContext);
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { formatValue } = useFormat();
|
||||
const { filterLabels } = useFilters();
|
||||
const ref = useRef(null);
|
||||
const { parameters } = report || {};
|
||||
const { websiteId, dateRange, fields, filters, groups } = parameters || {};
|
||||
const queryEnabled = websiteId && dateRange && fields?.length;
|
||||
const fieldOptions = Object.keys(WEBSITE_EVENT_FIELDS).map(key => WEBSITE_EVENT_FIELDS[key]);
|
||||
const { websiteId, dateRange, fields, filters } = parameters || {};
|
||||
const { startDate, endDate } = dateRange || {};
|
||||
const parametersSelected = websiteId && startDate && endDate;
|
||||
const queryEnabled = websiteId && dateRange && (fields?.length || filters?.length);
|
||||
|
||||
const fieldOptions = [
|
||||
{ name: 'url', type: 'string', label: formatMessage(labels.url) },
|
||||
{ name: 'title', type: 'string', label: formatMessage(labels.pageTitle) },
|
||||
{ name: 'referrer', type: 'string', label: formatMessage(labels.referrer) },
|
||||
{ name: 'query', type: 'string', label: formatMessage(labels.query) },
|
||||
{ name: 'browser', type: 'string', label: formatMessage(labels.browser) },
|
||||
{ name: 'os', type: 'string', label: formatMessage(labels.os) },
|
||||
{ name: 'device', type: 'string', label: formatMessage(labels.device) },
|
||||
{ name: 'country', type: 'string', label: formatMessage(labels.country) },
|
||||
{ name: 'region', type: 'string', label: formatMessage(labels.region) },
|
||||
{ name: 'city', type: 'string', label: formatMessage(labels.city) },
|
||||
];
|
||||
|
||||
const parameterGroups = [
|
||||
{ label: formatMessage(labels.fields), group: REPORT_PARAMETERS.fields },
|
||||
{ label: formatMessage(labels.filters), group: REPORT_PARAMETERS.filters },
|
||||
{ label: formatMessage(labels.breakdown), group: REPORT_PARAMETERS.groups },
|
||||
{ id: 'fields', label: formatMessage(labels.fields) },
|
||||
{ id: 'filters', label: formatMessage(labels.filters) },
|
||||
];
|
||||
|
||||
const parameterData = {
|
||||
fields,
|
||||
filters,
|
||||
groups,
|
||||
};
|
||||
|
||||
const handleSubmit = values => {
|
||||
runReport(values);
|
||||
};
|
||||
|
||||
const handleAdd = (group, value) => {
|
||||
const data = parameterData[group];
|
||||
const handleAdd = (id, value) => {
|
||||
const data = parameterData[id];
|
||||
|
||||
if (!data.find(({ name }) => name === value.name)) {
|
||||
updateReport({ parameters: { [group]: data.concat(value) } });
|
||||
updateReport({ parameters: { [id]: data.concat(value) } });
|
||||
}
|
||||
};
|
||||
|
||||
const handleRemove = (group, index) => {
|
||||
const data = [...parameterData[group]];
|
||||
const handleRemove = (id, index) => {
|
||||
const data = [...parameterData[id]];
|
||||
data.splice(index, 1);
|
||||
updateReport({ parameters: { [group]: data } });
|
||||
updateReport({ parameters: { [id]: data } });
|
||||
};
|
||||
|
||||
const AddButton = ({ group }) => {
|
||||
const AddButton = ({ id }) => {
|
||||
return (
|
||||
<PopupTrigger>
|
||||
<Icon>
|
||||
<Icons.Plus />
|
||||
</Icon>
|
||||
<Popup position="bottom" alignment="start">
|
||||
{(close, element) => {
|
||||
<TooltipPopup label={formatMessage(labels.add)} position="top">
|
||||
<Icon>
|
||||
<Icons.Plus />
|
||||
</Icon>
|
||||
</TooltipPopup>
|
||||
<Popup position="bottom" alignment="start" className={styles.popup}>
|
||||
{close => {
|
||||
return (
|
||||
<FieldAddForm
|
||||
fields={fieldOptions}
|
||||
group={group}
|
||||
element={element}
|
||||
onAdd={handleAdd}
|
||||
onClose={close}
|
||||
/>
|
||||
<PopupForm onClose={close}>
|
||||
{id === 'fields' && (
|
||||
<FieldSelectForm
|
||||
items={fieldOptions}
|
||||
onSelect={handleAdd.bind(null, id)}
|
||||
showType={false}
|
||||
/>
|
||||
)}
|
||||
{id === 'filters' && (
|
||||
<FilterSelectForm
|
||||
websiteId={websiteId}
|
||||
items={fieldOptions}
|
||||
onSelect={handleAdd.bind(null, id)}
|
||||
/>
|
||||
)}
|
||||
</PopupForm>
|
||||
);
|
||||
}}
|
||||
</Popup>
|
||||
@ -74,41 +109,33 @@ export function InsightsParameters() {
|
||||
return (
|
||||
<Form ref={ref} values={parameters} onSubmit={handleSubmit}>
|
||||
<BaseParameters />
|
||||
{parameterGroups.map(({ label, group }) => {
|
||||
return (
|
||||
<FormRow key={label} label={label} action={<AddButton group={group} onAdd={handleAdd} />}>
|
||||
<ParameterList
|
||||
items={parameterData[group]}
|
||||
onRemove={index => handleRemove(group, index)}
|
||||
>
|
||||
{({ name, value }) => {
|
||||
return (
|
||||
<div className={styles.parameter}>
|
||||
{group === REPORT_PARAMETERS.fields && (
|
||||
<>
|
||||
<div>{name}</div>
|
||||
<div className={styles.op}>{value}</div>
|
||||
</>
|
||||
)}
|
||||
{group === REPORT_PARAMETERS.filters && (
|
||||
<>
|
||||
<div>{name}</div>
|
||||
<div className={styles.op}>{value[0]}</div>
|
||||
<div>{value[1]}</div>
|
||||
</>
|
||||
)}
|
||||
{group === REPORT_PARAMETERS.groups && (
|
||||
<>
|
||||
<div>{name}</div>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}}
|
||||
</ParameterList>
|
||||
</FormRow>
|
||||
);
|
||||
})}
|
||||
{parametersSelected &&
|
||||
parameterGroups.map(({ id, label }) => {
|
||||
return (
|
||||
<FormRow key={label} label={label} action={<AddButton id={id} onAdd={handleAdd} />}>
|
||||
<ParameterList items={parameterData[id]} onRemove={index => handleRemove(id, index)}>
|
||||
{({ name, filter, value }) => {
|
||||
return (
|
||||
<div className={styles.parameter}>
|
||||
{id === 'fields' && (
|
||||
<>
|
||||
<div>{fieldOptions.find(f => f.name === name)?.label}</div>
|
||||
</>
|
||||
)}
|
||||
{id === 'filters' && (
|
||||
<>
|
||||
<div>{fieldOptions.find(f => f.name === name)?.label}</div>
|
||||
<div className={styles.op}>{filterLabels[filter]}</div>
|
||||
<div>{formatValue(value, name)}</div>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}}
|
||||
</ParameterList>
|
||||
</FormRow>
|
||||
);
|
||||
})}
|
||||
<FormButtons>
|
||||
<SubmitButton variant="primary" disabled={!queryEnabled} loading={isRunning}>
|
||||
{formatMessage(labels.runQuery)}
|
||||
|
@ -10,3 +10,8 @@
|
||||
.op {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.popup {
|
||||
margin-top: -10px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
@ -5,10 +5,11 @@ import ReportBody from '../ReportBody';
|
||||
import InsightsParameters from './InsightsParameters';
|
||||
import InsightsTable from './InsightsTable';
|
||||
import Lightbulb from 'assets/lightbulb.svg';
|
||||
import { REPORT_TYPES } from 'lib/constants';
|
||||
|
||||
const defaultParameters = {
|
||||
type: 'insights',
|
||||
parameters: { fields: [], filters: [], groups: [] },
|
||||
type: REPORT_TYPES.insights,
|
||||
parameters: { fields: [], filters: [] },
|
||||
};
|
||||
|
||||
export default function InsightsReport({ reportId }) {
|
||||
|
@ -1,17 +1,47 @@
|
||||
import { useContext } from 'react';
|
||||
import { useContext, useEffect, useState } from 'react';
|
||||
import { GridTable, GridColumn } from 'react-basics';
|
||||
import { useMessages } from 'hooks';
|
||||
import { useFormat, useMessages } from 'hooks';
|
||||
import { ReportContext } from '../Report';
|
||||
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
|
||||
|
||||
export function InsightsTable() {
|
||||
const [fields, setFields] = useState();
|
||||
const { report } = useContext(ReportContext);
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { formatValue } = useFormat();
|
||||
|
||||
useEffect(
|
||||
() => {
|
||||
setFields(report?.parameters?.fields);
|
||||
},
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
[report?.data],
|
||||
);
|
||||
|
||||
if (!fields || !report?.parameters) {
|
||||
return <EmptyPlaceholder />;
|
||||
}
|
||||
|
||||
return (
|
||||
<GridTable data={report?.data || []}>
|
||||
<GridColumn name="field" label={formatMessage(labels.field)} />
|
||||
<GridColumn name="value" label={formatMessage(labels.value)} />
|
||||
<GridColumn name="total" label={formatMessage(labels.total)} />
|
||||
{fields.map(({ name, label }) => {
|
||||
return (
|
||||
<GridColumn key={name} name={name} label={label}>
|
||||
{row => formatValue(row[name], name)}
|
||||
</GridColumn>
|
||||
);
|
||||
})}
|
||||
<GridColumn
|
||||
name="visitors"
|
||||
label={formatMessage(labels.visitors)}
|
||||
width="100px"
|
||||
alignment="end"
|
||||
>
|
||||
{row => row.visitors.toLocaleString()}
|
||||
</GridColumn>
|
||||
<GridColumn name="views" label={formatMessage(labels.views)} width="100px" alignment="end">
|
||||
{row => row.views.toLocaleString()}
|
||||
</GridColumn>
|
||||
</GridTable>
|
||||
);
|
||||
}
|
||||
|
46
components/pages/reports/retention/RetentionParameters.js
Normal file
46
components/pages/reports/retention/RetentionParameters.js
Normal file
@ -0,0 +1,46 @@
|
||||
import { useContext, useRef } from 'react';
|
||||
import { useMessages } from 'hooks';
|
||||
import { Form, FormButtons, FormRow, SubmitButton } from 'react-basics';
|
||||
import { ReportContext } from 'components/pages/reports/Report';
|
||||
import { MonthSelect } from 'components/input/MonthSelect';
|
||||
import BaseParameters from '../BaseParameters';
|
||||
import { parseDateRange } from 'lib/date';
|
||||
|
||||
export function RetentionParameters() {
|
||||
const { report, runReport, isRunning, updateReport } = useContext(ReportContext);
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const ref = useRef(null);
|
||||
|
||||
const { parameters } = report || {};
|
||||
const { websiteId, dateRange } = parameters || {};
|
||||
const { startDate } = dateRange || {};
|
||||
const queryDisabled = !websiteId || !dateRange;
|
||||
|
||||
const handleSubmit = (data, e) => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
if (!queryDisabled) {
|
||||
runReport(data);
|
||||
}
|
||||
};
|
||||
|
||||
const handleDateChange = value => {
|
||||
updateReport({ parameters: { dateRange: { ...parseDateRange(value) } } });
|
||||
};
|
||||
|
||||
return (
|
||||
<Form ref={ref} values={parameters} onSubmit={handleSubmit} preventSubmit={true}>
|
||||
<BaseParameters showDateSelect={false} />
|
||||
<FormRow label={formatMessage(labels.date)}>
|
||||
<MonthSelect date={startDate} onChange={handleDateChange} />
|
||||
</FormRow>
|
||||
<FormButtons>
|
||||
<SubmitButton variant="primary" disabled={queryDisabled} loading={isRunning}>
|
||||
{formatMessage(labels.runQuery)}
|
||||
</SubmitButton>
|
||||
</FormButtons>
|
||||
</Form>
|
||||
);
|
||||
}
|
||||
|
||||
export default RetentionParameters;
|
33
components/pages/reports/retention/RetentionReport.js
Normal file
33
components/pages/reports/retention/RetentionReport.js
Normal file
@ -0,0 +1,33 @@
|
||||
import RetentionTable from './RetentionTable';
|
||||
import RetentionParameters from './RetentionParameters';
|
||||
import Report from '../Report';
|
||||
import ReportHeader from '../ReportHeader';
|
||||
import ReportMenu from '../ReportMenu';
|
||||
import ReportBody from '../ReportBody';
|
||||
import Magnet from 'assets/magnet.svg';
|
||||
import { REPORT_TYPES } from 'lib/constants';
|
||||
import { parseDateRange } from 'lib/date';
|
||||
import { endOfMonth, startOfMonth } from 'date-fns';
|
||||
|
||||
const defaultParameters = {
|
||||
type: REPORT_TYPES.retention,
|
||||
parameters: {
|
||||
dateRange: parseDateRange(
|
||||
`range:${startOfMonth(new Date()).getTime()}:${endOfMonth(new Date()).getTime()}`,
|
||||
),
|
||||
},
|
||||
};
|
||||
|
||||
export default function RetentionReport({ reportId }) {
|
||||
return (
|
||||
<Report reportId={reportId} defaultParameters={defaultParameters}>
|
||||
<ReportHeader icon={<Magnet />} />
|
||||
<ReportMenu>
|
||||
<RetentionParameters />
|
||||
</ReportMenu>
|
||||
<ReportBody>
|
||||
<RetentionTable />
|
||||
</ReportBody>
|
||||
</Report>
|
||||
);
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
.filters {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
border: 1px solid var(--base400);
|
||||
border-radius: var(--border-radius);
|
||||
line-height: 32px;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
}
|
78
components/pages/reports/retention/RetentionTable.js
Normal file
78
components/pages/reports/retention/RetentionTable.js
Normal file
@ -0,0 +1,78 @@
|
||||
import { useContext } from 'react';
|
||||
import classNames from 'classnames';
|
||||
import { ReportContext } from '../Report';
|
||||
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
|
||||
import { useMessages } from 'hooks';
|
||||
import { formatDate } from 'lib/date';
|
||||
import styles from './RetentionTable.module.css';
|
||||
|
||||
export function RetentionTable() {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { report } = useContext(ReportContext);
|
||||
const { data } = report || {};
|
||||
|
||||
if (!data) {
|
||||
return <EmptyPlaceholder />;
|
||||
}
|
||||
|
||||
const days = [1, 2, 3, 4, 5, 6, 7, 14, 21, 28];
|
||||
|
||||
const rows = data.reduce((arr, row) => {
|
||||
const { date, visitors, day } = row;
|
||||
if (day === 0) {
|
||||
return arr.concat({
|
||||
date,
|
||||
visitors,
|
||||
records: days
|
||||
.reduce((arr, day) => {
|
||||
arr[day] = data.find(x => x.date === date && x.day === day);
|
||||
return arr;
|
||||
}, [])
|
||||
.filter(n => n),
|
||||
});
|
||||
}
|
||||
return arr;
|
||||
}, []);
|
||||
|
||||
const totalDays = rows.length;
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className={styles.table}>
|
||||
<div className={classNames(styles.row, styles.header)}>
|
||||
<div className={styles.date}>{formatMessage(labels.date)}</div>
|
||||
<div className={styles.visitors}>{formatMessage(labels.visitors)}</div>
|
||||
{days.map(n => (
|
||||
<div key={n} className={styles.day}>
|
||||
{formatMessage(labels.day)} {n}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
{rows.map(({ date, visitors, records }, rowIndex) => {
|
||||
return (
|
||||
<div key={rowIndex} className={styles.row}>
|
||||
<div className={styles.date}>{formatDate(`${date} 00:00:00`, 'PP')}</div>
|
||||
<div className={styles.visitors}>{visitors}</div>
|
||||
{days.map(day => {
|
||||
if (totalDays - rowIndex < day) {
|
||||
return null;
|
||||
}
|
||||
const percentage = records[day]?.percentage;
|
||||
return (
|
||||
<div
|
||||
key={day}
|
||||
className={classNames(styles.cell, { [styles.empty]: !percentage })}
|
||||
>
|
||||
{percentage ? `${percentage.toFixed(2)}%` : ''}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default RetentionTable;
|
52
components/pages/reports/retention/RetentionTable.module.css
Normal file
52
components/pages/reports/retention/RetentionTable.module.css
Normal file
@ -0,0 +1,52 @@
|
||||
.table {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.header {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 1px;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.cell {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
background: var(--blue200);
|
||||
border-radius: var(--border-radius);
|
||||
}
|
||||
|
||||
.date {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
min-width: 160px;
|
||||
}
|
||||
|
||||
.visitors {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
.day {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
text-align: center;
|
||||
font-size: var(--font-size-sm);
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.empty {
|
||||
background: var(--blue100);
|
||||
}
|
@ -12,6 +12,8 @@ export function TeamAddWebsiteForm({ teamId, onSave, onClose }) {
|
||||
const [newWebsites, setNewWebsites] = useState([]);
|
||||
const formRef = useRef();
|
||||
|
||||
const hasData = websites && websites.data.length > 0;
|
||||
|
||||
const handleSubmit = () => {
|
||||
mutate(
|
||||
{ websiteIds: newWebsites },
|
||||
@ -42,20 +44,22 @@ export function TeamAddWebsiteForm({ teamId, onSave, onClose }) {
|
||||
|
||||
return (
|
||||
<>
|
||||
<Form onSubmit={handleSubmit} error={error} ref={formRef}>
|
||||
<FormRow label={formatMessage(labels.websites)}>
|
||||
<Dropdown items={websites} onChange={handleAddWebsite} style={{ width: 300 }}>
|
||||
{({ id, name }) => <Item key={id}>{name}</Item>}
|
||||
</Dropdown>
|
||||
</FormRow>
|
||||
<WebsiteTags items={websites} websites={newWebsites} onClick={handleRemoveWebsite} />
|
||||
<FormButtons flex>
|
||||
<SubmitButton disabled={newWebsites && newWebsites.length === 0}>
|
||||
{formatMessage(labels.addWebsite)}
|
||||
</SubmitButton>
|
||||
<Button onClick={onClose}>{formatMessage(labels.cancel)}</Button>
|
||||
</FormButtons>
|
||||
</Form>
|
||||
{hasData && (
|
||||
<Form onSubmit={handleSubmit} error={error} ref={formRef}>
|
||||
<FormRow label={formatMessage(labels.websites)}>
|
||||
<Dropdown items={websites.data} onChange={handleAddWebsite} style={{ width: 300 }}>
|
||||
{({ id, name }) => <Item key={id}>{name}</Item>}
|
||||
</Dropdown>
|
||||
</FormRow>
|
||||
<WebsiteTags items={websites.data} websites={newWebsites} onClick={handleRemoveWebsite} />
|
||||
<FormButtons flex>
|
||||
<SubmitButton disabled={newWebsites && newWebsites.length === 0}>
|
||||
{formatMessage(labels.addWebsite)}
|
||||
</SubmitButton>
|
||||
<Button onClick={onClose}>{formatMessage(labels.cancel)}</Button>
|
||||
</FormButtons>
|
||||
</Form>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -2,13 +2,22 @@ import { Loading, useToasts } from 'react-basics';
|
||||
import TeamMembersTable from 'components/pages/settings/teams/TeamMembersTable';
|
||||
import useApi from 'hooks/useApi';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import useApiFilter from 'hooks/useApiFilter';
|
||||
|
||||
export function TeamMembers({ teamId, readOnly }) {
|
||||
const { showToast } = useToasts();
|
||||
const { get, useQuery } = useApi();
|
||||
const { formatMessage, messages } = useMessages();
|
||||
const { data, isLoading, refetch } = useQuery(['teams:users', teamId], () =>
|
||||
get(`/teams/${teamId}/users`),
|
||||
const { filter, page, pageSize, handleFilterChange, handlePageChange, handlePageSizeChange } =
|
||||
useApiFilter();
|
||||
const { get, useQuery } = useApi();
|
||||
const { data, isLoading, refetch } = useQuery(
|
||||
['teams:users', teamId, filter, page, pageSize],
|
||||
() =>
|
||||
get(`/teams/${teamId}/users`, {
|
||||
filter,
|
||||
page,
|
||||
pageSize,
|
||||
}),
|
||||
);
|
||||
|
||||
if (isLoading) {
|
||||
@ -22,7 +31,15 @@ export function TeamMembers({ teamId, readOnly }) {
|
||||
|
||||
return (
|
||||
<>
|
||||
<TeamMembersTable onSave={handleSave} data={data} readOnly={readOnly} />
|
||||
<TeamMembersTable
|
||||
onSave={handleSave}
|
||||
data={data}
|
||||
readOnly={readOnly}
|
||||
onFilterChange={handleFilterChange}
|
||||
onPageChange={handlePageChange}
|
||||
onPageSizeChange={handlePageSizeChange}
|
||||
filterValue={filter}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -4,7 +4,15 @@ import { ROLES } from 'lib/constants';
|
||||
import TeamMemberRemoveButton from './TeamMemberRemoveButton';
|
||||
import SettingsTable from 'components/common/SettingsTable';
|
||||
|
||||
export function TeamMembersTable({ data = [], onSave, readOnly }) {
|
||||
export function TeamMembersTable({
|
||||
data = [],
|
||||
onSave,
|
||||
readOnly,
|
||||
filterValue,
|
||||
onFilterChange,
|
||||
onPageChange,
|
||||
onPageSizeChange,
|
||||
}) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { user } = useUser();
|
||||
|
||||
@ -16,7 +24,7 @@ export function TeamMembersTable({ data = [], onSave, readOnly }) {
|
||||
|
||||
const cellRender = (row, data, key) => {
|
||||
if (key === 'username') {
|
||||
return row?.user?.username;
|
||||
return row?.username;
|
||||
}
|
||||
if (key === 'role') {
|
||||
return formatMessage(
|
||||
@ -27,13 +35,23 @@ export function TeamMembersTable({ data = [], onSave, readOnly }) {
|
||||
};
|
||||
|
||||
return (
|
||||
<SettingsTable data={data} columns={columns} cellRender={cellRender}>
|
||||
<SettingsTable
|
||||
data={data}
|
||||
columns={columns}
|
||||
cellRender={cellRender}
|
||||
showSearch={true}
|
||||
showPaging={true}
|
||||
onFilterChange={onFilterChange}
|
||||
onPageChange={onPageChange}
|
||||
onPageSizeChange={onPageSizeChange}
|
||||
filterValue={filterValue}
|
||||
>
|
||||
{row => {
|
||||
return (
|
||||
!readOnly && (
|
||||
<TeamMemberRemoveButton
|
||||
teamId={row.teamId}
|
||||
userId={row.userId}
|
||||
userId={row.id}
|
||||
disabled={user.id === row?.user?.id || row.role === ROLES.teamOwner}
|
||||
onSave={onSave}
|
||||
/>
|
||||
|
@ -13,13 +13,22 @@ import TeamWebsitesTable from 'components/pages/settings/teams/TeamWebsitesTable
|
||||
import TeamAddWebsiteForm from 'components/pages/settings/teams/TeamAddWebsiteForm';
|
||||
import useApi from 'hooks/useApi';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import useApiFilter from 'hooks/useApiFilter';
|
||||
|
||||
export function TeamWebsites({ teamId }) {
|
||||
const { showToast } = useToasts();
|
||||
const { formatMessage, labels, messages } = useMessages();
|
||||
const { filter, page, pageSize, handleFilterChange, handlePageChange, handlePageSizeChange } =
|
||||
useApiFilter();
|
||||
const { get, useQuery } = useApi();
|
||||
const { data, isLoading, refetch } = useQuery(['teams:websites', teamId], () =>
|
||||
get(`/teams/${teamId}/websites`),
|
||||
const { data, isLoading, refetch } = useQuery(
|
||||
['teams:websites', teamId, filter, page, pageSize],
|
||||
() =>
|
||||
get(`/teams/${teamId}/websites`, {
|
||||
filter,
|
||||
page,
|
||||
pageSize,
|
||||
}),
|
||||
);
|
||||
const hasData = data && data.length !== 0;
|
||||
|
||||
@ -49,7 +58,17 @@ export function TeamWebsites({ teamId }) {
|
||||
return (
|
||||
<div>
|
||||
<ActionForm description={formatMessage(messages.teamWebsitesInfo)}>{addButton}</ActionForm>
|
||||
{hasData && <TeamWebsitesTable teamId={teamId} data={data} onSave={handleSave} />}
|
||||
{hasData && (
|
||||
<TeamWebsitesTable
|
||||
teamId={teamId}
|
||||
data={data}
|
||||
onSave={handleSave}
|
||||
onFilterChange={handleFilterChange}
|
||||
onPageChange={handlePageChange}
|
||||
onPageSizeChange={handlePageSizeChange}
|
||||
filterValue={filter}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -6,9 +6,17 @@ import TeamWebsiteRemoveButton from './TeamWebsiteRemoveButton';
|
||||
import SettingsTable from 'components/common/SettingsTable';
|
||||
import useConfig from 'hooks/useConfig';
|
||||
|
||||
export function TeamWebsitesTable({ data = [], onSave }) {
|
||||
export function TeamWebsitesTable({
|
||||
data = [],
|
||||
onSave,
|
||||
filterValue,
|
||||
onFilterChange,
|
||||
onPageChange,
|
||||
onPageSizeChange,
|
||||
}) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { openExternal } = useConfig();
|
||||
|
||||
const { user } = useUser();
|
||||
const columns = [
|
||||
{ name: 'name', label: formatMessage(labels.name) },
|
||||
@ -17,11 +25,19 @@ export function TeamWebsitesTable({ data = [], onSave }) {
|
||||
];
|
||||
|
||||
return (
|
||||
<SettingsTable columns={columns} data={data}>
|
||||
<SettingsTable
|
||||
columns={columns}
|
||||
data={data}
|
||||
showSearch={true}
|
||||
showPaging={true}
|
||||
onFilterChange={onFilterChange}
|
||||
onPageChange={onPageChange}
|
||||
onPageSizeChange={onPageSizeChange}
|
||||
filterValue={filterValue}
|
||||
>
|
||||
{row => {
|
||||
const { teamId } = row;
|
||||
const { id: websiteId, name, domain, userId } = row.website;
|
||||
const { teamUser } = row.team;
|
||||
const { id: teamId, teamUser } = row.teamWebsite[0].team;
|
||||
const { id: websiteId, name, domain, userId } = row;
|
||||
const owner = teamUser[0];
|
||||
const canRemove = user.id === userId || user.id === owner.userId;
|
||||
|
||||
|
@ -1,24 +1,37 @@
|
||||
import { useState } from 'react';
|
||||
import { Button, Icon, Modal, ModalTrigger, useToasts, Text, Flexbox } from 'react-basics';
|
||||
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
|
||||
import TeamAddForm from 'components/pages/settings/teams/TeamAddForm';
|
||||
import PageHeader from 'components/layout/PageHeader';
|
||||
import TeamsTable from 'components/pages/settings/teams/TeamsTable';
|
||||
import Page from 'components/layout/Page';
|
||||
import Icons from 'components/icons';
|
||||
import TeamJoinForm from './TeamJoinForm';
|
||||
import Page from 'components/layout/Page';
|
||||
import PageHeader from 'components/layout/PageHeader';
|
||||
import TeamAddForm from 'components/pages/settings/teams/TeamAddForm';
|
||||
import TeamsTable from 'components/pages/settings/teams/TeamsTable';
|
||||
import useApi from 'hooks/useApi';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import { ROLES } from 'lib/constants';
|
||||
import useUser from 'hooks/useUser';
|
||||
import { ROLES } from 'lib/constants';
|
||||
import { useState } from 'react';
|
||||
import { Button, Flexbox, Icon, Modal, ModalTrigger, Text, useToasts } from 'react-basics';
|
||||
import TeamJoinForm from './TeamJoinForm';
|
||||
import useApiFilter from 'hooks/useApiFilter';
|
||||
|
||||
export default function TeamsList() {
|
||||
const { user } = useUser();
|
||||
const { formatMessage, labels, messages } = useMessages();
|
||||
const { filter, page, pageSize, handleFilterChange, handlePageChange, handlePageSizeChange } =
|
||||
useApiFilter();
|
||||
const [update, setUpdate] = useState(0);
|
||||
|
||||
const { get, useQuery } = useApi();
|
||||
const { data, isLoading, error } = useQuery(['teams', update], () => get(`/teams`));
|
||||
const hasData = data && data.length !== 0;
|
||||
const { data, isLoading, error } = useQuery(['teams', update, filter, page, pageSize], () => {
|
||||
return get(`/teams`, {
|
||||
filter,
|
||||
page,
|
||||
pageSize,
|
||||
});
|
||||
});
|
||||
|
||||
const hasData = data && data?.data.length !== 0;
|
||||
const isFiltered = filter;
|
||||
|
||||
const { showToast } = useToasts();
|
||||
|
||||
const handleSave = () => {
|
||||
@ -71,15 +84,26 @@ export default function TeamsList() {
|
||||
return (
|
||||
<Page loading={isLoading} error={error}>
|
||||
<PageHeader title={formatMessage(labels.teams)}>
|
||||
{hasData && (
|
||||
{(hasData || isFiltered) && (
|
||||
<Flexbox gap={10}>
|
||||
{joinButton}
|
||||
{createButton}
|
||||
</Flexbox>
|
||||
)}
|
||||
</PageHeader>
|
||||
{hasData && <TeamsTable data={data} onDelete={handleDelete} />}
|
||||
{!hasData && (
|
||||
|
||||
{(hasData || isFiltered) && (
|
||||
<TeamsTable
|
||||
data={data}
|
||||
onDelete={handleDelete}
|
||||
onFilterChange={handleFilterChange}
|
||||
onPageChange={handlePageChange}
|
||||
onPageSizeChange={handlePageSizeChange}
|
||||
filterValue={filter}
|
||||
/>
|
||||
)}
|
||||
|
||||
{!hasData && !isFiltered && (
|
||||
<EmptyPlaceholder message={formatMessage(messages.noTeams)}>
|
||||
<Flexbox gap={10}>
|
||||
{joinButton}
|
||||
|
@ -1,14 +1,21 @@
|
||||
import SettingsTable from 'components/common/SettingsTable';
|
||||
import useLocale from 'hooks/useLocale';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import useUser from 'hooks/useUser';
|
||||
import { ROLES } from 'lib/constants';
|
||||
import Link from 'next/link';
|
||||
import { Button, Icon, Icons, Modal, ModalTrigger, Text } from 'react-basics';
|
||||
import TeamDeleteForm from './TeamDeleteForm';
|
||||
import TeamLeaveForm from './TeamLeaveForm';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import useUser from 'hooks/useUser';
|
||||
import { ROLES } from 'lib/constants';
|
||||
import SettingsTable from 'components/common/SettingsTable';
|
||||
import useLocale from 'hooks/useLocale';
|
||||
|
||||
export function TeamsTable({ data = [], onDelete }) {
|
||||
export function TeamsTable({
|
||||
data = { data: [] },
|
||||
onDelete,
|
||||
filterValue,
|
||||
onFilterChange,
|
||||
onPageChange,
|
||||
onPageSizeChange,
|
||||
}) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { user } = useUser();
|
||||
const { dir } = useLocale();
|
||||
@ -27,7 +34,17 @@ export function TeamsTable({ data = [], onDelete }) {
|
||||
};
|
||||
|
||||
return (
|
||||
<SettingsTable data={data} columns={columns} cellRender={cellRender}>
|
||||
<SettingsTable
|
||||
data={data}
|
||||
columns={columns}
|
||||
cellRender={cellRender}
|
||||
showSearch={true}
|
||||
showPaging={true}
|
||||
onFilterChange={onFilterChange}
|
||||
onPageChange={onPageChange}
|
||||
onPageSizeChange={onPageSizeChange}
|
||||
filterValue={filterValue}
|
||||
>
|
||||
{row => {
|
||||
const { id, teamUser } = row;
|
||||
const owner = teamUser.find(({ role }) => role === ROLES.teamOwner);
|
||||
|
@ -7,14 +7,27 @@ import UserAddButton from './UserAddButton';
|
||||
import useApi from 'hooks/useApi';
|
||||
import useUser from 'hooks/useUser';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import useApiFilter from 'hooks/useApiFilter';
|
||||
|
||||
export function UsersList() {
|
||||
const { formatMessage, labels, messages } = useMessages();
|
||||
const { user } = useUser();
|
||||
const { filter, page, pageSize, handleFilterChange, handlePageChange, handlePageSizeChange } =
|
||||
useApiFilter();
|
||||
|
||||
const { get, useQuery } = useApi();
|
||||
const { data, isLoading, error, refetch } = useQuery(['user'], () => get(`/users`), {
|
||||
enabled: !!user,
|
||||
});
|
||||
const { data, isLoading, error, refetch } = useQuery(
|
||||
['user', filter, page, pageSize],
|
||||
() =>
|
||||
get(`/users`, {
|
||||
filter,
|
||||
page,
|
||||
pageSize,
|
||||
}),
|
||||
{
|
||||
enabled: !!user,
|
||||
},
|
||||
);
|
||||
const { showToast } = useToasts();
|
||||
const hasData = data && data.length !== 0;
|
||||
|
||||
@ -33,8 +46,17 @@ export function UsersList() {
|
||||
<PageHeader title={formatMessage(labels.users)}>
|
||||
<UserAddButton onSave={handleSave} />
|
||||
</PageHeader>
|
||||
{hasData && <UsersTable data={data} onDelete={handleDelete} />}
|
||||
{!hasData && (
|
||||
{(hasData || filter) && (
|
||||
<UsersTable
|
||||
data={data}
|
||||
onDelete={handleDelete}
|
||||
onFilterChange={handleFilterChange}
|
||||
onPageChange={handlePageChange}
|
||||
onPageSizeChange={handlePageSizeChange}
|
||||
filterValue={filter}
|
||||
/>
|
||||
)}
|
||||
{!hasData && !filter && (
|
||||
<EmptyPlaceholder message={formatMessage(messages.noUsers)}>
|
||||
<UserAddButton onSave={handleSave} />
|
||||
</EmptyPlaceholder>
|
||||
|
@ -8,7 +8,14 @@ import useMessages from 'hooks/useMessages';
|
||||
import SettingsTable from 'components/common/SettingsTable';
|
||||
import useLocale from 'hooks/useLocale';
|
||||
|
||||
export function UsersTable({ data = [], onDelete }) {
|
||||
export function UsersTable({
|
||||
data = { data: [] },
|
||||
onDelete,
|
||||
filterValue,
|
||||
onFilterChange,
|
||||
onPageChange,
|
||||
onPageSizeChange,
|
||||
}) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { user } = useUser();
|
||||
const { dateLocale } = useLocale();
|
||||
@ -36,7 +43,17 @@ export function UsersTable({ data = [], onDelete }) {
|
||||
};
|
||||
|
||||
return (
|
||||
<SettingsTable data={data} columns={columns} cellRender={cellRender}>
|
||||
<SettingsTable
|
||||
data={data}
|
||||
columns={columns}
|
||||
cellRender={cellRender}
|
||||
showSearch={true}
|
||||
showPaging={true}
|
||||
onFilterChange={onFilterChange}
|
||||
onPageChange={onPageChange}
|
||||
onPageSizeChange={onPageSizeChange}
|
||||
filterValue={filterValue}
|
||||
>
|
||||
{(row, keys, rowIndex) => {
|
||||
return (
|
||||
<>
|
||||
|
@ -1,25 +1,41 @@
|
||||
import { Button, Icon, Text, Modal, ModalTrigger, useToasts, Icons } from 'react-basics';
|
||||
import Page from 'components/layout/Page';
|
||||
import PageHeader from 'components/layout/PageHeader';
|
||||
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
|
||||
import WebsiteAddForm from 'components/pages/settings/websites/WebsiteAddForm';
|
||||
import WebsitesTable from 'components/pages/settings/websites/WebsitesTable';
|
||||
import useApi from 'hooks/useApi';
|
||||
import useUser from 'hooks/useUser';
|
||||
import useApiFilter from 'hooks/useApiFilter';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import useUser from 'hooks/useUser';
|
||||
import { ROLES } from 'lib/constants';
|
||||
import { Button, Icon, Icons, Modal, ModalTrigger, Text, useToasts } from 'react-basics';
|
||||
|
||||
export function WebsitesList() {
|
||||
export function WebsitesList({
|
||||
showTeam,
|
||||
showEditButton = true,
|
||||
showHeader = true,
|
||||
includeTeams,
|
||||
onlyTeams,
|
||||
fetch,
|
||||
}) {
|
||||
const { formatMessage, labels, messages } = useMessages();
|
||||
const { user } = useUser();
|
||||
|
||||
const { filter, page, pageSize, handleFilterChange, handlePageChange, handlePageSizeChange } =
|
||||
useApiFilter();
|
||||
const { get, useQuery } = useApi();
|
||||
const { data, isLoading, error, refetch } = useQuery(
|
||||
['websites', user?.id],
|
||||
() => get(`/users/${user?.id}/websites`),
|
||||
['websites', fetch, user?.id, filter, page, pageSize, includeTeams, onlyTeams],
|
||||
() =>
|
||||
get(`/users/${user?.id}/websites`, {
|
||||
filter,
|
||||
page,
|
||||
pageSize,
|
||||
includeTeams,
|
||||
onlyTeams,
|
||||
}),
|
||||
{ enabled: !!user },
|
||||
);
|
||||
const { showToast } = useToasts();
|
||||
const hasData = data && data.length !== 0;
|
||||
|
||||
const handleSave = async () => {
|
||||
await refetch();
|
||||
@ -46,13 +62,16 @@ export function WebsitesList() {
|
||||
|
||||
return (
|
||||
<Page loading={isLoading} error={error}>
|
||||
<PageHeader title={formatMessage(labels.websites)}>{addButton}</PageHeader>
|
||||
{hasData && <WebsitesTable data={data} />}
|
||||
{!hasData && (
|
||||
<EmptyPlaceholder message={formatMessage(messages.noWebsitesConfigured)}>
|
||||
{addButton}
|
||||
</EmptyPlaceholder>
|
||||
)}
|
||||
{showHeader && <PageHeader title={formatMessage(labels.websites)}>{addButton}</PageHeader>}
|
||||
<WebsitesTable
|
||||
data={data}
|
||||
showTeam={showTeam}
|
||||
showEditButton={showEditButton}
|
||||
onFilterChange={handleFilterChange}
|
||||
onPageChange={handlePageChange}
|
||||
onPageSizeChange={handlePageSizeChange}
|
||||
filterValue={filter}
|
||||
/>
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
@ -1,46 +1,89 @@
|
||||
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
|
||||
import Link from 'next/link';
|
||||
import { Button, Text, Icon, Icons } from 'react-basics';
|
||||
import SettingsTable from 'components/common/SettingsTable';
|
||||
import useMessages from 'hooks/useMessages';
|
||||
import useConfig from 'hooks/useConfig';
|
||||
import useUser from 'hooks/useUser';
|
||||
|
||||
export function WebsitesTable({ data = [] }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
export function WebsitesTable({
|
||||
data = [],
|
||||
filterValue,
|
||||
onFilterChange,
|
||||
onPageChange,
|
||||
onPageSizeChange,
|
||||
showTeam,
|
||||
showEditButton,
|
||||
}) {
|
||||
const { formatMessage, labels, messages } = useMessages();
|
||||
const { openExternal } = useConfig();
|
||||
const { user } = useUser();
|
||||
|
||||
const showTable = data && (filterValue || data?.data.length !== 0);
|
||||
|
||||
const teamColumns = [
|
||||
{ name: 'teamName', label: formatMessage(labels.teamName) },
|
||||
{ name: 'owner', label: formatMessage(labels.owner) },
|
||||
];
|
||||
|
||||
const columns = [
|
||||
{ name: 'name', label: formatMessage(labels.name) },
|
||||
{ name: 'domain', label: formatMessage(labels.domain) },
|
||||
...(showTeam ? teamColumns : []),
|
||||
{ name: 'action', label: ' ' },
|
||||
];
|
||||
|
||||
return (
|
||||
<SettingsTable columns={columns} data={data}>
|
||||
{row => {
|
||||
const { id } = row;
|
||||
<>
|
||||
{showTable && (
|
||||
<SettingsTable
|
||||
columns={columns}
|
||||
data={data}
|
||||
showSearch={true}
|
||||
showPaging={true}
|
||||
onFilterChange={onFilterChange}
|
||||
onPageChange={onPageChange}
|
||||
onPageSizeChange={onPageSizeChange}
|
||||
filterValue={filterValue}
|
||||
>
|
||||
{row => {
|
||||
const {
|
||||
id,
|
||||
teamWebsite,
|
||||
user: { username, id: ownerId },
|
||||
} = row;
|
||||
if (showTeam) {
|
||||
row.teamName = teamWebsite[0]?.team.name;
|
||||
row.owner = username;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<Link href={`/settings/websites/${id}`}>
|
||||
<Button>
|
||||
<Icon>
|
||||
<Icons.Edit />
|
||||
</Icon>
|
||||
<Text>{formatMessage(labels.edit)}</Text>
|
||||
</Button>
|
||||
</Link>
|
||||
<Link href={`/websites/${id}`} target={openExternal ? '_blank' : null}>
|
||||
<Button>
|
||||
<Icon>
|
||||
<Icons.External />
|
||||
</Icon>
|
||||
<Text>{formatMessage(labels.view)}</Text>
|
||||
</Button>
|
||||
</Link>
|
||||
</>
|
||||
);
|
||||
}}
|
||||
</SettingsTable>
|
||||
return (
|
||||
<>
|
||||
{showEditButton && (!showTeam || ownerId === user.id) && (
|
||||
<Link href={`/settings/websites/${id}`}>
|
||||
<Button>
|
||||
<Icon>
|
||||
<Icons.Edit />
|
||||
</Icon>
|
||||
<Text>{formatMessage(labels.edit)}</Text>
|
||||
</Button>
|
||||
</Link>
|
||||
)}
|
||||
<Link href={`/websites/${id}`} target={openExternal ? '_blank' : null}>
|
||||
<Button>
|
||||
<Icon>
|
||||
<Icons.External />
|
||||
</Icon>
|
||||
<Text>{formatMessage(labels.view)}</Text>
|
||||
</Button>
|
||||
</Link>
|
||||
</>
|
||||
);
|
||||
}}
|
||||
</SettingsTable>
|
||||
)}
|
||||
{!showTable && <EmptyPlaceholder message={formatMessage(messages.noDataAvailable)} />}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,25 @@
|
||||
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
|
||||
import Page from 'components/layout/Page';
|
||||
import Link from 'next/link';
|
||||
import { Button, Icon, Icons, Text, Flexbox } from 'react-basics';
|
||||
import { useMessages, useReports } from 'hooks';
|
||||
import ReportsTable from 'components/pages/reports/ReportsTable';
|
||||
import { useMessages, useWebsiteReports } from 'hooks';
|
||||
import Link from 'next/link';
|
||||
import { Button, Flexbox, Icon, Icons, Text } from 'react-basics';
|
||||
import WebsiteHeader from './WebsiteHeader';
|
||||
|
||||
export function WebsiteReportsPage({ websiteId }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { reports, error, isLoading, deleteReport } = useReports(websiteId);
|
||||
const { formatMessage, labels, messages } = useMessages();
|
||||
const {
|
||||
reports,
|
||||
error,
|
||||
isLoading,
|
||||
deleteReport,
|
||||
filter,
|
||||
handleFilterChange,
|
||||
handlePageChange,
|
||||
handlePageSizeChange,
|
||||
} = useWebsiteReports(websiteId);
|
||||
|
||||
const hasData = (reports && reports.data.length !== 0) || filter;
|
||||
|
||||
const handleDelete = async id => {
|
||||
await deleteReport(id);
|
||||
@ -26,7 +38,17 @@ export function WebsiteReportsPage({ websiteId }) {
|
||||
</Button>
|
||||
</Link>
|
||||
</Flexbox>
|
||||
<ReportsTable data={reports} onDelete={handleDelete} />
|
||||
{hasData && (
|
||||
<ReportsTable
|
||||
data={reports}
|
||||
onDelete={handleDelete}
|
||||
onFilterChange={handleFilterChange}
|
||||
onPageChange={handlePageChange}
|
||||
onPageSizeChange={handlePageSizeChange}
|
||||
filterValue={filter}
|
||||
/>
|
||||
)}
|
||||
{!hasData && <EmptyPlaceholder message={formatMessage(messages.noDataAvailable)} />}
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
77
components/pages/websites/WebsitesPage.js
Normal file
77
components/pages/websites/WebsitesPage.js
Normal file
@ -0,0 +1,77 @@
|
||||
import Page from 'components/layout/Page';
|
||||
import PageHeader from 'components/layout/PageHeader';
|
||||
import WebsiteAddForm from 'components/pages/settings/websites/WebsiteAddForm';
|
||||
import WebsiteList from 'components/pages/settings/websites/WebsitesList';
|
||||
import { useMessages } from 'hooks';
|
||||
import useUser from 'hooks/useUser';
|
||||
import useConfig from 'hooks/useConfig';
|
||||
import { ROLES } from 'lib/constants';
|
||||
import { useState } from 'react';
|
||||
import {
|
||||
Button,
|
||||
Icon,
|
||||
Icons,
|
||||
Item,
|
||||
Modal,
|
||||
ModalTrigger,
|
||||
Tabs,
|
||||
Text,
|
||||
useToasts,
|
||||
} from 'react-basics';
|
||||
|
||||
export function WebsitesPage() {
|
||||
const { formatMessage, labels, messages } = useMessages();
|
||||
const [tab, setTab] = useState('my-websites');
|
||||
const [fetch, setFetch] = useState(1);
|
||||
const { user } = useUser();
|
||||
const { cloudMode } = useConfig();
|
||||
const { showToast } = useToasts();
|
||||
|
||||
const handleSave = async () => {
|
||||
setFetch(fetch + 1);
|
||||
showToast({ message: formatMessage(messages.saved), variant: 'success' });
|
||||
};
|
||||
|
||||
const addButton = (
|
||||
<>
|
||||
{user.role !== ROLES.viewOnly && (
|
||||
<ModalTrigger>
|
||||
<Button variant="primary">
|
||||
<Icon>
|
||||
<Icons.Plus />
|
||||
</Icon>
|
||||
<Text>{formatMessage(labels.addWebsite)}</Text>
|
||||
</Button>
|
||||
<Modal title={formatMessage(labels.addWebsite)}>
|
||||
{close => <WebsiteAddForm onSave={handleSave} onClose={close} />}
|
||||
</Modal>
|
||||
</ModalTrigger>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
|
||||
return (
|
||||
<Page>
|
||||
<PageHeader title={formatMessage(labels.websites)}>{!cloudMode && addButton}</PageHeader>
|
||||
<Tabs selectedKey={tab} onSelect={setTab} style={{ marginBottom: 30 }}>
|
||||
<Item key="my-websites">{formatMessage(labels.myWebsites)}</Item>
|
||||
<Item key="team-webaites">{formatMessage(labels.teamWebsites)}</Item>
|
||||
</Tabs>
|
||||
|
||||
{tab === 'my-websites' && (
|
||||
<WebsiteList showEditButton={!cloudMode} showHeader={false} fetch={fetch} />
|
||||
)}
|
||||
{tab === 'team-webaites' && (
|
||||
<WebsiteList
|
||||
showEditButton={!cloudMode}
|
||||
showHeader={false}
|
||||
fetch={fetch}
|
||||
showTeam={true}
|
||||
onlyTeams={true}
|
||||
/>
|
||||
)}
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
||||
export default WebsitesPage;
|
@ -0,0 +1,50 @@
|
||||
-- CreateIndex
|
||||
CREATE INDEX `event_data_website_id_created_at_idx` ON `event_data`(`website_id`, `created_at`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `event_data_website_id_created_at_event_key_idx` ON `event_data`(`website_id`, `created_at`, `event_key`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_idx` ON `session`(`website_id`, `created_at`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_hostname_idx` ON `session`(`website_id`, `created_at`, `hostname`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_browser_idx` ON `session`(`website_id`, `created_at`, `browser`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_os_idx` ON `session`(`website_id`, `created_at`, `os`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_device_idx` ON `session`(`website_id`, `created_at`, `device`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_screen_idx` ON `session`(`website_id`, `created_at`, `screen`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_language_idx` ON `session`(`website_id`, `created_at`, `language`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_country_idx` ON `session`(`website_id`, `created_at`, `country`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_subdivision1_idx` ON `session`(`website_id`, `created_at`, `subdivision1`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `session_website_id_created_at_city_idx` ON `session`(`website_id`, `created_at`, `city`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `website_event_website_id_created_at_url_path_idx` ON `website_event`(`website_id`, `created_at`, `url_path`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `website_event_website_id_created_at_url_query_idx` ON `website_event`(`website_id`, `created_at`, `url_query`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `website_event_website_id_created_at_referrer_domain_idx` ON `website_event`(`website_id`, `created_at`, `referrer_domain`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `website_event_website_id_created_at_page_title_idx` ON `website_event`(`website_id`, `created_at`, `page_title`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `website_event_website_id_created_at_event_name_idx` ON `website_event`(`website_id`, `created_at`, `event_name`);
|
@ -44,6 +44,16 @@ model Session {
|
||||
|
||||
@@index([createdAt])
|
||||
@@index([websiteId])
|
||||
@@index([websiteId, createdAt])
|
||||
@@index([websiteId, createdAt, hostname])
|
||||
@@index([websiteId, createdAt, browser])
|
||||
@@index([websiteId, createdAt, os])
|
||||
@@index([websiteId, createdAt, device])
|
||||
@@index([websiteId, createdAt, screen])
|
||||
@@index([websiteId, createdAt, language])
|
||||
@@index([websiteId, createdAt, country])
|
||||
@@index([websiteId, createdAt, subdivision1])
|
||||
@@index([websiteId, createdAt, city])
|
||||
@@map("session")
|
||||
}
|
||||
|
||||
@ -91,6 +101,11 @@ model WebsiteEvent {
|
||||
@@index([sessionId])
|
||||
@@index([websiteId])
|
||||
@@index([websiteId, createdAt])
|
||||
@@index([websiteId, createdAt, urlPath])
|
||||
@@index([websiteId, createdAt, urlQuery])
|
||||
@@index([websiteId, createdAt, referrerDomain])
|
||||
@@index([websiteId, createdAt, pageTitle])
|
||||
@@index([websiteId, createdAt, eventName])
|
||||
@@index([websiteId, sessionId, createdAt])
|
||||
@@map("website_event")
|
||||
}
|
||||
@ -113,6 +128,8 @@ model EventData {
|
||||
@@index([websiteId])
|
||||
@@index([websiteEventId])
|
||||
@@index([websiteId, websiteEventId, createdAt])
|
||||
@@index([websiteId, createdAt])
|
||||
@@index([websiteId, createdAt, eventKey])
|
||||
@@map("event_data")
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,50 @@
|
||||
-- CreateIndex
|
||||
CREATE INDEX "event_data_website_id_created_at_idx" ON "event_data"("website_id", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "event_data_website_id_created_at_event_key_idx" ON "event_data"("website_id", "created_at", "event_key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_idx" ON "session"("website_id", "created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_hostname_idx" ON "session"("website_id", "created_at", "hostname");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_browser_idx" ON "session"("website_id", "created_at", "browser");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_os_idx" ON "session"("website_id", "created_at", "os");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_device_idx" ON "session"("website_id", "created_at", "device");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_screen_idx" ON "session"("website_id", "created_at", "screen");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_language_idx" ON "session"("website_id", "created_at", "language");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_country_idx" ON "session"("website_id", "created_at", "country");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_subdivision1_idx" ON "session"("website_id", "created_at", "subdivision1");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "session_website_id_created_at_city_idx" ON "session"("website_id", "created_at", "city");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "website_event_website_id_created_at_url_path_idx" ON "website_event"("website_id", "created_at", "url_path");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "website_event_website_id_created_at_url_query_idx" ON "website_event"("website_id", "created_at", "url_query");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "website_event_website_id_created_at_referrer_domain_idx" ON "website_event"("website_id", "created_at", "referrer_domain");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "website_event_website_id_created_at_page_title_idx" ON "website_event"("website_id", "created_at", "page_title");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "website_event_website_id_created_at_event_name_idx" ON "website_event"("website_id", "created_at", "event_name");
|
@ -44,6 +44,16 @@ model Session {
|
||||
|
||||
@@index([createdAt])
|
||||
@@index([websiteId])
|
||||
@@index([websiteId, createdAt])
|
||||
@@index([websiteId, createdAt, hostname])
|
||||
@@index([websiteId, createdAt, browser])
|
||||
@@index([websiteId, createdAt, os])
|
||||
@@index([websiteId, createdAt, device])
|
||||
@@index([websiteId, createdAt, screen])
|
||||
@@index([websiteId, createdAt, language])
|
||||
@@index([websiteId, createdAt, country])
|
||||
@@index([websiteId, createdAt, subdivision1])
|
||||
@@index([websiteId, createdAt, city])
|
||||
@@map("session")
|
||||
}
|
||||
|
||||
@ -91,6 +101,11 @@ model WebsiteEvent {
|
||||
@@index([sessionId])
|
||||
@@index([websiteId])
|
||||
@@index([websiteId, createdAt])
|
||||
@@index([websiteId, createdAt, urlPath])
|
||||
@@index([websiteId, createdAt, urlQuery])
|
||||
@@index([websiteId, createdAt, referrerDomain])
|
||||
@@index([websiteId, createdAt, pageTitle])
|
||||
@@index([websiteId, createdAt, eventName])
|
||||
@@index([websiteId, sessionId, createdAt])
|
||||
@@map("website_event")
|
||||
}
|
||||
@ -112,6 +127,8 @@ model EventData {
|
||||
@@index([createdAt])
|
||||
@@index([websiteId])
|
||||
@@index([websiteEventId])
|
||||
@@index([websiteId, createdAt])
|
||||
@@index([websiteId, createdAt, eventKey])
|
||||
@@map("event_data")
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@ export * from './useDocumentClick';
|
||||
export * from './useEscapeKey';
|
||||
export * from './useFilters';
|
||||
export * from './useForceUpdate';
|
||||
export * from './useFormat';
|
||||
export * from './useLanguageNames';
|
||||
export * from './useLocale';
|
||||
export * from './useMessages';
|
||||
@ -19,3 +20,4 @@ export * from './useTheme';
|
||||
export * from './useTimezone';
|
||||
export * from './useUser';
|
||||
export * from './useWebsite';
|
||||
export * from './useWebsiteReports';
|
||||
|
28
hooks/useApiFilter.ts
Normal file
28
hooks/useApiFilter.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import { useState } from 'react';
|
||||
|
||||
export function useApiFilter() {
|
||||
const [filter, setFilter] = useState();
|
||||
const [filterType, setFilterType] = useState('All');
|
||||
const [page, setPage] = useState(1);
|
||||
const [pageSize, setPageSize] = useState(10);
|
||||
|
||||
const handleFilterChange = value => setFilter(value);
|
||||
const handlePageChange = value => setPage(value);
|
||||
const handlePageSizeChange = value => setPageSize(value);
|
||||
|
||||
return {
|
||||
filter,
|
||||
setFilter,
|
||||
filterType,
|
||||
setFilterType,
|
||||
page,
|
||||
setPage,
|
||||
pageSize,
|
||||
setPageSize,
|
||||
handleFilterChange,
|
||||
handlePageChange,
|
||||
handlePageSizeChange,
|
||||
};
|
||||
}
|
||||
|
||||
export default useApiFilter;
|
@ -1,33 +1,47 @@
|
||||
import { useMessages } from 'hooks';
|
||||
import { OPERATORS } from 'lib/constants';
|
||||
|
||||
export function useFilters() {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
|
||||
const filters = {
|
||||
eq: formatMessage(labels.equals),
|
||||
neq: formatMessage(labels.doesNotEqual),
|
||||
c: formatMessage(labels.contains),
|
||||
dnc: formatMessage(labels.doesNotContain),
|
||||
t: formatMessage(labels.true),
|
||||
f: formatMessage(labels.false),
|
||||
gt: formatMessage(labels.greaterThan),
|
||||
lt: formatMessage(labels.lessThan),
|
||||
gte: formatMessage(labels.greaterThanEquals),
|
||||
lte: formatMessage(labels.lessThanEquals),
|
||||
be: formatMessage(labels.before),
|
||||
af: formatMessage(labels.after),
|
||||
const filterLabels = {
|
||||
[OPERATORS.equals]: formatMessage(labels.is),
|
||||
[OPERATORS.notEquals]: formatMessage(labels.isNot),
|
||||
[OPERATORS.set]: formatMessage(labels.isSet),
|
||||
[OPERATORS.notSet]: formatMessage(labels.isNotSet),
|
||||
[OPERATORS.contains]: formatMessage(labels.contains),
|
||||
[OPERATORS.doesNotContain]: formatMessage(labels.doesNotContain),
|
||||
[OPERATORS.true]: formatMessage(labels.true),
|
||||
[OPERATORS.false]: formatMessage(labels.false),
|
||||
[OPERATORS.greaterThan]: formatMessage(labels.greaterThan),
|
||||
[OPERATORS.lessThan]: formatMessage(labels.lessThan),
|
||||
[OPERATORS.greaterThanEquals]: formatMessage(labels.greaterThanEquals),
|
||||
[OPERATORS.lessThanEquals]: formatMessage(labels.lessThanEquals),
|
||||
[OPERATORS.before]: formatMessage(labels.before),
|
||||
[OPERATORS.after]: formatMessage(labels.after),
|
||||
};
|
||||
|
||||
const types = {
|
||||
string: ['eq', 'neq'],
|
||||
array: ['c', 'dnc'],
|
||||
boolean: ['t', 'f'],
|
||||
number: ['eq', 'neq', 'gt', 'lt', 'gte', 'lte'],
|
||||
date: ['be', 'af'],
|
||||
uuid: ['eq'],
|
||||
const typeFilters = {
|
||||
string: [OPERATORS.equals, OPERATORS.notEquals],
|
||||
array: [OPERATORS.contains, OPERATORS.doesNotContain],
|
||||
boolean: [OPERATORS.true, OPERATORS.false],
|
||||
number: [
|
||||
OPERATORS.equals,
|
||||
OPERATORS.notEquals,
|
||||
OPERATORS.greaterThan,
|
||||
OPERATORS.lessThan,
|
||||
OPERATORS.greaterThanEquals,
|
||||
OPERATORS.lessThanEquals,
|
||||
],
|
||||
date: [OPERATORS.before, OPERATORS.after],
|
||||
uuid: [OPERATORS.equals],
|
||||
};
|
||||
|
||||
return { filters, types };
|
||||
const getFilters = type => {
|
||||
return typeFilters[type]?.map(key => ({ type, value: key, label: filterLabels[key] })) ?? [];
|
||||
};
|
||||
|
||||
return { getFilters, filterLabels, typeFilters };
|
||||
}
|
||||
|
||||
export default useFilters;
|
||||
|
39
hooks/useFormat.js
Normal file
39
hooks/useFormat.js
Normal file
@ -0,0 +1,39 @@
|
||||
import useMessages from './useMessages';
|
||||
import { BROWSERS } from 'lib/constants';
|
||||
import useLocale from './useLocale';
|
||||
import useCountryNames from './useCountryNames';
|
||||
|
||||
export function useFormat() {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { locale } = useLocale();
|
||||
const countryNames = useCountryNames(locale);
|
||||
|
||||
const formatBrowser = value => {
|
||||
return BROWSERS[value] || value;
|
||||
};
|
||||
|
||||
const formatCountry = value => {
|
||||
return countryNames[value] || value;
|
||||
};
|
||||
|
||||
const formatDevice = value => {
|
||||
return formatMessage(labels[value] || labels.unknown);
|
||||
};
|
||||
|
||||
const formatValue = (value, type) => {
|
||||
switch (type) {
|
||||
case 'browser':
|
||||
return formatBrowser(value);
|
||||
case 'country':
|
||||
return formatCountry(value);
|
||||
case 'device':
|
||||
return formatDevice(value);
|
||||
default:
|
||||
return value;
|
||||
}
|
||||
};
|
||||
|
||||
return { formatBrowser, formatCountry, formatDevice, formatValue };
|
||||
}
|
||||
|
||||
export default useFormat;
|
@ -2,13 +2,17 @@ import { useIntl, FormattedMessage } from 'react-intl';
|
||||
import { messages, labels } from 'components/messages';
|
||||
|
||||
export function useMessages() {
|
||||
const { formatMessage } = useIntl();
|
||||
const intl = useIntl();
|
||||
|
||||
function getMessage(id) {
|
||||
const getMessage = id => {
|
||||
const message = Object.values(messages).find(value => value.id === id);
|
||||
|
||||
return message ? formatMessage(message) : id;
|
||||
}
|
||||
};
|
||||
|
||||
const formatMessage = (descriptor, values, opts) => {
|
||||
return descriptor ? intl.formatMessage(descriptor, values, opts) : null;
|
||||
};
|
||||
|
||||
return { formatMessage, FormattedMessage, messages, labels, getMessage };
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { produce } from 'immer';
|
||||
import { useCallback, useEffect, useState } from 'react';
|
||||
import { useTimezone } from './useTimezone';
|
||||
import useApi from './useApi';
|
||||
|
||||
const baseParameters = {
|
||||
@ -12,6 +13,7 @@ export function useReport(reportId, defaultParameters) {
|
||||
const [report, setReport] = useState(null);
|
||||
const [isRunning, setIsRunning] = useState(false);
|
||||
const { get, post } = useApi();
|
||||
const [timezone] = useTimezone();
|
||||
|
||||
const loadReport = async id => {
|
||||
const data = await get(`/reports/${id}`);
|
||||
@ -33,7 +35,7 @@ export function useReport(reportId, defaultParameters) {
|
||||
|
||||
const { type } = report;
|
||||
|
||||
const data = await post(`/reports/${type}`, parameters);
|
||||
const data = await post(`/reports/${type}`, { ...parameters, timezone });
|
||||
|
||||
setReport(
|
||||
produce(state => {
|
||||
|
@ -1,12 +1,16 @@
|
||||
import { useState } from 'react';
|
||||
import useApi from './useApi';
|
||||
import useApiFilter from 'hooks/useApiFilter';
|
||||
|
||||
export function useReports(websiteId) {
|
||||
export function useReports() {
|
||||
const [modified, setModified] = useState(Date.now());
|
||||
const { get, useQuery, del, useMutation } = useApi();
|
||||
const { mutate } = useMutation(reportId => del(`/reports/${reportId}`));
|
||||
const { data, error, isLoading } = useQuery(['reports:website', { websiteId, modified }], () =>
|
||||
get(`/reports`, { websiteId }),
|
||||
const { filter, page, pageSize, handleFilterChange, handlePageChange, handlePageSizeChange } =
|
||||
useApiFilter();
|
||||
const { data, error, isLoading } = useQuery(
|
||||
['reports', { modified, filter, page, pageSize }],
|
||||
() => get(`/reports`, { filter, page, pageSize }),
|
||||
);
|
||||
|
||||
const deleteReport = id => {
|
||||
@ -17,7 +21,18 @@ export function useReports(websiteId) {
|
||||
});
|
||||
};
|
||||
|
||||
return { reports: data, error, isLoading, deleteReport };
|
||||
return {
|
||||
reports: data,
|
||||
error,
|
||||
isLoading,
|
||||
deleteReport,
|
||||
filter,
|
||||
page,
|
||||
pageSize,
|
||||
handleFilterChange,
|
||||
handlePageChange,
|
||||
handlePageSizeChange,
|
||||
};
|
||||
}
|
||||
|
||||
export default useReports;
|
||||
|
38
hooks/useWebsiteReports.js
Normal file
38
hooks/useWebsiteReports.js
Normal file
@ -0,0 +1,38 @@
|
||||
import { useState } from 'react';
|
||||
import useApi from './useApi';
|
||||
import useApiFilter from 'hooks/useApiFilter';
|
||||
|
||||
export function useWebsiteReports(websiteId) {
|
||||
const [modified, setModified] = useState(Date.now());
|
||||
const { get, useQuery, del, useMutation } = useApi();
|
||||
const { mutate } = useMutation(reportId => del(`/reports/${reportId}`));
|
||||
const { filter, page, pageSize, handleFilterChange, handlePageChange, handlePageSizeChange } =
|
||||
useApiFilter();
|
||||
const { data, error, isLoading } = useQuery(
|
||||
['reports:website', { websiteId, modified, filter, page, pageSize }],
|
||||
() => get(`/websites/${websiteId}/reports`, { websiteId, filter, page, pageSize }),
|
||||
);
|
||||
|
||||
const deleteReport = id => {
|
||||
mutate(id, {
|
||||
onSuccess: () => {
|
||||
setModified(Date.now());
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
reports: data,
|
||||
error,
|
||||
isLoading,
|
||||
deleteReport,
|
||||
filter,
|
||||
page,
|
||||
pageSize,
|
||||
handleFilterChange,
|
||||
handlePageChange,
|
||||
handlePageSizeChange,
|
||||
};
|
||||
}
|
||||
|
||||
export default useWebsiteReports;
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Add website",
|
||||
"label.admin": "Administrator",
|
||||
"label.after": "After",
|
||||
"label.all": "All",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Average visit time",
|
||||
"label.back": "Back",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Bounce rate",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Browsers",
|
||||
"label.cancel": "Cancel",
|
||||
"label.change-password": "Change password",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Confirm password",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Countries",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Custom range",
|
||||
"label.dashboard": "Dashboard",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Date range",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Default date range",
|
||||
"label.delete": "Delete",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Delete website",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Desktop",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Devices",
|
||||
"label.dismiss": "Dismiss",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domain",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Edit",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event Data",
|
||||
"label.events": "Events",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Combined",
|
||||
"label.filter-raw": "Raw",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Last {x} hours",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Login",
|
||||
"label.logout": "Logout",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Mobile",
|
||||
"label.more": "More",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Name",
|
||||
"label.new-password": "New password",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Operating systems",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Page views",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Pages",
|
||||
"label.password": "Password",
|
||||
"label.powered-by": "Powered by {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Realtime",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referrers",
|
||||
"label.refresh": "Refresh",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Required",
|
||||
"label.reset": "Reset",
|
||||
"label.reset-website": "Reset statistics",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Save",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Settings",
|
||||
"label.share-url": "Share URL",
|
||||
"label.single-day": "Single day",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tablet",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "This month",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Today",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Tracking code",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Unique visitors",
|
||||
"label.unknown": "Unknown",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Username",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "View details",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Websites",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} current {x, plural, one {visitor} other {visitors}}",
|
||||
"message.confirm-delete": "Are you sure you want to delete {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Incorrect username/password.",
|
||||
"message.invalid-domain": "Invalid domain. Do not include http/https.",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "No data available.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Passwords do not match.",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "You do not have any websites configured.",
|
||||
"message.page-not-found": "Page not found.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your settings will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "This is the publicly shared URL for {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "To track stats for this website, place the following code in the <head>...</head> section of your HTML.",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "You do not have any websites configured.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "إضافة موقع",
|
||||
"label.admin": "مدير",
|
||||
"label.after": "After",
|
||||
"label.all": "الكل",
|
||||
"label.all-time": "كل الوقت",
|
||||
"label.analytics": "تحليلات",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "متوسط وقت الزيارة",
|
||||
"label.back": "للخلف",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "معدل الارتداد",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "المتصفحات",
|
||||
"label.cancel": "إلغاء",
|
||||
"label.change-password": "تغيير كلمة المرور",
|
||||
"label.cities": "المدن",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "مسح الكل",
|
||||
"label.confirm": "تأكيد",
|
||||
"label.confirm-password": "تأكيد كلمة المرور",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "متابعة",
|
||||
"label.countries": "الدول",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "انشاء مجموعة",
|
||||
"label.create-user": "انشاء مستخدم",
|
||||
"label.created": "تم الانشاء",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "فترة مخصصة",
|
||||
"label.dashboard": "الشاشة الرئيسية",
|
||||
"label.data": "البيانات",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "فترة مخصصة",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "الفترة المخصصة الافتراضية",
|
||||
"label.delete": "حذف",
|
||||
"label.delete-team": "حذف مجموعة",
|
||||
"label.delete-user": "جذف مستخدم",
|
||||
"label.delete-website": "حذف الموقع",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "كمبيوتر",
|
||||
"label.details": "تفاصيل",
|
||||
"label.device": "Device",
|
||||
"label.devices": "الأجهزة",
|
||||
"label.dismiss": "اخفاء",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "النطاق",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "تعديل",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "الأحداث",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "مجمعة",
|
||||
"label.filter-raw": "مفصلة",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "انضمام",
|
||||
"label.join-team": "الانضمام للمجموعة",
|
||||
"label.language": "اللغة",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "اخر {x} ساعة/ساعات",
|
||||
"label.leave": "مغادرة",
|
||||
"label.leave-team": "مغادرة المجموعة",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "تسجيل الدخول",
|
||||
"label.logout": "تسجيل الخروج",
|
||||
"label.max": "Max",
|
||||
"label.members": "الأعضاء",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "جوال",
|
||||
"label.more": "المزيد",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "الإسم",
|
||||
"label.new-password": "كلمة مرور جديدة",
|
||||
"label.none": "غير معرف",
|
||||
"label.operating-systems": "نظام التشغيل",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "المالك",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "مشاهدات الصفحة",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "الصفحات",
|
||||
"label.password": "كلمة المرور",
|
||||
"label.powered-by": "مشغل بواسطة {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "متغيرات الرابط",
|
||||
"label.realtime": "الوقت الفعلي",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "التحويلات",
|
||||
"label.refresh": "تحديث",
|
||||
"label.regenerate": "اعادة انشاء",
|
||||
"label.region": "Region",
|
||||
"label.regions": "المناطق",
|
||||
"label.remove": "إزالة",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "اجباري",
|
||||
"label.reset": "اعادة تعيين",
|
||||
"label.reset-website": "اعادة تعيين الإحصائيات",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "الصلاحية",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "حفظ",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "اعدادات",
|
||||
"label.share-url": "مشاركة الرابط",
|
||||
"label.single-day": "يوم واحد",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "تابلت",
|
||||
"label.team": "مجموعة",
|
||||
"label.team-guest": "زائر للمجموعة",
|
||||
"label.team-id": "معرف المجموعة",
|
||||
"label.team-member": "عضو المجموعة",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "مدير المجموعة",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "المجموعات",
|
||||
"label.theme": "المظهر",
|
||||
"label.this-month": "الشهر الحالي",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "العنوان",
|
||||
"label.today": "اليوم",
|
||||
"label.toggle-charts": "تغيير الإحصائيات",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "كود التتبع",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "زائرون فريدون",
|
||||
"label.unknown": "غير معروف",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "مستخدم",
|
||||
"label.username": "اسم المستخدم",
|
||||
"label.users": "المستخدمين",
|
||||
"label.value": "Value",
|
||||
"label.view": "عرض",
|
||||
"label.view-details": "عرض التفاصيل",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "المواقع",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "الأمس",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} حاليا {x, plural, one {زائر واحد} other {زوار}}",
|
||||
"message.confirm-delete": "هل أنت متأكد من حذف {target}?",
|
||||
"message.confirm-leave": "هل أنت متأكد من مغادرة {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "اسم المستخدم او كلمة المرور غير صحيحة.",
|
||||
"message.invalid-domain": "النطاق غير صحيح",
|
||||
"message.min-password-length": "اقل عدد مسموح به {n} حرف/أحرف",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "لا توجد بيانات متاحة.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "كلمة المرور غير متطابقة",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "هذه المجموعة ليس لديه اي موقع.",
|
||||
"message.no-teams": "لم تقم بإنشاء اي مجموعة.",
|
||||
"message.no-users": "لا يوجد مستخدمين.",
|
||||
"message.no-websites-configured": "لم تقم بإعداد اي موقع.",
|
||||
"message.page-not-found": "الصفحة غير موجودة.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "سيتم اعادة تعيين كافة الإحصائيات لهذا الموقع، لكن لن يتم تعيير كود التتبع",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "هذا الرابط الذي تم مشاركته بشكل عام لـ {target}.",
|
||||
"message.team-already-member": "أنت عضو في المجموعة",
|
||||
"message.team-not-found": "لم يتم العثور على المجموعة",
|
||||
"message.team-websites-info": "يمكن مشاهدة الموقع من اي عضو في المجموعة.",
|
||||
"message.tracking-code": "كود التتبع",
|
||||
"message.user-deleted": "تم حذف المستخدم.",
|
||||
"message.visitor-log": "زائر من {country} يستخدم {browser} على {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "هذه المجموعة ليس لديه اي موقع.",
|
||||
"message.no-websites-configured": "لم تقم بإعداد اي موقع.",
|
||||
"message.team-websites-info": "يمكن مشاهدة الموقع من اي عضو في المجموعة.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "زائر من {country} يستخدم {browser} على {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Дадаць сайт",
|
||||
"label.admin": "Адміністратар",
|
||||
"label.after": "After",
|
||||
"label.all": "Усё",
|
||||
"label.all-time": "Увесь час",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Сярэдняя даўжыня наведвання",
|
||||
"label.back": "Назад",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Паказчык адмоваў",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Браўзеры",
|
||||
"label.cancel": "Адмена",
|
||||
"label.change-password": "Змяніць пароль",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Падцвердзіць пароль",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Краіны",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Карыстацкі дыяпазон",
|
||||
"label.dashboard": "Інфармацыйная панэль",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Дыяпазон дат",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Дыяпазон дат па змаўчанню",
|
||||
"label.delete": "Выдаліць",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Выдаліць сайт",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Настольны ПК",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Прылады",
|
||||
"label.dismiss": "Адмена",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Дамен",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Змяніць",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Падзеі",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Камбініаваны",
|
||||
"label.filter-raw": "Сырыя",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Мова",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Апошнія {x} гадзіны",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Login",
|
||||
"label.logout": "Выйсці",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Мабільны",
|
||||
"label.more": "Болей",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Імя",
|
||||
"label.new-password": "Новы пароль",
|
||||
"label.none": "Няма",
|
||||
"label.operating-systems": "Аперацыонныя сістэмы",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Уласнік",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Прагляды старонкі",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Старонкі",
|
||||
"label.password": "Пароль",
|
||||
"label.powered-by": "Зроблена {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "У рэяльным часе",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referrers",
|
||||
"label.refresh": "Аднавіць",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Абавязкова",
|
||||
"label.reset": "Скінуць",
|
||||
"label.reset-website": "Скінуць статыстыку",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Захаваць",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Налады",
|
||||
"label.share-url": "Падзяліцца спасылкай",
|
||||
"label.single-day": "Адзін дзень",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Планшэт",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Тэма",
|
||||
"label.this-month": "Гэты месяц",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Сёння",
|
||||
"label.toggle-charts": "Пераключыць графікі",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Код адсочвання",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Унікальныя наведвальнікі",
|
||||
"label.unknown": "Невядома",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Імя карыстальніка",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Пабачыць дэталі",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Сайты",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Учора",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} тякучых {x, plural, one {наведвальнік} other {наведвальнікаў}}",
|
||||
"message.confirm-delete": "Вы дакладна хочаце выдаліць {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Некарэктны username/password.",
|
||||
"message.invalid-domain": "Некарэктны дамен",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Няма дадзеных.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Паролі не супадаюць",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Вы не наладзілі ніводнага сайту.",
|
||||
"message.page-not-found": "Старонка не знойдзена.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "Уся статыстыка для гэтага сайту будзе выдалена, але код адсочвання будзе працягваць працаваць.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Гэта публічная спасылка для {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Код адсочвання",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Наведвальнік з {country} праз {browser} на {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "Вы не наладзілі ніводнага сайту.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Наведвальнік з {country} праз {browser} на {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "ওয়েবসাইট যুক্ত করুন",
|
||||
"label.admin": "অ্যাডমিন",
|
||||
"label.after": "After",
|
||||
"label.all": "সবগুলো",
|
||||
"label.all-time": "সব সময়",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "গড় পরিদর্শনের সময়",
|
||||
"label.back": "পেছনে",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "বহিষ্কারের হার",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "ব্রাউজার",
|
||||
"label.cancel": "বাতিল",
|
||||
"label.change-password": "পাসওয়ার্ড পরিবর্তন করুন",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "পাসওয়ার্ড নিশ্চিত করুন",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "দেশ",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "কাস্টম রেঞ্জ",
|
||||
"label.dashboard": "ড্যাশবোর্ড",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "তারিখের পরিসীমা",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "ডিফল্ট তারিখের পরিসীমা",
|
||||
"label.delete": "মুছে ফেলুন",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "ওয়েবসাইট মুছুন",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "ডেস্কটপ",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "ডিভাইস গুলো",
|
||||
"label.dismiss": "বাতিল",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "ডোমেইন",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "সম্পাদনা করুন",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "ঘটনা",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "সম্মিলিত",
|
||||
"label.filter-raw": "অপরিশোধিত",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "ভাষা",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "শেষ {x} ঘন্টা",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "লগিন",
|
||||
"label.logout": "লগ আউট",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "মুঠোফোন",
|
||||
"label.more": "আরও",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "নাম",
|
||||
"label.new-password": "নতুন পাসওয়ার্ড",
|
||||
"label.none": "কিছুই না",
|
||||
"label.operating-systems": "অপারেটিং সিস্টেম গুলো",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "মালিক",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "পৃষ্ঠা পরিদর্শন গুলো",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "পৃষ্ঠাগুলি",
|
||||
"label.password": "পাসওয়ার্ড",
|
||||
"label.powered-by": "{name} দ্বারা চালিত",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "সরাসরি",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "রেফারার্স",
|
||||
"label.refresh": "রিফ্রেশ",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "প্রয়োজনীয়",
|
||||
"label.reset": "রিসেট",
|
||||
"label.reset-website": "ওয়েবসাইট রিসেট করুন",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "সংরক্ষণ",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "সেটিংস",
|
||||
"label.share-url": "ইউআরএল শেয়ার করুন",
|
||||
"label.single-day": "একদিন",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "ট্যাবলেট",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "থিম",
|
||||
"label.this-month": "এই মাস",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "আজ",
|
||||
"label.toggle-charts": "চার্ট পরিবর্তন করুন",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "ট্র্যাকিং কোড",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "অনন্য ভিজিটর",
|
||||
"label.unknown": "অজানা",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "ব্যবহারকারীর নাম",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "বিস্তারিত দেখুন",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "সবগুলো ওয়েবসাইট",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} বর্তমান {x, plural, one {visitor} other {visitors}}",
|
||||
"message.confirm-delete": "আপনি কি নিশ্চিত যে আপনি {target} মুছতে চান?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "ভুল ব্যবহারকারীর নাম/পাসওয়ার্ড।",
|
||||
"message.invalid-domain": "ভুল ডোমেন",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "কোন তথ্য নেই।",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "পাসওয়ার্ড মেলে না",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "কোনও ওয়েবসাইট কনফিগার করা নেই।",
|
||||
"message.page-not-found": "পৃষ্ঠা খুঁজে পাওয়া যায়নি।",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "এই ওয়েবসাইটের সমস্ত পরিসংখ্যান মুছে ফেলা হবে, তবে আপনার ট্র্যাকিং কোডটি অক্ষত থাকবে।",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "এটি {target} এর জন্য প্রকাশ্যে শেয়ার করার ইউআরএল।",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "ট্র্যাকিং কোড",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "{country} থেকে একজন ভিসিটর {ব্রাউজার}, ব্যবহার করছেন {os} {device} এর মধ্যে।",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "কোনও ওয়েবসাইট কনফিগার করা নেই।",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "{country} থেকে একজন ভিসিটর {ব্রাউজার}, ব্যবহার করছেন {os} {device} এর মধ্যে।"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Afegeix lloc web",
|
||||
"label.admin": "Administrador",
|
||||
"label.after": "After",
|
||||
"label.all": "Tots",
|
||||
"label.all-time": "Sempre",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Temps mitjà de visita",
|
||||
"label.back": "Enrere",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Percentatge de rebot",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Navegadors",
|
||||
"label.cancel": "Cancel·la",
|
||||
"label.change-password": "Canvia la contrasenya",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Confirma la contrasenya",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Països",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Rang personalitzat",
|
||||
"label.dashboard": "Panell",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Interval de dates",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Interval de dates per defecte",
|
||||
"label.delete": "Esborra",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Esborra el lloc web",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Escriptori",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Dispositius",
|
||||
"label.dismiss": "Descarta",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domini",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Edita",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Esdeveniments",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Combinat",
|
||||
"label.filter-raw": "En cru",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Últimes {x} hores",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Connecta't",
|
||||
"label.logout": "Desconnecta't",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Mòbil",
|
||||
"label.more": "Més",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Nom",
|
||||
"label.new-password": "Contrasenya nova",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Sistemes operatius",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Propietari",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Pàgines vistes",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Pàgines",
|
||||
"label.password": "Contrasenya",
|
||||
"label.powered-by": "Funciona amb {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Temps real",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referents",
|
||||
"label.refresh": "Refresca",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Obligatori",
|
||||
"label.reset": "Restableix",
|
||||
"label.reset-website": "Restableix estadístiques",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Desa",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Configuració",
|
||||
"label.share-url": "Enllaç per compartir",
|
||||
"label.single-day": "Un sol dia",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tauleta",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "Aquest mes",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Avui",
|
||||
"label.toggle-charts": "Mostra/amaga gràfics",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Codi de seguiment",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Visitants únics",
|
||||
"label.unknown": "Desconegut",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Nom d'usuari",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Veure els detalls",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Llocs web",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Ahir",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} {x, plural, one {visitant actual} other {visitants actuals}}",
|
||||
"message.confirm-delete": "Segur que vols esborrar {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Nom d'usuari o contrasenya incorrectes.",
|
||||
"message.invalid-domain": "Domini invàlid",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "No hi ha dades disponibles.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Les contrasenyes no coincideixen",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "No hi ha cap lloc web configurat.",
|
||||
"message.page-not-found": "No s'ha trobat la pàgina.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "S'esborraran totes les estadístiques per aquest lloc web, però el codi de seguiment es mantindrà.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Aquest és l'enllaç públic per compartir de {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Codi de seguiment",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Visitant de {country} usant {browser} a {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "No hi ha cap lloc web configurat.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visitant de {country} usant {browser} a {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Přidat web",
|
||||
"label.admin": "Administrátor",
|
||||
"label.after": "After",
|
||||
"label.all": "Vše",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Průměrný čas návštěvy",
|
||||
"label.back": "Zpět",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Okamžité opuštění",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Prohlížeč",
|
||||
"label.cancel": "Zrušit",
|
||||
"label.change-password": "Změnit heslo",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Potvrdit heslo",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Země",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Vlastní rozsah",
|
||||
"label.dashboard": "Přehled",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Období",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Výchozí období",
|
||||
"label.delete": "Smazat",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Smazat web",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Stolní počítač",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Zařízení",
|
||||
"label.dismiss": "Odejít",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Doména",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Upravit",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Události",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Kombinace",
|
||||
"label.filter-raw": "Nezpracované",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Posledních {x} hodin",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Přihlásit",
|
||||
"label.logout": "Odhlásit",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Mobilní telefon",
|
||||
"label.more": "Více",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Jméno",
|
||||
"label.new-password": "Nové heslo",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Operační systém",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Zobrazení stránek",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Stránky",
|
||||
"label.password": "Heslo",
|
||||
"label.powered-by": "Běží na {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Aktuálně",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Odkazy",
|
||||
"label.refresh": "Obnovit",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Vyžadováno",
|
||||
"label.reset": "Reset",
|
||||
"label.reset-website": "Reset statistics",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Uložit",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Nastavení",
|
||||
"label.share-url": "Sdílet URL",
|
||||
"label.single-day": "Jeden den",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tablet",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "Tento měsíc",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Dnes",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Sledovací kód",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Jedinečné návštěvy",
|
||||
"label.unknown": "Neznámý",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Uživatelské jméno",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Zobrazit detaily",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Weby",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} aktuálně {x, plural, one {návštěvník} other {návštěvníci}}",
|
||||
"message.confirm-delete": "Opravdu smazat {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Nesprávné jméno/heslo.",
|
||||
"message.invalid-domain": "Neplatná doména",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Žádná data.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Hesla se neschodují",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Nemáte nastavený žádný web.",
|
||||
"message.page-not-found": "Stránka nenalezena.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your tracking code will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Toto je sdílené URL pro {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Sledovací kód",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Návštěvník z {country} s prohlížečem {browser} na {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "Nemáte nastavený žádný web.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Návštěvník z {country} s prohlížečem {browser} na {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Tilføj hjemmeside",
|
||||
"label.admin": "Administrator",
|
||||
"label.after": "After",
|
||||
"label.all": "Alle",
|
||||
"label.all-time": "Altid",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Gennemsnitlig besøgstid",
|
||||
"label.back": "Tilbage",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Afvisningsprocent",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Browsere",
|
||||
"label.cancel": "Afvis",
|
||||
"label.change-password": "Skift adgangskode",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Godkendt adgangskode",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Lande",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Tilpasset interval",
|
||||
"label.dashboard": "Betjeningspanel",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Datointerval",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Standard datointerval",
|
||||
"label.delete": "Slet",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Slet hjemmeside",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Desktop",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Enheder",
|
||||
"label.dismiss": "Afvis",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domæne",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Rediger",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Hændelser",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Kombineret",
|
||||
"label.filter-raw": "Rå",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Sprog",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Sidste {x} timer",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Log ind",
|
||||
"label.logout": "Log ud",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Mobil",
|
||||
"label.more": "Mere",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Navn",
|
||||
"label.new-password": "Ny adgangskode",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Operativsystemer",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Ejer",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Sidevisninger",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Sider",
|
||||
"label.password": "Adgangskode",
|
||||
"label.powered-by": "Drevet af {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Realtid",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Henvisninger",
|
||||
"label.refresh": "Opdater",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Påkrævet",
|
||||
"label.reset": "Nulstil",
|
||||
"label.reset-website": "Nulstil statistikker",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Gem",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Indstillinger",
|
||||
"label.share-url": "Del URL",
|
||||
"label.single-day": "Enkelt dag",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tablet",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Tema",
|
||||
"label.this-month": "Denne måned",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Idag",
|
||||
"label.toggle-charts": "Ændre graf",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Sporingskode",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Unikke besøgende",
|
||||
"label.unknown": "Ukendt",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Brugernavn",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Vis detajler",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Hjemmesider",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} nuværende {x, plural, one {bruger} other {brugere}}",
|
||||
"message.confirm-delete": "Er du sikker på at du vil slette {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Ugyldigt brugernavn/adgangskode.",
|
||||
"message.invalid-domain": "Ugyldigt domæne",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Ingen data tilgængelig.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Adgangskoderne matcher ikke",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Du har ikke konfigureret nogen hjemmesider.",
|
||||
"message.page-not-found": "Side ikke fundet.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "Alle statistikker for denne hjemmeside ville blive slettet, men sporingskode ville forblive intakt.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Dette er den offentlige delings-URL til {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Sporingskode",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Besøgende fra {country} bruger {browser} på {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "Du har ikke konfigureret nogen hjemmesider.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Besøgende fra {country} bruger {browser} på {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Websiite hinzuefüege",
|
||||
"label.admin": "Administrator",
|
||||
"label.after": "After",
|
||||
"label.all": "Alli",
|
||||
"label.all-time": "Gesamte Zitruum",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Durchschn. Bsuechsziit",
|
||||
"label.back": "Zrugg",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Absprungsrate",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Browser",
|
||||
"label.cancel": "Abbreche",
|
||||
"label.change-password": "Passwort ändere",
|
||||
"label.cities": "Städt",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Alles lösche",
|
||||
"label.confirm": "Bestätige",
|
||||
"label.confirm-password": "Passwort widerhole",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Wiiter",
|
||||
"label.countries": "Länder",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Team erstelle",
|
||||
"label.create-user": "Benutzer erstelle",
|
||||
"label.created": "Erstellt",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Benutzerdefinierte Bereich",
|
||||
"label.dashboard": "Übersicht",
|
||||
"label.data": "Datä",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Datumsbereich",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Vorigstellte Datumsbereich",
|
||||
"label.delete": "Lösche",
|
||||
"label.delete-team": "Team lösche",
|
||||
"label.delete-user": "Benutzer lösche",
|
||||
"label.delete-website": "Websiite lösche",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Desktop",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Grät",
|
||||
"label.dismiss": "Verwerfe",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domain",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Bearbeite",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Ereigniss",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Kombiniert",
|
||||
"label.filter-raw": "Rohdate",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Biträte",
|
||||
"label.join-team": "Team biträte",
|
||||
"label.language": "Sprach",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Letzti {x} Stunde",
|
||||
"label.leave": "Verlah",
|
||||
"label.leave-team": "Team verlah",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Aamelde",
|
||||
"label.logout": "Abmelde",
|
||||
"label.max": "Max",
|
||||
"label.members": "Mitglieder",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Handy",
|
||||
"label.more": "Meh",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Name",
|
||||
"label.new-password": "Neus Passwort",
|
||||
"label.none": "Keis",
|
||||
"label.operating-systems": "Betriibssystem",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Bsitzer",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Siitenufrüef",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Siite",
|
||||
"label.password": "Passwort",
|
||||
"label.powered-by": "Betribe dur {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Abfragparameter",
|
||||
"label.realtime": "Echtzit",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referrer",
|
||||
"label.refresh": "Aktualisiere",
|
||||
"label.regenerate": "Erneuere",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regionä",
|
||||
"label.remove": "Entferne",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Erforderlich",
|
||||
"label.reset": "Zruggsetze",
|
||||
"label.reset-website": "Statistik zruggsetze",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Rollä",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Speichere",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Istellige",
|
||||
"label.share-url": "Freigab-URL",
|
||||
"label.single-day": "Ein Tag",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tablet",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team Gast",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team Mitglied",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team Bsitzer",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Thema",
|
||||
"label.this-month": "De Monet",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Titel",
|
||||
"label.today": "Hüt",
|
||||
"label.toggle-charts": "Schaubilder umschalte",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Tracking Code",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Eidütigi Bsuecher",
|
||||
"label.unknown": "Unbekannt",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "Benutzer",
|
||||
"label.username": "Benutzername",
|
||||
"label.users": "Benutzer",
|
||||
"label.value": "Value",
|
||||
"label.view": "Azeige",
|
||||
"label.view-details": "Details azeige",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Websiite",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Gester",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} {x, plural, one {aktive Bsuecher} other {aktivi Bsuecher}}",
|
||||
"message.confirm-delete": "Sind Sie sich sicher, {target} zlösche?",
|
||||
"message.confirm-leave": "Sind Sie sich sicher, {target} zverlah?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Falschs Passwort oder Benutzername.",
|
||||
"message.invalid-domain": "Ungültigi Domain",
|
||||
"message.min-password-length": "Miminamli längi vo {n} Zeiche",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Kei Date vorhande.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Passwörter stimmed ned überi",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "Dem Team sind kei Websiite zuegordnet.",
|
||||
"message.no-teams": "Bisher sind no kei Teams erstellt worde.",
|
||||
"message.no-users": "Da gits kei Benutzer",
|
||||
"message.no-websites-configured": "Es isch kei Websiite vorhande.",
|
||||
"message.page-not-found": "Siite ned gfunde.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "Alli Date für die Websiite werdet glöscht, nur de Tracking Code blibt bestah.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Ihri Websiitestatistik isch under de folgende URL öffentlich zuegänglich:",
|
||||
"message.team-already-member": "Sie sind bereits es Mitglied vo dem Team.",
|
||||
"message.team-not-found": "Team nöd gfunde.",
|
||||
"message.team-websites-info": "Websiite chönd vo jedem im Team agluegt werde",
|
||||
"message.tracking-code": "Tracking Code",
|
||||
"message.user-deleted": "Benutzer glöscht.",
|
||||
"message.visitor-log": "Bsuecher us {country} benutzt {browser} uf {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "Dem Team sind kei Websiite zuegordnet.",
|
||||
"message.no-websites-configured": "Es isch kei Websiite vorhande.",
|
||||
"message.team-websites-info": "Websiite chönd vo jedem im Team agluegt werde",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Bsuecher us {country} benutzt {browser} uf {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Beschreibung hinzufügen",
|
||||
"label.add-website": "Webseite hinzufügen",
|
||||
"label.admin": "Administrator",
|
||||
"label.after": "After",
|
||||
"label.all": "Alle",
|
||||
"label.all-time": "Gesamter Zeitraum",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Durchschnitt",
|
||||
"label.average-visit-time": "Durchschn. Besuchszeit",
|
||||
"label.back": "Zurück",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Absprungrate",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Browser",
|
||||
"label.cancel": "Abbrechen",
|
||||
"label.change-password": "Passwort ändern",
|
||||
"label.cities": "Städte",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Alles löschen",
|
||||
"label.confirm": "Bestätigen",
|
||||
"label.confirm-password": "Passwort wiederholen",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Weiter",
|
||||
"label.countries": "Länder",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Report erstellen",
|
||||
"label.create-team": "Team erstellen",
|
||||
"label.create-user": "Benutzer erstellen",
|
||||
"label.created": "Erstellt",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Benutzerdefinierter Bereich",
|
||||
"label.dashboard": "Übersicht",
|
||||
"label.data": "Daten",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Datumsbereich",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Voreingestellter Datumsbereich",
|
||||
"label.delete": "Löschen",
|
||||
"label.delete-team": "Team löschen",
|
||||
"label.delete-user": "Benutzer löschen",
|
||||
"label.delete-website": "Webseite löschen",
|
||||
"label.description": "Beschreibung",
|
||||
"label.desktop": "Desktop",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Geräte",
|
||||
"label.dismiss": "Verwerfen",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domain",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Bearbeiten",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event daten",
|
||||
"label.events": "Ereignisse",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Kombiniert",
|
||||
"label.filter-raw": "Rohdaten",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Größer als",
|
||||
"label.greater-than-equals": "Größer oder gleich",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Beitreten",
|
||||
"label.join-team": "Team beitreten",
|
||||
"label.language": "Sprache",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Letzte {x} Stunden",
|
||||
"label.leave": "Verlassen",
|
||||
"label.leave-team": "Team verlassen",
|
||||
"label.less-than": "Kleiner als",
|
||||
"label.less-than-equals": "Kleiner oder gleich",
|
||||
"label.login": "Anmelden",
|
||||
"label.logout": "Abmelden",
|
||||
"label.max": "Max",
|
||||
"label.members": "Mitglieder",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Handy",
|
||||
"label.more": "Mehr",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Name",
|
||||
"label.new-password": "Neues Passwort",
|
||||
"label.none": "Keine",
|
||||
"label.operating-systems": "Betriebssysteme",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Übersicht",
|
||||
"label.owner": "Besitzer",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Seitenaufrufe",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Seiten",
|
||||
"label.password": "Passwort",
|
||||
"label.powered-by": "Betrieben durch {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Abfrage",
|
||||
"label.query-parameters": "Abfrageparameter",
|
||||
"label.realtime": "Echtzeit",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referrer",
|
||||
"label.refresh": "Aktualisieren",
|
||||
"label.regenerate": "Erneuern",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regionen",
|
||||
"label.remove": "Entfernen",
|
||||
"label.reports": "Reporte",
|
||||
"label.required": "Erforderlich",
|
||||
"label.reset": "Zurücksetzen",
|
||||
"label.reset-website": "Statistik zurücksetzen",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Rolle",
|
||||
"label.run-query": "Abfrage starten",
|
||||
"label.save": "Speichern",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Einstellungen",
|
||||
"label.share-url": "Freigabe-URL",
|
||||
"label.single-day": "Ein Tag",
|
||||
"label.sum": "Summe",
|
||||
"label.tablet": "Tablet",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team Gast",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team Mitglied",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team Eigentümer",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Thema",
|
||||
"label.this-month": "Diesen Monat",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Titel",
|
||||
"label.today": "Heute",
|
||||
"label.toggle-charts": "Schaubilder umschalten",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Tracking Code",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Eindeutige Besucher",
|
||||
"label.unknown": "Unbekannt",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "Benutzer",
|
||||
"label.username": "Benutzername",
|
||||
"label.users": "Benutzer",
|
||||
"label.value": "Value",
|
||||
"label.view": "Anzeigen",
|
||||
"label.view-details": "Details anzeigen",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Webseiten",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Gestern",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Durchschnitt",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Report erstellen",
|
||||
"labels.description": "Beschreibung",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Größer als",
|
||||
"labels.greater-than-equals": "Größer oder gleich",
|
||||
"labels.less-than": "Kleiner als",
|
||||
"labels.less-than-equals": "Kleiner oder gleich",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Übersicht",
|
||||
"labels.sum": "Summe",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} {x, plural, one {aktiver Besucher} other {aktive Besucher}}",
|
||||
"message.confirm-delete": "Sind Sie sich sicher, {target} zu löschen?",
|
||||
"message.confirm-leave": "Sind Sie sicher, dass die {target} verlassen möchten?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Falsches Passwort oder Benutzername.",
|
||||
"message.invalid-domain": "Ungültige Domain",
|
||||
"message.min-password-length": "Minimale länge von {n} Zeichen",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Keine Daten vorhanden.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Passwörter stimmen nicht überein",
|
||||
"message.no-results-found": "Keine Ergebnisse gefunden.",
|
||||
"message.no-team-websites": "Diesem Team sind keine Websites zugeordnet.",
|
||||
"message.no-teams": "Bisher wurden keine Teams erstellt.",
|
||||
"message.no-users": "Hier gibt es keine Benutzer.",
|
||||
"message.no-websites-configured": "Es ist keine Webseite vorhanden.",
|
||||
"message.page-not-found": "Seite nicht gefunden.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "Alle Daten für diese Webseite werden gelöscht, jedoch bleibt der Tracking Code bestehen.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Ihre Webseitenstatistik ist unter der folgenden URL öffentlich zugänglich:",
|
||||
"message.team-already-member": "Sie sind bereits Mitglied des Teams.",
|
||||
"message.team-not-found": "Team nicht gefunden.",
|
||||
"message.team-websites-info": "Webseiten können von jedem im Team eingesehen werden.",
|
||||
"message.tracking-code": "Tracking Code",
|
||||
"message.user-deleted": "Benutzer gelöscht.",
|
||||
"message.visitor-log": "Besucher aus {country} benutzt {browser} auf {os} {device}",
|
||||
"message.no-results-found": "Keine Ergebnisse gefunden.",
|
||||
"message.no-team-websites": "Diesem Team sind keine Websites zugeordnet.",
|
||||
"message.no-websites-configured": "Es ist keine Webseite vorhanden.",
|
||||
"message.team-websites-info": "Webseiten können von jedem im Team eingesehen werden.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Besucher aus {country} benutzt {browser} auf {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Προσθήκη ιστότοπου",
|
||||
"label.admin": "Διαχειριστής",
|
||||
"label.after": "After",
|
||||
"label.all": "All",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Μέσος χρόνος επίσκεψης",
|
||||
"label.back": "Πίσω",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Ποσοστό αναπήδησης",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Προγράμματα περιήγησης",
|
||||
"label.cancel": "Ακύρωση",
|
||||
"label.change-password": "Αλλαγή κωδικού",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Επιβεβαίωση κωδικού",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Χώρες",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Προσαρμοσμένο εύρος",
|
||||
"label.dashboard": "Πίνακας",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Εύρος ημερομηνιών",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Προεπιλεγμένο εύρος ημερομηνιών",
|
||||
"label.delete": "Διαγραφή",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Διαγραφή ιστότοπου",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Σταθερός υπολογιστής",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Συσκευές",
|
||||
"label.dismiss": "Dismiss",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Τομέας",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Επεξεργασία",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Γεγονότα",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Σε συνδυασμό",
|
||||
"label.filter-raw": "Ακατέργαστο",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Τελευταίες {x} ώρες",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Είσοδος",
|
||||
"label.logout": "Αποσύνδεση",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Κινητό",
|
||||
"label.more": "Περισσότερα",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Όνομα",
|
||||
"label.new-password": "Νέος κωδικός",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Λειτουργικά συστήματα",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Προβολές σελίδας",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Σελίδες",
|
||||
"label.password": "Κωδικός",
|
||||
"label.powered-by": "Με την υποστήριξη του {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Realtime",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Παραπομπές",
|
||||
"label.refresh": "Ανανέωση",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Απαιτείται",
|
||||
"label.reset": "Επαναφορά",
|
||||
"label.reset-website": "Reset statistics",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Αποθήκευση",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Ρυθμίσεις",
|
||||
"label.share-url": "Κοινοποίηση διεύθυνσης URL",
|
||||
"label.single-day": "Ημερήσια",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Τάμπλετ",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "Αυτο το μήνα",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Σήμερα",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Κωδικός παρακολούθησης",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Μοναδικοί επισκέπτες",
|
||||
"label.unknown": "Άγνωστο",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Όνομα χρήστη",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Λεπτομέρειες",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Ιστότοποι",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} ενεργοί {x, plural, one {επισκέπτης} other {επισκέπτες}}",
|
||||
"message.confirm-delete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το {target};",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Εσφαλμένο όνομα χρήστη / κωδικός πρόσβασης.",
|
||||
"message.invalid-domain": "Μη έγκυρος τομέας",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Δεν υπάρχουν διαθέσιμα δεδομένα.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Οι κωδικοί πρόσβασης δεν ταιριάζουν",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Δεν έχετε ρυθμίσει κανένα ιστότοπο.",
|
||||
"message.page-not-found": "Η σελίδα δεν βρέθηκε.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your tracking code will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Αυτό είναι το κοινόχρηστο URL για το {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Κωδικός παρακολούθησης",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "Δεν έχετε ρυθμίσει κανένα ιστότοπο.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Add website",
|
||||
"label.admin": "Administrator",
|
||||
"label.after": "After",
|
||||
"label.all": "All",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Average visit time",
|
||||
"label.back": "Back",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Bounce rate",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Browsers",
|
||||
"label.cancel": "Cancel",
|
||||
"label.change-password": "Change password",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Confirm password",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Countries",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Custom range",
|
||||
"label.dashboard": "Dashboard",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Date range",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Default date range",
|
||||
"label.delete": "Delete",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Delete website",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Desktop",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Devices",
|
||||
"label.dismiss": "Dismiss",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domain",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Edit",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Events",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Combined",
|
||||
"label.filter-raw": "Raw",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Last {x} hours",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Login",
|
||||
"label.logout": "Logout",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Mobile",
|
||||
"label.more": "More",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Name",
|
||||
"label.new-password": "New password",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Operating systems",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Page views",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Pages",
|
||||
"label.password": "Password",
|
||||
"label.powered-by": "Powered by {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Realtime",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referrers",
|
||||
"label.refresh": "Refresh",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Required",
|
||||
"label.reset": "Reset",
|
||||
"label.reset-website": "Reset statistics",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Save",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Settings",
|
||||
"label.share-url": "Share URL",
|
||||
"label.single-day": "Single day",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tablet",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "This month",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Today",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Tracking code",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Unique visitors",
|
||||
"label.unknown": "Unknown",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Username",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "View details",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Websites",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} current {x, plural, one {visitor} other {visitors}}",
|
||||
"message.confirm-delete": "Are you sure you want to delete {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Incorrect username/password.",
|
||||
"message.invalid-domain": "Invalid domain",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "No data available.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Passwords don't match",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "You don't have any websites configured.",
|
||||
"message.page-not-found": "Page not found.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your tracking code will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "This is the publicly shared URL for {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Tracking code",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "You don't have any websites configured.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Add website",
|
||||
"label.admin": "Administrator",
|
||||
"label.after": "After",
|
||||
"label.all": "All",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Average visit time",
|
||||
"label.back": "Back",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Bounce rate",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Browsers",
|
||||
"label.cancel": "Cancel",
|
||||
"label.change-password": "Change password",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Confirm password",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Countries",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Custom range",
|
||||
"label.dashboard": "Dashboard",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Date range",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Default date range",
|
||||
"label.delete": "Delete",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Delete website",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Desktop",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Devices",
|
||||
"label.dismiss": "Dismiss",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domain",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Edit",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Events",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Combined",
|
||||
"label.filter-raw": "Raw",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Last {x} hours",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Login",
|
||||
"label.logout": "Logout",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Mobile",
|
||||
"label.more": "More",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Name",
|
||||
"label.new-password": "New password",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Operating systems",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Page views",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Pages",
|
||||
"label.password": "Password",
|
||||
"label.powered-by": "Powered by {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Realtime",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referrers",
|
||||
"label.refresh": "Refresh",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Required",
|
||||
"label.reset": "Reset",
|
||||
"label.reset-website": "Reset website",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Save",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Settings",
|
||||
"label.share-url": "Share URL",
|
||||
"label.single-day": "Single day",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tablet",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "This month",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Today",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Tracking code",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Unique visitors",
|
||||
"label.unknown": "Unknown",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Username",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "View details",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Websites",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} current {x, plural, one {visitor} other {visitors}}",
|
||||
"message.confirm-delete": "Are you sure you want to delete {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Incorrect username and/or password.",
|
||||
"message.invalid-domain": "Invalid domain. Do not include http/https.",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "No data available.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Passwords do not match.",
|
||||
"message.no-results-found": "No results found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "You do not have any websites configured.",
|
||||
"message.page-not-found": "Page not found",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your settings will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Your website stats are publically available at the following URL:",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "To track stats for this website, place the following code in the <head>...</head> section of your HTML.",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "You do not have any websites configured.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Añadir descripción",
|
||||
"label.add-website": "Nuevo sitio web",
|
||||
"label.admin": "Administrador",
|
||||
"label.after": "Después",
|
||||
"label.all": "Todos",
|
||||
"label.all-time": "Todos los tiempos",
|
||||
"label.analytics": "Analíticas",
|
||||
"label.average": "Media",
|
||||
"label.average-visit-time": "Tiempo promedio de visita",
|
||||
"label.back": "Atrás",
|
||||
"label.before": "Antes",
|
||||
"label.bounce-rate": "Porcentaje de rebote",
|
||||
"label.breakdown": "Desglose",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Navegadores",
|
||||
"label.cancel": "Cancelar",
|
||||
"label.change-password": "Cambiar contraseña",
|
||||
"label.cities": "Ciudades",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Limpiar todo",
|
||||
"label.confirm": "Confirmar",
|
||||
"label.confirm-password": "Confirmar contraseña",
|
||||
"label.contains": "Contiene",
|
||||
"label.continue": "Continuar",
|
||||
"label.countries": "Países",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Crear reporte",
|
||||
"label.create-team": "Crear equipo",
|
||||
"label.create-user": "Crear usuario",
|
||||
"label.created": "Creado",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Intervalo personalizado",
|
||||
"label.dashboard": "Panel de control",
|
||||
"label.data": "Datos",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Intervalo de fechas",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Intervalo por defecto",
|
||||
"label.delete": "Eliminar",
|
||||
"label.delete-team": "Eliminar equipo",
|
||||
"label.delete-user": "Eliminar usuario",
|
||||
"label.delete-website": "Eliminar sitio",
|
||||
"label.description": "Descripciones",
|
||||
"label.desktop": "Escritorio",
|
||||
"label.details": "Detalles",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Dispositivos",
|
||||
"label.dismiss": "Ignorar",
|
||||
"label.does-not-contain": "No contiene",
|
||||
"label.domain": "Dominio",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Editar",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Evento",
|
||||
"label.event-data": "Datos de evento",
|
||||
"label.events": "Eventos",
|
||||
"label.false": "False",
|
||||
"label.field": "Campo",
|
||||
"label.fields": "Campos",
|
||||
"label.filter-combined": "Combinado",
|
||||
"label.filter-raw": "En crudo",
|
||||
"label.filters": "Filtros",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Mayor que",
|
||||
"label.greater-than-equals": "Mayor que o igual a",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Es igual a",
|
||||
"label.is-not": "No es igual a",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Unir",
|
||||
"label.join-team": "Unirse al equipo",
|
||||
"label.language": "Idioma",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Últimas {x} horas",
|
||||
"label.leave": "Abandonar",
|
||||
"label.leave-team": "Abandonar equipo",
|
||||
"label.less-than": "Menor que",
|
||||
"label.less-than-equals": "Menor que o igual a",
|
||||
"label.login": "Iniciar sesión",
|
||||
"label.logout": "Cerrar sesión",
|
||||
"label.max": "Máx",
|
||||
"label.members": "Miembros",
|
||||
"label.min": "Mín",
|
||||
"label.mobile": "Móvil",
|
||||
"label.more": "Más",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Nombre",
|
||||
"label.new-password": "Nueva contraseña",
|
||||
"label.none": "Ninguno",
|
||||
"label.operating-systems": "Sistemas operativos",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Resumen",
|
||||
"label.owner": "Propietario",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Vistas",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Páginas",
|
||||
"label.password": "Contraseña",
|
||||
"label.powered-by": "Con la ayuda de {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Parámetros de petición",
|
||||
"label.realtime": "Tiempo real",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referido desde",
|
||||
"label.refresh": "Actualizar",
|
||||
"label.regenerate": "Regenerar",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regiones",
|
||||
"label.remove": "Quitar",
|
||||
"label.reports": "Reportes",
|
||||
"label.required": "Obligatorio",
|
||||
"label.reset": "Reiniciar",
|
||||
"label.reset-website": "Reiniciar estadísticas",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Rol",
|
||||
"label.run-query": "Ejecutar consulta",
|
||||
"label.save": "Guardar",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Configuraciones",
|
||||
"label.share-url": "Compartir URL",
|
||||
"label.single-day": "Un solo día",
|
||||
"label.sum": "Suma",
|
||||
"label.tablet": "Tableta",
|
||||
"label.team": "Equipo",
|
||||
"label.team-guest": "Invitado al equipo",
|
||||
"label.team-id": "ID de equipo",
|
||||
"label.team-member": "Miembro del equipo",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Admin. del equipo",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Equipos",
|
||||
"label.theme": "Tema",
|
||||
"label.this-month": "Este mes",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Título",
|
||||
"label.today": "Hoy",
|
||||
"label.toggle-charts": "Alternar gráficas",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total de registros",
|
||||
"label.tracking-code": "Código de rastreo",
|
||||
"label.true": "Verdadero",
|
||||
"label.type": "Tipo",
|
||||
"label.unique": "Único",
|
||||
"label.unique-visitors": "Visitantes únicos",
|
||||
"label.unknown": "Desconocida",
|
||||
"label.untitled": "Sin título",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "Usuario",
|
||||
"label.username": "Nombre de usuario",
|
||||
"label.users": "Usuarios",
|
||||
"label.value": "Valor",
|
||||
"label.view": "Visualizar",
|
||||
"label.view-details": "Ver detalles",
|
||||
"label.view-only": "Ver sólo",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Sitios web",
|
||||
"label.window": "Ventana",
|
||||
"label.yesterday": "Ayer",
|
||||
"labels.after": "Después",
|
||||
"labels.average": "Media",
|
||||
"labels.before": "Antes",
|
||||
"labels.breakdown": "Desglose",
|
||||
"labels.contains": "Contiene",
|
||||
"labels.create-report": "Crear reporte",
|
||||
"labels.description": "Descripciones",
|
||||
"labels.does-not-contain": "No contiene",
|
||||
"labels.does-not-equal": "No es igual a",
|
||||
"labels.equals": "Es igual a",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filtros",
|
||||
"labels.greater-than": "Mayor que",
|
||||
"labels.greater-than-equals": "Mayor que o igual a",
|
||||
"labels.less-than": "Menor que",
|
||||
"labels.less-than-equals": "Menor que o igual a",
|
||||
"labels.max": "Máx",
|
||||
"labels.min": "Mín",
|
||||
"labels.overview": "Resumen",
|
||||
"labels.sum": "Suma",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total de registros",
|
||||
"labels.true": "Verdadero",
|
||||
"labels.type": "Tipo",
|
||||
"labels.unique": "Único",
|
||||
"labels.untitled": "Sin título",
|
||||
"labels.value": "Valor",
|
||||
"message.active-users": "{x} {x, plural, one {activo} other {activos}}",
|
||||
"message.confirm-delete": "¿Seguro que quieres eliminar {target}?",
|
||||
"message.confirm-leave": "¿Seguro que quieres abandonar {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Nombre de usuario o contraseña incorrectos.",
|
||||
"message.invalid-domain": "Dominio inválido",
|
||||
"message.min-password-length": "Longitud mínima de {n} caracteres",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "No hay información disponible.",
|
||||
"message.no-event-data": "No hay datos de eventos disponibles.",
|
||||
"message.no-match-password": "Las contraseñas no coinciden",
|
||||
"message.no-results-found": "No se encontraron resultados.",
|
||||
"message.no-team-websites": "Este equipo no tiene ningún sitio web configurado.",
|
||||
"message.no-teams": "No has creado ningún equipo.",
|
||||
"message.no-users": "No hay usuarios.",
|
||||
"message.no-websites-configured": "No tienes ningún sitio web configurado.",
|
||||
"message.page-not-found": "Página no encontrada",
|
||||
"message.reset-website": "Para reiniciar este sitio web, escribe {confirmation} a continuación para confirmar.",
|
||||
"message.reset-website-warning": "Todas las estadísticas de esta página serán eliminadas, pero el código de rastreo permanecerá intacto.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Esta es la URL pública para {target}.",
|
||||
"message.team-already-member": "Ya eres miembro de este equipo.",
|
||||
"message.team-not-found": "Equipo no encontrado.",
|
||||
"message.team-websites-info": "Las analíticas de tus sitios web pueden ser vistas por cualquier miembro del equipo.",
|
||||
"message.tracking-code": "Código de rastreo",
|
||||
"message.user-deleted": "Usuario eliminado.",
|
||||
"message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}",
|
||||
"message.no-results-found": "No se encontraron resultados.",
|
||||
"message.no-team-websites": "Este equipo no tiene ningún sitio web configurado.",
|
||||
"message.no-websites-configured": "No tienes ningún sitio web configurado.",
|
||||
"message.team-websites-info": "Las analíticas de tus sitios web pueden ser vistas por cualquier miembro del equipo.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Nuevo sitio web",
|
||||
"label.admin": "Administrador",
|
||||
"label.after": "After",
|
||||
"label.all": "Todos",
|
||||
"label.all-time": "Todos los tiempos",
|
||||
"label.analytics": "Analíticas",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Tiempo promedio de visita",
|
||||
"label.back": "Atrás",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Porcentaje de rebote",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Navegadores",
|
||||
"label.cancel": "Cancelar",
|
||||
"label.change-password": "Cambiar contraseña",
|
||||
"label.cities": "Ciudades",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Limpiar todo",
|
||||
"label.confirm": "Confirmar",
|
||||
"label.confirm-password": "Confirmar contraseña",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continuar",
|
||||
"label.countries": "Países",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Crear equipo",
|
||||
"label.create-user": "Crear usuario",
|
||||
"label.created": "Creado",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Intervalo personalizado",
|
||||
"label.dashboard": "Panel de control",
|
||||
"label.data": "Datos",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Intervalo de fechas",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Intervalo por defecto",
|
||||
"label.delete": "Eliminar",
|
||||
"label.delete-team": "Eliminar team",
|
||||
"label.delete-user": "Eliminar usuario",
|
||||
"label.delete-website": "Eliminar sitio",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Escritorio",
|
||||
"label.details": "Detalles",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Dispositivos",
|
||||
"label.dismiss": "Ignorar",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Dominio",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Editar",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Evento",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Eventos",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Combinado",
|
||||
"label.filter-raw": "Personalizado",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Unir",
|
||||
"label.join-team": "Unir a equipo",
|
||||
"label.language": "Idioma",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Últimas {x} horas",
|
||||
"label.leave": "Abandonar",
|
||||
"label.leave-team": "Abandonar equipo",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Iniciar sesión",
|
||||
"label.logout": "Cerrar sesión",
|
||||
"label.max": "Max",
|
||||
"label.members": "Miembros",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Móvil",
|
||||
"label.more": "Más",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Nombre",
|
||||
"label.new-password": "Nueva contraseña",
|
||||
"label.none": "Ninguno",
|
||||
"label.operating-systems": "Sistemas operativos",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Propietario",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Vistas",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Páginas",
|
||||
"label.password": "Contraseña",
|
||||
"label.powered-by": "Analíticas de {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Parámetros de petición",
|
||||
"label.realtime": "Tiempo real",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referido desde",
|
||||
"label.refresh": "Actualizar",
|
||||
"label.regenerate": "Regenerar",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regiones",
|
||||
"label.remove": "Quitar",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Obligatorio",
|
||||
"label.reset": "Reiniciar",
|
||||
"label.reset-website": "Reiniciar estadísticas",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Rol",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Guardar",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Configuraciones",
|
||||
"label.share-url": "Compartir URL",
|
||||
"label.single-day": "Día",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tableta",
|
||||
"label.team": "Equipo",
|
||||
"label.team-guest": "Invitado de equipo",
|
||||
"label.team-id": "ID de equipo",
|
||||
"label.team-member": "Miembro de equipo",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Admin. del equipo",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Equipos",
|
||||
"label.theme": "Tema",
|
||||
"label.this-month": "Este mes",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Título",
|
||||
"label.today": "Hoy",
|
||||
"label.toggle-charts": "Alternar gráficas",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Código de rastreo",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Visitantes únicos",
|
||||
"label.unknown": "Desconocida",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "Usuario",
|
||||
"label.username": "Nombre de usuario",
|
||||
"label.users": "Usuarios",
|
||||
"label.value": "Value",
|
||||
"label.view": "Visualizar",
|
||||
"label.view-details": "Ver detalles",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Sitios",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Ayer",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} {x, plural, one {activo} other {activos}}",
|
||||
"message.confirm-delete": "¿Seguro que quieres eliminar {target}?",
|
||||
"message.confirm-leave": "¿Seguro que quieres abandonar {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Nombre de usuario o contraseña incorrectos.",
|
||||
"message.invalid-domain": "Dominio inválido",
|
||||
"message.min-password-length": "Longitud mínima de {n} caracteres",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "No hay información disponible.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Las contraseñas no coinciden",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "Este equipo no tiene ningún sitio web configurado.",
|
||||
"message.no-teams": "No has creado ningún equipo.",
|
||||
"message.no-users": "No hay usuarios.",
|
||||
"message.no-websites-configured": "No tienes ningún sitio configurado.",
|
||||
"message.page-not-found": "Página no encontrada",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "Todas las estadísticas de esta página serán eliminadas, pero el código de rastreo permanecerá intacto.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Esta es la URL compartida públicamente para {target}.",
|
||||
"message.team-already-member": "Ya eres miembro de este equipo.",
|
||||
"message.team-not-found": "Equipo no encontrado.",
|
||||
"message.team-websites-info": "Las analíticas de tus sitios pueden verse por cualquier miembro del equipo.",
|
||||
"message.tracking-code": "Código de rastreo",
|
||||
"message.user-deleted": "Usuario eliminado.",
|
||||
"message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "Este equipo no tiene ningún sitio web configurado.",
|
||||
"message.no-websites-configured": "No tienes ningún sitio configurado.",
|
||||
"message.team-websites-info": "Las analíticas de tus sitios pueden verse por cualquier miembro del equipo.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "افزودن وبسایت",
|
||||
"label.admin": "مدیر",
|
||||
"label.after": "After",
|
||||
"label.all": "همه",
|
||||
"label.all-time": "همه زمان",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "میانگین زمان بازدید",
|
||||
"label.back": "برگشت",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "نرخ Bounce",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "مروگرها",
|
||||
"label.cancel": "انصراف",
|
||||
"label.change-password": "تغییر رمز",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "تایید رمز",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "کشورها",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "محدودهی دلخواه",
|
||||
"label.dashboard": "داشبورد",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "محدودهی تاریخ",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "محدودهی پیشفرض تاریخ",
|
||||
"label.delete": "حذف",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "حذف وبسایت",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "دسکتاپ",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "دستگاهها",
|
||||
"label.dismiss": "رد کردن",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "دامنه",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "ویرایش",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "رویدادها",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "ترکیب شده",
|
||||
"label.filter-raw": "خام",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "زبان",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "لیست {x} ساعت گذشته",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "ورود",
|
||||
"label.logout": "خروج",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "موبایل",
|
||||
"label.more": "بیشتر",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "نام",
|
||||
"label.new-password": "رمز جدید",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "سیستمعاملها",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "ایجاد شده توسط",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "بازدید صفحه",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "صفحهها",
|
||||
"label.password": "رمز",
|
||||
"label.powered-by": "قدرت گرفته توسط {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "آمار زنده",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "ارجاع دهندگان",
|
||||
"label.refresh": "بهروزرسانی",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "ضروری",
|
||||
"label.reset": "بازنشانی",
|
||||
"label.reset-website": "بازنشانی آمار",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "ذخیره",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "تنظیمات",
|
||||
"label.share-url": "به اشتراک گذاری URL",
|
||||
"label.single-day": "یک روز",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "تبلت",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "تم",
|
||||
"label.this-month": "این ماه",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "امروز",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "کد رهگیری",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "بازدیدکنندههای یکتا",
|
||||
"label.unknown": "ناشناخته",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "نام کاربری",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "مشاهدهی جزئیات",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "وبسایتها",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} هم اکنون {x, plural, one {یک} other {از میان}}",
|
||||
"message.confirm-delete": "آیا مطمئن هستید میخواهید {target} را حذف کنید?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "نام کاربری / رمز نادرست است.",
|
||||
"message.invalid-domain": "دامنهی نامعتبر",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "اطلاعاتی موجود نیست.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "رمزها یکسان نیستند",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "شما هیچ وبسایتی را پیکربندی نکردهاید.",
|
||||
"message.page-not-found": "صفحه یافت نشد.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "تمامی آمارهای این وبسایت حذف خواهد شد اما tracking code بدون تغییر باقی میماند.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "این URL به اشتراک گذاشته شده عمومی برای {target} است.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "کد رهگیری",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "بازدیدکننده از کشور {country} با مروگر {browser} در {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "شما هیچ وبسایتی را پیکربندی نکردهاید.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "بازدیدکننده از کشور {country} با مروگر {browser} در {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Lisää verkkosivu",
|
||||
"label.admin": "Järjestelmänvalvoja",
|
||||
"label.after": "After",
|
||||
"label.all": "Kaikki",
|
||||
"label.all-time": "Alusta lähtien",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Keskimääräinen vierailuaika",
|
||||
"label.back": "Takaisin",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Välitön poistuminen",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Selaimet",
|
||||
"label.cancel": "Peruuta",
|
||||
"label.change-password": "Vaihda salasana",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Vahvista salasana",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Maat",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Mukautettu ajanjakso",
|
||||
"label.dashboard": "Ohjauspaneeli",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Ajanjakso",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Oletusajanjakso",
|
||||
"label.delete": "Poista",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Poista verkkosivu",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Pöytäkone",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Laitteet",
|
||||
"label.dismiss": "Hylkää",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Verkkotunnus",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Muokkaa",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Tapahtumat",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Yhdistetty",
|
||||
"label.filter-raw": "Käsittelemätön",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Kieli",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Viimeisimmät {x} tuntia",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Kirjaudu sisään",
|
||||
"label.logout": "Kirjaudu ulos",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Puhelin",
|
||||
"label.more": "Lisää",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Nimi",
|
||||
"label.new-password": "Uusi salasana",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Käyttöjärjestelmät",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Omistaja",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Sivun näyttökerrat",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Sivut",
|
||||
"label.password": "Salasana",
|
||||
"label.powered-by": "Voimanlähteenä {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Juuri nyt",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Viittaajat",
|
||||
"label.refresh": "Päivitä",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Vaaditaan",
|
||||
"label.reset": "Nollaa",
|
||||
"label.reset-website": "Nollaa tilastot",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Tallenna",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Asetukset",
|
||||
"label.share-url": "Jaa URL",
|
||||
"label.single-day": "Yksi päivä",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tabletti",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Teema",
|
||||
"label.this-month": "Tämä kuukausi",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Tänään",
|
||||
"label.toggle-charts": "Kytke kaaviot päälle/pois",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Seurantakoodi",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Yksittäiset kävijät",
|
||||
"label.unknown": "Tuntematon",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Käyttäjänimi",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Katso tiedot",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Verkkosivut",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} {x, plural, one {vierailija} other {vierailijaa}}",
|
||||
"message.confirm-delete": "Haluatko varmasti poistaa sivuston {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Väärä käyttäjänimi/salasana.",
|
||||
"message.invalid-domain": "Virheellinen verkkotunnus",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Tietoja ei ole käytettävissä.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Salasanat eivät täsmää",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Sinulla ei ole määritettyjä verkkosivustoja.",
|
||||
"message.page-not-found": "Sivua ei löydetty.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "Kaikki sivuston tilastot poistetaan, mutta seurantakoodi pysyy muuttumattomana.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Tämä on julkisesti jaettu URL sivustolle {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Seurantakoodi",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Vierailija maasta {country} selaimella {browser} laitteella {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "Sinulla ei ole määritettyjä verkkosivustoja.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Vierailija maasta {country} selaimella {browser} laitteella {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Legg heimasíðu afturat",
|
||||
"label.admin": "Fyrisitari",
|
||||
"label.after": "After",
|
||||
"label.all": "Alt",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Miðal vitjurnartíð ",
|
||||
"label.back": "Aftur",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Bounce prosenttal",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Kagar",
|
||||
"label.cancel": "Strika",
|
||||
"label.change-password": "Skift loyniorð",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Vátta loyniorð",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Lond",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Tillaga spenni",
|
||||
"label.dashboard": "Yvirlitsskíggi",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Vel dato",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Forsett dato",
|
||||
"label.delete": "Sletta",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Sletta heimasíðu",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Borðtelda",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Tóleindir",
|
||||
"label.dismiss": "Lat fara",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Økisnavn",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Ger broyting",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Hendingar/tiltøk",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Samansett",
|
||||
"label.filter-raw": "Óviðgjørt",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Seinastu {x} tímarnar",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Rita inn",
|
||||
"label.logout": "Rita út",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Telefon",
|
||||
"label.more": "Meira",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Navn",
|
||||
"label.new-password": "Nýtt loyniorð",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Stýrikervir",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Opnaðar síðir",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Síðir",
|
||||
"label.password": "Loyniorð",
|
||||
"label.powered-by": "Powered by {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Beinleiðis",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Framsendingar",
|
||||
"label.refresh": "Endurskapa",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Kravt",
|
||||
"label.reset": "Nulstilla",
|
||||
"label.reset-website": "Reset statistics",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Goym",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Stillingar",
|
||||
"label.share-url": "Deil leinku",
|
||||
"label.single-day": "Einkultur dagur",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Teldil",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "Hendan mánan",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Í dag",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Spori kota",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Einsýna vitjanir",
|
||||
"label.unknown": "Ókent",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Brúkaranavn",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Vís frágreiðing",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Heimasíður",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} í løtuni {x, plural, one {vitjandi} other { vitjandi }}",
|
||||
"message.confirm-delete": "Ert tú sikkur at tú ynskir at strika {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Skeivt brúkaranavn/loyniorð.",
|
||||
"message.invalid-domain": "Ógilt økisnavn",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Einki data tøk.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Loyniorðini eru ikki eins",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Tú hevur ongar heimasíður stillaða til.",
|
||||
"message.page-not-found": "Síðan bleiv ikki funnin.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your tracking code will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Hettar er tann almenna leinkan av {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Spori kota",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Vitjandi frá {country} brúkar {browser} á {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "Tú hevur ongar heimasíður stillaða til.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Vitjandi frá {country} brúkar {browser} á {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Ajouter une description",
|
||||
"label.add-website": "Ajouter un site",
|
||||
"label.admin": "Administrateur",
|
||||
"label.after": "Après",
|
||||
"label.all": "Tout",
|
||||
"label.all-time": "Toutes les données",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Moyenne",
|
||||
"label.average-visit-time": "Temps de visite moyen",
|
||||
"label.back": "Retour",
|
||||
"label.before": "Avant",
|
||||
"label.bounce-rate": "Taux de rebond",
|
||||
"label.breakdown": "Répartition",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Navigateurs",
|
||||
"label.cancel": "Annuler",
|
||||
"label.change-password": "Changer le mot de passe",
|
||||
"label.cities": "Villes",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Réinitialiser",
|
||||
"label.confirm": "Confirmer",
|
||||
"label.confirm-password": "Confirmation du mot de passe",
|
||||
"label.contains": "Contient",
|
||||
"label.continue": "Continuer",
|
||||
"label.countries": "Pays",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Créer un rapport",
|
||||
"label.create-team": "Créer une équipe",
|
||||
"label.create-user": "Créer un utilisateur",
|
||||
"label.created": "Créé",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Période personnalisée",
|
||||
"label.dashboard": "Tableau de bord",
|
||||
"label.data": "Données",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Période",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Période par défaut",
|
||||
"label.delete": "Supprimer",
|
||||
"label.delete-team": "Supprimer l'équipe",
|
||||
"label.delete-user": "Supprimer l'utilisateur",
|
||||
"label.delete-website": "Supprimer le site",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Ordinateur",
|
||||
"label.details": "Détails",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Appareils",
|
||||
"label.dismiss": "Ignorer",
|
||||
"label.does-not-contain": "Ne contient pas",
|
||||
"label.domain": "Domaine",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Modifier",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Données d'événements",
|
||||
"label.events": "Événements",
|
||||
"label.false": "Faux",
|
||||
"label.field": "Champ",
|
||||
"label.fields": "Champs",
|
||||
"label.filter-combined": "Combiné",
|
||||
"label.filter-raw": "Brut",
|
||||
"label.filters": "Filtres",
|
||||
"label.funnel": "Entonnoir",
|
||||
"label.greater-than": "Supérieur à",
|
||||
"label.greater-than-equals": "Supérieur ou égal à",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Est égal",
|
||||
"label.is-not": "N'est pas égal",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Rejoindre",
|
||||
"label.join-team": "Rejoindre une équipe",
|
||||
"label.language": "Langue",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "{x} dernières heures",
|
||||
"label.leave": "Quitter",
|
||||
"label.leave-team": "Quitter l'équipe",
|
||||
"label.less-than": "Inférieur à",
|
||||
"label.less-than-equals": "Inférieur ou égal à",
|
||||
"label.login": "Connexion",
|
||||
"label.logout": "Déconnexion",
|
||||
"label.max": "Max",
|
||||
"label.members": "Membres",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Téléphone",
|
||||
"label.more": "Plus",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Nom",
|
||||
"label.new-password": "Nouveau mot de passe",
|
||||
"label.none": "Aucun·e",
|
||||
"label.operating-systems": "Systèmes d'exploitation",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Vue d'ensemble",
|
||||
"label.owner": "Propriétaire",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Pages vues",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Pages",
|
||||
"label.password": "Mot de passe",
|
||||
"label.powered-by": "Propulsé par {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Requête",
|
||||
"label.query-parameters": "Paramètres d'URL",
|
||||
"label.realtime": "Temps réel",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Sites référents",
|
||||
"label.refresh": "Rafraîchir",
|
||||
"label.regenerate": "Régénérer",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Régions",
|
||||
"label.remove": "Retirer",
|
||||
"label.reports": "Rapports",
|
||||
"label.required": "Requis",
|
||||
"label.reset": "Réinitialiser",
|
||||
"label.reset-website": "Réinitialiser les statistiques",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Rôle",
|
||||
"label.run-query": "Éxécuter la requête",
|
||||
"label.save": "Enregistrer",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Paramètres",
|
||||
"label.share-url": "URL de partage",
|
||||
"label.single-day": "Journée",
|
||||
"label.sum": "Somme",
|
||||
"label.tablet": "Tablette",
|
||||
"label.team": "Équipe",
|
||||
"label.team-guest": "Invité dans l'équipe",
|
||||
"label.team-id": "ID d'équipe",
|
||||
"label.team-member": "Membre de l'équipe",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Propriétaire de l'équipe",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Équipes",
|
||||
"label.theme": "Thème",
|
||||
"label.this-month": "Ce mois",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Titre",
|
||||
"label.today": "Aujourd'hui",
|
||||
"label.toggle-charts": "Afficher/Masquer les graphiques",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Nombre d'enregistrements",
|
||||
"label.tracking-code": "Code de suivi",
|
||||
"label.true": "Vrai",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Visiteurs uniques",
|
||||
"label.unknown": "Inconnu",
|
||||
"label.untitled": "Sans titre",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "Utilisateur",
|
||||
"label.username": "Nom d'utilisateur",
|
||||
"label.users": "Utilisateurs",
|
||||
"label.value": "Valeur",
|
||||
"label.view": "Voir",
|
||||
"label.view-details": "Voir les détails",
|
||||
"label.view-only": "Consultation",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Sites",
|
||||
"label.window": "Fenêtre",
|
||||
"label.yesterday": "Hier",
|
||||
"labels.after": "Après",
|
||||
"labels.average": "Moyenne",
|
||||
"labels.before": "Avant",
|
||||
"labels.breakdown": "Répartition",
|
||||
"labels.contains": "Contient",
|
||||
"labels.create-report": "Créer un rapport",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Ne contient pas",
|
||||
"labels.does-not-equal": "N'est pas égal",
|
||||
"labels.equals": "Est égal",
|
||||
"labels.false": "Faux",
|
||||
"labels.filters": "Filtres",
|
||||
"labels.greater-than": "Supérieur à",
|
||||
"labels.greater-than-equals": "Supérieur ou égal à",
|
||||
"labels.less-than": "Inférieur à",
|
||||
"labels.less-than-equals": "Inférieur ou égal à",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Vue d'ensemble",
|
||||
"labels.sum": "Somme",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Nombre d'enregistrements",
|
||||
"labels.true": "Vrai",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Sans titre",
|
||||
"labels.value": "Valeur",
|
||||
"message.active-users": "{x} {x, plural, one {visiteur} other {visiteurs}} actuellement",
|
||||
"message.confirm-delete": "Êtes-vous sûr de vouloir supprimer {target} ?",
|
||||
"message.confirm-leave": "Êtes-vous sûr de vouloir quitter {target} ?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Nom d'utilisateur/Mot de passe incorrect.",
|
||||
"message.invalid-domain": "Domaine invalide",
|
||||
"message.min-password-length": "Taille minimale de {n} caractères",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Aucune donnée disponible.",
|
||||
"message.no-event-data": "Aucune donnée d'événement disponible.",
|
||||
"message.no-match-password": "Les mots de passe ne correspondent pas",
|
||||
"message.no-results-found": "Aucun résultat n'a été trouvé.",
|
||||
"message.no-team-websites": "Cette équipe n'a aucun site.",
|
||||
"message.no-teams": "Vous n'avez pas créé d'équipe.",
|
||||
"message.no-users": "Aucun utilisateur.",
|
||||
"message.no-websites-configured": "Vous n'avez pas configuré de site.",
|
||||
"message.page-not-found": "Page non trouvée.",
|
||||
"message.reset-website": "Pour réinitialiser ce site, taper {confirmation} ci-dessous pour confirmer.",
|
||||
"message.reset-website-warning": "Toutes les statistiques pour ce site seront supprimées, mais votre code de suivi restera intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Les statistiques de votre site sont accessibles publiquement sur cette URL :",
|
||||
"message.team-already-member": "Vous êtes déjà membre de cette équipe.",
|
||||
"message.team-not-found": "Équipe non trouvée.",
|
||||
"message.team-websites-info": "Les sites peuvent être vus par tout utilisateur dans l'équipe.",
|
||||
"message.tracking-code": "Code de suivi",
|
||||
"message.user-deleted": "Utilisateur supprimé.",
|
||||
"message.visitor-log": "Visiteur de {country} utilisant {browser} sur {os} {device}",
|
||||
"message.no-results-found": "Aucun résultat n'a été trouvé.",
|
||||
"message.no-team-websites": "Cette équipe n'a aucun site.",
|
||||
"message.no-websites-configured": "Vous n'avez pas configuré de site.",
|
||||
"message.team-websites-info": "Les sites peuvent être vus par tout utilisateur dans l'équipe.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visiteur de {country} utilisant {browser} sur {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Engadir sitio web",
|
||||
"label.admin": "Administradora",
|
||||
"label.after": "After",
|
||||
"label.all": "Todo",
|
||||
"label.all-time": "Sempre",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Tempo medio de visita",
|
||||
"label.back": "Atrás",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Proporción de rebote",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Navegadores",
|
||||
"label.cancel": "Cancelar",
|
||||
"label.change-password": "Mudar contrasinal",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Confirmar contrasinal",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Países",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Rango personalizado",
|
||||
"label.dashboard": "Taboleiro",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Rango temporal",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Rango temporal por defecto",
|
||||
"label.delete": "Eliminar",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Eliminar sitio web",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Escritorio",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Dispositivos",
|
||||
"label.dismiss": "Desbotar",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Dominio",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Editar",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Eventos",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Combinado",
|
||||
"label.filter-raw": "Raw",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Idioma",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Últimas {x} horas",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Acceder",
|
||||
"label.logout": "Pechar sesión",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Móbil",
|
||||
"label.more": "Máis",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Nome",
|
||||
"label.new-password": "Novo contrasinal",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Sistemas operativos",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Dona",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Vistas de páxinas",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Páxinas",
|
||||
"label.password": "Contrasinal",
|
||||
"label.powered-by": "Funciona grazas a {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Agora mesmo",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Orixes",
|
||||
"label.refresh": "Actualizar",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Requerido",
|
||||
"label.reset": "Restablecer",
|
||||
"label.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Gardar",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Axustes",
|
||||
"label.share-url": "Compartir URL",
|
||||
"label.single-day": "Un só día",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tableta",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Decorado",
|
||||
"label.this-month": "Este mes",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Hoxe",
|
||||
"label.toggle-charts": "Activación das gráficas",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Código de seguimento",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Visitas únicas",
|
||||
"label.unknown": "Descoñecido",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Identificador",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Ver detalles",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Sitios web",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} actual {x, plural, one {visitante} other {visitantes}}",
|
||||
"message.confirm-delete": "Tes a certeza de querer eliminar {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Credenciais incorrectas.",
|
||||
"message.invalid-domain": "Dominio non válido",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Sen datos dispoñibles.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Non concordan os contrasinais",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Non tes sitios web configurados.",
|
||||
"message.page-not-found": "Páxina non atopada.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "Vanse eliminar tódalas estatísticas deste sitio web, pero o código de seguimento permanecerá sen cambios.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Este é o URL da compartición pública de {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Código de seguimento",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "Non tes sitios web configurados.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "הוספת אתר",
|
||||
"label.admin": "מנהל",
|
||||
"label.after": "After",
|
||||
"label.all": "הכל",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "זמן ביקור ממוצע",
|
||||
"label.back": "חזרה",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Bounce rate",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "דפדפנים",
|
||||
"label.cancel": "ביטול",
|
||||
"label.change-password": "שינוי סיסמה",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "אישור סיסמה",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "מדינות",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "טווח מותאם",
|
||||
"label.dashboard": "דשבורד",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "טווח תאריכים",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "טווח תאריכים בברירת מחדל",
|
||||
"label.delete": "הסרה",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "הסרת אתר",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "דסקטופ",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "מכשירים",
|
||||
"label.dismiss": "שיחרור",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "דומיין",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "עריכה",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "אירועים",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "משותף",
|
||||
"label.filter-raw": "גולמי",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "{x} שעות אחרונות",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "התחברות",
|
||||
"label.logout": "התנתקות",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "מובייל",
|
||||
"label.more": "עוד",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "שם",
|
||||
"label.new-password": "סיסמה חדשה",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "מערכות הפעלה",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "צפיות בדפים",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "דפים",
|
||||
"label.password": "סיסמה",
|
||||
"label.powered-by": "Powered by {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "זמן אמת",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "מפנים",
|
||||
"label.refresh": "רענון",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "נדרש",
|
||||
"label.reset": "איפוס",
|
||||
"label.reset-website": "Reset statistics",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "שמירה",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "הגדרות",
|
||||
"label.share-url": "שיתוף URL",
|
||||
"label.single-day": "יום בודד",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "טאבלט",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "החודש",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "היום",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "קוד מעקב",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "מבקרים ייחודיים",
|
||||
"label.unknown": "לא ידוע",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "שם משתמש",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "פרטים נוספים",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "אתרים",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} נוכחיים {x, plural, one {מבקר} other {מבקרים}}",
|
||||
"message.confirm-delete": "האם באמת למחוק את {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "שם משתמש או סיסמה לא נכונים",
|
||||
"message.invalid-domain": "דומיין לא תקין",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "אין מידע זמין",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "סיסמאות לא תואמות",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "לא מוגדרים אתרים",
|
||||
"message.page-not-found": "דף לא נמצא",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your tracking code will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "זהו URL ציבורי עבור {target}",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "קוד מעקב",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "מבקר ממדינת {country} משתמבש בדפדפן {browser} ב-{os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "לא מוגדרים אתרים",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "מבקר ממדינת {country} משתמבש בדפדפן {browser} ב-{os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "वेबसाइट",
|
||||
"label.admin": "प्रशासक",
|
||||
"label.after": "After",
|
||||
"label.all": "सब",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "औसत दृश्य समय",
|
||||
"label.back": "पीछे",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "उछाल दर",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "वेब ब्राउज़र",
|
||||
"label.cancel": "रद्द करें",
|
||||
"label.change-password": "पासवर्ड बदलें",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "पासवर्ड की पुष्टि कीजिये",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "देश",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "कस्टम रेंज",
|
||||
"label.dashboard": "नियंत्रण-पट्ट",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "तिथि सीमा",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "डिफ़ॉल्ट तिथि सीमा",
|
||||
"label.delete": "खाता हटाएं",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "वेबसाइट हटाएं",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "डेस्कटॉप",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "उपकरण",
|
||||
"label.dismiss": "खारिज कीजिये",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "डोमेन",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "संपादित करें",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "स्पर्धाएँ",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "संयुक्त",
|
||||
"label.filter-raw": "रॉ",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "पिछले {x} घंटे",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "लॉग इन",
|
||||
"label.logout": "लॉग आउट",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "मोबाइल फोन",
|
||||
"label.more": "और",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "नाम",
|
||||
"label.new-password": "नया पासवर्ड",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "ऑपरेटिंग सिस्टम",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "पृष्ठ दृश्य",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "पृष्ठों",
|
||||
"label.password": "पासवर्ड",
|
||||
"label.powered-by": "{name} द्वारा संचालित",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "वास्तव काल",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "सन्दर्भदाता",
|
||||
"label.refresh": "रिफ्रेश",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "अपेक्षित",
|
||||
"label.reset": "रीसेट",
|
||||
"label.reset-website": "Reset statistics",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "सहेजें",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "समायोजन",
|
||||
"label.share-url": "यूआरएल साझा करें",
|
||||
"label.single-day": "एक दिन",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "टैबलेट",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "इस महीने",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "आज",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "ट्रैकिंग कोड",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "अद्वितीय आगंतुकों",
|
||||
"label.unknown": "अज्ञात",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "उपयोगकर्ता नाम",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "विवरण देखें",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "वेबसाइटों",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} मौजूद {x, plural, one {आगंतुक} other {आगंतुकों}}",
|
||||
"message.confirm-delete": "क्या आप वाकई में {target} हटाना चाहते हैं?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "ग़लत उपयोगकर्ता नाम / पासवर्ड।",
|
||||
"message.invalid-domain": "अमान्य डोमेन",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "कोई डेटा उपलब्ध नहीं है।",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "पासवर्ड मेल नहीं खाते",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "आपके पास कोई वेबसाइट कॉन्फ़िगर नहीं है।",
|
||||
"message.page-not-found": "पृष्ठ नहीं मिला।",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your tracking code will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "यह {target} के लिए सार्वजनिक रूप से साझा किया गया URL है।",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "ट्रैकिंग कोड",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "{country} का आगंतुक, जो {browser} का उपयोग करता है, {os} यन्त्र पर",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "आपके पास कोई वेबसाइट कॉन्फ़िगर नहीं है।",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "{country} का आगंतुक, जो {browser} का उपयोग करता है, {os} यन्त्र पर"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Dodaj web stranicu",
|
||||
"label.admin": "Administrator",
|
||||
"label.after": "After",
|
||||
"label.all": "Sve",
|
||||
"label.all-time": "Svo vrijeme",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Average visit time",
|
||||
"label.back": "Natrag ",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Bounce rate",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Browsers",
|
||||
"label.cancel": "Odustani",
|
||||
"label.change-password": "Promijeni lozinku",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Potvrdi lozinku",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Countries",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Prilagođeni raspon",
|
||||
"label.dashboard": "Nadzorna ploča",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Raspon datuma",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Zadani datumski raspon",
|
||||
"label.delete": "Obriši",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Obriši web stranicu",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Desktop",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Devices",
|
||||
"label.dismiss": "Odbaci",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domena",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Uredi",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Podaci događaja",
|
||||
"label.events": "Events",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Combined",
|
||||
"label.filter-raw": "Raw",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Jezik",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Zadnjih {x} sati",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Prijava",
|
||||
"label.logout": "Odjava",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Mobile",
|
||||
"label.more": "Više",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Ime",
|
||||
"label.new-password": "Nova lozinka",
|
||||
"label.none": "Ništa",
|
||||
"label.operating-systems": "Operating systems",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Vlasnik",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Page views",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Pages",
|
||||
"label.password": "Lozinka",
|
||||
"label.powered-by": "Powered by {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Stvarno vrijeme",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Referrers",
|
||||
"label.refresh": "Osvježi",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Potrebna",
|
||||
"label.reset": "Resetirati",
|
||||
"label.reset-website": "Resetirati web stranicu",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Spremi",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Postavke",
|
||||
"label.share-url": "Podijeli poveznicu",
|
||||
"label.single-day": "Jedan dan",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tablet",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Tema",
|
||||
"label.this-month": "Ovaj mjesec",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Danas",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Kod za praćenje",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Unique visitors",
|
||||
"label.unknown": "Nepoznato",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Korisničko ime",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Pogledaj detalje",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Web stranice",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Jučer",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} Trenutno {x, plural, one {posjetitelj} other {posjetitelja}}",
|
||||
"message.confirm-delete": "Jeste li sigurni da želite obrisati {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Neispravno korisničke ime/lozinka.",
|
||||
"message.invalid-domain": "Invalid domain. Do not include http/https.",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Nema dostupnih podataka.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Passwords do not match.",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "You do not have any websites configured.",
|
||||
"message.page-not-found": "Stranica nije pronađena.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your settings will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Ovo je javno dijeljena poveznica za {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "To track stats for this website, place the following code in the <head>...</head> section of your HTML.",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "You do not have any websites configured.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Visitor from {country} using {browser} on {os} {device}"
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Weboldal hozzáadása",
|
||||
"label.admin": "Adminisztrátor",
|
||||
"label.after": "After",
|
||||
"label.all": "Összes",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Átlagos látogatási idő",
|
||||
"label.back": "Vissza",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Visszafordulási arány",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Böngészők",
|
||||
"label.cancel": "Mégsem",
|
||||
"label.change-password": "Jelszó módosítása",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Jelszó megerősítése",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Országok",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Egyedi tartomány",
|
||||
"label.dashboard": "Áttekintés",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Időintervallum",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Alapértelmezett időintervallum",
|
||||
"label.delete": "Eltávolítás",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Weboldal eltávolítása",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Asztali számítógép",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Eszközök",
|
||||
"label.dismiss": "Mellőzés",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domain",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Módosítás",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Események",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Összevont",
|
||||
"label.filter-raw": "Nyers",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "Legutóbbi {x} óra",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Bejelentkezés",
|
||||
"label.logout": "Kijelentkezés",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Telefon",
|
||||
"label.more": "Bővebben",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Név",
|
||||
"label.new-password": "Új jelszó",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Operációs rendszerek",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Oldalmegtekintések",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Oldalak",
|
||||
"label.password": "Jelszó",
|
||||
"label.powered-by": "Működteti az {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Valós idejű",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Hivatkozók",
|
||||
"label.refresh": "Frissítés",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Kötelező",
|
||||
"label.reset": "Visszaállítás",
|
||||
"label.reset-website": "Reset statistics",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Mentés",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Beállítások",
|
||||
"label.share-url": "URL megosztása",
|
||||
"label.single-day": "Egy nap",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Táblagép",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.this-month": "Ezen hónap",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Ma",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Követési kód",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Egyedi látogatók",
|
||||
"label.unknown": "Ismeretlen",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Felhasználónév",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Részletek",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Weboldalak",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} {x, plural, one {látogató} other {latógató}} jelenleg",
|
||||
"message.confirm-delete": "Biztos, hogy törölni szeretnéd {target} elemet?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Érvénytelen felhasználónév/jelszó.",
|
||||
"message.invalid-domain": "Érvénytelen domain",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Nincs rendelkezésre álló adat.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "A jelszavak nem egyeznek",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Még nem állítottál be egyetlen weboldalt sem.",
|
||||
"message.page-not-found": "Oldal nem található.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your tracking code will remain intact.",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "{target} nyilvánosan megosztott URL címe.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Követési kód",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Látógató {country} területéről, {os} {device} eszközön, {browser} böngészőből.",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "Még nem állítottál be egyetlen weboldalt sem.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Látógató {country} területéről, {os} {device} eszközön, {browser} böngészőből."
|
||||
}
|
||||
|
@ -6,21 +6,30 @@
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Tambah situs web",
|
||||
"label.admin": "Pengelola",
|
||||
"label.after": "After",
|
||||
"label.all": "Semua",
|
||||
"label.all-time": "Semua waktu",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.average-visit-time": "Waktu kunjungan rata-rata",
|
||||
"label.back": "Kembali",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Rasio pentalan",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.browsers": "Peramban",
|
||||
"label.cancel": "Batal",
|
||||
"label.change-password": "Ganti kata sandi",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Konfirmasi kata sandi",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.countries": "Negara",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
@ -28,16 +37,21 @@
|
||||
"label.custom-range": "Rentang khusus",
|
||||
"label.dashboard": "Dasbor",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Rentang tanggal",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Rentang tanggal bawaan",
|
||||
"label.delete": "Hapus",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-website": "Hapus situs web",
|
||||
"label.description": "Description",
|
||||
"label.desktop": "Desktop",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.devices": "Perangkat",
|
||||
"label.dismiss": "Tutup",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.domain": "Domain",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.edit": "Sunting",
|
||||
@ -46,12 +60,20 @@
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.events": "Perihal",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Gabungan",
|
||||
"label.filter-raw": "Mentah",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Bahasa",
|
||||
@ -61,17 +83,25 @@
|
||||
"label.last-hours": "{x} jam terakhir",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.login": "Masuk",
|
||||
"label.logout": "Keluar",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Ponsel",
|
||||
"label.more": "Lebih banyak",
|
||||
"label.my-websites": "My websites",
|
||||
"label.name": "Nama",
|
||||
"label.new-password": "Kata sandi baru",
|
||||
"label.none": "None",
|
||||
"label.operating-systems": "Sistem Operasi",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Pemilik",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Tampilan halaman",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.pages": "Halaman",
|
||||
"label.password": "Kata sandi",
|
||||
"label.powered-by": "Didukung oleh {name}",
|
||||
@ -80,15 +110,18 @@
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "Waktu nyata",
|
||||
"label.referrer": "Referrer",
|
||||
"label.referrers": "Perujuk",
|
||||
"label.refresh": "Segarkan",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.required": "Wajib",
|
||||
"label.reset": "Atur ulang",
|
||||
"label.reset-website": "Atur ulang statistik",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.save": "Simpan",
|
||||
@ -99,12 +132,15 @@
|
||||
"label.settings": "Pengaturan",
|
||||
"label.share-url": "Bagikan URL",
|
||||
"label.single-day": "Sehari",
|
||||
"label.sum": "Sum",
|
||||
"label.tablet": "Tablet",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Tema",
|
||||
"label.this-month": "Bulan ini",
|
||||
@ -114,14 +150,21 @@
|
||||
"label.title": "Title",
|
||||
"label.today": "Hari ini",
|
||||
"label.toggle-charts": "Buka grafik",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.tracking-code": "Kode lacak",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.unique-visitors": "Pengunjung unik",
|
||||
"label.unknown": "Tidak diketahui",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.username": "Nama pengguna",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Lihat Detil",
|
||||
"label.view-only": "View only",
|
||||
@ -132,33 +175,6 @@
|
||||
"label.websites": "Situs web",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "{x} pengunjung saat ini",
|
||||
"message.confirm-delete": "Apakah kamu yakin ingin menghapus {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
@ -172,11 +188,15 @@
|
||||
"message.incorrect-username-password": "Nama pengguna/kata sandi salah.",
|
||||
"message.invalid-domain": "Domain tidak valid",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.no-data-available": "Tidak ada data.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-match-password": "Kata sandi tidak cocok",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Anda tidak memiliki situs web yang dikonfigurasi.",
|
||||
"message.page-not-found": "Halaman tidak ditemukan.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "Semua statistik pada website ini akan dihapus, tetapi kode lacak akan tetap terpasang",
|
||||
@ -184,12 +204,8 @@
|
||||
"message.share-url": "Ini adalah URL yang dibagikan secara publik untuk {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.tracking-code": "Kode lacak",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.visitor-log": "Pengunjung dari {country} dengan {browser} di {device} {os}",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-websites-configured": "Anda tidak memiliki situs web yang dikonfigurasi.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!"
|
||||
"message.visitor-log": "Pengunjung dari {country} dengan {browser} di {device} {os}"
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user