diff --git a/Dockerfile b/Dockerfile index ddde77fc5..43e127e35 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,7 +42,7 @@ RUN set -x \ && apk add --no-cache curl # Script dependencies -RUN pnpm add npm-run-all dotenv chalk semver prisma@6.16.3 @prisma/adapter-pg@6.16.3 +RUN pnpm add npm-run-all dotenv chalk semver prisma@6.16.0 @prisma/adapter-pg@6.16.0 # Permissions for prisma RUN chown -R nextjs:nodejs node_modules/.pnpm/ diff --git a/docker/middleware.ts b/docker/middleware.ts index 3fd7f20e3..ae143140d 100644 --- a/docker/middleware.ts +++ b/docker/middleware.ts @@ -4,9 +4,8 @@ export const config = { matcher: '/:path*', }; -const TRACKER_PATH = '/script.js'; -const COLLECT_PATH = '/api/send'; -const LOGIN_PATH = '/login'; +const TRACKER_NAME = '/script.js'; +const COLLECT_ENDPOINT = '/api/send'; const apiHeaders = { 'Access-Control-Allow-Origin': '*', @@ -28,7 +27,7 @@ function customCollectEndpoint(request: NextRequest) { const url = request.nextUrl.clone(); if (url.pathname.endsWith(collectEndpoint)) { - url.pathname = COLLECT_PATH; + url.pathname = COLLECT_ENDPOINT; return NextResponse.rewrite(url, { headers: apiHeaders }); } } @@ -42,7 +41,7 @@ function customScriptName(request: NextRequest) { const names = scriptName.split(',').map(name => name.trim().replace(/^\/+/, '')); if (names.find(name => url.pathname.endsWith(name))) { - url.pathname = TRACKER_PATH; + url.pathname = TRACKER_NAME; return NextResponse.rewrite(url, { headers: trackerHeaders }); } } @@ -51,21 +50,13 @@ function customScriptName(request: NextRequest) { function customScriptUrl(request: NextRequest) { const scriptUrl = process.env.TRACKER_SCRIPT_URL; - if (scriptUrl && request.nextUrl.pathname.endsWith(TRACKER_PATH)) { + if (scriptUrl && request.nextUrl.pathname.endsWith(TRACKER_NAME)) { return NextResponse.rewrite(scriptUrl, { headers: trackerHeaders }); } } -function disableLogin(request: NextRequest) { - const loginDisabled = process.env.DISABLE_LOGIN; - - if (loginDisabled && request.nextUrl.pathname.endsWith(LOGIN_PATH)) { - return new NextResponse('Access denied', { status: 403 }); - } -} - export default function middleware(req: NextRequest) { - const fns = [customCollectEndpoint, customScriptName, customScriptUrl, disableLogin]; + const fns = [customCollectEndpoint, customScriptName, customScriptUrl]; for (const fn of fns) { const res = fn(req); diff --git a/next.config.ts b/next.config.ts index e4fe228cf..6fac599e4 100644 --- a/next.config.ts +++ b/next.config.ts @@ -19,7 +19,7 @@ const contentSecurityPolicy = ` img-src 'self' https: data:; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; - connect-src 'self' https:; + connect-src *; frame-ancestors 'self' ${frameAncestors}; `; diff --git a/package.json b/package.json index b0487d69a..d2325de54 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,7 @@ "npm-run-all": "^4.1.5", "papaparse": "^5.5.3", "pg": "^8.16.3", - "prisma": "6.16.3", + "prisma": "6.16.0", "pure-rand": "^7.0.1", "react": "^19.1.1", "react-dom": "^19.1.1", @@ -148,6 +148,7 @@ "@types/react-window": "^1.8.8", "@typescript-eslint/eslint-plugin": "^8.45.0", "@typescript-eslint/parser": "^8.45.0", + "@umami/prisma-client": "^0.20.0", "babel-plugin-react-compiler": "19.1.0-rc.2", "cross-env": "^10.1.0", "cypress": "^13.6.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a5f094e3e..35dc881a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,10 +31,10 @@ importers: version: 6.16.3 '@prisma/client': specifier: ^6.16.3 - version: 6.16.3(prisma@6.16.3(typescript@5.9.3))(typescript@5.9.3) + version: 6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3) '@prisma/extension-read-replicas': specifier: ^0.4.1 - version: 0.4.1(@prisma/client@6.16.3(prisma@6.16.3(typescript@5.9.3))(typescript@5.9.3)) + version: 0.4.1(@prisma/client@6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3)) '@react-spring/web': specifier: ^10.0.3 version: 10.0.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -150,8 +150,8 @@ importers: specifier: ^8.16.3 version: 8.16.3 prisma: - specifier: 6.16.3 - version: 6.16.3(typescript@5.9.3) + specifier: 6.16.0 + version: 6.16.0(typescript@5.9.3) pure-rand: specifier: ^7.0.1 version: 7.0.1 @@ -249,6 +249,9 @@ importers: '@typescript-eslint/parser': specifier: ^8.45.0 version: 8.45.0(eslint@8.57.1)(typescript@5.9.3) + '@umami/prisma-client': + specifier: ^0.20.0 + version: 0.20.0(@prisma/adapter-pg@6.16.3)(@prisma/client@6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3))(@prisma/extension-read-replicas@0.4.1(@prisma/client@6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3))) babel-plugin-react-compiler: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 @@ -359,12 +362,49 @@ importers: version: 10.9.2(@types/node@24.6.0)(typescript@5.9.3) tsup: specifier: ^8.5.0 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.0(jiti@2.5.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 - dist: {} + dist: + dependencies: + chart.js: + specifier: ^4.5.0 + version: 4.5.0 + chartjs-adapter-date-fns: + specifier: ^3.0.0 + version: 3.0.0(chart.js@4.5.0)(date-fns@2.30.0) + colord: + specifier: ^2.9.2 + version: 2.9.3 + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 + lucide-react: + specifier: ^0.542.0 + version: 0.542.0(react@19.1.1) + pure-rand: + specifier: ^7.0.1 + version: 7.0.1 + react-simple-maps: + specifier: ^2.3.0 + version: 2.3.0(prop-types@15.8.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react-use-measure: + specifier: ^2.0.4 + version: 2.1.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react-window: + specifier: ^1.8.6 + version: 1.8.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + serialize-error: + specifier: ^12.0.0 + version: 12.0.0 + thenby: + specifier: ^1.3.4 + version: 1.3.4 + uuid: + specifier: ^11.1.0 + version: 11.1.0 packages: @@ -1519,8 +1559,11 @@ packages: typescript: optional: true - '@prisma/config@6.16.3': - resolution: {integrity: sha512-VlsLnG4oOuKGGMToEeVaRhoTBZu5H3q51jTQXb/diRags3WV0+BQK5MolJTtP6G7COlzoXmWeS11rNBtvg+qFQ==} + '@prisma/config@6.16.0': + resolution: {integrity: sha512-Q9TgfnllVehvQziY9lJwRJLGmziX0OimZUEQ/MhCUBoJMSScj2VivCjw/Of2vlO1FfyaHXxrvjZAr7ASl7DVcw==} + + '@prisma/debug@6.16.0': + resolution: {integrity: sha512-bxzro5vbVqAPkWyDs2A6GpQtRZunD8tyrLmSAchx9u0b+gWCDY6eV+oh5A0YtYT9245dIxQBswckayHuJG4u3w==} '@prisma/debug@6.16.3': resolution: {integrity: sha512-89DdqWtdKd7qoc9/qJCKLTazj3W3zPEiz0hc7HfZdpjzm21c7orOUB5oHWJsG+4KbV4cWU5pefq3CuDVYF9vgA==} @@ -1528,22 +1571,22 @@ packages: '@prisma/driver-adapter-utils@6.16.3': resolution: {integrity: sha512-FliuxCf08NTsV0lexYe5YuT7rlwdb0yofd3fROONnEUuo60Tu4DMe2URoVpkDScOaCDtWi/2VFyAhOMQNgIeHw==} - '@prisma/engines-version@6.16.1-1.bb420e667c1820a8c05a38023385f6cc7ef8e83a': - resolution: {integrity: sha512-fftRmosBex48Ph1v2ll1FrPpirwtPZpNkE5CDCY1Lw2SD2ctyrLlVlHiuxDAAlALwWBOkPbAll4+EaqdGuMhJw==} + '@prisma/engines-version@6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43': + resolution: {integrity: sha512-ThvlDaKIVrnrv97ujNFDYiQbeMQpLa0O86HFA2mNoip4mtFqM7U5GSz2ie1i2xByZtvPztJlNRgPsXGeM/kqAA==} - '@prisma/engines@6.16.3': - resolution: {integrity: sha512-b+Rl4nzQDcoqe6RIpSHv8f5lLnwdDGvXhHjGDiokObguAAv/O1KaX1Oc69mBW/GFWKQpCkOraobLjU6s1h8HGg==} + '@prisma/engines@6.16.0': + resolution: {integrity: sha512-RHJGCH/zi017W4CWYWqg0Sv1pquGGFVo8T3auJ9sodDNaiRzbeNldydjaQzszVS8nscdtcvLuJzy7e65C3puqQ==} '@prisma/extension-read-replicas@0.4.1': resolution: {integrity: sha512-mCMDloqUKUwx2o5uedTs1FHX3Nxdt1GdRMoeyp1JggjiwOALmIYWhxfIN08M2BZ0w8SKwvJqicJZMjkQYkkijw==} peerDependencies: '@prisma/client': ^6.5.0 - '@prisma/fetch-engine@6.16.3': - resolution: {integrity: sha512-bUoRIkVaI+CCaVGrSfcKev0/Mk4ateubqWqGZvQ9uCqFv2ENwWIR3OeNuGin96nZn5+SkebcD7RGgKr/+mJelw==} + '@prisma/fetch-engine@6.16.0': + resolution: {integrity: sha512-Mx5rml0XRIDizhB9eZxSP8c0nMoXYVITTiJJwxlWn9rNCel8mG8NAqIw+vJlN3gPR+kt3IBkP1SQVsplPPpYrA==} - '@prisma/get-platform@6.16.3': - resolution: {integrity: sha512-X1LxiFXinJ4iQehrodGp0f66Dv6cDL0GbRlcCoLtSu6f4Wi+hgo7eND/afIs5029GQLgNWKZ46vn8hjyXTsHLA==} + '@prisma/get-platform@6.16.0': + resolution: {integrity: sha512-eaJOOvAoGslSUTjiQrtE9E0hoBdfL43j8SymOGD6LbdrKRNtIoiy6qiBaEr2fNYD+R/Qns7QOwPhl7SVHJayKA==} '@react-aria/autocomplete@3.0.0-rc.2': resolution: {integrity: sha512-55KVj5FePFTHk8nWfUUNN8m7rBL+aSRE0CxHI2t8JG3uam3nY7jyuAJy34RBuDEdTsVlMO9Fri/1JragePC2dg==} @@ -2744,6 +2787,13 @@ packages: resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@umami/prisma-client@0.20.0': + resolution: {integrity: sha512-zcLzdSq+NJa/s4xZkzktreuuxmbAET7GAizO0LU+AVg3k9k4stEulvWUfBg48fC/iBRjz0AfOnHsuXDIHKN5Xw==} + peerDependencies: + '@prisma/adapter-pg': ^6.1.0 + '@prisma/client': ^6.1.0 + '@prisma/extension-read-replicas': ^0.4.1 + '@umami/react-zen@0.187.0': resolution: {integrity: sha512-CiTGBqEvN/dcZ1Tq4R+mj9ynN1opZF81iukUzElChJ5XF/Ec9HhPR+KM2r8PXt+uWeVVe1aZtjyVOdwUR/ndXg==} @@ -4971,8 +5021,8 @@ packages: node-notifier: optional: true - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true joycon@3.1.1: @@ -5248,6 +5298,11 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lucide-react@0.542.0: + resolution: {integrity: sha512-w3hD8/SQB7+lzU2r4VdFyzzOzKnUjTZIF/MQJGSSvni7Llewni4vuViRppfRAa2guOsY5k4jZyxw/i9DQHv+dw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lucide-react@0.543.0: resolution: {integrity: sha512-fpVfuOQO0V3HBaOA1stIiP/A2fPCXHIleRZL16Mx3HmjTYwNSbimhnFBygs2CAfU1geexMX5ItUcWBGUaqw5CA==} peerDependencies: @@ -5508,8 +5563,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nypm@0.6.2: - resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} + nypm@0.6.1: + resolution: {integrity: sha512-hlacBiRiv1k9hZFiphPUkfSQ/ZfQzZDzC+8z0wL3lvDAOUu/2NnChkKuMoMjNur/9OpKuz2QsIeiPVN0xM5Q0w==} engines: {node: ^14.16.0 || >=16.10.0} hasBin: true @@ -6245,8 +6300,8 @@ packages: resolution: {integrity: sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - prisma@6.16.3: - resolution: {integrity: sha512-4tJq3KB9WRshH5+QmzOLV54YMkNlKOtLKaSdvraI5kC/axF47HuOw6zDM8xrxJ6s9o2WodY654On4XKkrobQdQ==} + prisma@6.16.0: + resolution: {integrity: sha512-TTh+H1Kw8N68KN9cDzdAyMroqMOvdCO/Z+kS2wKEVYR1nuR21qH5Q/Db/bZHsAgw7l/TPHtM/veG5VABcdwPDw==} engines: {node: '>=18.18'} hasBin: true peerDependencies: @@ -8634,12 +8689,12 @@ snapshots: transitivePeerDependencies: - pg-native - '@prisma/client@6.16.3(prisma@6.16.3(typescript@5.9.3))(typescript@5.9.3)': + '@prisma/client@6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3)': optionalDependencies: - prisma: 6.16.3(typescript@5.9.3) + prisma: 6.16.0(typescript@5.9.3) typescript: 5.9.3 - '@prisma/config@6.16.3': + '@prisma/config@6.16.0': dependencies: c12: 3.1.0 deepmerge-ts: 7.1.5 @@ -8648,34 +8703,36 @@ snapshots: transitivePeerDependencies: - magicast + '@prisma/debug@6.16.0': {} + '@prisma/debug@6.16.3': {} '@prisma/driver-adapter-utils@6.16.3': dependencies: '@prisma/debug': 6.16.3 - '@prisma/engines-version@6.16.1-1.bb420e667c1820a8c05a38023385f6cc7ef8e83a': {} + '@prisma/engines-version@6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43': {} - '@prisma/engines@6.16.3': + '@prisma/engines@6.16.0': dependencies: - '@prisma/debug': 6.16.3 - '@prisma/engines-version': 6.16.1-1.bb420e667c1820a8c05a38023385f6cc7ef8e83a - '@prisma/fetch-engine': 6.16.3 - '@prisma/get-platform': 6.16.3 + '@prisma/debug': 6.16.0 + '@prisma/engines-version': 6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43 + '@prisma/fetch-engine': 6.16.0 + '@prisma/get-platform': 6.16.0 - '@prisma/extension-read-replicas@0.4.1(@prisma/client@6.16.3(prisma@6.16.3(typescript@5.9.3))(typescript@5.9.3))': + '@prisma/extension-read-replicas@0.4.1(@prisma/client@6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3))': dependencies: - '@prisma/client': 6.16.3(prisma@6.16.3(typescript@5.9.3))(typescript@5.9.3) + '@prisma/client': 6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3) - '@prisma/fetch-engine@6.16.3': + '@prisma/fetch-engine@6.16.0': dependencies: - '@prisma/debug': 6.16.3 - '@prisma/engines-version': 6.16.1-1.bb420e667c1820a8c05a38023385f6cc7ef8e83a - '@prisma/get-platform': 6.16.3 + '@prisma/debug': 6.16.0 + '@prisma/engines-version': 6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43 + '@prisma/get-platform': 6.16.0 - '@prisma/get-platform@6.16.3': + '@prisma/get-platform@6.16.0': dependencies: - '@prisma/debug': 6.16.3 + '@prisma/debug': 6.16.0 '@react-aria/autocomplete@3.0.0-rc.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: @@ -10346,6 +10403,16 @@ snapshots: '@typescript-eslint/types': 8.45.0 eslint-visitor-keys: 4.2.1 + '@umami/prisma-client@0.20.0(@prisma/adapter-pg@6.16.3)(@prisma/client@6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3))(@prisma/extension-read-replicas@0.4.1(@prisma/client@6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3)))': + dependencies: + '@prisma/adapter-pg': 6.16.3 + '@prisma/client': 6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3) + '@prisma/extension-read-replicas': 0.4.1(@prisma/client@6.16.3(prisma@6.16.0(typescript@5.9.3))(typescript@5.9.3)) + chalk: 4.1.2 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + '@umami/react-zen@0.187.0(@babel/core@7.28.3)(@types/react@19.1.16)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.3)(use-sync-external-store@1.5.0(react@19.1.1))': dependencies: '@fontsource/jetbrains-mono': 5.2.8 @@ -10833,7 +10900,7 @@ snapshots: dotenv: 16.6.1 exsolve: 1.0.7 giget: 2.0.0 - jiti: 2.6.1 + jiti: 2.5.1 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 1.0.0 @@ -12247,7 +12314,7 @@ snapshots: consola: 3.4.2 defu: 6.1.4 node-fetch-native: 1.6.7 - nypm: 0.6.2 + nypm: 0.6.1 pathe: 2.0.3 glob-parent@5.1.2: @@ -13089,7 +13156,7 @@ snapshots: - supports-color - ts-node - jiti@2.6.1: {} + jiti@2.5.1: {} joycon@3.1.1: {} @@ -13372,6 +13439,10 @@ snapshots: dependencies: react: 19.1.1 + lucide-react@0.542.0(react@19.1.1): + dependencies: + react: 19.1.1 + lucide-react@0.543.0(react@19.1.1): dependencies: react: 19.1.1 @@ -13630,7 +13701,7 @@ snapshots: dependencies: boolbase: 1.0.0 - nypm@0.6.2: + nypm@0.6.1: dependencies: citty: 0.1.6 consola: 3.4.2 @@ -14014,11 +14085,11 @@ snapshots: postcss: 8.5.6 ts-node: 10.9.2(@types/node@24.6.0)(typescript@5.9.3) - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1): + postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6)(yaml@2.8.1): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 2.6.1 + jiti: 2.5.1 postcss: 8.5.6 yaml: 2.8.1 @@ -14335,10 +14406,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - prisma@6.16.3(typescript@5.9.3): + prisma@6.16.0(typescript@5.9.3): dependencies: - '@prisma/config': 6.16.3 - '@prisma/engines': 6.16.3 + '@prisma/config': 6.16.0 + '@prisma/engines': 6.16.0 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -15470,7 +15541,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1): + tsup@8.5.0(jiti@2.5.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1): dependencies: bundle-require: 5.1.0(esbuild@0.25.10) cac: 6.7.14 @@ -15481,7 +15552,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1) + postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(yaml@2.8.1) resolve-from: 5.0.0 rollup: 4.52.3 source-map: 0.8.0-beta.0 diff --git a/public/intl/country/uz-UZ.json b/public/intl/country/uz-UZ.json deleted file mode 100644 index 0105597f7..000000000 --- a/public/intl/country/uz-UZ.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "AF": "Afg\u02bboniston", - "AX": "Aland orollari", - "AL": "Albaniya", - "US": "Amerika Qo\u2018shma Shtatlari", - "AS": "Amerika Samoasi", - "AD": "Andorra", - "AI": "Angilya", - "AO": "Angola", - "AQ": "Antarktida", - "AG": "Antigua va Barbuda", - "VI": "AQSH Virgin orollari", - "UM": "AQSH yondosh orollari", - "AR": "Argentina", - "AM": "Armaniston", - "AW": "Aruba", - "AU": "Avstraliya", - "AT": "Avstriya", - "BS": "Bagama orollari", - "BH": "Bahrayn", - "BD": "Bangladesh", - "BB": "Barbados", - "BY": "Belarus", - "BE": "Belgiya", - "BZ": "Beliz", - "BJ": "Benin", - "BM": "Bermuda orollari", - "AE": "Birlashgan Arab Amirliklari", - "BG": "Bolgariya", - "BO": "Boliviya", - "BQ": "Boneyr, Sint-Estatius va Saba", - "BA": "Bosniya va Gertsegovina", - "BW": "Botsvana", - "BR": "Braziliya", - "VG": "Britaniya Virgin orollari", - "IO": "Britaniyaning Hind okeanidagi hududi", - "BN": "Bruney", - "BF": "Burkina-Faso", - "BI": "Burundi", - "BT": "Butan", - "BV": "Buve oroli", - "GB": "Buyuk Britaniya", - "DK": "Daniya", - "DM": "Dominika", - "DO": "Dominikan Respublikasi", - "ET": "Efiopiya", - "EC": "Ekvador", - "GQ": "Ekvatorial Gvineya", - "ER": "Eritreya", - "IR": "Eron", - "EE": "Estoniya", - "PS": "Falastin hududlari", - "FO": "Farer orollari", - "FJ": "Fiji", - "PH": "Filippin", - "FI": "Finlandiya", - "FK": "Folklend orollari", - "FR": "Fransiya", - "GF": "Fransuz Gvianasi", - "TF": "Fransuz Janubiy hududlari", - "PF": "Fransuz Polineziyasi", - "GA": "Gabon", - "HT": "Gaiti", - "GM": "Gambiya", - "GH": "Gana", - "GY": "Gayana", - "DE": "Germaniya", - "GG": "Gernsi", - "GI": "Gibraltar", - "HN": "Gonduras", - "HK": "Gonkong (Xitoy MMH)", - "GD": "Grenada", - "GL": "Grenlandiya", - "GR": "Gretsiya", - "GE": "Gruziya", - "GU": "Guam", - "GP": "Gvadelupe", - "GT": "Gvatemala", - "GN": "Gvineya", - "GW": "Gvineya-Bisau", - "IN": "Hindiston", - "ID": "Indoneziya", - "JO": "Iordaniya", - "IE": "Irlandiya", - "IQ": "Iroq", - "IS": "Islandiya", - "ES": "Ispaniya", - "IL": "Isroil", - "IT": "Italiya", - "ZA": "Janubiy Afrika Respublikasi", - "GS": "Janubiy Georgiya va Janubiy Sendvich orollari", - "KR": "Janubiy Koreya", - "SS": "Janubiy Sudan", - "DZ": "Jazoir", - "JE": "Jersi", - "DJ": "Jibuti", - "CV": "Kabo-Verde", - "KH": "Kambodja", - "CM": "Kamerun", - "CA": "Kanada", - "KY": "Kayman orollari", - "KE": "Keniya", - "CY": "Kipr", - "KI": "Kiribati", - "CC": "Kokos (Kiling) orollari", - "CO": "Kolumbiya", - "KM": "Komor orollari", - "CG": "Kongo \u2013 Brazzavil", - "CD": "Kongo \u2013 Kinshasa", - "CR": "Kosta-Rika", - "CI": "Kot-d\u2019Ivuar", - "CU": "Kuba", - "CK": "Kuk orollari", - "CW": "Kyurasao", - "LA": "Laos", - "LV": "Latviya", - "LS": "Lesoto", - "LR": "Liberiya", - "LT": "Litva", - "LB": "Livan", - "LY": "Liviya", - "LI": "Lixtenshteyn", - "LU": "Lyuksemburg", - "MG": "Madagaskar", - "MO": "Makao (Xitoy MMH)", - "MW": "Malavi", - "MY": "Malayziya", - "MV": "Maldiv orollari", - "ML": "Mali", - "MT": "Malta", - "CF": "Markaziy Afrika Respublikasi", - "MA": "Marokash", - "MQ": "Martinika", - "MH": "Marshall orollari", - "MU": "Mavrikiy", - "MR": "Mavritaniya", - "YT": "Mayotta", - "MX": "Meksika", - "IM": "Men oroli", - "FM": "Mikroneziya", - "EG": "Misr", - "MD": "Moldova", - "MC": "Monako", - "MN": "Mongoliya", - "MS": "Montserrat", - "MZ": "Mozambik", - "SH": "Muqaddas Yelena oroli", - "MM": "Myanma (Birma)", - "NA": "Namibiya", - "NR": "Nauru", - "NP": "Nepal", - "NL": "Niderlandiya", - "NE": "Niger", - "NG": "Nigeriya", - "NI": "Nikaragua", - "NU": "Niue", - "NF": "Norfolk oroli", - "NO": "Norvegiya", - "AZ": "Ozarbayjon", - "PW": "Palau", - "PA": "Panama", - "PG": "Papua \u2013 Yangi Gvineya", - "PY": "Paragvay", - "PE": "Peru", - "PN": "Pitkern orollari", - "PK": "Pokiston", - "PL": "Polsha", - "PT": "Portugaliya", - "PR": "Puerto-Riko", - "QA": "Qatar", - "KG": "Qirg\u02bbiziston", - "KZ": "Qozog\u02bbiston", - "KW": "Quvayt", - "RE": "Reyunion", - "CX": "Rojdestvo oroli", - "RU": "Rossiya", - "RW": "Ruanda", - "RO": "Ruminiya", - "SV": "Salvador", - "WS": "Samoa", - "SM": "San-Marino", - "ST": "San-Tome va Prinsipi", - "SA": "Saudiya Arabistoni", - "BL": "Sen-Bartelemi", - "PM": "Sen-Pyer va Mikelon", - "SN": "Senegal", - "KN": "Sent-Kits va Nevis", - "LC": "Sent-Lyusiya", - "MF": "Sent-Martin", - "VC": "Sent-Vinsent va Grenadin", - "RS": "Serbiya", - "SC": "Seyshel orollari", - "SG": "Singapur", - "SX": "Sint-Marten", - "SK": "Slovakiya", - "SI": "Sloveniya", - "SB": "Solomon orollari", - "SO": "Somali", - "SD": "Sudan", - "SR": "Surinam", - "SY": "Suriya", - "SZ": "Svazilend", - "SL": "Syerra-Leone", - "TH": "Tailand", - "TZ": "Tanzaniya", - "TW": "Tayvan", - "TL": "Timor-Leste", - "TG": "Togo", - "TJ": "Tojikiston", - "TK": "Tokelau", - "TO": "Tonga", - "TT": "Trinidad va Tobago", - "TN": "Tunis", - "TR": "Turkiya", - "TM": "Turkmaniston", - "TC": "Turks va Kaykos orollari", - "TV": "Tuvalu", - "UG": "Uganda", - "UA": "Ukraina", - "OM": "Ummon", - "WF": "Uollis va Futuna", - "UY": "Urugvay", - "VU": "Vanuatu", - "VA": "Vatikan", - "VE": "Venesuela", - "HU": "Vengriya", - "VN": "Vyetnam", - "HM": "Xerd va Makdonald orollari", - "CN": "Xitoy", - "HR": "Xorvatiya", - "YE": "Yaman", - "JM": "Yamayka", - "NC": "Yangi Kaledoniya", - "NZ": "Yangi Zelandiya", - "JP": "Yaponiya", - "ZM": "Zambiya", - "ZW": "Zimbabve", - "UZ": "O\u02bbzbekiston", - "EH": "G\u2018arbiy Sahroi Kabir", - "KP": "Shimoliy Koreya", - "MK": "Shimoliy Makedoniya", - "MP": "Shimoliy Mariana orollari", - "SJ": "Shpitsbergen va Yan-Mayen", - "LK": "Shri-Lanka", - "SE": "Shvetsiya", - "CH": "Shveytsariya", - "TD": "Chad", - "ME": "Chernogoriya", - "CZ": "Chexiya", - "CL": "Chili" -} diff --git a/public/intl/language/uz-UZ.json b/public/intl/language/uz-UZ.json deleted file mode 100644 index daacab88b..000000000 --- a/public/intl/language/uz-UZ.json +++ /dev/null @@ -1,611 +0,0 @@ -{ - "ab": "abxazcha", - "ace": "Achinese", - "ach": "Acoli", - "ada": "Adangme", - "ady": "Adyghe", - "aa": "Afar", - "afh": "Afrihili", - "af": "afrikancha", - "agq": "ag\u2018emcha", - "ain": "Ainu", - "ak": "akancha", - "akk": "Akkadian", - "bss": "Akoose", - "akz": "Alabama", - "sq": "albancha", - "ale": "Aleut", - "arq": "Algerian Arabic", - "en_US": "American English", - "ase": "American Sign Language", - "am": "amxarcha", - "egy": "Ancient Egyptian", - "grc": "Ancient Greek", - "anp": "Angika", - "zh_Hant": "an\u02bcanaviy xitoycha", - "njo": "Ao Naga", - "ar": "arabcha", - "an": "Aragonese", - "arc": "Aramaic", - "aro": "Araona", - "arp": "Arapaho", - "arw": "Arawak", - "hy": "armancha", - "rup": "Aromanian", - "frp": "Arpitan", - "as": "assamcha", - "ast": "Asturian", - "asa": "asucha", - "cch": "Atsam", - "av": "Avaric", - "ae": "Avestan", - "en_AU": "Avstraliya inglizchasi", - "de_AT": "Avstriya olmonchasi", - "awa": "Awadhi", - "ay": "Aymara", - "bfq": "Badaga", - "ksf": "bafiycha", - "bfd": "Bafut", - "bqi": "Bakhtiari", - "ban": "Balinese", - "bal": "Baluchi", - "bm": "bambarcha", - "bax": "Bamun", - "bjn": "Banjar", - "bas": "Basaa", - "eu": "baskcha", - "bbc": "Batak Toba", - "bar": "Bavarian", - "bej": "Beja", - "be": "belaruscha", - "bem": "bembacha", - "bez": "benacha", - "bn": "bengalcha", - "bew": "Betawi", - "bho": "Bhojpuri", - "bik": "Bikol", - "bin": "Bini", - "my": "birmancha", - "bpy": "Bishnupriya", - "bi": "Bislama", - "byn": "Blin", - "zbl": "Blissymbols", - "brx": "bodocha", - "bg": "bolgarcha", - "ba": "boshqircha", - "bs": "bosniycha", - "brh": "Brahui", - "bra": "Braj", - "pt_BR": "Braziliya portugalchasi", - "br": "bretoncha", - "en_GB": "Britaniya inglizchasi", - "bug": "Buginese", - "bum": "Bulu", - "bua": "Buriat", - "cad": "Caddo", - "frc": "Cajun French", - "yue": "Cantonese", - "cps": "Capiznon", - "car": "Carib", - "cay": "Cayuga", - "ceb": "Cebuano", - "dtp": "Central Dusun", - "esu": "Central Yupik", - "shu": "Chadian Arabic", - "chg": "Chagatai", - "ch": "Chamorro", - "ce": "Chechen", - "chr": "cherokcha", - "cs": "chexcha", - "chy": "Cheyenne", - "chb": "Chibcha", - "cgg": "chigcha", - "qug": "Chimborazo Highland Quichua", - "chn": "Chinook Jargon", - "chp": "Chipewyan", - "cho": "Choctaw", - "cu": "Church Slavic", - "chk": "Chuukese", - "cv": "Chuvash", - "nwc": "Classical Newari", - "syc": "Classical Syriac", - "ksh": "Colognian", - "swb": "Comorian", - "cop": "Coptic", - "cr": "Cree", - "mus": "Creek", - "crh": "Crimean Turkish", - "dak": "Dakota", - "dar": "Dargwa", - "da": "datcha", - "dzg": "Dazaga", - "del": "Delaware", - "din": "Dinka", - "dv": "Divehi", - "doi": "Dogri", - "dgr": "Dogrib", - "dua": "dualcha", - "dyu": "Dyula", - "frs": "Eastern Frisian", - "efi": "Efik", - "arz": "Egyptian Arabic", - "eka": "Ekajuk", - "elx": "Elamite", - "ebu": "embucha", - "egl": "Emilian", - "myv": "Erzya", - "eo": "esperantocha", - "et": "estoncha", - "ewo": "Ewondo", - "ext": "Extremaduran", - "fan": "Fang", - "fat": "Fanti", - "fo": "farercha", - "fj": "fijcha", - "hif": "Fiji Hindi", - "fil": "filipincha", - "fi": "fincha", - "nl_BE": "flamandcha", - "fon": "Fon", - "fa": "forscha", - "gur": "Frafra", - "fr": "fransuzcha", - "fur": "Friulian", - "ff": "Fulah", - "gaa": "Ga", - "gag": "gagozcha", - "ht": "gaitcha", - "gl": "galitsiycha", - "gan": "Gan Chinese", - "lg": "gandcha", - "haw": "gavaycha", - "gay": "Gayo", - "gba": "Gbaya", - "gez": "Geez", - "aln": "Gheg Albanian", - "bbj": "Ghomala", - "fy": "g\u02bbarbiy friziancha", - "glk": "Gilaki", - "gil": "Gilbertese", - "gom": "Goan Konkani", - "nl": "gollandcha", - "gon": "Gondi", - "gn": "gorancha", - "gor": "Gorontalo", - "got": "Gothic", - "grb": "Grebo", - "ka": "gruzincha", - "gu": "gujoratcha", - "guz": "guzcha", - "gwi": "Gwich\u02bcin", - "hai": "Haida", - "hak": "Hakka Chinese", - "hz": "Herero", - "hil": "Hiligaynon", - "hi": "hindcha", - "ho": "Hiri Motu", - "hit": "Hittite", - "hmn": "Hmong", - "hup": "Hupa", - "iba": "Iban", - "ibb": "Ibibio", - "he": "ibroniy", - "io": "Ido", - "ig": "igbocha", - "ilo": "Iloko", - "smn": "inari semiycha", - "id": "indoneyzcha", - "en": "inglizcha", - "izh": "Ingrian", - "inh": "Ingush", - "ia": "Interlingua", - "ie": "Interlingue", - "iu": "inuktitutcha", - "ik": "Inupiaq", - "ga": "irlandcha", - "is": "islandcha", - "es": "ispancha", - "it": "italyancha", - "ee": "ivicha", - "jam": "Jamaican Creole English", - "sma": "janubiy semiycha", - "kaj": "Jju", - "jrb": "Judeo-Arabic", - "jpr": "Judeo-Persian", - "jut": "Jutish", - "kbd": "Kabardian", - "kea": "kabuverdiancha", - "kac": "Kachin", - "kgp": "Kaingang", - "kkj": "Kako", - "kl": "kalallisutcha", - "kln": "kalenjincha", - "xal": "Kalmyk", - "kam": "kambcha", - "fr_CA": "Kanada fransuzchasi", - "en_CA": "Kanada inglizchasi", - "kbl": "Kanembu", - "kn": "kannadcha", - "kr": "Kanuri", - "kaa": "Kara-Kalpak", - "krc": "Karachay-Balkar", - "krl": "Karelian", - "ks": "kashmircha", - "csb": "Kashubian", - "ca": "katalancha", - "kaw": "Kawi", - "ken": "Kenyang", - "kha": "Khasi", - "kho": "Khotanese", - "khw": "Khowar", - "ki": "kikuycha", - "kmb": "Kimbundu", - "krj": "Kinaray-a", - "rw": "kinyarvandcha", - "kiu": "Kirmanjki", - "tlh": "Klingon", - "bkm": "Kom", - "kv": "Komi", - "koi": "komi-permyakcha", - "kg": "Kongo", - "swc": "kongo svahiliycha", - "kok": "konkancha", - "ko": "koreyscha", - "kw": "kornishcha", - "kfo": "Koro", - "co": "korsiancha", - "ses": "koryaboro senniycha", - "kos": "Kosraean", - "avk": "Kotava", - "kpe": "Kpelle", - "kri": "Krio", - "kj": "Kuanyama", - "kum": "Kumyk", - "ku": "kurdcha", - "kru": "Kurukh", - "kut": "Kutenai", - "nmg": "kvaziycha", - "lad": "Ladino", - "lah": "Lahnda", - "lkt": "lakotcha", - "lam": "Lamba", - "lag": "langcha", - "lo": "laoscha", - "ltg": "Latgalian", - "lv": "latishcha", - "lzz": "Laz", - "lez": "Lezghian", - "lij": "Ligurian", - "li": "Limburgish", - "ln": "lingalcha", - "lfn": "Lingua Franca Nova", - "lzh": "Literary Chinese", - "lt": "litovcha", - "liv": "Livonian", - "jbo": "Lojban", - "lmo": "Lombard", - "es_419": "Lotin Amerika ispanchasi", - "la": "lotincha", - "nds": "Low German", - "sli": "Lower Silesian", - "loz": "Lozi", - "lu": "luba-katangcha", - "lua": "Luba-Lulua", - "lui": "Luiseno", - "smj": "luli semiycha", - "lun": "Lunda", - "luo": "luocha", - "luy": "luycha", - "lb": "lyuksemburgcha", - "mde": "Maba", - "jmc": "machamcha", - "mad": "Madurese", - "maf": "Mafa", - "mag": "Magahi", - "vmf": "Main-Franconian", - "mai": "Maithili", - "mak": "Makasar", - "mk": "makedoncha", - "mgh": "makuva-mittocha", - "mg": "malagasiycha", - "ml": "malayamcha", - "ms": "malaycha", - "mt": "maltacha", - "mnc": "Manchu", - "mdr": "Mandar", - "man": "Mandingo", - "mni": "Manipuri", - "mi": "maoriycha", - "arn": "mapuchiycha", - "kde": "maqondiy", - "mr": "maratcha", - "chm": "Mari", - "tzm": "markaziy atlas vaqt zonasi", - "mh": "Marshallese", - "mwr": "Marwari", - "mas": "masaycha", - "mzn": "Mazanderani", - "byv": "Medumba", - "es_MX": "Meksika ispanchasi", - "gv": "mencha", - "men": "Mende", - "mwv": "Mentawai", - "mer": "merucha", - "mgo": "metacha", - "mic": "Micmac", - "dum": "Middle Dutch", - "enm": "Middle English", - "frm": "Middle French", - "gmh": "Middle High German", - "mga": "Middle Irish", - "nan": "Min Nan Chinese", - "min": "Minangkabau", - "xmf": "Mingrelian", - "mwl": "Mirandese", - "lus": "Mizo", - "mn": "mo\u2018g\u2018ulcha", - "moh": "mohaukcha", - "mdf": "Moksha", - "ro_MD": "moldovan rumincha", - "lol": "Mongo", - "mfe": "morisyencha", - "ary": "Moroccan Arabic", - "mos": "Mossi", - "mul": "Multiple Languages", - "mua": "mundangcha", - "ttt": "Muslim Tat", - "mye": "Myene", - "naq": "namacha", - "na": "Nauru", - "nv": "Navajo", - "ng": "Ndonga", - "nap": "Neapolitan", - "de": "nemischa", - "ne": "nepalcha", - "new": "Newari", - "sba": "Ngambay", - "nnh": "Ngiemboon", - "jgo": "ngombcha", - "yrl": "Nheengatu", - "nia": "Nias", - "niu": "Niuean", - "nog": "Nogai", - "und": "noma\u02bclum til", - "frr": "Northern Frisian", - "nso": "Northern Sotho", - "nb": "norvegcha bokmal", - "nn": "norvegcha ninorsk", - "no": "Norwegian", - "nov": "Novial", - "nus": "noyrcha", - "nqo": "nqoancha", - "nym": "Nyamwezi", - "ny": "Nyanja", - "nyn": "nyankolcha", - "tog": "Nyasa Tonga", - "nyo": "Nyoro", - "nzi": "Nzima", - "oc": "Occitan", - "uz": "o\u02bbzbekcha", - "oj": "Ojibwa", - "ang": "Old English", - "fro": "Old French", - "goh": "Old High German", - "sga": "Old Irish", - "non": "Old Norse", - "peo": "Old Persian", - "pro": "Old Proven\u00e7al", - "or": "oriycha", - "om": "oromocha", - "osa": "Osage", - "os": "Ossetic", - "ota": "Ottoman Turkish", - "az": "ozarbayjoncha", - "pal": "Pahlavi", - "pfl": "Palatine German", - "pau": "Palauan", - "pi": "Pali", - "pam": "Pampanga", - "pag": "Pangasinan", - "pa": "panjobcha", - "pap": "Papiamento", - "pdc": "Pennsylvania German", - "phn": "Phoenician", - "pcd": "Picard", - "pms": "Piedmontese", - "pdt": "Plautdietsch", - "pon": "Pohnpeian", - "pl": "polyakcha", - "pnt": "Pontic", - "pt": "portugalcha", - "prg": "Prussian", - "ps": "pushtu tili", - "quc": "qichiancha", - "ky": "qirg\u02bbizcha", - "kab": "qobilcha", - "khq": "qoyra-chincha", - "kk": "qozoqcha", - "dsb": "quyi sorbcha", - "qu": "qvechuancha", - "raj": "Rajasthani", - "rap": "Rapanui", - "rar": "Rarotongan", - "rif": "Riffian", - "rgn": "Romagnol", - "rm": "romancha", - "rom": "Romany", - "rof": "rombacha", - "root": "Root", - "rtm": "Rotuman", - "rug": "Roviana", - "rwk": "ruandcha", - "ro": "rumincha", - "rn": "rundcha", - "ru": "ruscha", - "rue": "Rusyn", - "ssy": "Saho", - "sah": "Sakha", - "sam": "Samaritan Aramaic", - "saq": "samburcha", - "sm": "Samoan", - "sgs": "Samogitian", - "sad": "Sandawe", - "sg": "sangoancha", - "sbp": "sanguancha", - "sa": "sanskritcha", - "sat": "Santali", - "sc": "Sardinian", - "sas": "Sasak", - "sdc": "Sassarese Sardinian", - "stq": "Saterland Frisian", - "saz": "Saurashtra", - "sco": "Scots", - "gd": "Scottish Gaelic", - "sly": "Selayar", - "sel": "Selkup", - "see": "Seneca", - "seh": "seniycha", - "sr": "serbcha", - "sh": "Serbo-Croatian", - "srr": "Serer", - "sei": "Seri", - "ksb": "shambalacha", - "shn": "Shan", - "nd": "shimoliy ndebelcha", - "se": "shimoliy semiycha", - "sms": "shkolt semiycha", - "sn": "shoniycha", - "sv": "shvedcha", - "fr_CH": "Shvesariya fransuzchasi", - "de_CH": "Shvesariya olmonchasi", - "gsw": "shveysariya nemischasi", - "scn": "Sicilian", - "sid": "Sidamo", - "bla": "Siksika", - "szl": "Silesian", - "sd": "sindxiycha", - "si": "sinholcha", - "den": "Slave", - "sk": "slovakcha", - "sl": "slovencha", - "zh_Hans": "soddalashtirilgan xitoycha", - "xog": "sogancha", - "sog": "Sogdien", - "so": "somalicha", - "snk": "Soninke", - "ckb": "sorani kurd tili", - "azb": "South Azerbaijani", - "nr": "South Ndebele", - "alt": "Southern Altai", - "st": "Southern Sotho", - "srn": "Sranan Tongo", - "zgh": "standart marokash tamazit", - "suk": "Sukuma", - "sux": "Sumerian", - "su": "sundancha", - "sus": "Susu", - "sw": "svahilcha", - "ss": "Swati", - "syr": "Syriac", - "shi": "tachilgitcha", - "tl": "Tagalog", - "ty": "Tahitian", - "dav": "taitcha", - "tly": "Talysh", - "tmh": "Tamashek", - "ta": "tamilcha", - "trv": "Taroko", - "tt": "tatarcha", - "th": "taycha", - "te": "telugvancha", - "ter": "Tereno", - "teo": "tesoancha", - "tet": "Tetum", - "bo": "tibetcha", - "tig": "Tigre", - "ti": "tigrincha", - "zxx": "til tarkibi yo\u02bbq", - "tem": "Timne", - "tiv": "Tiv", - "tli": "Tlingit", - "tg": "tojikcha", - "tpi": "Tok Pisin", - "tkl": "Tokelau", - "to": "tongocha", - "fit": "Tornedalen Finnish", - "twq": "tosovoqcha", - "tkr": "Tsakhur", - "tsd": "Tsakonian", - "tsi": "Tsimshian", - "ts": "Tsonga", - "tn": "Tswana", - "tcy": "Tulu", - "tum": "Tumbuka", - "aeb": "Tunisian Arabic", - "tr": "turkcha", - "tk": "turkmancha", - "tru": "Turoyo", - "tvl": "Tuvalu", - "tyv": "Tuvinian", - "tw": "Twi", - "kcg": "Tyap", - "udm": "Udmurt", - "cy": "uelscha", - "uga": "Ugaritic", - "uk": "ukraincha", - "umb": "Umbundu", - "ur": "urducha", - "ug": "uyg\u02bburcha", - "vai": "vayancha", - "ve": "Venda", - "vec": "Venetian", - "hu": "vengrcha", - "vep": "Veps", - "vo": "Volap\u00fck", - "wo": "volofcha", - "vro": "V\u00f5ro", - "vot": "Votic", - "vun": "vunjoancha", - "vi": "vyetnamcha", - "wa": "Walloon", - "wae": "Walser", - "war": "Waray", - "wbp": "Warlpiri", - "was": "Washo", - "guc": "Wayuu", - "vls": "West Flemish", - "mrj": "Western Mari", - "wal": "Wolaytta", - "wuu": "Wu Chinese", - "ha": "xauscha", - "hsn": "Xiang Chinese", - "zh": "xitoycha", - "km": "xmercha", - "hr": "xorvatcha", - "xh": "xosancha", - "yav": "Yangben", - "yao": "Yao", - "yap": "Yapese", - "ja": "yaponcha", - "jv": "yavancha", - "ybb": "Yemba", - "es_ES": "Yevropa ispanchasi", - "pt_PT": "Yevropa portugalchasi", - "yi": "Yiddish", - "dyo": "yola-fonyicha", - "yo": "yorubcha", - "dz": "yovoncha", - "el": "yunoncha", - "hsb": "yuqori sorbcha", - "ar_001": "zamonavij standart arabcha", - "zap": "Zapotec", - "dje": "zarmacha", - "zza": "Zaza", - "zea": "Zeelandic", - "zen": "Zenaga", - "za": "Zhuang", - "ii": "zichuan yicha", - "gbz": "Zoroastrian Dari", - "zu": "zuluancha", - "zun": "Zuni" -} diff --git a/public/intl/messages/en-US.json b/public/intl/messages/en-US.json index cdb78cd4e..5cc8c37ee 100644 --- a/public/intl/messages/en-US.json +++ b/public/intl/messages/en-US.json @@ -524,7 +524,7 @@ "label.entry": [ { "type": 0, - "value": "Entry page" + "value": "Entry path" } ], "label.event": [ @@ -560,7 +560,7 @@ "label.exit": [ { "type": 0, - "value": "Exit page" + "value": "Exit path" } ], "label.false": [ diff --git a/public/intl/messages/es-ES.json b/public/intl/messages/es-ES.json index cde98b243..151ab5f46 100644 --- a/public/intl/messages/es-ES.json +++ b/public/intl/messages/es-ES.json @@ -836,7 +836,7 @@ "label.last-seen": [ { "type": 0, - "value": "Visto por última vez" + "value": "Última vez visto" } ], "label.leave": [ @@ -1336,19 +1336,13 @@ "label.revenue": [ { "type": 0, - "value": "Ganancias" + "value": "Ingresos" } ], "label.revenue-description": [ { "type": 0, - "value": "Analice sus ganancias a lo largo del tiempo." - } - ], - "label.revenue-property": [ - { - "type": 0, - "value": "Propiedad de ganancias" + "value": "Consulte sus ingresos a lo largo del tiempo." } ], "label.role": [ @@ -1417,6 +1411,12 @@ "value": "Sesión" } ], + "label.session-data": [ + { + "type": 0, + "value": "Datos de sesión" + } + ], "label.sessions": [ { "type": 0, @@ -1630,7 +1630,7 @@ "label.transactions": [ { "type": 0, - "value": "Transacciones" + "value": "Transactions" } ], "label.transfer": [ @@ -1672,7 +1672,7 @@ "label.uniqueCustomers": [ { "type": 0, - "value": "Clientes únicos" + "value": "Unique Customers" } ], "label.unknown": [ @@ -1699,12 +1699,6 @@ "value": "Usuario" } ], - "label.user-property": [ - { - "type": 0, - "value": "Propiedad de usuario" - } - ], "label.username": [ { "type": 0, diff --git a/public/intl/messages/sl-SI.json b/public/intl/messages/sl-SI.json index 9f168f486..73532727e 100644 --- a/public/intl/messages/sl-SI.json +++ b/public/intl/messages/sl-SI.json @@ -197,12 +197,24 @@ "value": "Počisti vse" } ], + "label.cohort": [ + { + "type": 0, + "value": "Kohorta" + } + ], "label.compare": [ { "type": 0, "value": "Primerjaj" } ], + "label.compare-dates": [ + { + "type": 0, + "value": "Primerjaj datume" + } + ], "label.confirm": [ { "type": 0, @@ -233,10 +245,28 @@ "value": "Nadaljuj" } ], + "label.conversion": [ + { + "type": 0, + "value": "Konverzija" + } + ], + "label.conversion-rate": [ + { + "type": 0, + "value": "Stopnja konverzije" + } + ], + "label.conversion-step": [ + { + "type": 0, + "value": "Korak konverzije" + } + ], "label.count": [ { "type": 0, - "value": "Število" + "value": "Števec" } ], "label.countries": [ @@ -254,7 +284,7 @@ "label.create": [ { "type": 0, - "value": "Ustvari" + "value": "Create" } ], "label.create-report": [ @@ -287,6 +317,12 @@ "value": "Ustvaril" } ], + "label.currency": [ + { + "type": 0, + "value": "Valuta" + } + ], "label.current": [ { "type": 0, @@ -467,10 +503,16 @@ "value": "Uredi člana" } ], + "label.email": [ + { + "type": 0, + "value": "Email" + } + ], "label.enable-share-url": [ { "type": 0, - "value": "Omogoči povezavo za deljenje" + "value": "Uredi povezavo za deljenje" } ], "label.end-step": [ @@ -482,7 +524,7 @@ "label.entry": [ { "type": 0, - "value": "Vstopni URL" + "value": "Vhodni URL" } ], "label.event": [ @@ -509,10 +551,16 @@ "value": "Dogodki" } ], + "label.exists": [ + { + "type": 0, + "value": "Obstaja" + } + ], "label.exit": [ { "type": 0, - "value": "Izhodni URL" + "value": "Exit URL" } ], "label.false": [ @@ -557,10 +605,16 @@ "value": "Filtri" } ], + "label.first-click": [ + { + "type": 0, + "value": "Prvi klik" + } + ], "label.first-seen": [ { "type": 0, - "value": "Prvič viden" + "value": "First seen" } ], "label.funnel": [ @@ -572,7 +626,13 @@ "label.funnel-description": [ { "type": 0, - "value": "Razumite stopnjo konverzije in osipa uporabnikov." + "value": "Understand the conversion and drop-off rate of users." + } + ], + "label.funnels": [ + { + "type": 0, + "value": "Lijaki" } ], "label.goal": [ @@ -605,16 +665,28 @@ "value": "Večje ali enako kot" } ], - "label.host": [ + "label.grouped": [ { "type": 0, - "value": "Gostitelj" + "value": "Združeno" } ], - "label.hosts": [ + "label.hostname": [ { "type": 0, - "value": "Gostitelji" + "value": "Ime gostitelja" + } + ], + "label.includes": [ + { + "type": 0, + "value": "Vključuje" + } + ], + "label.insight": [ + { + "type": 0, + "value": "Vpogled" } ], "label.insights": [ @@ -626,7 +698,7 @@ "label.insights-description": [ { "type": 0, - "value": "Poglobite se v podatke z uporabo segmentov in filtrov." + "value": "Dive deeper into your data by using segments and filters." } ], "label.is": [ @@ -680,7 +752,7 @@ "label.journey": [ { "type": 0, - "value": "Uporabniška pot" + "value": "Potovanje" } ], "label.journey-description": [ @@ -689,6 +761,12 @@ "value": "Razumite, kako uporabniki krmarijo po vašem spletnem mestu." } ], + "label.journeys": [ + { + "type": 0, + "value": "Potovanja" + } + ], "label.language": [ { "type": 0, @@ -758,7 +836,7 @@ "label.last-seen": [ { "type": 0, - "value": "Nazadnje viden" + "value": "Zadnjič videno" } ], "label.leave": [ @@ -806,13 +884,13 @@ "label.manage": [ { "type": 0, - "value": "Upravljaj" + "value": "Manage" } ], "label.manager": [ { "type": 0, - "value": "Upravitelj" + "value": "Manager" } ], "label.max": [ @@ -821,6 +899,18 @@ "value": "Največ" } ], + "label.maximize": [ + { + "type": 0, + "value": "Razširi" + } + ], + "label.medium": [ + { + "type": 0, + "value": "Srednje" + } + ], "label.member": [ { "type": 0, @@ -1071,6 +1161,12 @@ "value": "Poti" } ], + "label.pixels": [ + { + "type": 0, + "value": "Pikslov" + } + ], "label.powered-by": [ { "type": 0, @@ -1198,7 +1294,7 @@ "label.remove-member": [ { "type": 0, - "value": "Odstrani člana" + "value": "Remove member" } ], "label.reports": [ @@ -1234,25 +1330,19 @@ "label.retention-description": [ { "type": 0, - "value": "Merite uporabnikovo zadržanost s sledenjem, kako pogosto se vračajo." + "value": "Measure your website stickiness by tracking how often users return." } ], "label.revenue": [ { "type": 0, - "value": "Prihodki" + "value": "Prihodek" } ], "label.revenue-description": [ { "type": 0, - "value": "Preglejte svoje prihodke skozi čas." - } - ], - "label.revenue-property": [ - { - "type": 0, - "value": "Lastnost prihodkov" + "value": "Oglejte si svoj prihodek skozi čas." } ], "label.role": [ @@ -1282,13 +1372,13 @@ "label.search": [ { "type": 0, - "value": "Išči" + "value": "Search" } ], "label.select": [ { "type": 0, - "value": "Izberi" + "value": "Select" } ], "label.select-date": [ @@ -1297,10 +1387,16 @@ "value": "Izberi datum" } ], + "label.select-filter": [ + { + "type": 0, + "value": "Izberi filter" + } + ], "label.select-role": [ { "type": 0, - "value": "Izberi vlogo" + "value": "Select role" } ], "label.select-website": [ @@ -1315,6 +1411,12 @@ "value": "Seja" } ], + "label.session-data": [ + { + "type": 0, + "value": "Podatki seje" + } + ], "label.sessions": [ { "type": 0, @@ -1345,16 +1447,28 @@ "value": "En dan" } ], + "label.sms": [ + { + "type": 0, + "value": "SMS" + } + ], + "label.sources": [ + { + "type": 0, + "value": "Viri" + } + ], "label.start-step": [ { "type": 0, - "value": "Začetni korak" + "value": "Start Step" } ], "label.steps": [ { "type": 0, - "value": "Koraki" + "value": "Steps" } ], "label.sum": [ @@ -1396,7 +1510,7 @@ "label.team-manager": [ { "type": 0, - "value": "Upravitelj ekipe" + "value": "Vodja ekipe" } ], "label.team-member": [ @@ -1417,10 +1531,16 @@ "value": "Lastnik ekipe" } ], + "label.team-settings": [ + { + "type": 0, + "value": "Nastavitve ekipe" + } + ], "label.team-view-only": [ { "type": 0, - "value": "Ekipa samo za ogled" + "value": "Team view only" } ], "label.team-websites": [ @@ -1672,7 +1792,7 @@ "label.websites": [ { "type": 0, - "value": "Spletna mesta" + "value": "Spletnih mest" } ], "label.window": [ @@ -1690,7 +1810,7 @@ "message.action-confirmation": [ { "type": 0, - "value": "Za potrditev v spodnje polje vnesite " + "value": "Type " }, { "type": 1, @@ -1698,7 +1818,7 @@ }, { "type": 0, - "value": "." + "value": " in the box below to confirm." } ], "message.active-users": [ @@ -1735,10 +1855,16 @@ "value": "x" } ], + "message.bad-request": [ + { + "type": 0, + "value": "Bad request" + } + ], "message.collected-data": [ { "type": 0, - "value": "Zbrani podatki" + "value": "Collected data" } ], "message.confirm-delete": [ @@ -1772,7 +1898,7 @@ "message.confirm-remove": [ { "type": 0, - "value": "Ali ste prepričani, da želite odstraniti " + "value": "Are you sure you want to remove " }, { "type": 1, @@ -1800,7 +1926,7 @@ "message.delete-team-warning": [ { "type": 0, - "value": "Brisanje ekipe bo izbrisalo tudi vsa spletna mesta ekipe." + "value": "Deleting a team will also delete all team websites." } ], "message.delete-website-warning": [ @@ -2020,25 +2146,31 @@ "message.transfer-team-website-to-user": [ { "type": 0, - "value": "Želite prenesti to spletno mesto v svoj račun?" + "value": "Transfer this website to your account?" } ], "message.transfer-user-website-to-team": [ { "type": 0, - "value": "Izberite ekipo, na katero želite prenesti to spletno mesto." + "value": "Select the team to transfer this website to." } ], "message.transfer-website": [ { "type": 0, - "value": "Prenesite lastništvo spletnega mesta na svoj račun ali drugo ekipo." + "value": "Transfer website ownership to your account or another team." } ], "message.triggered-event": [ { "type": 0, - "value": "Sprožen dogodek" + "value": "Triggered event" + } + ], + "message.unauthorized": [ + { + "type": 0, + "value": "Unauthorized" } ], "message.user-deleted": [ @@ -2050,7 +2182,7 @@ "message.viewed-page": [ { "type": 0, - "value": "Ogledana stran" + "value": "Viewed page" } ], "message.visitor-log": [ @@ -2086,11 +2218,5 @@ "type": 1, "value": "device" } - ], - "message.visitors-dropped-off": [ - { - "type": 0, - "value": "Osip obiskovalcev" - } ] } diff --git a/public/intl/messages/uz-UZ.json b/public/intl/messages/uz-UZ.json deleted file mode 100644 index 3697ff1be..000000000 --- a/public/intl/messages/uz-UZ.json +++ /dev/null @@ -1,1858 +0,0 @@ -{ - "label.access-code": [ - { - "type": 0, - "value": "Kirish kodi" - } - ], - "label.actions": [ - { - "type": 0, - "value": "Amallar" - } - ], - "label.activity": [ - { - "type": 0, - "value": "Faoliyat" - } - ], - "label.add": [ - { - "type": 0, - "value": "Qoʻshish" - } - ], - "label.add-description": [ - { - "type": 0, - "value": "Tavsif qoʻshish" - } - ], - "label.add-member": [ - { - "type": 0, - "value": "A'zo qoʻshish" - } - ], - "label.add-step": [ - { - "type": 0, - "value": "Qadam qoʻshish" - } - ], - "label.add-website": [ - { - "type": 0, - "value": "Veb-sayt qoʻshish" - } - ], - "label.admin": [ - { - "type": 0, - "value": "Administrator" - } - ], - "label.after": [ - { - "type": 0, - "value": "Keyin" - } - ], - "label.all": [ - { - "type": 0, - "value": "Barchasi" - } - ], - "label.all-time": [ - { - "type": 0, - "value": "Barcha vaqtlar" - } - ], - "label.analytics": [ - { - "type": 0, - "value": "Tahlil" - } - ], - "label.average": [ - { - "type": 0, - "value": "Oʻrtacha" - } - ], - "label.back": [ - { - "type": 0, - "value": "Orqaga" - } - ], - "label.before": [ - { - "type": 0, - "value": "Oldin" - } - ], - "label.bounce-rate": [ - { - "type": 0, - "value": "Chiqib ketish darajasi" - } - ], - "label.breakdown": [ - { - "type": 0, - "value": "Tahlil" - } - ], - "label.browser": [ - { - "type": 0, - "value": "Brauzer" - } - ], - "label.browsers": [ - { - "type": 0, - "value": "Brauzerlar" - } - ], - "label.cancel": [ - { - "type": 0, - "value": "Bekor qilish" - } - ], - "label.change-password": [ - { - "type": 0, - "value": "Parolni oʻzgartirish" - } - ], - "label.cities": [ - { - "type": 0, - "value": "Shaharlar" - } - ], - "label.city": [ - { - "type": 0, - "value": "Shahar" - } - ], - "label.clear-all": [ - { - "type": 0, - "value": "Barchasini tozalash" - } - ], - "label.compare": [ - { - "type": 0, - "value": "Taqqoslash" - } - ], - "label.confirm": [ - { - "type": 0, - "value": "Tasdiqlash" - } - ], - "label.confirm-password": [ - { - "type": 0, - "value": "Parolni tasdiqlash" - } - ], - "label.contains": [ - { - "type": 0, - "value": "Oʻz ichiga oladi" - } - ], - "label.continue": [ - { - "type": 0, - "value": "Davom etish" - } - ], - "label.count": [ - { - "type": 0, - "value": "Soni" - } - ], - "label.countries": [ - { - "type": 0, - "value": "Davlatlar" - } - ], - "label.country": [ - { - "type": 0, - "value": "Davlat" - } - ], - "label.create": [ - { - "type": 0, - "value": "Yaratish" - } - ], - "label.create-report": [ - { - "type": 0, - "value": "Hisobot yaratish" - } - ], - "label.create-team": [ - { - "type": 0, - "value": "Jamoa yaratish" - } - ], - "label.create-user": [ - { - "type": 0, - "value": "Foydalanuvchi yaratish" - } - ], - "label.created": [ - { - "type": 0, - "value": "Yaratilgan" - } - ], - "label.created-by": [ - { - "type": 0, - "value": "Kim tomonidan yaratilgan" - } - ], - "label.current": [ - { - "type": 0, - "value": "Joriy" - } - ], - "label.current-password": [ - { - "type": 0, - "value": "Joriy parol" - } - ], - "label.custom-range": [ - { - "type": 0, - "value": "Maxsus oraliq" - } - ], - "label.dashboard": [ - { - "type": 0, - "value": "Boshqaruv paneli" - } - ], - "label.data": [ - { - "type": 0, - "value": "Ma'lumotlar" - } - ], - "label.date": [ - { - "type": 0, - "value": "Sana" - } - ], - "label.date-range": [ - { - "type": 0, - "value": "Sana oraligʻi" - } - ], - "label.day": [ - { - "type": 0, - "value": "Kun" - } - ], - "label.default-date-range": [ - { - "type": 0, - "value": "Standart sana oraligʻi" - } - ], - "label.delete": [ - { - "type": 0, - "value": "Oʻchirish" - } - ], - "label.delete-report": [ - { - "type": 0, - "value": "Hisobotni oʻchirish" - } - ], - "label.delete-team": [ - { - "type": 0, - "value": "Jamoani oʻchirish" - } - ], - "label.delete-user": [ - { - "type": 0, - "value": "Foydalanuvchini oʻchirish" - } - ], - "label.delete-website": [ - { - "type": 0, - "value": "Veb-saytni oʻchirish" - } - ], - "label.description": [ - { - "type": 0, - "value": "Tavsif" - } - ], - "label.desktop": [ - { - "type": 0, - "value": "Ish stoli" - } - ], - "label.details": [ - { - "type": 0, - "value": "Batafsil ma'lumot" - } - ], - "label.device": [ - { - "type": 0, - "value": "Qurilma" - } - ], - "label.devices": [ - { - "type": 0, - "value": "Qurilmalar" - } - ], - "label.dismiss": [ - { - "type": 0, - "value": "Yopish" - } - ], - "label.does-not-contain": [ - { - "type": 0, - "value": "Oʻz ichiga olmaydi" - } - ], - "label.domain": [ - { - "type": 0, - "value": "Domen" - } - ], - "label.dropoff": [ - { - "type": 0, - "value": "Tashlab ketish" - } - ], - "label.edit": [ - { - "type": 0, - "value": "Tahrirlash" - } - ], - "label.edit-dashboard": [ - { - "type": 0, - "value": "Boshqaruv panelini tahrirlash" - } - ], - "label.edit-member": [ - { - "type": 0, - "value": "A'zoni tahrirlash" - } - ], - "label.enable-share-url": [ - { - "type": 0, - "value": "Ulashish URL'ini yoqish" - } - ], - "label.end-step": [ - { - "type": 0, - "value": "Yakuniy qadam" - } - ], - "label.entry": [ - { - "type": 0, - "value": "Kirish yoʻli" - } - ], - "label.event": [ - { - "type": 0, - "value": "Hodisa" - } - ], - "label.event-data": [ - { - "type": 0, - "value": "Hodisa ma'lumotlari" - } - ], - "label.events": [ - { - "type": 0, - "value": "Hodisalar" - } - ], - "label.exit": [ - { - "type": 0, - "value": "Chiqish yoʻli" - } - ], - "label.false": [ - { - "type": 0, - "value": "Yolgʻon" - } - ], - "label.field": [ - { - "type": 0, - "value": "Maydon" - } - ], - "label.fields": [ - { - "type": 0, - "value": "Maydonlar" - } - ], - "label.filter": [ - { - "type": 0, - "value": "Filtr" - } - ], - "label.filter-combined": [ - { - "type": 0, - "value": "Birlashtirilgan" - } - ], - "label.filter-raw": [ - { - "type": 0, - "value": "Xom" - } - ], - "label.filters": [ - { - "type": 0, - "value": "Filtrlar" - } - ], - "label.first-seen": [ - { - "type": 0, - "value": "Birinchi koʻrilgan" - } - ], - "label.funnel": [ - { - "type": 0, - "value": "Voronka" - } - ], - "label.funnel-description": [ - { - "type": 0, - "value": "Foydalanuvchilarning konversiya va tashlab ketish darajasini tushunish." - } - ], - "label.goal": [ - { - "type": 0, - "value": "Maqsad" - } - ], - "label.goals": [ - { - "type": 0, - "value": "Maqsadlar" - } - ], - "label.goals-description": [ - { - "type": 0, - "value": "Sahifa koʻrishlari va hodisalar uchun maqsadlaringizni kuzatib boring." - } - ], - "label.greater-than": [ - { - "type": 0, - "value": "Kattaroq" - } - ], - "label.greater-than-equals": [ - { - "type": 0, - "value": "Kattaroq yoki teng" - } - ], - "label.host": [ - { - "type": 0, - "value": "Xost" - } - ], - "label.hosts": [ - { - "type": 0, - "value": "Xostlar" - } - ], - "label.insights": [ - { - "type": 0, - "value": "Tushunchalar" - } - ], - "label.insights-description": [ - { - "type": 0, - "value": "Segmentlar va filtrlardan foydalanib ma'lumotlaringizga chuqurroq kiring." - } - ], - "label.is": [ - { - "type": 0, - "value": "Teng" - } - ], - "label.is-not": [ - { - "type": 0, - "value": "Teng emas" - } - ], - "label.is-not-set": [ - { - "type": 0, - "value": "Oʻrnatilmagan" - } - ], - "label.is-set": [ - { - "type": 0, - "value": "Oʻrnatilgan" - } - ], - "label.join": [ - { - "type": 0, - "value": "Qoʻshilish" - } - ], - "label.join-team": [ - { - "type": 0, - "value": "Jamoaga qoʻshilish" - } - ], - "label.journey": [ - { - "type": 0, - "value": "Sayohat" - } - ], - "label.journey-description": [ - { - "type": 0, - "value": "Foydalanuvchilar veb-saytingizda qanday harakat qilishlarini tushunish." - } - ], - "label.language": [ - { - "type": 0, - "value": "Til" - } - ], - "label.languages": [ - { - "type": 0, - "value": "Tillar" - } - ], - "label.laptop": [ - { - "type": 0, - "value": "Noutbuk" - } - ], - "label.last-days": [ - { - "type": 0, - "value": "Oxirgi " - }, - { - "type": 1, - "value": "x" - }, - { - "type": 0, - "value": " kun" - } - ], - "label.last-hours": [ - { - "type": 0, - "value": "Oxirgi " - }, - { - "type": 1, - "value": "x" - }, - { - "type": 0, - "value": " soat" - } - ], - "label.last-months": [ - { - "type": 0, - "value": "Oxirgi " - }, - { - "type": 1, - "value": "x" - }, - { - "type": 0, - "value": " oy" - } - ], - "label.last-seen": [ - { - "type": 0, - "value": "Oxirgi koʻrilgan" - } - ], - "label.leave": [ - { - "type": 0, - "value": "Tark etish" - } - ], - "label.leave-team": [ - { - "type": 0, - "value": "Jamoani tark etish" - } - ], - "label.less-than": [ - { - "type": 0, - "value": "Kichikroq" - } - ], - "label.less-than-equals": [ - { - "type": 0, - "value": "Kichikroq yoki teng" - } - ], - "label.login": [ - { - "type": 0, - "value": "Kirish" - } - ], - "label.logout": [ - { - "type": 0, - "value": "Chiqish" - } - ], - "label.manage": [ - { - "type": 0, - "value": "Boshqarish" - } - ], - "label.manager": [ - { - "type": 0, - "value": "Menejer" - } - ], - "label.max": [ - { - "type": 0, - "value": "Maksimal" - } - ], - "label.member": [ - { - "type": 0, - "value": "A'zo" - } - ], - "label.members": [ - { - "type": 0, - "value": "A'zolar" - } - ], - "label.min": [ - { - "type": 0, - "value": "Minimal" - } - ], - "label.mobile": [ - { - "type": 0, - "value": "Mobil" - } - ], - "label.more": [ - { - "type": 0, - "value": "Koʻproq" - } - ], - "label.my-account": [ - { - "type": 0, - "value": "Mening hisobim" - } - ], - "label.my-websites": [ - { - "type": 0, - "value": "Mening veb-saytlarim" - } - ], - "label.name": [ - { - "type": 0, - "value": "Ism" - } - ], - "label.new-password": [ - { - "type": 0, - "value": "Yangi parol" - } - ], - "label.none": [ - { - "type": 0, - "value": "Hech biri" - } - ], - "label.number-of-records": [ - { - "type": 1, - "value": "x" - }, - { - "type": 0, - "value": " yozuv" - } - ], - "label.ok": [ - { - "type": 0, - "value": "OK" - } - ], - "label.os": [ - { - "type": 0, - "value": "OT (Operatsion tizim)" - } - ], - "label.overview": [ - { - "type": 0, - "value": "Umumiy koʻrinish" - } - ], - "label.owner": [ - { - "type": 0, - "value": "Egasi" - } - ], - "label.page-of": [ - { - "type": 0, - "value": "Sahifa " - }, - { - "type": 1, - "value": "current" - }, - { - "type": 0, - "value": " dan " - }, - { - "type": 1, - "value": "total" - } - ], - "label.page-views": [ - { - "type": 0, - "value": "Sahifa koʻrishlari" - } - ], - "label.pageTitle": [ - { - "type": 0, - "value": "Sahifa sarlavhasi" - } - ], - "label.pages": [ - { - "type": 0, - "value": "Sahifalar" - } - ], - "label.password": [ - { - "type": 0, - "value": "Parol" - } - ], - "label.path": [ - { - "type": 0, - "value": "Yoʻl" - } - ], - "label.paths": [ - { - "type": 0, - "value": "Yoʻllar" - } - ], - "label.powered-by": [ - { - "type": 1, - "value": "name" - }, - { - "type": 0, - "value": " tomonidan quvvatlanadi" - } - ], - "label.previous": [ - { - "type": 0, - "value": "Oldingi" - } - ], - "label.previous-period": [ - { - "type": 0, - "value": "Oldingi davr" - } - ], - "label.previous-year": [ - { - "type": 0, - "value": "Oldingi yil" - } - ], - "label.profile": [ - { - "type": 0, - "value": "Profil" - } - ], - "label.properties": [ - { - "type": 0, - "value": "Xususiyatlar" - } - ], - "label.property": [ - { - "type": 0, - "value": "Xususiyat" - } - ], - "label.queries": [ - { - "type": 0, - "value": "Soʻrovlar" - } - ], - "label.query": [ - { - "type": 0, - "value": "Soʻrov" - } - ], - "label.query-parameters": [ - { - "type": 0, - "value": "Soʻrov parametrlari" - } - ], - "label.realtime": [ - { - "type": 0, - "value": "Haqiqiy vaqt" - } - ], - "label.referrer": [ - { - "type": 0, - "value": "Tavsiya etuvchi" - } - ], - "label.referrers": [ - { - "type": 0, - "value": "Tavsiya etuvchilar" - } - ], - "label.refresh": [ - { - "type": 0, - "value": "Yangilash" - } - ], - "label.regenerate": [ - { - "type": 0, - "value": "Qayta yaratish" - } - ], - "label.region": [ - { - "type": 0, - "value": "Viloyat/Mintaqa" - } - ], - "label.regions": [ - { - "type": 0, - "value": "Viloyatlar/Mintaqalar" - } - ], - "label.remove": [ - { - "type": 0, - "value": "Olib tashlash" - } - ], - "label.remove-member": [ - { - "type": 0, - "value": "A'zoni olib tashlash" - } - ], - "label.reports": [ - { - "type": 0, - "value": "Hisobotlar" - } - ], - "label.required": [ - { - "type": 0, - "value": "Majburiy" - } - ], - "label.reset": [ - { - "type": 0, - "value": "Qayta tiklash" - } - ], - "label.reset-website": [ - { - "type": 0, - "value": "Veb-saytni qayta tiklash" - } - ], - "label.retention": [ - { - "type": 0, - "value": "Saqlanish" - } - ], - "label.retention-description": [ - { - "type": 0, - "value": "Foydalanuvchilarning qaytish chastotasini kuzatib, veb-saytingizning jozibadorligini oʻlchang." - } - ], - "label.revenue": [ - { - "type": 0, - "value": "Daromad" - } - ], - "label.revenue-description": [ - { - "type": 0, - "value": "Vaqt oʻtishi bilan daromadingizni tekshiring." - } - ], - "label.revenue-property": [ - { - "type": 0, - "value": "Daromad xususiyati" - } - ], - "label.role": [ - { - "type": 0, - "value": "Rol" - } - ], - "label.run-query": [ - { - "type": 0, - "value": "Soʻrovni ishga tushirish" - } - ], - "label.save": [ - { - "type": 0, - "value": "Saqlash" - } - ], - "label.screens": [ - { - "type": 0, - "value": "Ekranlar" - } - ], - "label.search": [ - { - "type": 0, - "value": "Qidiruv" - } - ], - "label.select": [ - { - "type": 0, - "value": "Tanlash" - } - ], - "label.select-date": [ - { - "type": 0, - "value": "Sanani tanlash" - } - ], - "label.select-role": [ - { - "type": 0, - "value": "Rolni tanlash" - } - ], - "label.select-website": [ - { - "type": 0, - "value": "Veb-saytni tanlash" - } - ], - "label.session": [ - { - "type": 0, - "value": "Sessiya" - } - ], - "label.sessions": [ - { - "type": 0, - "value": "Sessiyalar" - } - ], - "label.settings": [ - { - "type": 0, - "value": "Sozlamalar" - } - ], - "label.share-url": [ - { - "type": 0, - "value": "Ulashish URL'i" - } - ], - "label.single-day": [ - { - "type": 0, - "value": "Bir kun" - } - ], - "label.start-step": [ - { - "type": 0, - "value": "Boshlanish qadami" - } - ], - "label.steps": [ - { - "type": 0, - "value": "Qadamlar" - } - ], - "label.sum": [ - { - "type": 0, - "value": "Yigʻindi" - } - ], - "label.tablet": [ - { - "type": 0, - "value": "Planshet" - } - ], - "label.team": [ - { - "type": 0, - "value": "Jamoa" - } - ], - "label.team-id": [ - { - "type": 0, - "value": "Jamoa ID'si" - } - ], - "label.team-manager": [ - { - "type": 0, - "value": "Jamoa menejeri" - } - ], - "label.team-member": [ - { - "type": 0, - "value": "Jamoa a'zosi" - } - ], - "label.team-name": [ - { - "type": 0, - "value": "Jamoa nomi" - } - ], - "label.team-owner": [ - { - "type": 0, - "value": "Jamoa egasi" - } - ], - "label.team-view-only": [ - { - "type": 0, - "value": "Jamoa faqat koʻrish" - } - ], - "label.team-websites": [ - { - "type": 0, - "value": "Jamoa veb-saytlari" - } - ], - "label.teams": [ - { - "type": 0, - "value": "Jamoalar" - } - ], - "label.theme": [ - { - "type": 0, - "value": "Mavzu" - } - ], - "label.this-month": [ - { - "type": 0, - "value": "Shu oy" - } - ], - "label.this-week": [ - { - "type": 0, - "value": "Shu hafta" - } - ], - "label.this-year": [ - { - "type": 0, - "value": "Shu yil" - } - ], - "label.timezone": [ - { - "type": 0, - "value": "Vaqt zonasi" - } - ], - "label.title": [ - { - "type": 0, - "value": "Sarlavha" - } - ], - "label.today": [ - { - "type": 0, - "value": "Bugun" - } - ], - "label.toggle-charts": [ - { - "type": 0, - "value": "Grafiklarni almashtirish" - } - ], - "label.total": [ - { - "type": 0, - "value": "Jami" - } - ], - "label.total-records": [ - { - "type": 0, - "value": "Jami yozuvlar" - } - ], - "label.tracking-code": [ - { - "type": 0, - "value": "Kuzatuv kodi" - } - ], - "label.transactions": [ - { - "type": 0, - "value": "Tranzaksiyalar" - } - ], - "label.transfer": [ - { - "type": 0, - "value": "Oʻtkazish" - } - ], - "label.transfer-website": [ - { - "type": 0, - "value": "Veb-saytni oʻtkazish" - } - ], - "label.true": [ - { - "type": 0, - "value": "Rost" - } - ], - "label.type": [ - { - "type": 0, - "value": "Tur" - } - ], - "label.unique": [ - { - "type": 0, - "value": "Noyob" - } - ], - "label.unique-visitors": [ - { - "type": 0, - "value": "Noyob tashrif buyuruvchilar" - } - ], - "label.uniqueCustomers": [ - { - "type": 0, - "value": "Noyob mijozlar" - } - ], - "label.unknown": [ - { - "type": 0, - "value": "Noma'lum" - } - ], - "label.untitled": [ - { - "type": 0, - "value": "Sarlavhasiz" - } - ], - "label.update": [ - { - "type": 0, - "value": "Yangilash" - } - ], - "label.url": [ - { - "type": 0, - "value": "URL" - } - ], - "label.urls": [ - { - "type": 0, - "value": "URL'lar" - } - ], - "label.user": [ - { - "type": 0, - "value": "Foydalanuvchi" - } - ], - "label.user-property": [ - { - "type": 0, - "value": "Foydalanuvchi xususiyati" - } - ], - "label.username": [ - { - "type": 0, - "value": "Foydalanuvchi nomi" - } - ], - "label.users": [ - { - "type": 0, - "value": "Foydalanuvchilar" - } - ], - "label.utm": [ - { - "type": 0, - "value": "UTM" - } - ], - "label.utm-description": [ - { - "type": 0, - "value": "UTM parametrlari orqali kampaniyalaringizni kuzatib boring." - } - ], - "label.value": [ - { - "type": 0, - "value": "Qiymat" - } - ], - "label.view": [ - { - "type": 0, - "value": "Koʻrish" - } - ], - "label.view-details": [ - { - "type": 0, - "value": "Batafsil koʻrish" - } - ], - "label.view-only": [ - { - "type": 0, - "value": "Faqat koʻrish" - } - ], - "label.views": [ - { - "type": 0, - "value": "Koʻrishlar" - } - ], - "label.views-per-visit": [ - { - "type": 0, - "value": "Tashrifga koʻrishlar soni" - } - ], - "label.visit-duration": [ - { - "type": 0, - "value": "Tashrif davomiyligi" - } - ], - "label.visitors": [ - { - "type": 0, - "value": "Tashrif buyuruvchilar" - } - ], - "label.visits": [ - { - "type": 0, - "value": "Tashriflar" - } - ], - "label.website": [ - { - "type": 0, - "value": "Veb-sayt" - } - ], - "label.website-id": [ - { - "type": 0, - "value": "Veb-sayt ID'si" - } - ], - "label.websites": [ - { - "type": 0, - "value": "Veb-saytlar" - } - ], - "label.window": [ - { - "type": 0, - "value": "Oyna" - } - ], - "label.yesterday": [ - { - "type": 0, - "value": "Kecha" - } - ], - "message.action-confirmation": [ - { - "type": 0, - "value": "Tasdiqlash uchun pastdagi qutiga **" - }, - { - "type": 1, - "value": "confirmation" - }, - { - "type": 0, - "value": "** yozing." - } - ], - "message.active-users": [ - { - "type": 1, - "value": "x" - }, - { - "type": 0, - "value": " joriy " - }, - { - "offset": 0, - "options": { - "one": { - "value": [ - { - "type": 0, - "value": "tashrif buyuruvchi" - } - ] - }, - "other": { - "value": [ - { - "type": 0, - "value": "tashrif buyuruvchilar" - } - ] - } - }, - "pluralType": "cardinal", - "type": 6, - "value": "x" - } - ], - "message.collected-data": [ - { - "type": 0, - "value": "Yigʻilgan ma'lumotlar" - } - ], - "message.confirm-delete": [ - { - "type": 0, - "value": "**" - }, - { - "type": 1, - "value": "target" - }, - { - "type": 0, - "value": "** ni oʻchirmoqchi ekanligingizga ishonchingiz komilmi?" - } - ], - "message.confirm-leave": [ - { - "type": 0, - "value": "**" - }, - { - "type": 1, - "value": "target" - }, - { - "type": 0, - "value": "** ni tark etmoqchi ekanligingizga ishonchingiz komilmi?" - } - ], - "message.confirm-remove": [ - { - "type": 0, - "value": "**" - }, - { - "type": 1, - "value": "target" - }, - { - "type": 0, - "value": "** ni olib tashlamoqchi ekanligingizga ishonchingiz komilmi?" - } - ], - "message.confirm-reset": [ - { - "type": 0, - "value": "**" - }, - { - "type": 1, - "value": "target" - }, - { - "type": 0, - "value": "** ni qayta tiklamoqchi ekanligingizga ishonchingiz komilmi?" - } - ], - "message.delete-team-warning": [ - { - "type": 0, - "value": "Jamoani oʻchirish, shuningdek, barcha jamoa veb-saytlarini ham oʻchiradi." - } - ], - "message.delete-website-warning": [ - { - "type": 0, - "value": "Barcha veb-sayt ma'lumotlari oʻchiriladi." - } - ], - "message.error": [ - { - "type": 0, - "value": "Nimadir xato ketdi." - } - ], - "message.event-log": [ - { - "type": 0, - "value": "**" - }, - { - "type": 1, - "value": "url" - }, - { - "type": 0, - "value": "** da **" - }, - { - "type": 1, - "value": "event" - }, - { - "type": 0, - "value": "** hodisasi" - } - ], - "message.go-to-settings": [ - { - "type": 0, - "value": "Sozlamalarga oʻtish" - } - ], - "message.incorrect-username-password": [ - { - "type": 0, - "value": "Notoʻgʻri foydalanuvchi nomi va/yoki parol." - } - ], - "message.invalid-domain": [ - { - "type": 0, - "value": "Notoʻgʻri domen. http/https qoʻshmang." - } - ], - "message.min-password-length": [ - { - "type": 0, - "value": "Minimal uzunligi " - }, - { - "type": 1, - "value": "n" - }, - { - "type": 0, - "value": " belgidan" - } - ], - "message.new-version-available": [ - { - "type": 0, - "value": "Umami'ning yangi **" - }, - { - "type": 1, - "value": "version" - }, - { - "type": 0, - "value": "** versiyasi mavjud!" - } - ], - "message.no-data-available": [ - { - "type": 0, - "value": "Ma'lumotlar mavjud emas." - } - ], - "message.no-event-data": [ - { - "type": 0, - "value": "Hodisa ma'lumotlari mavjud emas." - } - ], - "message.no-match-password": [ - { - "type": 0, - "value": "Parollar mos kelmadi." - } - ], - "message.no-results-found": [ - { - "type": 0, - "value": "Hech qanday natija topilmadi." - } - ], - "message.no-team-websites": [ - { - "type": 0, - "value": "Bu jamoada hech qanday veb-sayt yoʻq." - } - ], - "message.no-teams": [ - { - "type": 0, - "value": "Siz hech qanday jamoa yaratmagansiz." - } - ], - "message.no-users": [ - { - "type": 0, - "value": "Hech qanday foydalanuvchi yoʻq." - } - ], - "message.no-websites-configured": [ - { - "type": 0, - "value": "Sizda hech qanday veb-sayt sozlanmagan." - } - ], - "message.page-not-found": [ - { - "type": 0, - "value": "Sahifa topilmadi" - } - ], - "message.reset-website": [ - { - "type": 0, - "value": "Bu veb-saytni qayta tiklash uchun tasdiqlash uchun pastdagi qutiga **" - }, - { - "type": 1, - "value": "confirmation" - }, - { - "type": 0, - "value": "** yozing." - } - ], - "message.reset-website-warning": [ - { - "type": 0, - "value": "Bu veb-sayt uchun barcha statistik ma'lumotlar oʻchiriladi, lekin sozlamalaringiz saqlanib qoladi." - } - ], - "message.saved": [ - { - "type": 0, - "value": "Saqlandi." - } - ], - "message.share-url": [ - { - "type": 0, - "value": "Sizning veb-sayt statistikalaringiz quyidagi URL'da ochiqdir:" - } - ], - "message.team-already-member": [ - { - "type": 0, - "value": "Siz allaqachon jamoa a'zosisiz." - } - ], - "message.team-not-found": [ - { - "type": 0, - "value": "Jamoa topilmadi." - } - ], - "message.team-websites-info": [ - { - "type": 0, - "value": "Veb-saytlarni jamoaning har bir a'zosi koʻrishi mumkin." - } - ], - "message.tracking-code": [ - { - "type": 0, - "value": "Bu veb-sayt uchun statistikani kuzatish uchun quyidagi kodni HTML'ingizdagi **" - }, - { - "children": [ - { - "type": 0, - "value": "..." - } - ], - "type": 8, - "value": "head" - }, - { - "type": 0, - "value": "** qismiga joylashtiring." - } - ], - "message.transfer-team-website-to-user": [ - { - "type": 0, - "value": "Bu veb-saytni oʻz hisobingizga oʻtkazasizmi?" - } - ], - "message.transfer-user-website-to-team": [ - { - "type": 0, - "value": "Bu veb-saytni oʻtkazish uchun jamoani tanlang." - } - ], - "message.transfer-website": [ - { - "type": 0, - "value": "Veb-sayt egaligini oʻz hisobingizga yoki boshqa jamoaga oʻtkazish." - } - ], - "message.triggered-event": [ - { - "type": 0, - "value": "Hodisa ishga tushirildi" - } - ], - "message.user-deleted": [ - { - "type": 0, - "value": "Foydalanuvchi oʻchirildi." - } - ], - "message.viewed-page": [ - { - "type": 0, - "value": "Sahifa koʻrildi" - } - ], - "message.visitor-log": [ - { - "type": 1, - "value": "os" - }, - { - "type": 0, - "value": " " - }, - { - "type": 1, - "value": "device" - }, - { - "type": 0, - "value": " da " - }, - { - "type": 1, - "value": "browser" - }, - { - "type": 0, - "value": " dan foydalanayotgan " - }, - { - "type": 1, - "value": "country" - }, - { - "type": 0, - "value": " dan tashrif buyuruvchi" - } - ], - "message.visitors-dropped-off": [ - { - "type": 0, - "value": "Tashrif buyuruvchilar tashlab ketishdi" - } - ] -} diff --git a/scripts/format-lang.js b/scripts/format-lang.js index ad18d82d6..0230bda35 100644 --- a/scripts/format-lang.js +++ b/scripts/format-lang.js @@ -1,6 +1,7 @@ import path from 'node:path'; import fs from 'fs-extra'; import del from 'del'; +import prettier from 'prettier'; import { createRequire } from 'module'; const require = createRequire(import.meta.url); @@ -26,7 +27,7 @@ async function run() { return obj; }, {}); - const json = JSON.stringify(formatted, null, 2); + const json = prettier.format(JSON.stringify(formatted), { parser: 'json' }); fs.writeFileSync(path.resolve(dest, file), json); }); diff --git a/src/app/api/send/route.ts b/src/app/api/send/route.ts index 3e5699889..1e8563382 100644 --- a/src/app/api/send/route.ts +++ b/src/app/api/send/route.ts @@ -1,4 +1,5 @@ import { z } from 'zod'; +import debug from 'debug'; import { isbot } from 'isbot'; import { startOfHour, startOfMonth } from 'date-fns'; import clickhouse from '@/lib/clickhouse'; @@ -12,7 +13,8 @@ import { COLLECTION_TYPE, EVENT_TYPE } from '@/lib/constants'; import { anyObjectParam, urlOrPathParam } from '@/lib/schema'; import { safeDecodeURI, safeDecodeURIComponent } from '@/lib/url'; import { createSession, saveEvent, saveSessionData } from '@/queries/sql'; -import { serializeError } from 'serialize-error'; + +const log = debug('umami:send'); interface Cache { websiteId: string; @@ -268,8 +270,7 @@ export async function POST(request: Request) { return json({ cache: token, sessionId, visitId }); } catch (e) { - const error = serializeError(e); - - return serverError({ errorObject: error }); + log.error(e); + return serverError(e); } } diff --git a/src/lang/uz-UZ.json b/src/lang/uz-UZ.json deleted file mode 100644 index e8a574c77..000000000 --- a/src/lang/uz-UZ.json +++ /dev/null @@ -1,279 +0,0 @@ -{ - "label.access-code": "Kirish kodi", - "label.actions": "Amallar", - "label.activity": "Faoliyat", - "label.add": "Qoʻshish", - "label.add-description": "Tavsif qoʻshish", - "label.add-member": "A'zo qoʻshish", - "label.add-step": "Qadam qoʻshish", - "label.add-website": "Veb-sayt qoʻshish", - "label.admin": "Administrator", - "label.after": "Keyin", - "label.all": "Barchasi", - "label.all-time": "Barcha vaqtlar", - "label.analytics": "Tahlil", - "label.average": "Oʻrtacha", - "label.back": "Orqaga", - "label.before": "Oldin", - "label.bounce-rate": "Chiqib ketish darajasi", - "label.breakdown": "Tahlil", - "label.browser": "Brauzer", - "label.browsers": "Brauzerlar", - "label.cancel": "Bekor qilish", - "label.change-password": "Parolni oʻzgartirish", - "label.cities": "Shaharlar", - "label.city": "Shahar", - "label.clear-all": "Barchasini tozalash", - "label.compare": "Taqqoslash", - "label.confirm": "Tasdiqlash", - "label.confirm-password": "Parolni tasdiqlash", - "label.contains": "Oʻz ichiga oladi", - "label.continue": "Davom etish", - "label.count": "Soni", - "label.countries": "Davlatlar", - "label.country": "Davlat", - "label.create": "Yaratish", - "label.create-report": "Hisobot yaratish", - "label.create-team": "Jamoa yaratish", - "label.create-user": "Foydalanuvchi yaratish", - "label.created": "Yaratilgan", - "label.created-by": "Kim tomonidan yaratilgan", - "label.current": "Joriy", - "label.current-password": "Joriy parol", - "label.custom-range": "Maxsus oraliq", - "label.dashboard": "Boshqaruv paneli", - "label.data": "Ma'lumotlar", - "label.date": "Sana", - "label.date-range": "Sana oraligʻi", - "label.day": "Kun", - "label.default-date-range": "Standart sana oraligʻi", - "label.delete": "Oʻchirish", - "label.delete-report": "Hisobotni oʻchirish", - "label.delete-team": "Jamoani oʻchirish", - "label.delete-user": "Foydalanuvchini oʻchirish", - "label.delete-website": "Veb-saytni oʻchirish", - "label.description": "Tavsif", - "label.desktop": "Ish stoli", - "label.details": "Batafsil ma'lumot", - "label.device": "Qurilma", - "label.devices": "Qurilmalar", - "label.dismiss": "Yopish", - "label.does-not-contain": "Oʻz ichiga olmaydi", - "label.domain": "Domen", - "label.dropoff": "Tashlab ketish", - "label.edit": "Tahrirlash", - "label.edit-dashboard": "Boshqaruv panelini tahrirlash", - "label.edit-member": "A'zoni tahrirlash", - "label.enable-share-url": "Ulashish URL'ini yoqish", - "label.end-step": "Yakuniy qadam", - "label.entry": "Kirish yoʻli", - "label.event": "Hodisa", - "label.event-data": "Hodisa ma'lumotlari", - "label.events": "Hodisalar", - "label.exit": "Chiqish yoʻli", - "label.false": "Yolgʻon", - "label.field": "Maydon", - "label.fields": "Maydonlar", - "label.filter": "Filtr", - "label.filter-combined": "Birlashtirilgan", - "label.filter-raw": "Xom", - "label.filters": "Filtrlar", - "label.first-seen": "Birinchi koʻrilgan", - "label.funnel": "Voronka", - "label.funnel-description": "Foydalanuvchilarning konversiya va tashlab ketish darajasini tushunish.", - "label.goal": "Maqsad", - "label.goals": "Maqsadlar", - "label.goals-description": "Sahifa koʻrishlari va hodisalar uchun maqsadlaringizni kuzatib boring.", - "label.greater-than": "Kattaroq", - "label.greater-than-equals": "Kattaroq yoki teng", - "label.host": "Xost", - "label.hosts": "Xostlar", - "label.insights": "Tushunchalar", - "label.insights-description": "Segmentlar va filtrlardan foydalanib ma'lumotlaringizga chuqurroq kiring.", - "label.is": "Teng", - "label.is-not": "Teng emas", - "label.is-not-set": "Oʻrnatilmagan", - "label.is-set": "Oʻrnatilgan", - "label.join": "Qoʻshilish", - "label.join-team": "Jamoaga qoʻshilish", - "label.journey": "Sayohat", - "label.journey-description": "Foydalanuvchilar veb-saytingizda qanday harakat qilishlarini tushunish.", - "label.language": "Til", - "label.languages": "Tillar", - "label.laptop": "Noutbuk", - "label.last-days": "Oxirgi {x} kun", - "label.last-hours": "Oxirgi {x} soat", - "label.last-months": "Oxirgi {x} oy", - "label.last-seen": "Oxirgi koʻrilgan", - "label.leave": "Tark etish", - "label.leave-team": "Jamoani tark etish", - "label.less-than": "Kichikroq", - "label.less-than-equals": "Kichikroq yoki teng", - "label.login": "Kirish", - "label.logout": "Chiqish", - "label.manage": "Boshqarish", - "label.manager": "Menejer", - "label.max": "Maksimal", - "label.member": "A'zo", - "label.members": "A'zolar", - "label.min": "Minimal", - "label.mobile": "Mobil", - "label.more": "Koʻproq", - "label.my-account": "Mening hisobim", - "label.my-websites": "Mening veb-saytlarim", - "label.name": "Ism", - "label.new-password": "Yangi parol", - "label.none": "Hech biri", - "label.number-of-records": "{x} yozuv", - "label.ok": "OK", - "label.os": "OT (Operatsion tizim)", - "label.overview": "Umumiy koʻrinish", - "label.owner": "Egasi", - "label.page-of": "Sahifa {current} dan {total}", - "label.page-views": "Sahifa koʻrishlari", - "label.pageTitle": "Sahifa sarlavhasi", - "label.pages": "Sahifalar", - "label.password": "Parol", - "label.path": "Yoʻl", - "label.paths": "Yoʻllar", - "label.powered-by": "{name} tomonidan quvvatlanadi", - "label.previous": "Oldingi", - "label.previous-period": "Oldingi davr", - "label.previous-year": "Oldingi yil", - "label.profile": "Profil", - "label.properties": "Xususiyatlar", - "label.property": "Xususiyat", - "label.queries": "Soʻrovlar", - "label.query": "Soʻrov", - "label.query-parameters": "Soʻrov parametrlari", - "label.realtime": "Haqiqiy vaqt", - "label.referrer": "Tavsiya etuvchi", - "label.referrers": "Tavsiya etuvchilar", - "label.refresh": "Yangilash", - "label.regenerate": "Qayta yaratish", - "label.region": "Viloyat/Mintaqa", - "label.regions": "Viloyatlar/Mintaqalar", - "label.remove": "Olib tashlash", - "label.remove-member": "A'zoni olib tashlash", - "label.reports": "Hisobotlar", - "label.required": "Majburiy", - "label.reset": "Qayta tiklash", - "label.reset-website": "Veb-saytni qayta tiklash", - "label.retention": "Saqlanish", - "label.retention-description": "Foydalanuvchilarning qaytish chastotasini kuzatib, veb-saytingizning jozibadorligini oʻlchang.", - "label.revenue": "Daromad", - "label.revenue-description": "Vaqt oʻtishi bilan daromadingizni tekshiring.", - "label.revenue-property": "Daromad xususiyati", - "label.role": "Rol", - "label.run-query": "Soʻrovni ishga tushirish", - "label.save": "Saqlash", - "label.screens": "Ekranlar", - "label.search": "Qidiruv", - "label.select": "Tanlash", - "label.select-date": "Sanani tanlash", - "label.select-role": "Rolni tanlash", - "label.select-website": "Veb-saytni tanlash", - "label.session": "Sessiya", - "label.sessions": "Sessiyalar", - "label.settings": "Sozlamalar", - "label.share-url": "Ulashish URL'i", - "label.single-day": "Bir kun", - "label.start-step": "Boshlanish qadami", - "label.steps": "Qadamlar", - "label.sum": "Yigʻindi", - "label.tablet": "Planshet", - "label.team": "Jamoa", - "label.team-id": "Jamoa ID'si", - "label.team-manager": "Jamoa menejeri", - "label.team-member": "Jamoa a'zosi", - "label.team-name": "Jamoa nomi", - "label.team-owner": "Jamoa egasi", - "label.team-view-only": "Jamoa faqat koʻrish", - "label.team-websites": "Jamoa veb-saytlari", - "label.teams": "Jamoalar", - "label.theme": "Mavzu", - "label.this-month": "Shu oy", - "label.this-week": "Shu hafta", - "label.this-year": "Shu yil", - "label.timezone": "Vaqt zonasi", - "label.title": "Sarlavha", - "label.today": "Bugun", - "label.toggle-charts": "Grafiklarni almashtirish", - "label.total": "Jami", - "label.total-records": "Jami yozuvlar", - "label.tracking-code": "Kuzatuv kodi", - "label.transactions": "Tranzaksiyalar", - "label.transfer": "Oʻtkazish", - "label.transfer-website": "Veb-saytni oʻtkazish", - "label.true": "Rost", - "label.type": "Tur", - "label.unique": "Noyob", - "label.unique-visitors": "Noyob tashrif buyuruvchilar", - "label.uniqueCustomers": "Noyob mijozlar", - "label.unknown": "Noma'lum", - "label.untitled": "Sarlavhasiz", - "label.update": "Yangilash", - "label.url": "URL", - "label.urls": "URL'lar", - "label.user": "Foydalanuvchi", - "label.user-property": "Foydalanuvchi xususiyati", - "label.username": "Foydalanuvchi nomi", - "label.users": "Foydalanuvchilar", - "label.utm": "UTM", - "label.utm-description": "UTM parametrlari orqali kampaniyalaringizni kuzatib boring.", - "label.value": "Qiymat", - "label.view": "Koʻrish", - "label.view-details": "Batafsil koʻrish", - "label.view-only": "Faqat koʻrish", - "label.views": "Koʻrishlar", - "label.views-per-visit": "Tashrifga koʻrishlar soni", - "label.visit-duration": "Tashrif davomiyligi", - "label.visitors": "Tashrif buyuruvchilar", - "label.visits": "Tashriflar", - "label.website": "Veb-sayt", - "label.website-id": "Veb-sayt ID'si", - "label.websites": "Veb-saytlar", - "label.window": "Oyna", - "label.yesterday": "Kecha", - "message.action-confirmation": "Tasdiqlash uchun pastdagi qutiga **{confirmation}** yozing.", - "message.active-users": "{x} joriy {x, plural, one {tashrif buyuruvchi} other {tashrif buyuruvchilar}}", - "message.collected-data": "Yigʻilgan ma'lumotlar", - "message.confirm-delete": "**{target}** ni oʻchirmoqchi ekanligingizga ishonchingiz komilmi?", - "message.confirm-leave": "**{target}** ni tark etmoqchi ekanligingizga ishonchingiz komilmi?", - "message.confirm-remove": "**{target}** ni olib tashlamoqchi ekanligingizga ishonchingiz komilmi?", - "message.confirm-reset": "**{target}** ni qayta tiklamoqchi ekanligingizga ishonchingiz komilmi?", - "message.delete-team-warning": "Jamoani oʻchirish, shuningdek, barcha jamoa veb-saytlarini ham oʻchiradi.", - "message.delete-website-warning": "Barcha veb-sayt ma'lumotlari oʻchiriladi.", - "message.error": "Nimadir xato ketdi.", - "message.event-log": "**{url}** da **{event}** hodisasi", - "message.go-to-settings": "Sozlamalarga oʻtish", - "message.incorrect-username-password": "Notoʻgʻri foydalanuvchi nomi va/yoki parol.", - "message.invalid-domain": "Notoʻgʻri domen. http/https qoʻshmang.", - "message.min-password-length": "Minimal uzunligi {n} belgidan", - "message.new-version-available": "Umami'ning yangi **{version}** versiyasi mavjud!", - "message.no-data-available": "Ma'lumotlar mavjud emas.", - "message.no-event-data": "Hodisa ma'lumotlari mavjud emas.", - "message.no-match-password": "Parollar mos kelmadi.", - "message.no-results-found": "Hech qanday natija topilmadi.", - "message.no-team-websites": "Bu jamoada hech qanday veb-sayt yoʻq.", - "message.no-teams": "Siz hech qanday jamoa yaratmagansiz.", - "message.no-users": "Hech qanday foydalanuvchi yoʻq.", - "message.no-websites-configured": "Sizda hech qanday veb-sayt sozlanmagan.", - "message.page-not-found": "Sahifa topilmadi", - "message.reset-website": "Bu veb-saytni qayta tiklash uchun tasdiqlash uchun pastdagi qutiga **{confirmation}** yozing.", - "message.reset-website-warning": "Bu veb-sayt uchun barcha statistik ma'lumotlar oʻchiriladi, lekin sozlamalaringiz saqlanib qoladi.", - "message.saved": "Saqlandi.", - "message.share-url": "Sizning veb-sayt statistikalaringiz quyidagi URL'da ochiqdir:", - "message.team-already-member": "Siz allaqachon jamoa a'zosisiz.", - "message.team-not-found": "Jamoa topilmadi.", - "message.team-websites-info": "Veb-saytlarni jamoaning har bir a'zosi koʻrishi mumkin.", - "message.tracking-code": "Bu veb-sayt uchun statistikani kuzatish uchun quyidagi kodni HTML'ingizdagi **...** qismiga joylashtiring.", - "message.transfer-team-website-to-user": "Bu veb-saytni oʻz hisobingizga oʻtkazasizmi?", - "message.transfer-user-website-to-team": "Bu veb-saytni oʻtkazish uchun jamoani tanlang.", - "message.transfer-website": "Veb-sayt egaligini oʻz hisobingizga yoki boshqa jamoaga oʻtkazish.", - "message.triggered-event": "Hodisa ishga tushirildi", - "message.user-deleted": "Foydalanuvchi oʻchirildi.", - "message.viewed-page": "Sahifa koʻrildi", - "message.visitor-log": "{os} {device} da {browser} dan foydalanayotgan {country} dan tashrif buyuruvchi", - "message.visitors-dropped-off": "Tashrif buyuruvchilar tashlab ketishdi" -} diff --git a/src/lib/lang.ts b/src/lib/lang.ts index 96acc3698..48176d0a9 100644 --- a/src/lib/lang.ts +++ b/src/lib/lang.ts @@ -44,7 +44,6 @@ import { ca, hu, vi, - uz, } from 'date-fns/locale'; export const languages = { @@ -96,7 +95,6 @@ export const languages = { 'tr-TR': { label: 'Türkçe', dateLocale: tr }, 'uk-UA': { label: 'українська', dateLocale: uk }, 'ur-PK': { label: 'Urdu (Pakistan)', dateLocale: uk, dir: 'rtl' }, - 'uz-UZ': { label: 'O‘zbekcha', dateLocale: uz }, 'vi-VN': { label: 'Tiếng Việt', dateLocale: vi }, 'zh-CN': { label: '中文', dateLocale: zhCN }, 'zh-TW': { label: '中文(繁體)', dateLocale: zhTW }, diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts index 220987c79..cf7306e94 100644 --- a/src/lib/prisma.ts +++ b/src/lib/prisma.ts @@ -1,7 +1,6 @@ import debug from 'debug'; -import { PrismaPg } from '@prisma/adapter-pg'; -import { readReplicas } from '@prisma/extension-read-replicas'; import { PrismaClient } from '@/generated/prisma/client'; +import { UmamiPrismaClient } from '@umami/prisma-client'; import { SESSION_COLUMNS, OPERATORS, DEFAULT_PAGE_SIZE, FILTER_COLUMNS } from './constants'; import { QueryOptions, QueryFilters, Operator } from './types'; import { filtersObjectToArray } from './params'; @@ -10,15 +9,6 @@ const log = debug('umami:prisma'); const PRISMA = 'prisma'; -const PRISMA_LOG_OPTIONS = { - log: [ - { - emit: 'event' as const, - level: 'query' as const, - }, - ], -}; - const DATE_FORMATS = { minute: 'YYYY-MM-DD HH24:MI:00', hour: 'YYYY-MM-DD HH24:00:00', @@ -291,47 +281,18 @@ function getClient() { return null; } - const url = process.env.DATABASE_URL; - const replicaUrl = process.env.DATABASE_REPLICA_URL; - const logQuery = process.env.LOG_QUERY; - - const connectionUrl = new URL(url); - const schema = connectionUrl.searchParams.get('schema') ?? undefined; - - const adapter = new PrismaPg({ connectionString: url.toString() }, { schema }); - - const prisma = new PrismaClient({ - adapter, - errorFormat: 'pretty', - ...(logQuery ? PRISMA_LOG_OPTIONS : {}), + const prisma = new UmamiPrismaClient({ + url: process.env.DATABASE_URL, + prismaClient: PrismaClient, + logQuery: !!process.env.LOG_QUERY, + replicaUrl: process.env.DATABASE_REPLICA_URL, }); - if (replicaUrl) { - const replicaAdapter = new PrismaPg({ connectionString: replicaUrl.toString() }, { schema }); - - const replicaClient = new PrismaClient({ - adapter: replicaAdapter, - ...(logQuery ? PRISMA_LOG_OPTIONS : {}), - }); - - prisma.$extends( - readReplicas({ - replicas: [replicaClient], - }), - ); - } - - if (logQuery) { - prisma.$on('query' as never, log); - } - - log('Prisma initialized'); - if (!globalThis[PRISMA]) { - globalThis[PRISMA] = prisma; + globalThis[PRISMA] = prisma.client; } - return prisma; + return prisma.client; } const client: PrismaClient = globalThis[PRISMA] || getClient();