Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Brian Cao 2023-09-06 11:37:43 -07:00
commit 6bd9916310
161 changed files with 4117 additions and 1753 deletions

View File

@ -12,8 +12,8 @@ RUN yarn install --frozen-lockfile
FROM node:18-alpine AS builder FROM node:18-alpine AS builder
WORKDIR /app WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules COPY --from=deps /app/node_modules ./node_modules
COPY docker/middleware.js .
COPY . . COPY . .
COPY docker/middleware.js ./src
ARG DATABASE_TYPE ARG DATABASE_TYPE
ARG BASE_PATH ARG BASE_PATH
@ -53,6 +53,7 @@ USER nextjs
EXPOSE 3000 EXPOSE 3000
ENV HOSTNAME 0.0.0.0
ENV PORT 3000 ENV PORT 3000
CMD ["yarn", "start-docker"] CMD ["yarn", "start-docker"]

View File

@ -10,7 +10,7 @@ A detailed getting started guide can be found at [https://umami.is/docs/](https:
### Requirements ### Requirements
- A server with Node.js version 12 or newer - A server with Node.js version 16.13 or newer
- A database. Umami supports [MySQL](https://www.mysql.com/) and [Postgresql](https://www.postgresql.org/) databases. - A database. Umami supports [MySQL](https://www.mysql.com/) and [Postgresql](https://www.postgresql.org/) databases.
### Install Yarn ### Install Yarn

View File

@ -59,7 +59,9 @@ if (process.env.TRACKER_SCRIPT_NAME) {
const redirects = [ const redirects = [
{ {
source: '/settings', source: '/settings',
destination: process.env.CLOUD_MODE ? '/settings/profile' : '/settings/websites', destination: process.env.CLOUD_MODE
? `${process.env.CLOUD_URL}/settings/websites`
: '/settings/websites',
permanent: true, permanent: true,
}, },
]; ];
@ -74,6 +76,9 @@ if (process.env.CLOUD_MODE && process.env.CLOUD_URL && process.env.DISABLE_LOGIN
const config = { const config = {
env: { env: {
cloudMode: process.env.CLOUD_MODE,
cloudUrl: process.env.CLOUD_URL,
configUrl: '/config',
currentVersion: pkg.version, currentVersion: pkg.version,
defaultLocale: process.env.DEFAULT_LOCALE, defaultLocale: process.env.DEFAULT_LOCALE,
isProduction: process.env.NODE_ENV === 'production', isProduction: process.env.NODE_ENV === 'production',

View File

@ -1,6 +1,6 @@
{ {
"name": "umami", "name": "umami",
"version": "2.6.0", "version": "2.6.2",
"description": "A simple, fast, privacy-focused alternative to Google Analytics.", "description": "A simple, fast, privacy-focused alternative to Google Analytics.",
"author": "Mike Cao <mike@mikecao.com>", "author": "Mike Cao <mike@mikecao.com>",
"license": "MIT", "license": "MIT",
@ -21,7 +21,7 @@
"build-components": "rollup -c rollup.components.config.mjs", "build-components": "rollup -c rollup.components.config.mjs",
"build-tracker": "rollup -c rollup.tracker.config.mjs", "build-tracker": "rollup -c rollup.tracker.config.mjs",
"build-db": "npm-run-all copy-db-files build-db-client", "build-db": "npm-run-all copy-db-files build-db-client",
"build-lang": "npm-run-all format-lang compile-lang download-country-names download-language-names", "build-lang": "npm-run-all format-lang compile-lang clean-lang download-country-names download-language-names",
"build-geo": "node scripts/build-geo.js", "build-geo": "node scripts/build-geo.js",
"build-db-schema": "prisma db pull", "build-db-schema": "prisma db pull",
"build-db-client": "prisma generate", "build-db-client": "prisma generate",
@ -30,11 +30,12 @@
"check-db": "node scripts/check-db.js", "check-db": "node scripts/check-db.js",
"check-env": "node scripts/check-env.js", "check-env": "node scripts/check-env.js",
"copy-db-files": "node scripts/copy-db-files.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", "merge-messages": "node scripts/merge-messages.js",
"generate-lang": "npm-run-all extract-messages merge-messages", "generate-lang": "npm-run-all extract-messages merge-messages",
"format-lang": "node scripts/format-lang.js", "format-lang": "node scripts/format-lang.js",
"compile-lang": "formatjs compile-folder --ast build/messages public/intl/messages", "compile-lang": "formatjs compile-folder --ast build/messages public/intl/messages",
"clean-lang": "prettier --write ./public/intl/messages/*.json",
"check-lang": "node scripts/check-lang.js", "check-lang": "node scripts/check-lang.js",
"download-country-names": "node scripts/download-country-names.js", "download-country-names": "node scripts/download-country-names.js",
"download-language-names": "node scripts/download-language-names.js", "download-language-names": "node scripts/download-language-names.js",
@ -61,7 +62,7 @@
], ],
"dependencies": { "dependencies": {
"@fontsource/inter": "^4.5.15", "@fontsource/inter": "^4.5.15",
"@prisma/client": "5.0.0", "@prisma/client": "5.2.0",
"@tanstack/react-query": "^4.33.0", "@tanstack/react-query": "^4.33.0",
"@umami/prisma-client": "^0.2.0", "@umami/prisma-client": "^0.2.0",
"@umami/redis-client": "^0.5.0", "@umami/redis-client": "^0.5.0",
@ -145,7 +146,7 @@
"postcss-preset-env": "7.8.3", "postcss-preset-env": "7.8.3",
"postcss-rtlcss": "^4.0.1", "postcss-rtlcss": "^4.0.1",
"prettier": "^2.6.2", "prettier": "^2.6.2",
"prisma": "5.0.0", "prisma": "5.2.0",
"prompts": "2.4.2", "prompts": "2.4.2",
"rollup": "^3.28.0", "rollup": "^3.28.0",
"rollup-plugin-copy": "^3.4.0", "rollup-plugin-copy": "^3.4.0",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -104,7 +104,7 @@
"label.browser": [ "label.browser": [
{ {
"type": 0, "type": 0,
"value": "Browser" "value": "浏览器"
} }
], ],
"label.browsers": [ "label.browsers": [
@ -134,7 +134,7 @@
"label.city": [ "label.city": [
{ {
"type": 0, "type": 0,
"value": "City" "value": "市/县"
} }
], ],
"label.clear-all": [ "label.clear-all": [
@ -176,7 +176,13 @@
"label.country": [ "label.country": [
{ {
"type": 0, "type": 0,
"value": "Country" "value": "国家/地区"
}
],
"label.create": [
{
"type": 0,
"value": "Create"
} }
], ],
"label.create-report": [ "label.create-report": [
@ -230,7 +236,7 @@
"label.date": [ "label.date": [
{ {
"type": 0, "type": 0,
"value": "Date" "value": "日期"
} }
], ],
"label.date-range": [ "label.date-range": [
@ -242,7 +248,7 @@
"label.day": [ "label.day": [
{ {
"type": 0, "type": 0,
"value": "Day" "value": ""
} }
], ],
"label.default-date-range": [ "label.default-date-range": [
@ -296,7 +302,7 @@
"label.device": [ "label.device": [
{ {
"type": 0, "type": 0,
"value": "Device" "value": "设备"
} }
], ],
"label.devices": [ "label.devices": [
@ -383,6 +389,12 @@
"value": "Fields" "value": "Fields"
} }
], ],
"label.filter": [
{
"type": 0,
"value": "Filter"
}
],
"label.filter-combined": [ "label.filter-combined": [
{ {
"type": 0, "type": 0,
@ -407,6 +419,12 @@
"value": "分析" "value": "分析"
} }
], ],
"label.funnel-description": [
{
"type": 0,
"value": "Understand the conversion and drop-off rate of users."
}
],
"label.greater-than": [ "label.greater-than": [
{ {
"type": 0, "type": 0,
@ -425,6 +443,12 @@
"value": "见解" "value": "见解"
} }
], ],
"label.insights-description": [
{
"type": 0,
"value": "Dive deeper into your data by using segments and filters."
}
],
"label.is": [ "label.is": [
{ {
"type": 0, "type": 0,
@ -440,13 +464,13 @@
"label.is-not-set": [ "label.is-not-set": [
{ {
"type": 0, "type": 0,
"value": "Is not set" "value": "未设置"
} }
], ],
"label.is-set": [ "label.is-set": [
{ {
"type": 0, "type": 0,
"value": "Is set" "value": "已设置"
} }
], ],
"label.join": [ "label.join": [
@ -576,7 +600,7 @@
"label.my-websites": [ "label.my-websites": [
{ {
"type": 0, "type": 0,
"value": "My websites" "value": "我的网站"
} }
], ],
"label.name": [ "label.name": [
@ -618,7 +642,15 @@
"label.page-of": [ "label.page-of": [
{ {
"type": 0, "type": 0,
"value": "Page " "value": "总"
},
{
"type": 1,
"value": "total"
},
{
"type": 0,
"value": "中的第"
}, },
{ {
"type": 1, "type": 1,
@ -626,11 +658,7 @@
}, },
{ {
"type": 0, "type": 0,
"value": " of " "value": "页"
},
{
"type": 1,
"value": "total"
} }
], ],
"label.page-views": [ "label.page-views": [
@ -642,7 +670,7 @@
"label.pageTitle": [ "label.pageTitle": [
{ {
"type": 0, "type": 0,
"value": "Page title" "value": "标题"
} }
], ],
"label.pages": [ "label.pages": [
@ -704,7 +732,7 @@
"label.referrer": [ "label.referrer": [
{ {
"type": 0, "type": 0,
"value": "Referrer" "value": "来源"
} }
], ],
"label.referrers": [ "label.referrers": [
@ -728,7 +756,7 @@
"label.region": [ "label.region": [
{ {
"type": 0, "type": 0,
"value": "Region" "value": "州/省"
} }
], ],
"label.regions": [ "label.regions": [
@ -770,7 +798,13 @@
"label.retention": [ "label.retention": [
{ {
"type": 0, "type": 0,
"value": "Retention" "value": "保留"
}
],
"label.retention-description": [
{
"type": 0,
"value": "Measure your website stickiness by tracking how often users return."
} }
], ],
"label.role": [ "label.role": [
@ -797,6 +831,12 @@
"value": "屏幕尺寸" "value": "屏幕尺寸"
} }
], ],
"label.search": [
{
"type": 0,
"value": "Search"
}
],
"label.select-date": [ "label.select-date": [
{ {
"type": 0, "type": 0,
@ -872,7 +912,7 @@
"label.team-name": [ "label.team-name": [
{ {
"type": 0, "type": 0,
"value": "Team name" "value": "团队名称"
} }
], ],
"label.team-owner": [ "label.team-owner": [
@ -884,7 +924,7 @@
"label.team-websites": [ "label.team-websites": [
{ {
"type": 0, "type": 0,
"value": "Team websites" "value": "团队网站"
} }
], ],
"label.teams": [ "label.teams": [
@ -974,7 +1014,7 @@
"label.unique": [ "label.unique": [
{ {
"type": 0, "type": 0,
"value": "Unique" "value": "独立"
} }
], ],
"label.unique-visitors": [ "label.unique-visitors": [
@ -998,13 +1038,13 @@
"label.url": [ "label.url": [
{ {
"type": 0, "type": 0,
"value": "URL" "value": "网址"
} }
], ],
"label.urls": [ "label.urls": [
{ {
"type": 0, "type": 0,
"value": "URLs" "value": "网址"
} }
], ],
"label.user": [ "label.user": [
@ -1046,7 +1086,7 @@
"label.view-only": [ "label.view-only": [
{ {
"type": 0, "type": 0,
"value": "View only" "value": "仅浏览量"
} }
], ],
"label.views": [ "label.views": [
@ -1190,15 +1230,15 @@
"message.event-log": [ "message.event-log": [
{ {
"type": 1, "type": 1,
"value": "event" "value": "url"
}, },
{ {
"type": 0, "type": 0,
"value": " on " "value": "上的"
}, },
{ {
"type": 1, "type": 1,
"value": "url" "value": "event"
} }
], ],
"message.go-to-settings": [ "message.go-to-settings": [

File diff suppressed because it is too large Load Diff

View File

@ -66,12 +66,16 @@ async function checkDatabaseVersion() {
async function checkV1Tables() { async function checkV1Tables() {
try { 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( if (record.length > 0) {
'Umami v1 tables detected. For how to upgrade from v1 to v2 go to https://umami.is/docs/migrate-v1-v2.', 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); );
process.exit(1);
}
} catch (e) { } catch (e) {
// Ignore // Ignore
} }

View File

@ -4,7 +4,7 @@ const path = require('path');
const prettier = require('prettier'); const prettier = require('prettier');
const messages = require('../build/messages.json'); 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 files = fs.readdirSync(dest);
const keys = Object.keys(messages).sort(); 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. keys will be printed to the console.
*/ */
files.forEach(file => { files.forEach(file => {
const lang = require(`../lang/${file}`); const lang = require(`../src/lang/${file}`);
console.log(`Merging ${file}`); console.log(`Merging ${file}`);

View File

@ -3,12 +3,11 @@ import { useState } from 'react';
import MobileMenu from './MobileMenu'; import MobileMenu from './MobileMenu';
import Icons from 'components/icons'; import Icons from 'components/icons';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import useConfig from 'components/hooks/useConfig';
export function HamburgerButton() { export function HamburgerButton() {
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const [active, setActive] = useState(false); const [active, setActive] = useState(false);
const { cloudMode } = useConfig(); const cloudMode = Boolean(process.env.cloudMode);
const menuItems = [ const menuItems = [
{ {

View File

@ -25,7 +25,7 @@ export function SettingsTable({
onPageSizeChange, onPageSizeChange,
filterValue, filterValue,
}) { }) {
const { formatMessage, messages } = useMessages(); const { formatMessage, labels, messages } = useMessages();
const [filter, setFilter] = useState(filterValue); const [filter, setFilter] = useState(filterValue);
const { data: value, page, count, pageSize } = data; const { data: value, page, count, pageSize } = data;
@ -42,7 +42,7 @@ export function SettingsTable({
delay={1000} delay={1000}
value={filter} value={filter}
autoFocus={true} autoFocus={true}
placeholder="Search" placeholder={formatMessage(labels.search)}
style={{ maxWidth: '300px', marginBottom: '10px' }} style={{ maxWidth: '300px', marginBottom: '10px' }}
/> />
)} )}

View File

@ -1,4 +1,5 @@
import { useEffect, useCallback, useState } from 'react'; import { useEffect, useCallback, useState } from 'react';
import { createPortal } from 'react-dom';
import { Button, Row, Column } from 'react-basics'; import { Button, Row, Column } from 'react-basics';
import { setItem } from 'next-basics'; import { setItem } from 'next-basics';
import useStore, { checkVersion } from 'store/version'; import useStore, { checkVersion } from 'store/version';
@ -44,7 +45,7 @@ export function UpdateNotice({ user, config }) {
return null; return null;
} }
return ( return createPortal(
<Row className={styles.notice}> <Row className={styles.notice}>
<Column variant="two" className={styles.message}> <Column variant="two" className={styles.message}>
{formatMessage(messages.newVersionAvailable, { version: `v${latest}` })} {formatMessage(messages.newVersionAvailable, { version: `v${latest}` })}
@ -55,7 +56,8 @@ export function UpdateNotice({ user, config }) {
</Button> </Button>
<Button onClick={handleDismissClick}>{formatMessage(labels.dismiss)}</Button> <Button onClick={handleDismissClick}>{formatMessage(labels.dismiss)}</Button>
</Column> </Column>
</Row> </Row>,
document.body,
); );
} }

View File

@ -2,13 +2,14 @@
position: absolute; position: absolute;
max-width: 800px; max-width: 800px;
gap: 20px; gap: 20px;
margin: 20px auto; margin: 80px auto;
justify-self: center; align-self: center;
background: var(--base50); background: var(--base50);
padding: 20px; padding: 20px;
border: 1px solid var(--base300); border: 1px solid var(--base300);
border-radius: var(--border-radius); border-radius: var(--border-radius);
z-index: var(--z-index-popup); z-index: var(--z-index-popup);
box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.1);
} }
.message { .message {

View File

@ -8,6 +8,7 @@ import { ISO_COUNTRIES, MAP_FILE } from 'lib/constants';
import useTheme from 'components/hooks/useTheme'; import useTheme from 'components/hooks/useTheme';
import useCountryNames from 'components/hooks/useCountryNames'; import useCountryNames from 'components/hooks/useCountryNames';
import useLocale from 'components/hooks/useLocale'; import useLocale from 'components/hooks/useLocale';
import useMessages from 'components/hooks/useMessages';
import { formatLongNumber } from 'lib/format'; import { formatLongNumber } from 'lib/format';
import { percentFilter } from 'lib/filters'; import { percentFilter } from 'lib/filters';
import styles from './WorldMap.module.css'; import styles from './WorldMap.module.css';
@ -17,7 +18,9 @@ export function WorldMap({ data, className }) {
const [tooltip, setTooltipPopup] = useState(); const [tooltip, setTooltipPopup] = useState();
const { theme, colors } = useTheme(); const { theme, colors } = useTheme();
const { locale } = useLocale(); const { locale } = useLocale();
const { formatMessage, labels } = useMessages();
const countryNames = useCountryNames(locale); const countryNames = useCountryNames(locale);
const visitorsLabel = formatMessage(labels.visitors).toLocaleLowerCase(locale);
const metrics = useMemo(() => (data ? percentFilter(data) : []), [data]); const metrics = useMemo(() => (data ? percentFilter(data) : []), [data]);
function getFillColor(code) { function getFillColor(code) {
@ -40,7 +43,7 @@ export function WorldMap({ data, className }) {
function handleHover(code) { function handleHover(code) {
if (code === 'AQ') return; if (code === 'AQ') return;
const country = metrics?.find(({ x }) => x === code); const country = metrics?.find(({ x }) => x === code);
setTooltipPopup(`${countryNames[code]}: ${formatLongNumber(country?.y || 0)} visitors`); setTooltipPopup(`${countryNames[code]}: ${formatLongNumber(country?.y || 0)} ${visitorsLabel}`);
} }
return ( return (

View File

@ -7,15 +7,16 @@ let loading = false;
export function useConfig() { export function useConfig() {
const { config } = useStore(); const { config } = useStore();
const { get } = useApi(); const { get } = useApi();
const configUrl = process.env.configUrl;
async function loadConfig() { async function loadConfig() {
const data = await get('/config'); const data = await get(configUrl);
loading = false; loading = false;
setConfig(data); setConfig(data);
} }
useEffect(() => { useEffect(() => {
if (!config && !loading) { if (!config && !loading && configUrl) {
loading = true; loading = true;
loadConfig(); loadConfig();
} }

View File

@ -2,18 +2,20 @@ import { produce } from 'immer';
import { useCallback, useEffect, useState } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { useTimezone } from './useTimezone'; import { useTimezone } from './useTimezone';
import useApi from './useApi'; import useApi from './useApi';
import useMessages from './useMessages';
const baseParameters = {
name: 'Untitled',
description: '',
parameters: {},
};
export function useReport(reportId, defaultParameters) { export function useReport(reportId, defaultParameters) {
const [report, setReport] = useState(null); const [report, setReport] = useState(null);
const [isRunning, setIsRunning] = useState(false); const [isRunning, setIsRunning] = useState(false);
const { get, post } = useApi(); const { get, post } = useApi();
const [timezone] = useTimezone(); const [timezone] = useTimezone();
const { formatMessage, labels } = useMessages();
const baseParameters = {
name: formatMessage(labels.untitled),
description: '',
parameters: {},
};
const loadReport = async id => { const loadReport = async id => {
const data = await get(`/reports/${id}`); const data = await get(`/reports/${id}`);

View File

@ -3,16 +3,16 @@ import { useRouter } from 'next/router';
import Icons from 'components/icons'; import Icons from 'components/icons';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import useUser from 'components/hooks/useUser'; import useUser from 'components/hooks/useUser';
import useConfig from 'components/hooks/useConfig';
import styles from './ProfileButton.module.css';
import useLocale from 'components/hooks/useLocale'; import useLocale from 'components/hooks/useLocale';
import { CURRENT_VERSION } from 'lib/constants';
import styles from './ProfileButton.module.css';
export function ProfileButton() { export function ProfileButton() {
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { user } = useUser(); const { user } = useUser();
const { cloudMode } = useConfig();
const router = useRouter(); const router = useRouter();
const { dir } = useLocale(); const { dir } = useLocale();
const cloudMode = Boolean(process.env.cloudMode);
const handleSelect = key => { const handleSelect = key => {
if (key === 'profile') { if (key === 'profile') {
@ -52,6 +52,7 @@ export function ProfileButton() {
<Text>{formatMessage(labels.logout)}</Text> <Text>{formatMessage(labels.logout)}</Text>
</Item> </Item>
)} )}
<div className={styles.version}>{`v${CURRENT_VERSION}`}</div>
</Menu> </Menu>
</Popup> </Popup>
</PopupTrigger> </PopupTrigger>

View File

@ -8,3 +8,11 @@
gap: 12px; gap: 12px;
background: var(--base50); background: var(--base50);
} }
.version {
font-family: monospace;
font-size: 11px;
color: var(--base600);
text-align: right;
margin-right: 10px;
}

View File

@ -9,7 +9,7 @@ export function AppLayout({ title, children }) {
const { user } = useRequireLogin(); const { user } = useRequireLogin();
const config = useConfig(); const config = useConfig();
if (!user || !config) { if (!user || !config || config?.uiDisabled) {
return null; return null;
} }

View File

@ -1,26 +1,24 @@
import { Icon, Text, Row, Column } from 'react-basics'; import { Icon, Text, Row, Column } from 'react-basics';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router';
import classNames from 'classnames'; import classNames from 'classnames';
import Icons from 'components/icons'; import Icons from 'components/icons';
import ThemeButton from 'components/input/ThemeButton'; import ThemeButton from 'components/input/ThemeButton';
import LanguageButton from 'components/input/LanguageButton'; import LanguageButton from 'components/input/LanguageButton';
import ProfileButton from 'components/input/ProfileButton'; import ProfileButton from 'components/input/ProfileButton';
import styles from './NavBar.module.css';
import useConfig from 'components/hooks/useConfig';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import { useRouter } from 'next/router'; import HamburgerButton from 'components/common/HamburgerButton';
import HamburgerButton from '../common/HamburgerButton'; import styles from './NavBar.module.css';
export function NavBar() { export function NavBar() {
const { pathname } = useRouter(); const { pathname } = useRouter();
const { cloudMode } = useConfig();
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const links = [ const links = [
{ label: formatMessage(labels.dashboard), url: '/dashboard' }, { label: formatMessage(labels.dashboard), url: '/dashboard' },
{ label: formatMessage(labels.websites), url: '/websites' }, { label: formatMessage(labels.websites), url: '/websites' },
{ label: formatMessage(labels.reports), url: '/reports' }, { label: formatMessage(labels.reports), url: '/reports' },
!cloudMode && { label: formatMessage(labels.settings), url: '/settings' }, { label: formatMessage(labels.settings), url: '/settings' },
].filter(n => n); ].filter(n => n);
return ( return (

View File

@ -37,10 +37,6 @@
margin-bottom: 10px; margin-bottom: 10px;
} }
.title {
font-size: 18px;
}
.actions { .actions {
flex-basis: 100%; flex-basis: 100%;
order: -1; order: -1;

View File

@ -3,14 +3,13 @@ import { useRouter } from 'next/router';
import SideNav from './SideNav'; import SideNav from './SideNav';
import useUser from 'components/hooks/useUser'; import useUser from 'components/hooks/useUser';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import useConfig from 'components/hooks/useConfig';
import styles from './SettingsLayout.module.css'; import styles from './SettingsLayout.module.css';
export function SettingsLayout({ children }) { export function SettingsLayout({ children }) {
const { user } = useUser(); const { user } = useUser();
const { pathname } = useRouter(); const { pathname } = useRouter();
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { cloudMode } = useConfig(); const cloudMode = Boolean(process.env.cloudMode);
const items = [ const items = [
{ key: 'websites', label: formatMessage(labels.websites), url: '/settings/websites' }, { key: 'websites', label: formatMessage(labels.websites), url: '/settings/websites' },

View File

@ -13,4 +13,8 @@
.menu { .menu {
display: none; display: none;
} }
.content {
margin-top: 20px;
}
} }

View File

@ -129,6 +129,10 @@ export const labels = defineMessages({
reports: { id: 'label.reports', defaultMessage: 'Reports' }, reports: { id: 'label.reports', defaultMessage: 'Reports' },
eventData: { id: 'label.event-data', defaultMessage: 'Event data' }, eventData: { id: 'label.event-data', defaultMessage: 'Event data' },
funnel: { id: 'label.funnel', defaultMessage: 'Funnel' }, funnel: { id: 'label.funnel', defaultMessage: 'Funnel' },
funnelDescription: {
id: 'label.funnel-description',
defaultMessage: 'Understand the conversion and drop-off rate of users.',
},
url: { id: 'label.url', defaultMessage: 'URL' }, url: { id: 'label.url', defaultMessage: 'URL' },
urls: { id: 'label.urls', defaultMessage: 'URLs' }, urls: { id: 'label.urls', defaultMessage: 'URLs' },
add: { id: 'label.add', defaultMessage: 'Add' }, add: { id: 'label.add', defaultMessage: 'Add' },
@ -167,7 +171,15 @@ export const labels = defineMessages({
overview: { id: 'label.overview', defaultMessage: 'Overview' }, overview: { id: 'label.overview', defaultMessage: 'Overview' },
totalRecords: { id: 'label.total-records', defaultMessage: 'Total records' }, totalRecords: { id: 'label.total-records', defaultMessage: 'Total records' },
insights: { id: 'label.insights', defaultMessage: 'Insights' }, insights: { id: 'label.insights', defaultMessage: 'Insights' },
insightsDescription: {
id: 'label.insights-description',
defaultMessage: 'Dive deeper into your data by using segments and filters.',
},
retention: { id: 'label.retention', defaultMessage: 'Retention' }, retention: { id: 'label.retention', defaultMessage: 'Retention' },
retentionDescription: {
id: 'label.retention-description',
defaultMessage: 'Measure your website stickiness by tracking how often users return.',
},
dropoff: { id: 'label.dropoff', defaultMessage: 'Dropoff' }, dropoff: { id: 'label.dropoff', defaultMessage: 'Dropoff' },
referrer: { id: 'label.referrer', defaultMessage: 'Referrer' }, referrer: { id: 'label.referrer', defaultMessage: 'Referrer' },
country: { id: 'label.country', defaultMessage: 'Country' }, country: { id: 'label.country', defaultMessage: 'Country' },
@ -179,6 +191,8 @@ export const labels = defineMessages({
day: { id: 'label.day', defaultMessage: 'Day' }, day: { id: 'label.day', defaultMessage: 'Day' },
date: { id: 'label.date', defaultMessage: 'Date' }, date: { id: 'label.date', defaultMessage: 'Date' },
pageOf: { id: 'label.page-of', defaultMessage: 'Page {current} of {total}' }, pageOf: { id: 'label.page-of', defaultMessage: 'Page {current} of {total}' },
create: { id: 'label.create', defaultMessage: 'Create' },
search: { id: 'label.search', defaultMessage: 'Search' },
}); });
export const messages = defineMessages({ export const messages = defineMessages({

View File

@ -22,9 +22,7 @@ export function CitiesTable({ websiteId, ...props }) {
<FilterLink id="city" value={city} label={renderLabel(city, country)}> <FilterLink id="city" value={city} label={renderLabel(city, country)}>
{country && ( {country && (
<img <img
src={`${basePath}/images/flags/${ src={`${basePath}/images/flags/${country?.toLowerCase() || 'xx'}.png`}
country?.split?.('-')?.[0]?.toLowerCase() || 'xx'
}.png`}
alt={country} alt={country}
/> />
)} )}

View File

@ -54,21 +54,18 @@ export function MetricsTable({
city, city,
}, },
], ],
() => () => {
get(`/websites/${websiteId}/metrics`, { const filters = { url, title, referrer, os, browser, device, country, region, city };
filters[type] = undefined;
return get(`/websites/${websiteId}/metrics`, {
type, type,
startAt: +startDate, startAt: +startDate,
endAt: +endDate, endAt: +endDate,
url, ...filters,
title, });
referrer, },
os,
browser,
device,
country,
region,
city,
}),
{ onSuccess: onDataLoad, retryDelay: delay || DEFAULT_ANIMATION_DURATION }, { onSuccess: onDataLoad, retryDelay: delay || DEFAULT_ANIMATION_DURATION },
); );

View File

@ -13,17 +13,15 @@ export function RegionsTable({ websiteId, ...props }) {
const countryNames = useCountryNames(locale); const countryNames = useCountryNames(locale);
const { basePath } = useRouter(); const { basePath } = useRouter();
const renderLabel = x => { const renderLabel = (code, country) => {
return regions[x] ? `${regions[x]}, ${countryNames[x.split('-')[0]]}` : x; const region = code.includes('-') ? code : `${country}-${code}`;
return regions[region] ? `${regions[region]}, ${countryNames[country]}` : region;
}; };
const renderLink = ({ x: code }) => { const renderLink = ({ x: code, country }) => {
return ( return (
<FilterLink id="region" className={locale} value={code} label={renderLabel(code)}> <FilterLink id="region" className={locale} value={code} label={renderLabel(code, country)}>
<img <img src={`${basePath}/images/flags/${country?.toLowerCase() || 'xx'}.png`} alt={code} />
src={`${basePath}/images/flags/${code?.split('-')?.[0]?.toLowerCase() || 'xx'}.png`}
alt={code}
/>
</FilterLink> </FilterLink>
); );
}; };

View File

@ -1,8 +1,8 @@
import { useState } from 'react'; import { Button, Icon, Icons, Text } from 'react-basics';
import { Button, Icon, Icons, Text, Flexbox } from 'react-basics';
import Link from 'next/link'; import Link from 'next/link';
import Page from 'components/layout/Page'; import Page from 'components/layout/Page';
import PageHeader from 'components/layout/PageHeader'; import PageHeader from 'components/layout/PageHeader';
import Pager from 'components/common/Pager';
import WebsiteChartList from 'components/pages/websites/WebsiteChartList'; import WebsiteChartList from 'components/pages/websites/WebsiteChartList';
import DashboardSettingsButton from 'components/pages/dashboard/DashboardSettingsButton'; import DashboardSettingsButton from 'components/pages/dashboard/DashboardSettingsButton';
import DashboardEdit from 'components/pages/dashboard/DashboardEdit'; import DashboardEdit from 'components/pages/dashboard/DashboardEdit';
@ -11,23 +11,24 @@ import useApi from 'components/hooks/useApi';
import useDashboard from 'store/dashboard'; import useDashboard from 'store/dashboard';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import useLocale from 'components/hooks/useLocale'; import useLocale from 'components/hooks/useLocale';
import useApiFilter from 'components/hooks/useApiFilter';
export function Dashboard() { export function Dashboard() {
const { formatMessage, labels, messages } = useMessages(); const { formatMessage, labels, messages } = useMessages();
const dashboard = useDashboard(); const { showCharts, editing } = useDashboard();
const { showCharts, limit, editing } = dashboard;
const [max, setMax] = useState(limit);
const { get, useQuery } = useApi();
const { data, isLoading, error } = useQuery(['websites'], () =>
get('/websites', { includeTeams: 1 }),
);
const hasData = data && data?.data.length !== 0;
const { dir } = useLocale(); const { dir } = useLocale();
const { get, useQuery } = useApi();
function handleMore() { const { page, handlePageChange } = useApiFilter();
setMax(max + limit); const pageSize = 10;
} const {
data: result,
isLoading,
error,
} = useQuery(['websites', page, pageSize], () =>
get('/websites', { includeTeams: 1, page, pageSize }),
);
const { data, count } = result || {};
const hasData = data && data?.length !== 0;
return ( return (
<Page loading={isLoading} error={error}> <Page loading={isLoading} error={error}>
@ -48,19 +49,17 @@ export function Dashboard() {
)} )}
{hasData && ( {hasData && (
<> <>
{editing && <DashboardEdit websites={data?.data} />} {editing && <DashboardEdit />}
{!editing && ( {!editing && (
<WebsiteChartList websites={data?.data} showCharts={showCharts} limit={max} /> <>
)} <WebsiteChartList websites={data} showCharts={showCharts} limit={pageSize} />
{max < data.length && ( <Pager
<Flexbox justifyContent="center"> page={page}
<Button onClick={handleMore}> pageSize={pageSize}
<Icon rotate={dir === 'rtl' ? 180 : 0}> count={count}
<Icons.More /> onPageChange={handlePageChange}
</Icon> />
<Text>{formatMessage(labels.more)}</Text> </>
</Button>
</Flexbox>
)} )}
</> </>
)} )}

View File

@ -5,23 +5,33 @@ import { Button } from 'react-basics';
import { firstBy } from 'thenby'; import { firstBy } from 'thenby';
import useDashboard, { saveDashboard } from 'store/dashboard'; import useDashboard, { saveDashboard } from 'store/dashboard';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import useApi from 'components/hooks/useApi';
import styles from './DashboardEdit.module.css'; import styles from './DashboardEdit.module.css';
import Page from 'components/layout/Page';
const dragId = 'dashboard-website-ordering'; const dragId = 'dashboard-website-ordering';
export function DashboardEdit({ websites }) { export function DashboardEdit() {
const settings = useDashboard(); const settings = useDashboard();
const { websiteOrder } = settings; const { websiteOrder } = settings;
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const [order, setOrder] = useState(websiteOrder || []); const [order, setOrder] = useState(websiteOrder || []);
const { get, useQuery } = useApi();
const {
data: result,
isLoading,
error,
} = useQuery(['websites'], () => get('/websites', { includeTeams: 1 }));
const { data: websites } = result || {};
const ordered = useMemo( const ordered = useMemo(() => {
() => if (websites) {
websites return websites
.map(website => ({ ...website, order: order.indexOf(website.id) })) .map(website => ({ ...website, order: order.indexOf(website.id) }))
.sort(firstBy('order')), .sort(firstBy('order'));
[websites, order], }
); return [];
}, [websites, order]);
function handleWebsiteDrag({ destination, source }) { function handleWebsiteDrag({ destination, source }) {
if (!destination || destination.index === source.index) return; if (!destination || destination.index === source.index) return;
@ -49,7 +59,7 @@ export function DashboardEdit({ websites }) {
} }
return ( return (
<> <Page loading={isLoading} error={error}>
<div className={styles.buttons}> <div className={styles.buttons}>
<Button onClick={handleSave} variant="action" size="small"> <Button onClick={handleSave} variant="action" size="small">
{formatMessage(labels.save)} {formatMessage(labels.save)}
@ -95,7 +105,7 @@ export function DashboardEdit({ websites }) {
</Droppable> </Droppable>
</DragDropContext> </DragDropContext>
</div> </div>
</> </Page>
); );
} }

View File

@ -9,7 +9,7 @@ export default function FieldFilterForm({
type, type,
values, values,
onSelect, onSelect,
includeOnlyEquals, allowFilterSelect = true,
}) { }) {
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const [filter, setFilter] = useState('eq'); const [filter, setFilter] = useState('eq');
@ -34,7 +34,7 @@ export default function FieldFilterForm({
<Form> <Form>
<FormRow label={label} className={styles.filter}> <FormRow label={label} className={styles.filter}>
<Flexbox gap={10}> <Flexbox gap={10}>
{!includeOnlyEquals && ( {allowFilterSelect && (
<Dropdown <Dropdown
className={styles.dropdown} className={styles.dropdown}
items={filters} items={filters}

View File

@ -18,7 +18,7 @@ function useValues(websiteId, type) {
return { data, error, isLoading }; return { data, error, isLoading };
} }
export default function FilterSelectForm({ websiteId, items, onSelect, includeOnlyEquals }) { export default function FilterSelectForm({ websiteId, items, onSelect, allowFilterSelect }) {
const [field, setField] = useState(); const [field, setField] = useState();
const { data, isLoading } = useValues(websiteId, field?.name); const { data, isLoading } = useValues(websiteId, field?.name);
@ -37,7 +37,7 @@ export default function FilterSelectForm({ websiteId, items, onSelect, includeOn
type={field?.type} type={field?.type}
values={data} values={data}
onSelect={onSelect} onSelect={onSelect}
includeOnlyEquals={includeOnlyEquals} allowFilterSelect={allowFilterSelect}
/> />
); );
} }

View File

@ -20,6 +20,7 @@ export function ReportHeader({ icon }) {
const { name, description, parameters } = report || {}; const { name, description, parameters } = report || {};
const { websiteId, dateRange } = parameters || {}; const { websiteId, dateRange } = parameters || {};
const defaultName = formatMessage(labels.untitled);
const handleSave = async () => { const handleSave = async () => {
if (!report.id) { if (!report.id) {
@ -39,7 +40,7 @@ export function ReportHeader({ icon }) {
}; };
const handleNameChange = name => { const handleNameChange = name => {
updateReport({ name: name || 'Untitled' }); updateReport({ name: name || defaultName });
}; };
const handleDescriptionChange = description => { const handleDescriptionChange = description => {
@ -54,7 +55,7 @@ export function ReportHeader({ icon }) {
key={name} key={name}
name="name" name="name"
value={name} value={name}
placeholder={formatMessage(labels.untitled)} placeholder={defaultName}
onCommit={handleNameChange} onCommit={handleNameChange}
/> />
</> </>

View File

@ -9,6 +9,8 @@ import styles from './ReportTemplates.module.css';
import { useMessages } from 'components/hooks'; import { useMessages } from 'components/hooks';
function ReportItem({ title, description, url, icon }) { function ReportItem({ title, description, url, icon }) {
const { formatMessage, labels } = useMessages();
return ( return (
<div className={styles.report}> <div className={styles.report}>
<div className={styles.title}> <div className={styles.title}>
@ -22,7 +24,7 @@ function ReportItem({ title, description, url, icon }) {
<Icon> <Icon>
<Icons.Plus /> <Icons.Plus />
</Icon> </Icon>
<Text>Create</Text> <Text>{formatMessage(labels.create)}</Text>
</Button> </Button>
</Link> </Link>
</div> </div>
@ -36,19 +38,19 @@ export function ReportTemplates({ showHeader = true }) {
const reports = [ const reports = [
{ {
title: formatMessage(labels.insights), title: formatMessage(labels.insights),
description: 'Dive deeper into your data by using segments and filters.', description: formatMessage(labels.insightsDescription),
url: '/reports/insights', url: '/reports/insights',
icon: <Lightbulb />, icon: <Lightbulb />,
}, },
{ {
title: formatMessage(labels.funnel), title: formatMessage(labels.funnel),
description: 'Understand the conversion and drop-off rate of users.', description: formatMessage(labels.funnelDescription),
url: '/reports/funnel', url: '/reports/funnel',
icon: <Funnel />, icon: <Funnel />,
}, },
{ {
title: formatMessage(labels.retention), title: formatMessage(labels.retention),
description: 'Measure you website stickiness by tracking how often users return.', description: formatMessage(labels.retentionDescription),
url: '/reports/retention', url: '/reports/retention',
icon: <Magnet />, icon: <Magnet />,
}, },

View File

@ -5,6 +5,7 @@ import { useMessages } from 'components/hooks';
import useUser from 'components/hooks/useUser'; import useUser from 'components/hooks/useUser';
import { useState } from 'react'; import { useState } from 'react';
import { Button, Flexbox, Icon, Icons, Modal, Text } from 'react-basics'; import { Button, Flexbox, Icon, Icons, Modal, Text } from 'react-basics';
import { REPORT_TYPES } from 'lib/constants';
export function ReportsTable({ export function ReportsTable({
data = [], data = [],
@ -34,6 +35,15 @@ export function ReportsTable({
{ name: 'action', label: ' ' }, { name: 'action', label: ' ' },
]; ];
const cellRender = (row, data, key) => {
if (key === 'type') {
return formatMessage(
labels[Object.keys(REPORT_TYPES).find(key => REPORT_TYPES[key] === row.type)],
);
}
return data[key];
};
const handleConfirm = () => { const handleConfirm = () => {
onDelete(report.id); onDelete(report.id);
}; };
@ -42,6 +52,7 @@ export function ReportsTable({
<> <>
<SettingsTable <SettingsTable
columns={columns} columns={columns}
cellRender={cellRender}
data={data} data={data}
showSearch={true} showSearch={true}
showPaging={true} showPaging={true}

View File

@ -134,7 +134,7 @@ export function EventDataParameters() {
); );
})} })}
<FormButtons> <FormButtons>
<SubmitButton variant="primary" disabled={!queryEnabled} loading={isRunning}> <SubmitButton variant="primary" disabled={!queryEnabled} isLoading={isRunning}>
{formatMessage(labels.runQuery)} {formatMessage(labels.runQuery)}
</SubmitButton> </SubmitButton>
</FormButtons> </FormButtons>

View File

@ -80,7 +80,7 @@ export function FunnelParameters() {
<ParameterList items={urls} onRemove={handleRemoveUrl} /> <ParameterList items={urls} onRemove={handleRemoveUrl} />
</FormRow> </FormRow>
<FormButtons> <FormButtons>
<SubmitButton variant="primary" disabled={queryDisabled} loading={isRunning}> <SubmitButton variant="primary" disabled={queryDisabled} isLoading={isRunning}>
{formatMessage(labels.runQuery)} {formatMessage(labels.runQuery)}
</SubmitButton> </SubmitButton>
</FormButtons> </FormButtons>

View File

@ -137,7 +137,7 @@ export function InsightsParameters() {
); );
})} })}
<FormButtons> <FormButtons>
<SubmitButton variant="primary" disabled={!queryEnabled} loading={isRunning}> <SubmitButton variant="primary" disabled={!queryEnabled} isLoading={isRunning}>
{formatMessage(labels.runQuery)} {formatMessage(labels.runQuery)}
</SubmitButton> </SubmitButton>
</FormButtons> </FormButtons>

View File

@ -35,7 +35,7 @@ export function RetentionParameters() {
<MonthSelect date={startDate} onChange={handleDateChange} /> <MonthSelect date={startDate} onChange={handleDateChange} />
</FormRow> </FormRow>
<FormButtons> <FormButtons>
<SubmitButton variant="primary" disabled={queryDisabled} loading={isRunning}> <SubmitButton variant="primary" disabled={queryDisabled} isLoading={isRunning}>
{formatMessage(labels.runQuery)} {formatMessage(labels.runQuery)}
</SubmitButton> </SubmitButton>
</FormButtons> </FormButtons>

View File

@ -3,11 +3,13 @@ import classNames from 'classnames';
import { ReportContext } from '../Report'; import { ReportContext } from '../Report';
import EmptyPlaceholder from 'components/common/EmptyPlaceholder'; import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
import { useMessages } from 'components/hooks'; import { useMessages } from 'components/hooks';
import { useLocale } from 'components/hooks';
import { formatDate } from 'lib/date'; import { formatDate } from 'lib/date';
import styles from './RetentionTable.module.css'; import styles from './RetentionTable.module.css';
export function RetentionTable() { export function RetentionTable() {
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { locale } = useLocale();
const { report } = useContext(ReportContext); const { report } = useContext(ReportContext);
const { data } = report || {}; const { data } = report || {};
@ -51,7 +53,7 @@ export function RetentionTable() {
{rows.map(({ date, visitors, records }, rowIndex) => { {rows.map(({ date, visitors, records }, rowIndex) => {
return ( return (
<div key={rowIndex} className={styles.row}> <div key={rowIndex} className={styles.row}>
<div className={styles.date}>{formatDate(`${date} 00:00:00`, 'PP')}</div> <div className={styles.date}>{formatDate(`${date} 00:00:00`, 'PP', locale)}</div>
<div className={styles.visitors}>{visitors}</div> <div className={styles.visitors}>{visitors}</div>
{days.map(day => { {days.map(day => {
if (totalDays - rowIndex < day) { if (totalDays - rowIndex < day) {

View File

@ -6,13 +6,12 @@ import ThemeSetting from 'components/pages/settings/profile/ThemeSetting';
import PasswordChangeButton from './PasswordChangeButton'; import PasswordChangeButton from './PasswordChangeButton';
import useUser from 'components/hooks/useUser'; import useUser from 'components/hooks/useUser';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import useConfig from 'components/hooks/useConfig';
import { ROLES } from 'lib/constants'; import { ROLES } from 'lib/constants';
export function ProfileDetails() { export function ProfileDetails() {
const { user } = useUser(); const { user } = useUser();
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { cloudMode } = useConfig(); const cloudMode = Boolean(process.env.cloudMode);
if (!user) { if (!user) {
return null; return null;

View File

@ -1,6 +1,5 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { Breadcrumbs, Item, Tabs, useToasts } from 'react-basics'; import { Item, Tabs, useToasts } from 'react-basics';
import Link from 'next/link';
import Page from 'components/layout/Page'; import Page from 'components/layout/Page';
import PageHeader from 'components/layout/PageHeader'; import PageHeader from 'components/layout/PageHeader';
import { ROLES } from 'lib/constants'; import { ROLES } from 'lib/constants';
@ -44,16 +43,7 @@ export function TeamSettings({ teamId }) {
return ( return (
<Page loading={isLoading || !values}> <Page loading={isLoading || !values}>
<PageHeader <PageHeader title={values?.name} />
title={
<Breadcrumbs>
<Item>
<Link href="/settings/teams">{formatMessage(labels.teams)}</Link>
</Item>
<Item>{values?.name}</Item>
</Breadcrumbs>
}
/>
<Tabs selectedKey={tab} onSelect={setTab} style={{ marginBottom: 30 }}> <Tabs selectedKey={tab} onSelect={setTab} style={{ marginBottom: 30 }}>
<Item key="details">{formatMessage(labels.details)}</Item> <Item key="details">{formatMessage(labels.details)}</Item>
<Item key="members">{formatMessage(labels.members)}</Item> <Item key="members">{formatMessage(labels.members)}</Item>

View File

@ -1,6 +1,5 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { Breadcrumbs, Item, Tabs, useToasts } from 'react-basics'; import { Item, Tabs, useToasts } from 'react-basics';
import Link from 'next/link';
import UserEditForm from 'components/pages/settings/users/UserEditForm'; import UserEditForm from 'components/pages/settings/users/UserEditForm';
import Page from 'components/layout/Page'; import Page from 'components/layout/Page';
import PageHeader from 'components/layout/PageHeader'; import PageHeader from 'components/layout/PageHeader';
@ -44,16 +43,7 @@ export function UserSettings({ userId }) {
return ( return (
<Page loading={isLoading || !values}> <Page loading={isLoading || !values}>
<PageHeader <PageHeader title={values?.username} />
title={
<Breadcrumbs>
<Item>
<Link href="/settings/users">{formatMessage(labels.users)}</Link>
</Item>
<Item>{values?.username}</Item>
</Breadcrumbs>
}
/>
<Tabs selectedKey={tab} onSelect={setTab} style={{ marginBottom: 30, fontSize: 14 }}> <Tabs selectedKey={tab} onSelect={setTab} style={{ marginBottom: 30, fontSize: 14 }}>
<Item key="details">{formatMessage(labels.details)}</Item> <Item key="details">{formatMessage(labels.details)}</Item>
<Item key="websites">{formatMessage(labels.websites)}</Item> <Item key="websites">{formatMessage(labels.websites)}</Item>

View File

@ -1,15 +1,19 @@
import { TextArea } from 'react-basics'; import { TextArea } from 'react-basics';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import useConfig from 'components/hooks/useConfig'; import useConfig from 'components/hooks/useConfig';
import { useRouter } from 'next/router';
export function TrackingCode({ websiteId }) { export function TrackingCode({ websiteId }) {
const { formatMessage, messages } = useMessages(); const { formatMessage, messages } = useMessages();
const { basePath, trackerScriptName } = useConfig(); const { basePath } = useRouter();
const config = useConfig();
const trackerScriptName =
config?.trackerScriptName?.split(',')?.map(n => n.trim())?.[0] || 'script.js';
const url = trackerScriptName?.startsWith('http') const url = trackerScriptName?.startsWith('http')
? trackerScriptName ? trackerScriptName
: `${location.origin}${basePath}/${ : `${process.env.analyticsUrl || location.origin}${basePath}/${trackerScriptName}`;
trackerScriptName?.split(',')?.map(n => n.trim())?.[0] || 'script.js'
}`;
const code = `<script async src="${url}" data-website-id="${websiteId}"></script>`; const code = `<script async src="${url}" data-website-id="${websiteId}"></script>`;

View File

@ -1,5 +1,5 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { Breadcrumbs, Item, Tabs, useToasts, Button, Text, Icon, Icons } from 'react-basics'; import { Item, Tabs, useToasts, Button, Text, Icon, Icons } from 'react-basics';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import Link from 'next/link'; import Link from 'next/link';
import Page from 'components/layout/Page'; import Page from 'components/layout/Page';
@ -49,16 +49,7 @@ export function WebsiteSettings({ websiteId, openExternal = false }) {
return ( return (
<Page loading={isLoading || !values}> <Page loading={isLoading || !values}>
<PageHeader <PageHeader title={values?.name}>
title={
<Breadcrumbs>
<Item>
<Link href="/settings/websites">{formatMessage(labels.websites)}</Link>
</Item>
<Item>{values?.name}</Item>
</Breadcrumbs>
}
>
<Link href={`/websites/${websiteId}`} target={openExternal ? '_blank' : null}> <Link href={`/websites/${websiteId}`} target={openExternal ? '_blank' : null}>
<Button variant="primary"> <Button variant="primary">
<Icon> <Icon>

View File

@ -1,6 +1,5 @@
import classNames from 'classnames'; import classNames from 'classnames';
import { useApi, useDateRange, useMessages, usePageQuery, useSticky } from 'components/hooks'; import { useApi, useDateRange, useMessages, usePageQuery, useSticky } from 'components/hooks';
import RefreshButton from 'components/input/RefreshButton';
import WebsiteDateFilter from 'components/input/WebsiteDateFilter'; import WebsiteDateFilter from 'components/input/WebsiteDateFilter';
import MetricCard from 'components/metrics/MetricCard'; import MetricCard from 'components/metrics/MetricCard';
import MetricsBar from 'components/metrics/MetricsBar'; import MetricsBar from 'components/metrics/MetricsBar';
@ -10,7 +9,7 @@ import { formatShortTime } from 'lib/format';
import { Button, Column, Icon, Icons, Popup, PopupTrigger, Row } from 'react-basics'; import { Button, Column, Icon, Icons, Popup, PopupTrigger, Row } from 'react-basics';
import styles from './WebsiteMetricsBar.module.css'; import styles from './WebsiteMetricsBar.module.css';
export function WebsiteMetricsBar({ websiteId, showFilter = true, showRefresh = true, sticky }) { export function WebsiteMetricsBar({ websiteId, showFilter = true, sticky }) {
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { get, useQuery } = useApi(); const { get, useQuery } = useApi();
@ -88,7 +87,7 @@ export function WebsiteMetricsBar({ websiteId, showFilter = true, showRefresh =
handleAddFilter(value); handleAddFilter(value);
close(); close();
}} }}
includeOnlyEquals={true} allowFilterSelect={false}
/> />
</PopupForm> </PopupForm>
); );
@ -161,7 +160,6 @@ export function WebsiteMetricsBar({ websiteId, showFilter = true, showRefresh =
<Column defaultSize={12} xl={4}> <Column defaultSize={12} xl={4}>
<div className={styles.actions}> <div className={styles.actions}>
{showFilter && <WebsiteFilterButton />} {showFilter && <WebsiteFilterButton />}
{showRefresh && <RefreshButton websiteId={websiteId} />}
<WebsiteDateFilter websiteId={websiteId} /> <WebsiteDateFilter websiteId={websiteId} />
</div> </div>
</Column> </Column>

View File

@ -4,7 +4,6 @@ import WebsiteAddForm from 'components/pages/settings/websites/WebsiteAddForm';
import WebsiteList from 'components/pages/settings/websites/WebsitesList'; import WebsiteList from 'components/pages/settings/websites/WebsitesList';
import { useMessages } from 'components/hooks'; import { useMessages } from 'components/hooks';
import useUser from 'components/hooks/useUser'; import useUser from 'components/hooks/useUser';
import useConfig from 'components/hooks/useConfig';
import { ROLES } from 'lib/constants'; import { ROLES } from 'lib/constants';
import { useState } from 'react'; import { useState } from 'react';
import { import {
@ -24,8 +23,8 @@ export function WebsitesPage() {
const [tab, setTab] = useState('my-websites'); const [tab, setTab] = useState('my-websites');
const [fetch, setFetch] = useState(1); const [fetch, setFetch] = useState(1);
const { user } = useUser(); const { user } = useUser();
const { cloudMode } = useConfig();
const { showToast } = useToasts(); const { showToast } = useToasts();
const cloudMode = Boolean(process.env.cloudMode);
const handleSave = async () => { const handleSave = async () => {
setFetch(fetch + 1); setFetch(fetch + 1);

View File

@ -29,6 +29,7 @@
"label.continue": "Continue", "label.continue": "Continue",
"label.countries": "Countries", "label.countries": "Countries",
"label.country": "Country", "label.country": "Country",
"label.create": "Create",
"label.create-report": "Create report", "label.create-report": "Create report",
"label.create-team": "Create team", "label.create-team": "Create team",
"label.create-user": "Create user", "label.create-user": "Create user",
@ -63,13 +64,16 @@
"label.false": "False", "label.false": "False",
"label.field": "Field", "label.field": "Field",
"label.fields": "Fields", "label.fields": "Fields",
"label.filter": "Filter",
"label.filter-combined": "Combined", "label.filter-combined": "Combined",
"label.filter-raw": "Raw", "label.filter-raw": "Raw",
"label.filters": "Filters", "label.filters": "Filters",
"label.funnel": "Funnel", "label.funnel": "Funnel",
"label.funnel-description": "Understand the conversion and drop-off rate of users.",
"label.greater-than": "Greater than", "label.greater-than": "Greater than",
"label.greater-than-equals": "Greater than or equals", "label.greater-than-equals": "Greater than or equals",
"label.insights": "Insights", "label.insights": "Insights",
"label.insights-description": "Dive deeper into your data by using segments and filters.",
"label.is": "Is", "label.is": "Is",
"label.is-not": "Is not", "label.is-not": "Is not",
"label.is-not-set": "Is not set", "label.is-not-set": "Is not set",
@ -122,10 +126,12 @@
"label.reset": "Reset", "label.reset": "Reset",
"label.reset-website": "Reset statistics", "label.reset-website": "Reset statistics",
"label.retention": "Retention", "label.retention": "Retention",
"label.retention-description": "Measure your website stickiness by tracking how often users return.",
"label.role": "Role", "label.role": "Role",
"label.run-query": "Run query", "label.run-query": "Run query",
"label.save": "Save", "label.save": "Save",
"label.screens": "Screens", "label.screens": "Screens",
"label.search": "Search",
"label.select-date": "Select date", "label.select-date": "Select date",
"label.select-website": "Select website", "label.select-website": "Select website",
"label.sessions": "Sessions", "label.sessions": "Sessions",

View File

@ -29,6 +29,7 @@
"label.continue": "متابعة", "label.continue": "متابعة",
"label.countries": "الدول", "label.countries": "الدول",
"label.country": "Country", "label.country": "Country",
"label.create": "Create",
"label.create-report": "Create report", "label.create-report": "Create report",
"label.create-team": "انشاء مجموعة", "label.create-team": "انشاء مجموعة",
"label.create-user": "انشاء مستخدم", "label.create-user": "انشاء مستخدم",
@ -63,13 +64,16 @@
"label.false": "False", "label.false": "False",
"label.field": "Field", "label.field": "Field",
"label.fields": "Fields", "label.fields": "Fields",
"label.filter": "Filter",
"label.filter-combined": "مجمعة", "label.filter-combined": "مجمعة",
"label.filter-raw": "مفصلة", "label.filter-raw": "مفصلة",
"label.filters": "Filters", "label.filters": "Filters",
"label.funnel": "Funnel", "label.funnel": "Funnel",
"label.funnel-description": "Understand the conversion and drop-off rate of users.",
"label.greater-than": "Greater than", "label.greater-than": "Greater than",
"label.greater-than-equals": "Greater than or equals", "label.greater-than-equals": "Greater than or equals",
"label.insights": "Insights", "label.insights": "Insights",
"label.insights-description": "Dive deeper into your data by using segments and filters.",
"label.is": "Is", "label.is": "Is",
"label.is-not": "Is not", "label.is-not": "Is not",
"label.is-not-set": "Is not set", "label.is-not-set": "Is not set",
@ -122,10 +126,12 @@
"label.reset": "اعادة تعيين", "label.reset": "اعادة تعيين",
"label.reset-website": "اعادة تعيين الإحصائيات", "label.reset-website": "اعادة تعيين الإحصائيات",
"label.retention": "Retention", "label.retention": "Retention",
"label.retention-description": "Measure your website stickiness by tracking how often users return.",
"label.role": "الصلاحية", "label.role": "الصلاحية",
"label.run-query": "Run query", "label.run-query": "Run query",
"label.save": "حفظ", "label.save": "حفظ",
"label.screens": "الشاشات", "label.screens": "الشاشات",
"label.search": "Search",
"label.select-date": "Select date", "label.select-date": "Select date",
"label.select-website": "اختيار موقع", "label.select-website": "اختيار موقع",
"label.sessions": "الزيارات", "label.sessions": "الزيارات",

View File

@ -29,6 +29,7 @@
"label.continue": "Continue", "label.continue": "Continue",
"label.countries": "Краіны", "label.countries": "Краіны",
"label.country": "Country", "label.country": "Country",
"label.create": "Create",
"label.create-report": "Create report", "label.create-report": "Create report",
"label.create-team": "Create team", "label.create-team": "Create team",
"label.create-user": "Create user", "label.create-user": "Create user",
@ -63,13 +64,16 @@
"label.false": "False", "label.false": "False",
"label.field": "Field", "label.field": "Field",
"label.fields": "Fields", "label.fields": "Fields",
"label.filter": "Filter",
"label.filter-combined": "Камбініаваны", "label.filter-combined": "Камбініаваны",
"label.filter-raw": "Сырыя", "label.filter-raw": "Сырыя",
"label.filters": "Filters", "label.filters": "Filters",
"label.funnel": "Funnel", "label.funnel": "Funnel",
"label.funnel-description": "Understand the conversion and drop-off rate of users.",
"label.greater-than": "Greater than", "label.greater-than": "Greater than",
"label.greater-than-equals": "Greater than or equals", "label.greater-than-equals": "Greater than or equals",
"label.insights": "Insights", "label.insights": "Insights",
"label.insights-description": "Dive deeper into your data by using segments and filters.",
"label.is": "Is", "label.is": "Is",
"label.is-not": "Is not", "label.is-not": "Is not",
"label.is-not-set": "Is not set", "label.is-not-set": "Is not set",
@ -122,10 +126,12 @@
"label.reset": "Скінуць", "label.reset": "Скінуць",
"label.reset-website": "Скінуць статыстыку", "label.reset-website": "Скінуць статыстыку",
"label.retention": "Retention", "label.retention": "Retention",
"label.retention-description": "Measure your website stickiness by tracking how often users return.",
"label.role": "Role", "label.role": "Role",
"label.run-query": "Run query", "label.run-query": "Run query",
"label.save": "Захаваць", "label.save": "Захаваць",
"label.screens": "Экраны", "label.screens": "Экраны",
"label.search": "Search",
"label.select-date": "Select date", "label.select-date": "Select date",
"label.select-website": "Select website", "label.select-website": "Select website",
"label.sessions": "Sessions", "label.sessions": "Sessions",

View File

@ -29,6 +29,7 @@
"label.continue": "Continue", "label.continue": "Continue",
"label.countries": "দেশ", "label.countries": "দেশ",
"label.country": "Country", "label.country": "Country",
"label.create": "Create",
"label.create-report": "Create report", "label.create-report": "Create report",
"label.create-team": "Create team", "label.create-team": "Create team",
"label.create-user": "Create user", "label.create-user": "Create user",
@ -63,13 +64,16 @@
"label.false": "False", "label.false": "False",
"label.field": "Field", "label.field": "Field",
"label.fields": "Fields", "label.fields": "Fields",
"label.filter": "Filter",
"label.filter-combined": "সম্মিলিত", "label.filter-combined": "সম্মিলিত",
"label.filter-raw": "অপরিশোধিত", "label.filter-raw": "অপরিশোধিত",
"label.filters": "Filters", "label.filters": "Filters",
"label.funnel": "Funnel", "label.funnel": "Funnel",
"label.funnel-description": "Understand the conversion and drop-off rate of users.",
"label.greater-than": "Greater than", "label.greater-than": "Greater than",
"label.greater-than-equals": "Greater than or equals", "label.greater-than-equals": "Greater than or equals",
"label.insights": "Insights", "label.insights": "Insights",
"label.insights-description": "Dive deeper into your data by using segments and filters.",
"label.is": "Is", "label.is": "Is",
"label.is-not": "Is not", "label.is-not": "Is not",
"label.is-not-set": "Is not set", "label.is-not-set": "Is not set",
@ -122,10 +126,12 @@
"label.reset": "রিসেট", "label.reset": "রিসেট",
"label.reset-website": "ওয়েবসাইট রিসেট করুন", "label.reset-website": "ওয়েবসাইট রিসেট করুন",
"label.retention": "Retention", "label.retention": "Retention",
"label.retention-description": "Measure your website stickiness by tracking how often users return.",
"label.role": "Role", "label.role": "Role",
"label.run-query": "Run query", "label.run-query": "Run query",
"label.save": "সংরক্ষণ", "label.save": "সংরক্ষণ",
"label.screens": "স্ক্রিনগুলি", "label.screens": "স্ক্রিনগুলি",
"label.search": "Search",
"label.select-date": "Select date", "label.select-date": "Select date",
"label.select-website": "Select website", "label.select-website": "Select website",
"label.sessions": "Sessions", "label.sessions": "Sessions",

View File

@ -29,6 +29,7 @@
"label.continue": "Continue", "label.continue": "Continue",
"label.countries": "Països", "label.countries": "Països",
"label.country": "Country", "label.country": "Country",
"label.create": "Create",
"label.create-report": "Create report", "label.create-report": "Create report",
"label.create-team": "Create team", "label.create-team": "Create team",
"label.create-user": "Create user", "label.create-user": "Create user",
@ -63,13 +64,16 @@
"label.false": "False", "label.false": "False",
"label.field": "Field", "label.field": "Field",
"label.fields": "Fields", "label.fields": "Fields",
"label.filter": "Filter",
"label.filter-combined": "Combinat", "label.filter-combined": "Combinat",
"label.filter-raw": "En cru", "label.filter-raw": "En cru",
"label.filters": "Filters", "label.filters": "Filters",
"label.funnel": "Funnel", "label.funnel": "Funnel",
"label.funnel-description": "Understand the conversion and drop-off rate of users.",
"label.greater-than": "Greater than", "label.greater-than": "Greater than",
"label.greater-than-equals": "Greater than or equals", "label.greater-than-equals": "Greater than or equals",
"label.insights": "Insights", "label.insights": "Insights",
"label.insights-description": "Dive deeper into your data by using segments and filters.",
"label.is": "Is", "label.is": "Is",
"label.is-not": "Is not", "label.is-not": "Is not",
"label.is-not-set": "Is not set", "label.is-not-set": "Is not set",
@ -122,10 +126,12 @@
"label.reset": "Restableix", "label.reset": "Restableix",
"label.reset-website": "Restableix estadístiques", "label.reset-website": "Restableix estadístiques",
"label.retention": "Retention", "label.retention": "Retention",
"label.retention-description": "Measure your website stickiness by tracking how often users return.",
"label.role": "Role", "label.role": "Role",
"label.run-query": "Run query", "label.run-query": "Run query",
"label.save": "Desa", "label.save": "Desa",
"label.screens": "Screens", "label.screens": "Screens",
"label.search": "Search",
"label.select-date": "Select date", "label.select-date": "Select date",
"label.select-website": "Select website", "label.select-website": "Select website",
"label.sessions": "Sessions", "label.sessions": "Sessions",

View File

@ -29,6 +29,7 @@
"label.continue": "Continue", "label.continue": "Continue",
"label.countries": "Země", "label.countries": "Země",
"label.country": "Country", "label.country": "Country",
"label.create": "Create",
"label.create-report": "Create report", "label.create-report": "Create report",
"label.create-team": "Create team", "label.create-team": "Create team",
"label.create-user": "Create user", "label.create-user": "Create user",
@ -63,13 +64,16 @@
"label.false": "False", "label.false": "False",
"label.field": "Field", "label.field": "Field",
"label.fields": "Fields", "label.fields": "Fields",
"label.filter": "Filter",
"label.filter-combined": "Kombinace", "label.filter-combined": "Kombinace",
"label.filter-raw": "Nezpracované", "label.filter-raw": "Nezpracované",
"label.filters": "Filters", "label.filters": "Filters",
"label.funnel": "Funnel", "label.funnel": "Funnel",
"label.funnel-description": "Understand the conversion and drop-off rate of users.",
"label.greater-than": "Greater than", "label.greater-than": "Greater than",
"label.greater-than-equals": "Greater than or equals", "label.greater-than-equals": "Greater than or equals",
"label.insights": "Insights", "label.insights": "Insights",
"label.insights-description": "Dive deeper into your data by using segments and filters.",
"label.is": "Is", "label.is": "Is",
"label.is-not": "Is not", "label.is-not": "Is not",
"label.is-not-set": "Is not set", "label.is-not-set": "Is not set",
@ -122,10 +126,12 @@
"label.reset": "Reset", "label.reset": "Reset",
"label.reset-website": "Reset statistics", "label.reset-website": "Reset statistics",
"label.retention": "Retention", "label.retention": "Retention",
"label.retention-description": "Measure your website stickiness by tracking how often users return.",
"label.role": "Role", "label.role": "Role",
"label.run-query": "Run query", "label.run-query": "Run query",
"label.save": "Uložit", "label.save": "Uložit",
"label.screens": "Screens", "label.screens": "Screens",
"label.search": "Search",
"label.select-date": "Select date", "label.select-date": "Select date",
"label.select-website": "Select website", "label.select-website": "Select website",
"label.sessions": "Sessions", "label.sessions": "Sessions",

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