Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Voldemorten 2023-12-08 21:34:33 +01:00
commit 232039c84d
512 changed files with 9589 additions and 7748 deletions

View file

@ -22,3 +22,4 @@ jobs:
operations-per-run: 200
ascending: true
repo-token: ${{ secrets.GITHUB_TOKEN }}
exempt-issue-labels: bug,enhancement

4
.gitignore vendored
View file

@ -34,9 +34,7 @@ yarn-error.log*
# local env files
.env
.env.development.local
.env.test.local
.env.production.local
.env.*
*.dev.yml

View file

@ -35,7 +35,7 @@ ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
RUN yarn add npm-run-all dotenv prisma
RUN yarn add npm-run-all dotenv prisma semver
# You only need to copy next.config.js if you are NOT using the default configuration
COPY --from=builder /app/next.config.js .
@ -53,6 +53,7 @@ USER nextjs
EXPOSE 3000
ENV HOSTNAME 0.0.0.0
ENV PORT 3000
CMD ["yarn", "start-docker"]

View file

@ -72,13 +72,13 @@ docker compose up -d
Alternatively, to pull just the Umami Docker image with PostgreSQL support:
```bash
docker pull docker.umami.dev/umami-software/umami:postgresql-latest
docker pull ghcr.io/umami-software/umami:postgresql-latest
```
Or with MySQL support:
```bash
docker pull docker.umami.dev/umami-software/umami:mysql-latest
docker pull ghcr.io/umami-software/umami:mysql-latest
```
## Getting updates

View file

@ -66,7 +66,7 @@ CREATE TABLE umami.website_event_queue (
)
ENGINE = Kafka
SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input broker list
kafka_topic_list = 'events',
kafka_topic_list = 'event',
kafka_group_name = 'event_consumer_group',
kafka_format = 'JSONEachRow',
kafka_max_block_size = 1048576,

View file

@ -1,9 +1,9 @@
-- AlterTable
ALTER TABLE `event_data` RENAME COLUMN `event_data_type` TO `data_type`;
ALTER TABLE `event_data` RENAME COLUMN `event_date_value` TO `date_value`;
ALTER TABLE `event_data` RENAME COLUMN `event_id` TO `event_data_id`;
ALTER TABLE `event_data` RENAME COLUMN `event_numeric_value` TO `number_value`;
ALTER TABLE `event_data` RENAME COLUMN `event_string_value` TO `string_value`;
ALTER TABLE `event_data` CHANGE `event_data_type` `data_type` INTEGER UNSIGNED NOT NULL;
ALTER TABLE `event_data` CHANGE `event_date_value` `date_value` TIMESTAMP(0) NULL;
ALTER TABLE `event_data` CHANGE `event_id` `event_data_id` VARCHAR(36) NOT NULL;
ALTER TABLE `event_data` CHANGE `event_numeric_value` `number_value` DECIMAL(19,4) NULL;
ALTER TABLE `event_data` CHANGE `event_string_value` `string_value` VARCHAR(500) NULL;
-- CreateTable
CREATE TABLE `session_data` (

1
next-env.d.ts vendored
View file

@ -1,5 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
/// <reference types="next/navigation-types/compat/navigation" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View file

@ -6,7 +6,7 @@ const pkg = require('./package.json');
const contentSecurityPolicy = `
default-src 'self';
img-src *;
script-src 'self' 'unsafe-eval';
script-src 'self' 'unsafe-eval' 'unsafe-inline';
style-src 'self' 'unsafe-inline';
connect-src 'self' api.umami.is;
frame-ancestors 'self' ${process.env.ALLOWED_FRAME_URLS};
@ -74,16 +74,23 @@ if (process.env.CLOUD_MODE && process.env.CLOUD_URL && process.env.DISABLE_LOGIN
});
}
const basePath = process.env.BASE_PATH;
/** @type {import('next').NextConfig} */
const config = {
reactStrictMode: false,
env: {
cloudMode: process.env.CLOUD_MODE,
basePath: basePath || '',
cloudMode: !!process.env.CLOUD_MODE,
cloudUrl: process.env.CLOUD_URL,
configUrl: '/config',
currentVersion: pkg.version,
defaultLocale: process.env.DEFAULT_LOCALE,
disableLogin: process.env.DISABLE_LOGIN,
disableUI: process.env.DISABLE_UI,
isProduction: process.env.NODE_ENV === 'production',
},
basePath: process.env.BASE_PATH,
basePath,
output: 'standalone',
eslint: {
ignoreDuringBuilds: true,
@ -92,11 +99,23 @@ const config = {
ignoreBuildErrors: true,
},
webpack(config) {
config.module.rules.push({
test: /\.svg$/,
issuer: /\.{js|jsx|ts|tsx}$/,
use: ['@svgr/webpack'],
});
const fileLoaderRule = config.module.rules.find(rule => rule.test?.test?.('.svg'));
config.module.rules.push(
{
...fileLoaderRule,
test: /\.svg$/i,
resourceQuery: /url/,
},
{
test: /\.svg$/i,
issuer: fileLoaderRule.issuer,
resourceQuery: { not: [...fileLoaderRule.resourceQuery.not, /url/] },
use: ['@svgr/webpack'],
},
);
fileLoaderRule.exclude = /\.svg$/i;
config.resolve.alias['public'] = path.resolve('./public');

View file

@ -1,6 +1,6 @@
{
"name": "@umami/components",
"version": "0.11.0",
"version": "0.1.0",
"description": "Umami React components.",
"author": "Mike Cao <mike@mikecao.com>",
"license": "MIT",

View file

@ -1,6 +1,6 @@
{
"name": "umami",
"version": "2.6.2",
"version": "2.8.0",
"description": "A simple, fast, privacy-focused alternative to Google Analytics.",
"author": "Mike Cao <mike@mikecao.com>",
"license": "MIT",
@ -30,7 +30,7 @@
"check-db": "node scripts/check-db.js",
"check-env": "node scripts/check-env.js",
"copy-db-files": "node scripts/copy-db-files.js",
"extract-messages": "formatjs extract \"{pages,components}/**/*.js\" --out-file build/messages.json",
"extract-messages": "formatjs extract \"src/{pages,components}/**/*.js\" --out-file build/messages.json",
"merge-messages": "node scripts/merge-messages.js",
"generate-lang": "npm-run-all extract-messages merge-messages",
"format-lang": "node scripts/format-lang.js",
@ -62,16 +62,17 @@
".next/cache"
],
"dependencies": {
"@clickhouse/client": "^0.2.2",
"@fontsource/inter": "^4.5.15",
"@prisma/client": "5.2.0",
"@prisma/client": "5.3.1",
"@react-spring/web": "^9.7.3",
"@tanstack/react-query": "^4.33.0",
"@umami/prisma-client": "^0.2.0",
"@umami/redis-client": "^0.5.0",
"@umami/prisma-client": "^0.3.0",
"@umami/redis-client": "^0.16.0",
"chalk": "^4.1.1",
"chart.js": "^4.2.1",
"chartjs-adapter-date-fns": "^3.0.0",
"classnames": "^2.3.1",
"clickhouse": "^2.5.0",
"colord": "^2.9.2",
"cors": "^2.8.5",
"cross-spawn": "^7.0.3",
@ -92,22 +93,22 @@
"kafkajs": "^2.1.0",
"maxmind": "^4.3.6",
"moment-timezone": "^0.5.35",
"next": "13.4.19",
"next-basics": "^0.36.0",
"next": "^13.5.3",
"next-basics": "^0.37.0",
"node-fetch": "^3.2.8",
"npm-run-all": "^4.1.5",
"prisma": "5.3.1",
"react": "^18.2.0",
"react-basics": "^0.98.0",
"react-basics": "^0.105.0",
"react-beautiful-dnd": "^13.1.0",
"react-dom": "^18.2.0",
"react-error-boundary": "^4.0.4",
"react-intl": "^5.24.7",
"react-intl": "^6.4.7",
"react-simple-maps": "^2.3.0",
"react-spring": "^9.4.4",
"react-use-measure": "^2.0.4",
"react-window": "^1.8.6",
"request-ip": "^3.3.0",
"semver": "^7.5.2",
"semver": "^7.5.4",
"thenby": "^1.3.4",
"timezone-support": "^2.0.2",
"uuid": "^9.0.0",
@ -124,12 +125,12 @@
"@rollup/plugin-node-resolve": "^15.2.0",
"@rollup/plugin-replace": "^5.0.2",
"@svgr/rollup": "^8.1.0",
"@svgr/webpack": "^6.2.1",
"@svgr/webpack": "^8.1.0",
"@types/node": "^18.11.9",
"@types/react": "^18.0.25",
"@types/react-dom": "^18.0.8",
"@typescript-eslint/eslint-plugin": "^5.50.0",
"@typescript-eslint/parser": "^5.50.0",
"@typescript-eslint/eslint-plugin": "^6.7.3",
"@typescript-eslint/parser": "^6.7.3",
"cross-env": "^7.0.3",
"esbuild": "^0.17.17",
"eslint": "^8.33.0",
@ -139,15 +140,14 @@
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-prettier": "^4.0.0",
"extract-react-intl-messages": "^4.1.1",
"husky": "^7.0.0",
"lint-staged": "^11.0.0",
"postcss": "^8.4.21",
"husky": "^8.0.3",
"lint-staged": "^14.0.1",
"postcss": "^8.4.31",
"postcss-flexbugs-fixes": "^5.0.2",
"postcss-import": "^15.1.0",
"postcss-preset-env": "7.8.3",
"postcss-rtlcss": "^4.0.1",
"prettier": "^2.6.2",
"prisma": "5.2.0",
"prompts": "2.4.2",
"rollup": "^3.28.0",
"rollup-plugin-copy": "^3.4.0",

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "الشاشات"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Экраны"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "স্ক্রিনগুলি"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Bildschirmuflösige"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -20,7 +20,7 @@
"label.add": [
{
"type": 0,
"value": "Add"
"value": "Hinzufügen"
}
],
"label.add-description": [
@ -32,7 +32,7 @@
"label.add-website": [
{
"type": 0,
"value": "Webseite hinzufügen"
"value": "Website hinzufügen"
}
],
"label.admin": [
@ -44,7 +44,7 @@
"label.after": [
{
"type": 0,
"value": "After"
"value": "Nach"
}
],
"label.all": [
@ -86,7 +86,7 @@
"label.before": [
{
"type": 0,
"value": "Before"
"value": "Vor"
}
],
"label.bounce-rate": [
@ -134,7 +134,7 @@
"label.city": [
{
"type": 0,
"value": "City"
"value": "Stadt"
}
],
"label.clear-all": [
@ -158,7 +158,7 @@
"label.contains": [
{
"type": 0,
"value": "Contains"
"value": "Enthält"
}
],
"label.continue": [
@ -176,13 +176,19 @@
"label.country": [
{
"type": 0,
"value": "Country"
"value": "Land"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
"value": "Report erstellen"
"value": "Bericht erstellen"
}
],
"label.create-team": [
@ -230,7 +236,7 @@
"label.date": [
{
"type": 0,
"value": "Date"
"value": "Datum"
}
],
"label.date-range": [
@ -242,7 +248,7 @@
"label.day": [
{
"type": 0,
"value": "Day"
"value": "Tag"
}
],
"label.default-date-range": [
@ -272,7 +278,7 @@
"label.delete-website": [
{
"type": 0,
"value": "Webseite löschen"
"value": "Website löschen"
}
],
"label.description": [
@ -296,7 +302,7 @@
"label.device": [
{
"type": 0,
"value": "Device"
"value": "Gerät"
}
],
"label.devices": [
@ -314,7 +320,7 @@
"label.does-not-contain": [
{
"type": 0,
"value": "Does not contain"
"value": "Enthält nicht"
}
],
"label.domain": [
@ -356,7 +362,7 @@
"label.event-data": [
{
"type": 0,
"value": "Event daten"
"value": "Eventdaten"
}
],
"label.events": [
@ -368,19 +374,25 @@
"label.false": [
{
"type": 0,
"value": "False"
"value": "Falsch"
}
],
"label.field": [
{
"type": 0,
"value": "Field"
"value": "Feld"
}
],
"label.fields": [
{
"type": 0,
"value": "Fields"
"value": "Felder"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
@ -398,7 +410,7 @@
"label.filters": [
{
"type": 0,
"value": "Filters"
"value": "Filter"
}
],
"label.funnel": [
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,28 +443,34 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
"value": "Is"
"value": "Ist"
}
],
"label.is-not": [
{
"type": 0,
"value": "Is not"
"value": "Ist nicht"
}
],
"label.is-not-set": [
{
"type": 0,
"value": "Is not set"
"value": "Ist nicht gesetzt"
}
],
"label.is-set": [
{
"type": 0,
"value": "Is set"
"value": "Ist gesetzt"
}
],
"label.join": [
@ -576,7 +600,7 @@
"label.my-websites": [
{
"type": 0,
"value": "My websites"
"value": "Meine Websites"
}
],
"label.name": [
@ -618,7 +642,7 @@
"label.page-of": [
{
"type": 0,
"value": "Page "
"value": "Seite "
},
{
"type": 1,
@ -626,7 +650,7 @@
},
{
"type": 0,
"value": " of "
"value": " von "
},
{
"type": 1,
@ -642,7 +666,7 @@
"label.pageTitle": [
{
"type": 0,
"value": "Page title"
"value": "Seitentitel"
}
],
"label.pages": [
@ -742,7 +766,7 @@
"label.reports": [
{
"type": 0,
"value": "Reporte"
"value": "Berichte"
}
],
"label.required": [
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Bildschirmauflösungen"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,
@ -808,7 +844,7 @@
"label.sessions": [
{
"type": 0,
"value": "Sessions"
"value": "Sitzungen"
}
],
"label.settings": [
@ -850,37 +886,37 @@
"label.team-guest": [
{
"type": 0,
"value": "Team Gast"
"value": "Gast des Teams"
}
],
"label.team-id": [
{
"type": 0,
"value": "Team ID"
"value": "Team-ID"
}
],
"label.team-member": [
{
"type": 0,
"value": "Team Mitglied"
"value": "Team-Mitglied"
}
],
"label.team-name": [
{
"type": 0,
"value": "Team name"
"value": "Name des Teams"
}
],
"label.team-owner": [
{
"type": 0,
"value": "Team Eigentümer"
"value": "Team-Eigentümer"
}
],
"label.team-websites": [
{
"type": 0,
"value": "Team websites"
"value": "Team-Websites"
}
],
"label.teams": [
@ -940,13 +976,13 @@
"label.total": [
{
"type": 0,
"value": "Total"
"value": "Gesamt"
}
],
"label.total-records": [
{
"type": 0,
"value": "Total records"
"value": "Datensätze insgesamt"
}
],
"label.tracking-code": [
@ -958,19 +994,19 @@
"label.true": [
{
"type": 0,
"value": "True"
"value": "Wahr"
}
],
"label.type": [
{
"type": 0,
"value": "Type"
"value": "Typ"
}
],
"label.unique": [
{
"type": 0,
"value": "Unique"
"value": "Eindeutig"
}
],
"label.unique-visitors": [
@ -988,7 +1024,7 @@
"label.untitled": [
{
"type": 0,
"value": "Untitled"
"value": "Unbenannt"
}
],
"label.url": [
@ -1024,7 +1060,7 @@
"label.value": [
{
"type": 0,
"value": "Value"
"value": "Wert"
}
],
"label.view": [
@ -1042,7 +1078,7 @@
"label.view-only": [
{
"type": 0,
"value": "View only"
"value": "Nur ansehen"
}
],
"label.views": [
@ -1060,25 +1096,25 @@
"label.website": [
{
"type": 0,
"value": "Webseite"
"value": "Website"
}
],
"label.website-id": [
{
"type": 0,
"value": "Webseite ID"
"value": "Website ID"
}
],
"label.websites": [
{
"type": 0,
"value": "Webseiten"
"value": "Websites"
}
],
"label.window": [
{
"type": 0,
"value": "Window"
"value": "Fenster"
}
],
"label.yesterday": [
@ -1166,7 +1202,7 @@
"message.delete-account": [
{
"type": 0,
"value": "To delete this account, type "
"value": "Um dieses Konto zu löschen, geben Sie zur Bestätigung "
},
{
"type": 1,
@ -1174,13 +1210,13 @@
},
{
"type": 0,
"value": " in the box below to confirm."
"value": " in das Feld unten ein."
}
],
"message.delete-website": [
{
"type": 0,
"value": "To delete this website, type "
"value": "Um diese Website zu löschen, geben Sie zur Bestätigung "
},
{
"type": 1,
@ -1188,7 +1224,7 @@
},
{
"type": 0,
"value": " in the box below to confirm."
"value": " in das Feld unten ein."
}
],
"message.delete-website-warning": [
@ -1238,7 +1274,7 @@
"message.min-password-length": [
{
"type": 0,
"value": "Minimale länge von "
"value": "Minimale Länge von "
},
{
"type": 1,
@ -1252,15 +1288,11 @@
"message.new-version-available": [
{
"type": 0,
"value": "A new version of Umami "
"value": "Eine neue Version von Umami ist verfügbar: "
},
{
"type": 1,
"value": "version"
},
{
"type": 0,
"value": " is available!"
}
],
"message.no-data-available": [
@ -1272,7 +1304,7 @@
"message.no-event-data": [
{
"type": 0,
"value": "No event data is available."
"value": "Es sind keine Ereignisdaten verfügbar."
}
],
"message.no-match-password": [
@ -1308,7 +1340,7 @@
"message.no-websites-configured": [
{
"type": 0,
"value": "Es ist keine Webseite vorhanden."
"value": "Es ist keine Website vorhanden."
}
],
"message.page-not-found": [
@ -1320,7 +1352,7 @@
"message.reset-website": [
{
"type": 0,
"value": "To reset this website, type "
"value": "Um diese Website zurückzusetzen, geben Sie zur Bestätigung "
},
{
"type": 1,
@ -1328,13 +1360,13 @@
},
{
"type": 0,
"value": " in the box below to confirm."
"value": " in das Feld unten ein."
}
],
"message.reset-website-warning": [
{
"type": 0,
"value": "Alle Daten für diese Webseite werden gelöscht, jedoch bleibt der Tracking Code bestehen."
"value": "Alle Daten für diese Website werden gelöscht, jedoch bleibt der Tracking Code bestehen."
}
],
"message.saved": [
@ -1346,7 +1378,7 @@
"message.share-url": [
{
"type": 0,
"value": "Ihre Webseitenstatistik ist unter der folgenden URL öffentlich zugänglich:"
"value": "Die Statistiken Ihrer Website sind unter folgender URL öffentlich zugänglich:"
}
],
"message.team-already-member": [
@ -1364,7 +1396,7 @@
"message.team-websites-info": [
{
"type": 0,
"value": "Webseiten können von jedem im Team eingesehen werden."
"value": "Websites können von jedem im Team eingesehen werden."
}
],
"message.tracking-code": [

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -104,7 +104,7 @@
"label.browser": [
{
"type": 0,
"value": "Browser"
"value": "Navegador"
}
],
"label.browsers": [
@ -134,7 +134,7 @@
"label.city": [
{
"type": 0,
"value": "City"
"value": "Ciudad"
}
],
"label.clear-all": [
@ -176,13 +176,19 @@
"label.country": [
{
"type": 0,
"value": "Country"
"value": "País"
}
],
"label.create": [
{
"type": 0,
"value": "Crear"
}
],
"label.create-report": [
{
"type": 0,
"value": "Crear reporte"
"value": "Crear informe"
}
],
"label.create-team": [
@ -230,7 +236,7 @@
"label.date": [
{
"type": 0,
"value": "Date"
"value": "Fecha"
}
],
"label.date-range": [
@ -242,7 +248,7 @@
"label.day": [
{
"type": 0,
"value": "Day"
"value": "Día"
}
],
"label.default-date-range": [
@ -278,7 +284,7 @@
"label.description": [
{
"type": 0,
"value": "Descripciones"
"value": "Descripción"
}
],
"label.desktop": [
@ -296,7 +302,7 @@
"label.device": [
{
"type": 0,
"value": "Device"
"value": "Dispositivo"
}
],
"label.devices": [
@ -308,7 +314,7 @@
"label.dismiss": [
{
"type": 0,
"value": "Ignorar"
"value": "Cerrar"
}
],
"label.does-not-contain": [
@ -326,7 +332,7 @@
"label.dropoff": [
{
"type": 0,
"value": "Dropoff"
"value": "Abandono"
}
],
"label.edit": [
@ -368,7 +374,7 @@
"label.false": [
{
"type": 0,
"value": "False"
"value": "Falso"
}
],
"label.field": [
@ -383,6 +389,12 @@
"value": "Campos"
}
],
"label.filter": [
{
"type": 0,
"value": "Filtro"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Comprender conversión y abandono de usuarios."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -446,7 +470,7 @@
"label.is-set": [
{
"type": 0,
"value": "Is set"
"value": "Está establecido"
}
],
"label.join": [
@ -576,7 +600,7 @@
"label.my-websites": [
{
"type": 0,
"value": "My websites"
"value": "Mis sitios web"
}
],
"label.name": [
@ -600,7 +624,7 @@
"label.os": [
{
"type": 0,
"value": "OS"
"value": "Sistema"
}
],
"label.overview": [
@ -618,7 +642,7 @@
"label.page-of": [
{
"type": 0,
"value": "Page "
"value": "Página "
},
{
"type": 1,
@ -626,7 +650,7 @@
},
{
"type": 0,
"value": " of "
"value": " de "
},
{
"type": 1,
@ -642,7 +666,7 @@
"label.pageTitle": [
{
"type": 0,
"value": "Page title"
"value": "Título de página"
}
],
"label.pages": [
@ -660,7 +684,7 @@
"label.powered-by": [
{
"type": 0,
"value": "Con la ayuda de "
"value": "Analíticas de "
},
{
"type": 1,
@ -682,7 +706,7 @@
"label.query": [
{
"type": 0,
"value": "Query"
"value": "Consulta"
}
],
"label.query-parameters": [
@ -700,7 +724,7 @@
"label.referrer": [
{
"type": 0,
"value": "Referrer"
"value": "Referido"
}
],
"label.referrers": [
@ -742,7 +766,7 @@
"label.reports": [
{
"type": 0,
"value": "Reportes"
"value": "Informes"
}
],
"label.required": [
@ -760,13 +784,19 @@
"label.reset-website": [
{
"type": 0,
"value": "Reiniciar estadísticas"
"value": "Reiniciar analíticas"
}
],
"label.retention": [
{
"type": 0,
"value": "Retention"
"value": "Retención"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Medir la frecuencia con la que los usuarios vuelven a tu sitio web."
}
],
"label.role": [
@ -793,6 +823,12 @@
"value": "Pantallas"
}
],
"label.search": [
{
"type": 0,
"value": "Buscar"
}
],
"label.select-date": [
{
"type": 0,
@ -814,7 +850,7 @@
"label.settings": [
{
"type": 0,
"value": "Configuraciones"
"value": "Ajustes"
}
],
"label.share-url": [
@ -856,7 +892,7 @@
"label.team-id": [
{
"type": 0,
"value": "ID de equipo"
"value": "ID del equipo"
}
],
"label.team-member": [
@ -868,7 +904,7 @@
"label.team-name": [
{
"type": 0,
"value": "Team name"
"value": "Nombre del equipo"
}
],
"label.team-owner": [
@ -880,7 +916,7 @@
"label.team-websites": [
{
"type": 0,
"value": "Team websites"
"value": "Sitios web del equipo"
}
],
"label.teams": [
@ -1252,7 +1288,7 @@
"message.new-version-available": [
{
"type": 0,
"value": "A new version of Umami "
"value": "Una nueva versión de Umami "
},
{
"type": 1,
@ -1260,7 +1296,7 @@
},
{
"type": 0,
"value": " is available!"
"value": " está disponible"
}
],
"message.no-data-available": [
@ -1340,7 +1376,7 @@
"message.saved": [
{
"type": 0,
"value": "Guardado."
"value": "Guardado"
}
],
"message.share-url": [

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Pantallas"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -104,7 +104,7 @@
"label.browser": [
{
"type": 0,
"value": "Browser"
"value": "Navigateur"
}
],
"label.browsers": [
@ -134,7 +134,7 @@
"label.city": [
{
"type": 0,
"value": "City"
"value": "Ville"
}
],
"label.clear-all": [
@ -176,7 +176,13 @@
"label.country": [
{
"type": 0,
"value": "Country"
"value": "Pays"
}
],
"label.create": [
{
"type": 0,
"value": "Créer"
}
],
"label.create-report": [
@ -242,7 +248,7 @@
"label.day": [
{
"type": 0,
"value": "Day"
"value": "Jour"
}
],
"label.default-date-range": [
@ -296,7 +302,7 @@
"label.device": [
{
"type": 0,
"value": "Device"
"value": "Appareil"
}
],
"label.devices": [
@ -326,7 +332,7 @@
"label.dropoff": [
{
"type": 0,
"value": "Dropoff"
"value": "Abandons"
}
],
"label.edit": [
@ -350,19 +356,19 @@
"label.event": [
{
"type": 0,
"value": "Event"
"value": "Évènement"
}
],
"label.event-data": [
{
"type": 0,
"value": "Données d'événements"
"value": "Données d'évènements"
}
],
"label.events": [
{
"type": 0,
"value": "Événements"
"value": "Évènements"
}
],
"label.false": [
@ -383,6 +389,12 @@
"value": "Champs"
}
],
"label.filter": [
{
"type": 0,
"value": "Filtrer"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Entonnoir"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Suivi des conversions et des taux d'abandons."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,28 +443,34 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Analyse précise des données en utilisant des segments et des filtres."
}
],
"label.is": [
{
"type": 0,
"value": "Est égal"
"value": "Est"
}
],
"label.is-not": [
{
"type": 0,
"value": "N'est pas égal"
"value": "N'est pas"
}
],
"label.is-not-set": [
{
"type": 0,
"value": "Is not set"
"value": "N'est pas défini"
}
],
"label.is-set": [
{
"type": 0,
"value": "Is set"
"value": "Est défini"
}
],
"label.join": [
@ -568,7 +592,7 @@
"label.my-websites": [
{
"type": 0,
"value": "My websites"
"value": "Mes sites"
}
],
"label.name": [
@ -618,7 +642,7 @@
},
{
"type": 0,
"value": " of "
"value": " sur "
},
{
"type": 1,
@ -634,7 +658,7 @@
"label.pageTitle": [
{
"type": 0,
"value": "Page title"
"value": "Titre de page"
}
],
"label.pages": [
@ -680,7 +704,7 @@
"label.query-parameters": [
{
"type": 0,
"value": "Paramètres d'URL"
"value": "Paramètres de requête"
}
],
"label.realtime": [
@ -692,7 +716,7 @@
"label.referrer": [
{
"type": 0,
"value": "Referrer"
"value": "Site référent"
}
],
"label.referrers": [
@ -716,7 +740,7 @@
"label.region": [
{
"type": 0,
"value": "Region"
"value": "Région"
}
],
"label.regions": [
@ -758,7 +782,13 @@
"label.retention": [
{
"type": 0,
"value": "Retention"
"value": "Rétention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Mesure de l'atractivité du site en visualisant les taux d'utilisateurs qui reviennent."
}
],
"label.role": [
@ -785,6 +815,12 @@
"value": "Résolutions d'écran"
}
],
"label.search": [
{
"type": 0,
"value": "Rechercher"
}
],
"label.select-date": [
{
"type": 0,
@ -860,7 +896,7 @@
"label.team-name": [
{
"type": 0,
"value": "Team name"
"value": "Nom de l'équipe"
}
],
"label.team-owner": [
@ -872,7 +908,7 @@
"label.team-websites": [
{
"type": 0,
"value": "Team websites"
"value": "Sites d'équipes"
}
],
"label.teams": [
@ -1052,7 +1088,7 @@
"label.website": [
{
"type": 0,
"value": "Website"
"value": "Site"
}
],
"label.website-id": [
@ -1248,7 +1284,7 @@
"message.new-version-available": [
{
"type": 0,
"value": "A new version of Umami "
"value": "Une nouvelle version d'Umami "
},
{
"type": 1,
@ -1256,7 +1292,7 @@
},
{
"type": 0,
"value": " is available!"
"value": " est disponible !"
}
],
"message.no-data-available": [
@ -1336,7 +1372,7 @@
"message.saved": [
{
"type": 0,
"value": "Enregistré avec succès."
"value": "Enregistré."
}
],
"message.share-url": [

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -777,6 +801,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -801,6 +831,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -761,6 +785,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -785,6 +815,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -761,6 +785,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -785,6 +815,12 @@
"value": "Layar"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "国"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "フィールド"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "分析"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "見通し"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "保持"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "画面サイズ"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -761,6 +785,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -785,6 +815,12 @@
"value": "ប្រភេទឧបករណ៍"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -773,6 +797,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -797,6 +827,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -874,6 +898,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -898,6 +928,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -20,13 +20,13 @@
"label.add": [
{
"type": 0,
"value": "Add"
"value": "Нэмэх"
}
],
"label.add-description": [
{
"type": 0,
"value": "Add description"
"value": "Тайлбар нэмэх"
}
],
"label.add-website": [
@ -44,7 +44,7 @@
"label.after": [
{
"type": 0,
"value": "After"
"value": "Хойно"
}
],
"label.all": [
@ -68,7 +68,7 @@
"label.average": [
{
"type": 0,
"value": "Average"
"value": "Дундаж"
}
],
"label.average-visit-time": [
@ -86,7 +86,7 @@
"label.before": [
{
"type": 0,
"value": "Before"
"value": "Өмнө"
}
],
"label.bounce-rate": [
@ -98,13 +98,13 @@
"label.breakdown": [
{
"type": 0,
"value": "Breakdown"
"value": "Задаргаа"
}
],
"label.browser": [
{
"type": 0,
"value": "Browser"
"value": "Хөтөч"
}
],
"label.browsers": [
@ -134,7 +134,7 @@
"label.city": [
{
"type": 0,
"value": "City"
"value": "Хот"
}
],
"label.clear-all": [
@ -158,7 +158,7 @@
"label.contains": [
{
"type": 0,
"value": "Contains"
"value": "Агуулах"
}
],
"label.continue": [
@ -176,13 +176,19 @@
"label.country": [
{
"type": 0,
"value": "Country"
"value": "Улс"
}
],
"label.create": [
{
"type": 0,
"value": "Үүсгэх"
}
],
"label.create-report": [
{
"type": 0,
"value": "Create report"
"value": "Тайлан үүсгэх"
}
],
"label.create-team": [
@ -230,7 +236,7 @@
"label.date": [
{
"type": 0,
"value": "Date"
"value": "Огноо"
}
],
"label.date-range": [
@ -242,7 +248,7 @@
"label.day": [
{
"type": 0,
"value": "Day"
"value": "Өдөр"
}
],
"label.default-date-range": [
@ -278,7 +284,7 @@
"label.description": [
{
"type": 0,
"value": "Description"
"value": "Тайлбар"
}
],
"label.desktop": [
@ -296,7 +302,7 @@
"label.device": [
{
"type": 0,
"value": "Device"
"value": "Төхөөрөмж"
}
],
"label.devices": [
@ -314,7 +320,7 @@
"label.does-not-contain": [
{
"type": 0,
"value": "Does not contain"
"value": "Агуулахгүй"
}
],
"label.domain": [
@ -326,7 +332,7 @@
"label.dropoff": [
{
"type": 0,
"value": "Dropoff"
"value": "Уналт"
}
],
"label.edit": [
@ -350,13 +356,13 @@
"label.event": [
{
"type": 0,
"value": "Event"
"value": "Үйлдэл"
}
],
"label.event-data": [
{
"type": 0,
"value": "Event data"
"value": "Үйлдлийн өгөгдөл"
}
],
"label.events": [
@ -368,19 +374,25 @@
"label.false": [
{
"type": 0,
"value": "False"
"value": "Худал"
}
],
"label.field": [
{
"type": 0,
"value": "Field"
"value": "Талбар"
}
],
"label.fields": [
{
"type": 0,
"value": "Fields"
"value": "Талбар"
}
],
"label.filter": [
{
"type": 0,
"value": "Шүүлтүүр"
}
],
"label.filter-combined": [
@ -398,55 +410,67 @@
"label.filters": [
{
"type": 0,
"value": "Filters"
"value": "Шүүлтүүр"
}
],
"label.funnel": [
{
"type": 0,
"value": "Funnel"
"value": "Цутгал"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Хэрэглэгчдийн шилжилт, уналтын хэмжээг шижнлэх."
}
],
"label.greater-than": [
{
"type": 0,
"value": "Greater than"
"value": "Их"
}
],
"label.greater-than-equals": [
{
"type": 0,
"value": "Greater than or equals"
"value": "Их буюу тэнцүү"
}
],
"label.insights": [
{
"type": 0,
"value": "Insights"
"value": "Шинжлэх"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Өгөгдлөө хэсэгчлэн хуваах, шүүх байдлаар задлах шинжлэх."
}
],
"label.is": [
{
"type": 0,
"value": "Is"
"value": "Бол"
}
],
"label.is-not": [
{
"type": 0,
"value": "Is not"
"value": "Биш"
}
],
"label.is-not-set": [
{
"type": 0,
"value": "Is not set"
"value": "Утга оноогоогүй"
}
],
"label.is-set": [
{
"type": 0,
"value": "Is set"
"value": "Утга оноосон"
}
],
"label.join": [
@ -522,13 +546,13 @@
"label.less-than": [
{
"type": 0,
"value": "Less than"
"value": "Бага"
}
],
"label.less-than-equals": [
{
"type": 0,
"value": "Less than or equals"
"value": "Бага буюу тэнцүү"
}
],
"label.login": [
@ -576,7 +600,7 @@
"label.my-websites": [
{
"type": 0,
"value": "My websites"
"value": "Миний вебүүд"
}
],
"label.name": [
@ -606,7 +630,7 @@
"label.overview": [
{
"type": 0,
"value": "Overview"
"value": "Тойм"
}
],
"label.owner": [
@ -618,19 +642,19 @@
"label.page-of": [
{
"type": 0,
"value": "Page "
},
{
"type": 1,
"value": "current"
},
{
"type": 0,
"value": " of "
"value": "Хуудас "
},
{
"type": 1,
"value": "total"
},
{
"type": 0,
"value": "-с "
},
{
"type": 1,
"value": "current"
}
],
"label.page-views": [
@ -642,7 +666,7 @@
"label.pageTitle": [
{
"type": 0,
"value": "Page title"
"value": "Хуудасны гарчиг"
}
],
"label.pages": [
@ -700,7 +724,7 @@
"label.referrer": [
{
"type": 0,
"value": "Referrer"
"value": "Чиглүүлэгч"
}
],
"label.referrers": [
@ -724,7 +748,7 @@
"label.region": [
{
"type": 0,
"value": "Region"
"value": "Бүс"
}
],
"label.regions": [
@ -742,7 +766,7 @@
"label.reports": [
{
"type": 0,
"value": "Reports"
"value": "Тайлан"
}
],
"label.required": [
@ -766,7 +790,13 @@
"label.retention": [
{
"type": 0,
"value": "Retention"
"value": "Барилт"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Хэрэглэгчид таны веб рүү дахин хандах буюу хэрэглэгчидээ хэр тогтоож буйг хэмжих."
}
],
"label.role": [
@ -778,7 +808,7 @@
"label.run-query": [
{
"type": 0,
"value": "Run query"
"value": "Query ажиллуулах"
}
],
"label.save": [
@ -793,10 +823,16 @@
"value": "Дэлгэц"
}
],
"label.search": [
{
"type": 0,
"value": "Хайх"
}
],
"label.select-date": [
{
"type": 0,
"value": "Select date"
"value": "Огноо сонгох"
}
],
"label.select-website": [
@ -832,7 +868,7 @@
"label.sum": [
{
"type": 0,
"value": "Sum"
"value": "Нийлбэр"
}
],
"label.tablet": [
@ -868,7 +904,7 @@
"label.team-name": [
{
"type": 0,
"value": "Team name"
"value": "Багийн нэр"
}
],
"label.team-owner": [
@ -880,7 +916,7 @@
"label.team-websites": [
{
"type": 0,
"value": "Team websites"
"value": "Багийн вебүүд"
}
],
"label.teams": [
@ -940,13 +976,13 @@
"label.total": [
{
"type": 0,
"value": "Total"
"value": "Нийт"
}
],
"label.total-records": [
{
"type": 0,
"value": "Total records"
"value": "Нийт мөриийн тоо"
}
],
"label.tracking-code": [
@ -958,13 +994,13 @@
"label.true": [
{
"type": 0,
"value": "True"
"value": "Үнэн"
}
],
"label.type": [
{
"type": 0,
"value": "Type"
"value": "Төрөл"
}
],
"label.unique": [
@ -988,7 +1024,7 @@
"label.untitled": [
{
"type": 0,
"value": "Untitled"
"value": "Гарчиггүй"
}
],
"label.url": [
@ -1024,7 +1060,7 @@
"label.value": [
{
"type": 0,
"value": "Value"
"value": "Утга"
}
],
"label.view": [
@ -1042,7 +1078,7 @@
"label.view-only": [
{
"type": 0,
"value": "View only"
"value": "Зөвхөн үзэх"
}
],
"label.views": [
@ -1060,7 +1096,7 @@
"label.website": [
{
"type": 0,
"value": "Website"
"value": "Веб"
}
],
"label.website-id": [
@ -1078,7 +1114,7 @@
"label.window": [
{
"type": 0,
"value": "Window"
"value": "Цонх"
}
],
"label.yesterday": [
@ -1174,7 +1210,7 @@
"message.delete-account": [
{
"type": 0,
"value": "To delete this account, type "
"value": "Энэ бүртгэлийг устгахын тулд доорх хэсэгт "
},
{
"type": 1,
@ -1182,13 +1218,13 @@
},
{
"type": 0,
"value": " in the box below to confirm."
"value": " гэж бичиж баталгаажуулна уу."
}
],
"message.delete-website": [
{
"type": 0,
"value": "To delete this website, type "
"value": "Энэ вебийг устгахын тулд доорх хэсэгт "
},
{
"type": 1,
@ -1196,7 +1232,7 @@
},
{
"type": 0,
"value": " in the box below to confirm."
"value": " гэж бичиж баталгаажуулна уу."
}
],
"message.delete-website-warning": [
@ -1260,7 +1296,7 @@
"message.new-version-available": [
{
"type": 0,
"value": "A new version of Umami "
"value": "Umami-н шинэ хувилбар "
},
{
"type": 1,
@ -1268,7 +1304,7 @@
},
{
"type": 0,
"value": " is available!"
"value": " гарсан байна!"
}
],
"message.no-data-available": [
@ -1280,7 +1316,7 @@
"message.no-event-data": [
{
"type": 0,
"value": "No event data is available."
"value": "Үйлдлийн өгөгдөл алга."
}
],
"message.no-match-password": [
@ -1292,7 +1328,7 @@
"message.no-results-found": [
{
"type": 0,
"value": "No results were found."
"value": "Ямар ч үр дүн олдсонгүй."
}
],
"message.no-team-websites": [

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -761,6 +785,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -785,6 +815,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -41,6 +41,12 @@
"value": "အက်ဒမင်"
}
],
"label.after": [
{
"type": 0,
"value": "ပြီးနောက်"
}
],
"label.all": [
{
"type": 0,
@ -59,6 +65,12 @@
"value": "အန်နလစ်တစ်"
}
],
"label.average": [
{
"type": 0,
"value": "ပျမ်းမျှ"
}
],
"label.average-visit-time": [
{
"type": 0,
@ -71,12 +83,30 @@
"value": "နောက်သို့"
}
],
"label.before": [
{
"type": 0,
"value": "မတိုင်မီ"
}
],
"label.bounce-rate": [
{
"type": 0,
"value": "Bounce နှုန်း"
}
],
"label.breakdown": [
{
"type": 0,
"value": "ခွဲခြမ်းစိတ်ဖြာမှု"
}
],
"label.browser": [
{
"type": 0,
"value": "Browser"
}
],
"label.browsers": [
{
"type": 0,
@ -101,6 +131,12 @@
"value": "မြို့များ"
}
],
"label.city": [
{
"type": 0,
"value": "City"
}
],
"label.clear-all": [
{
"type": 0,
@ -119,6 +155,12 @@
"value": "စကားဝှက်အတည်ပြုသည်"
}
],
"label.contains": [
{
"type": 0,
"value": "ပါဝင်သည်"
}
],
"label.continue": [
{
"type": 0,
@ -131,6 +173,24 @@
"value": "နိုင်ငံများ"
}
],
"label.country": [
{
"type": 0,
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
"value": "ရီပို့လုပ်မည်"
}
],
"label.create-team": [
{
"type": 0,
@ -173,12 +233,24 @@
"value": "ဒေတာ"
}
],
"label.date": [
{
"type": 0,
"value": "Date"
}
],
"label.date-range": [
{
"type": 0,
"value": "ရက်အပိုင်းအခြား"
}
],
"label.day": [
{
"type": 0,
"value": "Day"
}
],
"label.default-date-range": [
{
"type": 0,
@ -209,6 +281,12 @@
"value": "ဝက်ဘ်ဆိုဒ်ကိုဖျက်မည်"
}
],
"label.description": [
{
"type": 0,
"value": "ရှင်းပြချက်"
}
],
"label.desktop": [
{
"type": 0,
@ -221,6 +299,12 @@
"value": "အသေးစိတ်"
}
],
"label.device": [
{
"type": 0,
"value": "Device"
}
],
"label.devices": [
{
"type": 0,
@ -233,6 +317,12 @@
"value": "ပိတ်ပါ"
}
],
"label.does-not-contain": [
{
"type": 0,
"value": "မပါဝင်ပါ"
}
],
"label.domain": [
{
"type": 0,
@ -281,6 +371,12 @@
"value": "အဖြစ်အပျက်များ"
}
],
"label.false": [
{
"type": 0,
"value": "မှားသည်"
}
],
"label.field": [
{
"type": 0,
@ -293,6 +389,12 @@
"value": "Field အမည်များ"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -305,18 +407,72 @@
"value": "အရှိအတိုင်း"
}
],
"label.filters": [
{
"type": 0,
"value": "Filter များ"
}
],
"label.funnel": [
{
"type": 0,
"value": "ဖန်နယ်"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
"value": "ထက်ပို၍ကြီးသည်"
}
],
"label.greater-than-equals": [
{
"type": 0,
"value": "ထက်ပို၍ကြီးသည်သို့မဟုတ်တူသည်"
}
],
"label.insights": [
{
"type": 0,
"value": "အသေးစိတ်သိမြင်နိုင်ရန်"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
"value": "Is"
}
],
"label.is-not": [
{
"type": 0,
"value": "Is not"
}
],
"label.is-not-set": [
{
"type": 0,
"value": "Is not set"
}
],
"label.is-set": [
{
"type": 0,
"value": "Is set"
}
],
"label.join": [
{
"type": 0,
@ -387,6 +543,18 @@
"value": "အသင်းမှထွက်မည်"
}
],
"label.less-than": [
{
"type": 0,
"value": "ထက်ပို၍ငယ်သည်"
}
],
"label.less-than-equals": [
{
"type": 0,
"value": "ထက်ပို၍ငယ်သည်သို့မဟုတ်တူသည်"
}
],
"label.login": [
{
"type": 0,
@ -399,12 +567,24 @@
"value": "လော့ဂ်အောက်လုပ်မည်"
}
],
"label.max": [
{
"type": 0,
"value": "အများဆုံး"
}
],
"label.members": [
{
"type": 0,
"value": "အဖွဲ့ဝင်များ"
}
],
"label.min": [
{
"type": 0,
"value": "အနည်းဆုံး"
}
],
"label.mobile": [
{
"type": 0,
@ -417,6 +597,12 @@
"value": "နောက်ထပ်"
}
],
"label.my-websites": [
{
"type": 0,
"value": "My websites"
}
],
"label.name": [
{
"type": 0,
@ -435,24 +621,54 @@
"value": "မရှိပါ"
}
],
"label.operating-systems": [
"label.os": [
{
"type": 0,
"value": "ကွန်ပျူတာလည်ပတ်မှုစနစ်"
}
],
"label.overview": [
{
"type": 0,
"value": "အပေါ်ယံမြင်ကွင်း"
}
],
"label.owner": [
{
"type": 0,
"value": "ပိုင်ဆိုင်သူ"
}
],
"label.page-of": [
{
"type": 0,
"value": "Page "
},
{
"type": 1,
"value": "current"
},
{
"type": 0,
"value": " of "
},
{
"type": 1,
"value": "total"
}
],
"label.page-views": [
{
"type": 0,
"value": "ဝင်ရောက်ကြည့်ရှုသူ"
}
],
"label.pageTitle": [
{
"type": 0,
"value": "Page title"
}
],
"label.pages": [
{
"type": 0,
@ -505,6 +721,12 @@
"value": "အချိန်နှင့်တပြေးညီ"
}
],
"label.referrer": [
{
"type": 0,
"value": "Referrer"
}
],
"label.referrers": [
{
"type": 0,
@ -523,6 +745,12 @@
"value": "ပြန်ထုတ်မည်"
}
],
"label.region": [
{
"type": 0,
"value": "Region"
}
],
"label.regions": [
{
"type": 0,
@ -559,6 +787,18 @@
"value": "ဝက်ဘ်ဆိုဒ်ဒေတာကိုဖျက်မည်"
}
],
"label.retention": [
{
"type": 0,
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -583,6 +823,12 @@
"value": "မြင်ကွင်းများ"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,
@ -619,6 +865,12 @@
"value": "တစ်ရက်အတွင်း"
}
],
"label.sum": [
{
"type": 0,
"value": "ပေါင်းလဒ်"
}
],
"label.tablet": [
{
"type": 0,
@ -649,12 +901,24 @@
"value": "အသင်းဝင်"
}
],
"label.team-name": [
{
"type": 0,
"value": "Team name"
}
],
"label.team-owner": [
{
"type": 0,
"value": "အသင်းကိုပိုင်ဆိုင်သူ"
}
],
"label.team-websites": [
{
"type": 0,
"value": "Team websites"
}
],
"label.teams": [
{
"type": 0,
@ -709,12 +973,42 @@
"value": "ဇယားများကို အဖွင့်အပိတ်လုပ်မည်"
}
],
"label.total": [
{
"type": 0,
"value": "စုစုပေါင်း"
}
],
"label.total-records": [
{
"type": 0,
"value": "မှတ်တမ်းစုစုပေါင်း"
}
],
"label.tracking-code": [
{
"type": 0,
"value": "ထရက်လုပ်သည့် ကုဒ်"
}
],
"label.true": [
{
"type": 0,
"value": "မှန်သည်"
}
],
"label.type": [
{
"type": 0,
"value": "အမျိုးအစား"
}
],
"label.unique": [
{
"type": 0,
"value": "Unique"
}
],
"label.unique-visitors": [
{
"type": 0,
@ -727,6 +1021,12 @@
"value": "မသိသော"
}
],
"label.untitled": [
{
"type": 0,
"value": "ခေါင်းစဉ်မရှိ"
}
],
"label.url": [
{
"type": 0,
@ -757,6 +1057,12 @@
"value": "အသုံးပြုသူများ"
}
],
"label.value": [
{
"type": 0,
"value": "တန်ဖိုး"
}
],
"label.view": [
{
"type": 0,
@ -817,168 +1123,6 @@
"value": "မနေ့က"
}
],
"labels.after": [
{
"type": 0,
"value": "ပြီးနောက်"
}
],
"labels.average": [
{
"type": 0,
"value": "ပျမ်းမျှ"
}
],
"labels.before": [
{
"type": 0,
"value": "မတိုင်မီ"
}
],
"labels.breakdown": [
{
"type": 0,
"value": "ခွဲခြမ်းစိတ်ဖြာမှု"
}
],
"labels.contains": [
{
"type": 0,
"value": "ပါဝင်သည်"
}
],
"labels.create-report": [
{
"type": 0,
"value": "ရီပို့လုပ်မည်"
}
],
"labels.description": [
{
"type": 0,
"value": "ရှင်းပြချက်"
}
],
"labels.does-not-contain": [
{
"type": 0,
"value": "မပါဝင်ပါ"
}
],
"labels.does-not-equal": [
{
"type": 0,
"value": "မတူညီပါ"
}
],
"labels.equals": [
{
"type": 0,
"value": "တူညီသည်"
}
],
"labels.false": [
{
"type": 0,
"value": "မှားသည်"
}
],
"labels.filters": [
{
"type": 0,
"value": "Filter များ"
}
],
"labels.greater-than": [
{
"type": 0,
"value": "ထက်ပို၍ကြီးသည်"
}
],
"labels.greater-than-equals": [
{
"type": 0,
"value": "ထက်ပို၍ကြီးသည်သို့မဟုတ်တူသည်"
}
],
"labels.less-than": [
{
"type": 0,
"value": "ထက်ပို၍ငယ်သည်"
}
],
"labels.less-than-equals": [
{
"type": 0,
"value": "ထက်ပို၍ငယ်သည်သို့မဟုတ်တူသည်"
}
],
"labels.max": [
{
"type": 0,
"value": "အများဆုံး"
}
],
"labels.min": [
{
"type": 0,
"value": "အနည်းဆုံး"
}
],
"labels.overview": [
{
"type": 0,
"value": "အပေါ်ယံမြင်ကွင်း"
}
],
"labels.sum": [
{
"type": 0,
"value": "ပေါင်းလဒ်"
}
],
"labels.total": [
{
"type": 0,
"value": "စုစုပေါင်း"
}
],
"labels.total-records": [
{
"type": 0,
"value": "မှတ်တမ်းစုစုပေါင်း"
}
],
"labels.true": [
{
"type": 0,
"value": "မှန်သည်"
}
],
"labels.type": [
{
"type": 0,
"value": "အမျိုးအစား"
}
],
"labels.unique": [
{
"type": 0,
"value": "Unique"
}
],
"labels.untitled": [
{
"type": 0,
"value": "ခေါင်းစဉ်မရှိ"
}
],
"labels.value": [
{
"type": 0,
"value": "တန်ဖိုး"
}
],
"message.active-users": [
{
"type": 1,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Schermen"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Pola"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Lejek"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Ekrany"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Campos"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funil"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Telas"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Экраны"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Država"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Polja"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Prodajni lijak"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Vpogled"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Ohranjanje uporabnikov"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Zasloni"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Upplösning"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -761,6 +785,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -785,6 +815,12 @@
"value": "ขนาดหน้าจอ"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Ekranlar"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -769,6 +793,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -793,6 +823,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "Country"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "Fields"
}
],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "Funnel"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "Insights"
}
],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [
{
"type": 0,
@ -761,6 +785,12 @@
"value": "Retention"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
}
],
"label.role": [
{
"type": 0,
@ -785,6 +815,12 @@
"value": "Screens"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "国家/地区"
}
],
"label.create": [
{
"type": 0,
"value": "创建"
}
],
"label.create-report": [
{
"type": 0,
@ -374,13 +380,19 @@
"label.field": [
{
"type": 0,
"value": "Field"
"value": "字段"
}
],
"label.fields": [
{
"type": 0,
"value": "Fields"
"value": "字段"
}
],
"label.filter": [
{
"type": 0,
"value": "筛选器"
}
],
"label.filter-combined": [
@ -407,16 +419,22 @@
"value": "分析"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "了解用户的转换率和退出率。"
}
],
"label.greater-than": [
{
"type": 0,
"value": "Greater than"
"value": "大于"
}
],
"label.greater-than-equals": [
{
"type": 0,
"value": "Greater than or equals"
"value": "大于或等于"
}
],
"label.insights": [
@ -425,6 +443,12 @@
"value": "见解"
}
],
"label.insights-description": [
{
"type": 0,
"value": "通过使用筛选器和划分时间段来更深入地研究数据。"
}
],
"label.is": [
{
"type": 0,
@ -777,6 +801,12 @@
"value": "保留"
}
],
"label.retention-description": [
{
"type": 0,
"value": "通过跟踪用户返回的频率来衡量网站的用户粘性。"
}
],
"label.role": [
{
"type": 0,
@ -801,6 +831,12 @@
"value": "屏幕尺寸"
}
],
"label.search": [
{
"type": 0,
"value": "搜索"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -179,6 +179,12 @@
"value": "國家"
}
],
"label.create": [
{
"type": 0,
"value": "建立"
}
],
"label.create-report": [
{
"type": 0,
@ -383,6 +389,12 @@
"value": "欄位"
}
],
"label.filter": [
{
"type": 0,
"value": "篩選器"
}
],
"label.filter-combined": [
{
"type": 0,
@ -407,6 +419,12 @@
"value": "漏斗"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "瞭解使用者的轉換率和退出率"
}
],
"label.greater-than": [
{
"type": 0,
@ -425,6 +443,12 @@
"value": "洞察"
}
],
"label.insights-description": [
{
"type": 0,
"value": "透過使用區段和篩選器來深入探索你的數據"
}
],
"label.is": [
{
"type": 0,
@ -773,6 +797,12 @@
"value": "保留"
}
],
"label.retention-description": [
{
"type": 0,
"value": "透過追蹤使用者回訪的頻率來衡量您的網站黏著度。"
}
],
"label.role": [
{
"type": 0,
@ -797,6 +827,12 @@
"value": "螢幕"
}
],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [
{
"type": 0,

View file

@ -19,6 +19,7 @@ const customResolver = resolve({
const aliasConfig = {
entries: [
{ find: /^app/, replacement: path.resolve('./src/app') },
{ find: /^components/, replacement: path.resolve('./src/components') },
{ find: /^hooks/, replacement: path.resolve('./src/hooks') },
{ find: /^lib/, replacement: path.resolve('./src/lib') },

View file

@ -66,12 +66,16 @@ async function checkDatabaseVersion() {
async function checkV1Tables() {
try {
await prisma.$queryRaw`select * from account limit 1`;
// check for v1 migrations before v2 release date
const record =
await prisma.$queryRaw`select * from _prisma_migrations where started_at < '2023-04-17'`;
error(
'Umami v1 tables detected. For how to upgrade from v1 to v2 go to https://umami.is/docs/migrate-v1-v2.',
);
process.exit(1);
if (record.length > 0) {
error(
'Umami v1 tables detected. For how to upgrade from v1 to v2 go to https://umami.is/docs/migrate-v1-v2.',
);
process.exit(1);
}
} catch (e) {
// Ignore
}

View file

@ -4,7 +4,7 @@ const path = require('path');
const prettier = require('prettier');
const messages = require('../build/messages.json');
const dest = path.resolve(__dirname, '../lang');
const dest = path.resolve(__dirname, '../src/lang');
const files = fs.readdirSync(dest);
const keys = Object.keys(messages).sort();
@ -14,7 +14,7 @@ with the existing files under `lang`. Any newly added
keys will be printed to the console.
*/
files.forEach(file => {
const lang = require(`../lang/${file}`);
const lang = require(`../src/lang/${file}`);
console.log(`Merging ${file}`);

View file

@ -1,4 +1,8 @@
require('dotenv').config();
const cli = require('next/dist/cli/next-start');
cli.nextStart(['-p', process.env.PORT || 3000, '-H', process.env.HOSTNAME || '0.0.0.0']);
cli.nextStart({
'--port': process.env.PORT || 3000,
'--hostname': process.env.HOSTNAME || '0.0.0.0',
_: [],
});

58
src/app/(main)/NavBar.js Normal file
View file

@ -0,0 +1,58 @@
'use client';
import { Icon, Text } from 'react-basics';
import Link from 'next/link';
import classNames from 'classnames';
import Icons from 'components/icons';
import ThemeButton from 'components/input/ThemeButton';
import LanguageButton from 'components/input/LanguageButton';
import ProfileButton from 'components/input/ProfileButton';
import useMessages from 'components/hooks/useMessages';
import HamburgerButton from 'components/common/HamburgerButton';
import { usePathname } from 'next/navigation';
import styles from './NavBar.module.css';
export function NavBar() {
const pathname = usePathname();
const { formatMessage, labels } = useMessages();
const links = [
{ label: formatMessage(labels.dashboard), url: '/dashboard' },
{ label: formatMessage(labels.websites), url: '/websites' },
{ label: formatMessage(labels.reports), url: '/reports' },
{ label: formatMessage(labels.settings), url: '/settings' },
].filter(n => n);
return (
<div className={styles.navbar}>
<div className={styles.logo}>
<Icon size="lg">
<Icons.Logo />
</Icon>
<Text>umami</Text>
</div>
<div className={styles.links}>
{links.map(({ url, label }) => {
return (
<Link
key={url}
href={url}
className={classNames({ [styles.selected]: pathname.startsWith(url) })}
>
<Text>{label}</Text>
</Link>
);
})}
</div>
<div className={styles.actions}>
<ThemeButton />
<LanguageButton />
<ProfileButton />
</div>
<div className={styles.mobile}>
<HamburgerButton />
</div>
</div>
);
}
export default NavBar;

View file

@ -1,7 +1,7 @@
.navbar {
display: grid;
grid-template-columns: max-content 1fr 1fr;
position: relative;
display: flex;
flex-direction: row;
align-items: center;
height: 60px;
background: var(--base75);
@ -9,17 +9,6 @@
padding: 0 20px;
}
.left,
.right {
display: flex;
flex-direction: row;
align-items: center;
}
.right {
justify-content: flex-end;
}
.logo {
display: flex;
flex-direction: row;
@ -35,29 +24,24 @@
flex-direction: row;
gap: 30px;
padding: 0 40px;
flex: 1;
font-weight: 700;
max-height: 60px;
}
.links a {
display: flex;
align-items: center;
gap: 10px;
line-height: 60px;
.links a,
.links a:active,
.links a:visited {
color: var(--font-color200);
line-height: 60px;
border-bottom: 2px solid transparent;
}
.links span {
white-space: nowrap;
}
.links a:hover {
color: var(--font-color100);
border-bottom: 2px solid var(--primary400);
}
.links .selected {
.links a.selected {
color: var(--font-color100);
border-bottom: 2px solid var(--primary400);
}
@ -68,7 +52,6 @@
flex-direction: row;
align-items: center;
justify-content: flex-end;
min-width: 0;
}
.mobile {
@ -76,6 +59,10 @@
}
@media only screen and (max-width: 768px) {
.navbar {
grid-template-columns: repeat(2, 1fr);
}
.links,
.actions {
display: none;

27
src/app/(main)/Shell.tsx Normal file
View file

@ -0,0 +1,27 @@
'use client';
import Script from 'next/script';
import { usePathname } from 'next/navigation';
import UpdateNotice from 'components/common/UpdateNotice';
import { useRequireLogin, useConfig } from 'components/hooks';
export function Shell({ children }) {
const { user } = useRequireLogin();
const config = useConfig();
const pathname = usePathname();
if (!user || !config) {
return null;
}
return (
<>
{children}
<UpdateNotice user={user} config={config} />
{process.env.NODE_ENV === 'production' && !pathname.includes('/share/') && (
<Script src={`telemetry.js`} />
)}
</>
);
}
export default Shell;

View file

@ -1,24 +1,21 @@
'use client';
import WebsiteSelect from 'components/input/WebsiteSelect';
import Page from 'components/layout/Page';
import PageHeader from 'components/layout/PageHeader';
import EventsChart from 'components/metrics/EventsChart';
import WebsiteChart from 'components/pages/websites/WebsiteChart';
import WebsiteChart from '../../(main)/websites/[id]/WebsiteChart';
import useApi from 'components/hooks/useApi';
import Head from 'next/head';
import Link from 'next/link';
import { useRouter } from 'next/router';
import useNavigation from 'components/hooks/useNavigation';
import Script from 'next/script';
import { Button, Column, Row } from 'react-basics';
import { Button } from 'react-basics';
import styles from './TestConsole.module.css';
export function TestConsole() {
export function TestConsole({ websiteId }) {
const { get, useQuery } = useApi();
const { data, isLoading, error } = useQuery(['websites:me'], () => get('/me/websites'));
const router = useRouter();
const {
basePath,
query: { id },
} = router;
const { router } = useNavigation();
function handleChange(value) {
router.push(`/console/${value}`);
@ -71,7 +68,6 @@ export function TestConsole() {
return null;
}
const [websiteId] = id || [];
const website = data?.data.find(({ id }) => websiteId === id);
return (
@ -86,12 +82,12 @@ export function TestConsole() {
<>
<Script
async
data-website-id={website.id}
src={`${basePath}/script.js`}
data-website-id={websiteId}
src={`${process.env.basePath}/script.js`}
data-cache="true"
/>
<Row className={styles.test}>
<Column xs="4">
<div className={styles.test}>
<div>
<div className={styles.header}>Page links</div>
<div>
<Link href={`/console/${websiteId}/page/1/?q=abc`}>page one</Link>
@ -114,8 +110,8 @@ export function TestConsole() {
external link (tab)
</a>
</div>
</Column>
<Column xs="4">
</div>
<div>
<div className={styles.header}>Click events</div>
<Button id="send-event-button" data-umami-event="button-click" variant="action">
Send event
@ -130,8 +126,8 @@ export function TestConsole() {
>
Send event with data
</Button>
</Column>
<Column xs="4">
</div>
<div>
<div className={styles.header}>Javascript events</div>
<Button id="manual-button" variant="action" onClick={handleClick}>
Run script
@ -140,14 +136,12 @@ export function TestConsole() {
<Button id="manual-button" variant="action" onClick={handleIdentifyClick}>
Run identify
</Button>
</Column>
</Row>
<Row>
<Column>
<WebsiteChart websiteId={website.id} />
<EventsChart websiteId={website.id} />
</Column>
</Row>
</div>
</div>
<div>
<WebsiteChart websiteId={website.id} />
<EventsChart websiteId={website.id} />
</div>
</>
)}
</Page>

View file

@ -0,0 +1,20 @@
import TestConsole from '../TestConsole';
import { Metadata } from 'next';
async function getEnabled() {
return !!process.env.ENABLE_TEST_CONSOLE;
}
export default async function ({ params: { id } }) {
const enabled = await getEnabled();
if (!enabled) {
return null;
}
return <TestConsole websiteId={id?.[0]} />;
}
export const metadata: Metadata = {
title: 'Test Console | umami',
};

View file

@ -1,11 +1,11 @@
import { Button, Icon, Icons, Text } from 'react-basics';
'use client';
import { Button, Icon, Icons, Loading, Text } from 'react-basics';
import Link from 'next/link';
import Page from 'components/layout/Page';
import PageHeader from 'components/layout/PageHeader';
import Pager from 'components/common/Pager';
import WebsiteChartList from 'components/pages/websites/WebsiteChartList';
import DashboardSettingsButton from 'components/pages/dashboard/DashboardSettingsButton';
import DashboardEdit from 'components/pages/dashboard/DashboardEdit';
import WebsiteChartList from '../../(main)/websites/[id]/WebsiteChartList';
import DashboardSettingsButton from 'app/(main)/dashboard/DashboardSettingsButton';
import DashboardEdit from 'app/(main)/dashboard/DashboardEdit';
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
import useApi from 'components/hooks/useApi';
import useDashboard from 'store/dashboard';
@ -20,18 +20,18 @@ export function Dashboard() {
const { get, useQuery } = useApi();
const { page, handlePageChange } = useApiFilter();
const pageSize = 10;
const {
data: result,
isLoading,
error,
} = useQuery(['websites', page, pageSize], () =>
const { data: result, isLoading } = useQuery(['websites', page, pageSize], () =>
get('/websites', { includeTeams: 1, page, pageSize }),
);
const { data, count } = result || {};
const hasData = data && data?.length !== 0;
if (isLoading) {
return <Loading size="lg" />;
}
return (
<Page loading={isLoading} error={error}>
<>
<PageHeader title={formatMessage(labels.dashboard)}>
{!editing && hasData && <DashboardSettingsButton />}
</PageHeader>
@ -63,7 +63,7 @@ export function Dashboard() {
)}
</>
)}
</Page>
</>
);
}

View file

@ -1,3 +1,4 @@
'use client';
import { useState, useMemo } from 'react';
import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';
import classNames from 'classnames';
@ -7,7 +8,6 @@ import useDashboard, { saveDashboard } from 'store/dashboard';
import useMessages from 'components/hooks/useMessages';
import useApi from 'components/hooks/useApi';
import styles from './DashboardEdit.module.css';
import Page from 'components/layout/Page';
const dragId = 'dashboard-website-ordering';
@ -17,11 +17,7 @@ export function DashboardEdit() {
const { formatMessage, labels } = useMessages();
const [order, setOrder] = useState(websiteOrder || []);
const { get, useQuery } = useApi();
const {
data: result,
isLoading,
error,
} = useQuery(['websites'], () => get('/websites', { includeTeams: 1 }));
const { data: result } = useQuery(['websites'], () => get('/websites', { includeTeams: 1 }));
const { data: websites } = result || {};
const ordered = useMemo(() => {
@ -59,7 +55,7 @@ export function DashboardEdit() {
}
return (
<Page loading={isLoading} error={error}>
<>
<div className={styles.buttons}>
<Button onClick={handleSave} variant="action" size="small">
{formatMessage(labels.save)}
@ -105,7 +101,7 @@ export function DashboardEdit() {
</Droppable>
</DragDropContext>
</div>
</Page>
</>
);
}

View file

@ -0,0 +1,10 @@
import Dashboard from 'app/(main)/dashboard/Dashboard';
import { Metadata } from 'next';
export default function DashboardPage() {
return <Dashboard />;
}
export const metadata: Metadata = {
title: 'Dashboard | umami',
};

View file

@ -10,7 +10,6 @@
width: 100vw;
grid-column: 1;
grid-row: 1 / 2;
z-index: var(--z-index-popup);
}
.body {

19
src/app/(main)/layout.tsx Normal file
View file

@ -0,0 +1,19 @@
import Shell from './Shell';
import NavBar from './NavBar';
import Page from 'components/layout/Page';
import styles from './layout.module.css';
export default function AppLayout({ children }) {
return (
<Shell>
<main className={styles.layout}>
<nav className={styles.nav}>
<NavBar />
</nav>
<section className={styles.body}>
<Page>{children}</Page>
</section>
</main>
</Shell>
);
}

View file

@ -0,0 +1,42 @@
import { Button, Icon, Icons, Modal, ModalTrigger, Text } from 'react-basics';
import ConfirmDeleteForm from 'components/common/ConfirmDeleteForm';
import { useApi, useMessages } from 'components/hooks';
import { setValue } from 'store/cache';
export function ReportDeleteButton({ reportId, reportName, onDelete }) {
const { formatMessage, labels } = useMessages();
const { del, useMutation } = useApi();
const { mutate } = useMutation(reportId => del(`/reports/${reportId}`));
const handleConfirm = close => {
mutate(reportId, {
onSuccess: () => {
setValue('reports', Date.now());
onDelete?.();
close();
},
});
};
return (
<ModalTrigger>
<Button>
<Icon>
<Icons.Trash />
</Icon>
<Text>{formatMessage(labels.delete)}</Text>
</Button>
<Modal>
{close => (
<ConfirmDeleteForm
name={reportName}
onConfirm={handleConfirm.bind(null, close)}
onClose={close}
/>
)}
</Modal>
</ModalTrigger>
);
}
export default ReportDeleteButton;

View file

@ -0,0 +1,20 @@
'use client';
import { useApi } from 'components/hooks';
import ReportsTable from './ReportsTable';
import useFilterQuery from 'components/hooks/useFilterQuery';
import DataTable from 'components/common/DataTable';
import useCache from 'store/cache';
export default function ReportsDataTable({ websiteId }) {
const { get } = useApi();
const modified = useCache(state => state?.reports);
const queryResult = useFilterQuery(['reports', { websiteId, modified }], params =>
get(websiteId ? `/websites/${websiteId}/reports` : `/reports`, params),
);
return (
<DataTable queryResult={queryResult}>
{({ data }) => <ReportsTable data={data} showDomain={!websiteId} />}
</DataTable>
);
}

View file

@ -0,0 +1,25 @@
'use client';
import PageHeader from 'components/layout/PageHeader';
import { Button, Icon, Icons, Text } from 'react-basics';
import { useMessages } from 'components/hooks';
import { useRouter } from 'next/navigation';
export function ReportsHeader() {
const { formatMessage, labels } = useMessages();
const router = useRouter();
const handleClick = () => router.push('/reports/create');
return (
<PageHeader title={formatMessage(labels.reports)}>
<Button variant="primary" onClick={handleClick}>
<Icon>
<Icons.Plus />
</Icon>
<Text>{formatMessage(labels.createReport)}</Text>
</Button>
</PageHeader>
);
}
export default ReportsHeader;

View file

@ -0,0 +1,51 @@
import { GridColumn, GridTable, Icon, Icons, Text, useBreakpoint } from 'react-basics';
import LinkButton from 'components/common/LinkButton';
import { useMessages } from 'components/hooks';
import useUser from 'components/hooks/useUser';
import { REPORT_TYPES } from 'lib/constants';
import ReportDeleteButton from './ReportDeleteButton';
export function ReportsTable({ data = [], showDomain }) {
const { formatMessage, labels } = useMessages();
const { user } = useUser();
const breakpoint = useBreakpoint();
return (
<GridTable data={data} cardMode={['xs', 'sm', 'md'].includes(breakpoint)}>
<GridColumn name="name" label={formatMessage(labels.name)} />
<GridColumn name="description" label={formatMessage(labels.description)} />
<GridColumn name="type" label={formatMessage(labels.type)}>
{row => {
return formatMessage(
labels[Object.keys(REPORT_TYPES).find(key => REPORT_TYPES[key] === row.type)],
);
}}
</GridColumn>
{showDomain && (
<GridColumn name="domain" label={formatMessage(labels.domain)}>
{row => row?.website?.domain}
</GridColumn>
)}
<GridColumn name="action" label="" alignment="end">
{row => {
const { id, name, userId, website } = row;
return (
<>
{(user.id === userId || user.id === website?.userId) && (
<ReportDeleteButton reportId={id} reportName={name} />
)}
<LinkButton href={`/reports/${id}`}>
<Icon>
<Icons.ArrowRight />
</Icon>
<Text>{formatMessage(labels.view)}</Text>
</LinkButton>
</>
);
}}
</GridColumn>
</GridTable>
);
}
export default ReportsTable;

View file

@ -1,10 +1,10 @@
import { useContext } from 'react';
import { FormRow } from 'react-basics';
import { parseDateRange } from 'lib/date';
import DateFilter from 'components/input/DateFilter';
import WebsiteSelect from 'components/input/WebsiteSelect';
import { parseDateRange } from 'lib/date';
import { useContext } from 'react';
import { ReportContext } from './Report';
import { useMessages } from 'components/hooks';
import { ReportContext } from './Report';
export function BaseParameters({
showWebsiteSelect = true,

View file

@ -7,7 +7,7 @@ import FieldAggregateForm from './FieldAggregateForm';
import FieldFilterForm from './FieldFilterForm';
import styles from './FieldAddForm.module.css';
export function FieldAddForm({ fields = [], group, element, onAdd, onClose }) {
export function FieldAddForm({ fields = [], group, onAdd, onClose }) {
const [selected, setSelected] = useState();
const handleSelect = value => {
@ -28,7 +28,7 @@ export function FieldAddForm({ fields = [], group, element, onAdd, onClose }) {
};
return createPortal(
<PopupForm className={styles.popup} element={element} onClose={onClose}>
<PopupForm className={styles.popup}>
{!selected && <FieldSelectForm fields={fields} onSelect={handleSelect} />}
{selected && group === REPORT_PARAMETERS.fields && (
<FieldAggregateForm {...selected} onSelect={handleSave} />

View file

@ -1,16 +1,20 @@
import { useState } from 'react';
import { Loading } from 'react-basics';
import { subDays } from 'date-fns';
import FieldSelectForm from './FieldSelectForm';
import FieldFilterForm from './FieldFilterForm';
import { useApi } from 'components/hooks';
import { Loading } from 'react-basics';
function useValues(websiteId, type) {
const now = Date.now();
const { get, useQuery } = useApi();
const { data, error, isLoading } = useQuery(
['websites:values', websiteId, type],
() =>
get(`/websites/${websiteId}/values`, {
type,
startAt: +subDays(now, 90),
endAt: now,
}),
{ enabled: !!(websiteId && type) },
);

View file

@ -1,20 +1,22 @@
'use client';
import { createContext } from 'react';
import Page from 'components/layout/Page';
import styles from './reports.module.css';
import { useReport } from 'components/hooks';
import styles from './Report.module.css';
export const ReportContext = createContext(null);
export function Report({ reportId, defaultParameters, children, ...props }) {
const report = useReport(reportId, defaultParameters);
//console.log({ report });
if (!report) {
return null;
}
return (
<ReportContext.Provider value={{ ...report }}>
<Page {...props} className={styles.container}>
<div {...props} className={styles.container}>
{children}
</Page>
</div>
</ReportContext.Provider>
);
}

View file

@ -0,0 +1,5 @@
.container {
display: grid;
grid-template-rows: max-content 1fr;
grid-template-columns: max-content 1fr;
}

View file

@ -1,4 +1,4 @@
import styles from './reports.module.css';
import styles from './ReportBody.module.css';
export function ReportBody({ children }) {
return <div className={styles.body}>{children}</div>;

Some files were not shown because too many files have changed in this diff Show more