From 4c88a97698d3eeccfffa50b19d312238bcd189ac Mon Sep 17 00:00:00 2001 From: Ivan Gnusarkov Date: Tue, 18 Jun 2024 14:10:35 +0700 Subject: [PATCH 01/26] added error message when db connection check fails --- scripts/check-db.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/check-db.js b/scripts/check-db.js index 757843ac..cdfeafa3 100644 --- a/scripts/check-db.js +++ b/scripts/check-db.js @@ -44,7 +44,7 @@ async function checkConnection() { success('Database connection successful.'); } catch (e) { - throw new Error('Unable to connect to the database.'); + throw new Error('Unable to connect to the database: ' + e.message); } } From 84e670858cb5d645cd5826159068391f92fca8ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=A2=E6=9D=A1?= <2959393+ccbikai@users.noreply.github.com> Date: Mon, 24 Jun 2024 19:40:04 +0800 Subject: [PATCH 02/26] Update Chinesi(zh-CN) translations --- src/lang/zh-CN.json | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index bcdd3612..6eb49fcf 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -24,12 +24,12 @@ "label.cities": "市/县", "label.city": "市/县", "label.clear-all": "清除全部", - "label.compare": "Compare", + "label.compare": "对比", "label.confirm": "确认", "label.confirm-password": "确认密码", "label.contains": "包含", "label.continue": "继续", - "label.count": "Count", + "label.count": "数量", "label.countries": "国家/地区", "label.country": "国家/地区", "label.create": "创建", @@ -38,7 +38,7 @@ "label.create-user": "创建用户", "label.created": "已创建", "label.created-by": "创建者", - "label.current": "Current", + "label.current": "当前", "label.current-password": "目前密码", "label.custom-range": "自定义时间段", "label.dashboard": "仪表板", @@ -65,12 +65,12 @@ "label.edit-dashboard": "编辑仪表板", "label.edit-member": "编辑成员", "label.enable-share-url": "启用共享链接", - "label.end-step": "End Step", - "label.entry": "Entry URL", + "label.end-step": "最后一步", + "label.entry": "首次访问 URL", "label.event": "事件", "label.event-data": "事件数据", "label.events": "行为类别", - "label.exit": "Exit URL", + "label.exit": "退出 URL", "label.false": "否", "label.field": "字段", "label.fields": "字段", @@ -80,13 +80,13 @@ "label.filters": "筛选", "label.funnel": "分析", "label.funnel-description": "了解用户的转换率和退出率。", - "label.goal": "Goal", - "label.goals": "Goals", - "label.goals-description": "Track your goals for pageviews and events.", + "label.goal": "目标", + "label.goals": "目标", + "label.goals-description": "追踪您的页面浏览量和事件目标。", "label.greater-than": "大于", "label.greater-than-equals": "大于或等于", - "label.host": "Host", - "label.hosts": "Hosts", + "label.host": "主机", + "label.hosts": "主机", "label.insights": "见解", "label.insights-description": "通过使用筛选器和划分时间段来更深入地研究数据。", "label.is": "等于", @@ -95,8 +95,8 @@ "label.is-set": "已设置", "label.join": "加入", "label.join-team": "加入团队", - "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey": "轨迹", + "label.journey-description": "了解用户如何浏览您网站的哪些页面。", "label.language": "语言", "label.languages": "语言", "label.laptop": "笔记本", @@ -110,7 +110,7 @@ "label.login": "登录", "label.logout": "退出", "label.manage": "管理", - "label.manager": "Manager", + "label.manager": "管理者", "label.max": "最大", "label.member": "成员", "label.members": "成员", @@ -123,7 +123,7 @@ "label.new-password": "新密码", "label.none": "无", "label.number-of-records": "{x} {x, plural, one {record} other {records}}", - "label.ok": "OK", + "label.ok": "好的", "label.os": "操作系统", "label.overview": "概览", "label.owner": "所有者", @@ -133,11 +133,11 @@ "label.pages": "网页", "label.password": "密码", "label.powered-by": "由 {name} 提供支持", - "label.previous": "Previous", - "label.previous-period": "Previous period", - "label.previous-year": "Previous year", + "label.previous": "之前", + "label.previous-period": "前一周期", + "label.previous-year": "前一年", "label.profile": "个人资料", - "label.property": "Property", + "label.property": "属性", "label.queries": "查询", "label.query": "查询", "label.query-parameters": "查询参数", @@ -169,13 +169,13 @@ "label.settings": "设置", "label.share-url": "共享链接", "label.single-day": "单日", - "label.start-step": "Start Step", + "label.start-step": "第一步", "label.steps": "步骤", "label.sum": "总和", "label.tablet": "平板", "label.team": "团队", "label.team-id": "团队 ID", - "label.team-manager": "Team manager", + "label.team-manager": "团队管理", "label.team-member": "团队成员", "label.team-name": "团队名称", "label.team-owner": "团队所有者", @@ -225,7 +225,7 @@ "label.yesterday": "昨天", "message.action-confirmation": "在下面的框中输入 {confirmation} 以确认。", "message.active-users": "当前在线 {x} 人", - "message.collected-data": "Collected data", + "message.collected-data": "收集数据", "message.confirm-delete": "你确定要删除 {target} 吗?", "message.confirm-leave": "你确定要离开 {target} 吗?", "message.confirm-remove": "您确定要移除 {target} ?", From 43f231eca4d631fe22ea3e4e0b3a8e646d31da7f Mon Sep 17 00:00:00 2001 From: Yannick Decat <17177411+mho22@users.noreply.github.com> Date: Tue, 25 Jun 2024 15:33:19 +0200 Subject: [PATCH 03/26] Updated start-env with new NextStartOptions Corrected error with port and hostname argument and removed unneeded array. --- scripts/start-env.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/start-env.js b/scripts/start-env.js index e9fe2a4b..a2f2b43f 100644 --- a/scripts/start-env.js +++ b/scripts/start-env.js @@ -2,7 +2,6 @@ require('dotenv').config(); const cli = require('next/dist/cli/next-start'); cli.nextStart({ - '--port': process.env.PORT || 3000, - '--hostname': process.env.HOSTNAME || '0.0.0.0', - _: [], + 'port': process.env.PORT || 3000, + 'hostname': process.env.HOSTNAME || '0.0.0.0' }); From e6d4c536aed693f0fa9c32d6cff7df2855a66a2a Mon Sep 17 00:00:00 2001 From: Gerard Nesta Date: Thu, 27 Jun 2024 12:35:14 +0200 Subject: [PATCH 04/26] Update ca-ES.json --- src/lang/ca-ES.json | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/lang/ca-ES.json b/src/lang/ca-ES.json index 5824492c..219fa980 100644 --- a/src/lang/ca-ES.json +++ b/src/lang/ca-ES.json @@ -24,12 +24,12 @@ "label.cities": "Ciutats", "label.city": "Ciutat", "label.clear-all": "Netejar tot", - "label.compare": "Compare", + "label.compare": "Comparar", "label.confirm": "Confirmar", "label.confirm-password": "Confirma la contrasenya", "label.contains": "Conté", "label.continue": "Continuar", - "label.count": "Count", + "label.count": "Recompte", "label.countries": "Països", "label.country": "País", "label.create": "Crear", @@ -38,7 +38,7 @@ "label.create-user": "Crear usuari", "label.created": "Creat", "label.created-by": "Creat Per", - "label.current": "Current", + "label.current": "Actual", "label.current-password": "Contrasenya actual", "label.custom-range": "Rang personalitzat", "label.dashboard": "Panell", @@ -65,12 +65,12 @@ "label.edit-dashboard": "Edita panell", "label.edit-member": "Edita membre", "label.enable-share-url": "Activa l'enllaç per compartir", - "label.end-step": "End Step", - "label.entry": "Entry URL", + "label.end-step": "Pas Final", + "label.entry": "URL d'entrada", "label.event": "Esdeveniment", "label.event-data": "Dades de l'esdeveniment", "label.events": "Esdeveniments", - "label.exit": "Exit URL", + "label.exit": "URL de sortida", "label.false": "Fals", "label.field": "Camp", "label.fields": "Camps", @@ -80,13 +80,13 @@ "label.filters": "Filtres", "label.funnel": "Embut", "label.funnel-description": "Entengui la taxa de conversió i abandonament dels usuaris.", - "label.goal": "Goal", - "label.goals": "Goals", - "label.goals-description": "Track your goals for pageviews and events.", + "label.goal": "Meta", + "label.goals": "Metes", + "label.goals-description": "Feu un seguiment de les seves metes per a pàgines vistes i esdeveniments.", "label.greater-than": "Més gran que", "label.greater-than-equals": "Més gran que o igual a", - "label.host": "Host", - "label.hosts": "Hosts", + "label.host": "Amfitrió", + "label.hosts": "Amfitrions", "label.insights": "Insights", "label.insights-description": "Aprofundeixi en les seves dades mitjançant l'ús de segments i filtres.", "label.is": "És igual a", @@ -95,8 +95,8 @@ "label.is-set": "Està establert", "label.join": "Unir", "label.join-team": "Unir-se al equip", - "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey": "Trajecte", + "label.journey-description": "Entengui com naveguen els usuaris pel seu lloc web.", "label.language": "Idioma", "label.languages": "Idiomes", "label.laptop": "Portàtil", @@ -122,7 +122,7 @@ "label.name": "Nom", "label.new-password": "Contrasenya nova", "label.none": "Cap", - "label.number-of-records": "{x} {x, plural, one {record} other {records}}", + "label.number-of-records": "{x} {x, plural, one {registre} other {registres}}", "label.ok": "OK", "label.os": "SO", "label.overview": "Resum", @@ -133,11 +133,11 @@ "label.pages": "Pàgines", "label.password": "Contrasenya", "label.powered-by": "Funciona amb {name}", - "label.previous": "Previous", - "label.previous-period": "Previous period", - "label.previous-year": "Previous year", + "label.previous": "Anterior", + "label.previous-period": "Període anterior", + "label.previous-year": "Any anterior", "label.profile": "Perfil", - "label.property": "Property", + "label.property": "Propietat", "label.queries": "Consultes", "label.query": "Consulta", "label.query-parameters": "Paràmetres de consulta", @@ -169,7 +169,7 @@ "label.settings": "Configuració", "label.share-url": "Enllaç per compartir", "label.single-day": "Un sol dia", - "label.start-step": "Start Step", + "label.start-step": "Pas inicial", "label.steps": "Pasos", "label.sum": "Suma", "label.tablet": "Tauleta", @@ -214,7 +214,7 @@ "label.view-details": "Veure els detalls", "label.view-only": "Només veure", "label.views": "Vistes", - "label.views-per-visit": "Views per visit", + "label.views-per-visit": "Vistes per visita", "label.visit-duration": "Temps mitjà de visita", "label.visitors": "Visitants", "label.visits": "Visites", @@ -225,7 +225,7 @@ "label.yesterday": "Ahir", "message.action-confirmation": "Escrigui {confirmation} al cuadre inferior per confirmar.", "message.active-users": "{x} {x, plural, one {visitant actual} other {visitants actuals}}", - "message.collected-data": "Collected data", + "message.collected-data": "Dades recol·lectades", "message.confirm-delete": "Segur que vol esborrar {target}?", "message.confirm-leave": "Segur que vol abandonar {target}?", "message.confirm-remove": "Segur que vol eliminar {target}?", From 5fc596ff411116491f4abbae93522d8881e159f4 Mon Sep 17 00:00:00 2001 From: Gerard Nesta Date: Thu, 27 Jun 2024 12:39:21 +0200 Subject: [PATCH 05/26] Update ca-ES.json --- src/lang/ca-ES.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/ca-ES.json b/src/lang/ca-ES.json index 219fa980..dae977fc 100644 --- a/src/lang/ca-ES.json +++ b/src/lang/ca-ES.json @@ -263,5 +263,5 @@ "message.user-deleted": "Usuari eliminat.", "message.viewed-page": "Pàgina vista", "message.visitor-log": "Visitant de {country} usant {browser} a {os} {device}", - "message.visitors-dropped-off": "Els visitants han sortit" + "message.visitors-dropped-off": "Visitants han sortit" } From a124b698be0af196b00a71133b84efb39808c60c Mon Sep 17 00:00:00 2001 From: mommocmoc Date: Fri, 28 Jun 2024 01:57:44 +0900 Subject: [PATCH 06/26] Update ko-KR.json Update Korean translation --- src/lang/ko-KR.json | 384 ++++++++++++++++++++++---------------------- 1 file changed, 192 insertions(+), 192 deletions(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index c1a30933..b3bee85f 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -1,267 +1,267 @@ { - "label.access-code": "Access code", + "label.access-code": "액세스 코드", "label.actions": "액션", - "label.activity-log": "Activity log", - "label.add": "Add", - "label.add-description": "Add description", - "label.add-member": "Add member", - "label.add-step": "Add step", + "label.activity-log": "활동 기록", + "label.add": "추가", + "label.add-description": "설명 추가", + "label.add-member": "멤버 추가", + "label.add-step": "단계 추가", "label.add-website": "웹사이트 추가", "label.admin": "관리자", - "label.after": "After", + "label.after": "이후", "label.all": "전체", - "label.all-time": "All time", - "label.analytics": "Analytics", - "label.average": "Average", + "label.all-time": "전체 시간", + "label.analytics": "분석", + "label.average": "평균", "label.back": "뒤로", - "label.before": "Before", + "label.before": "이전", "label.bounce-rate": "이탈률", - "label.breakdown": "Breakdown", - "label.browser": "Browser", + "label.breakdown": "세부 사항", + "label.browser": "브라우저", "label.browsers": "브라우저", "label.cancel": "취소", - "label.change-password": "비밀번호 변경", - "label.cities": "Cities", - "label.city": "City", - "label.clear-all": "Clear all", - "label.compare": "Compare", - "label.confirm": "Confirm", + "label.change-password": "비밀번호 변경하기", + "label.cities": "도시", + "label.city": "도시", + "label.clear-all": "모두 지우기", + "label.compare": "비교", + "label.confirm": "확인", "label.confirm-password": "비밀번호 확인", - "label.contains": "Contains", - "label.continue": "Continue", - "label.count": "Count", + "label.contains": "포함", + "label.continue": "계속", + "label.count": "수", "label.countries": "국가", - "label.country": "Country", - "label.create": "Create", - "label.create-report": "Create report", - "label.create-team": "Create team", - "label.create-user": "Create user", - "label.created": "Created", - "label.created-by": "Created By", - "label.current": "Current", + "label.country": "국가", + "label.create": "생성", + "label.create-report": "리포트 생성", + "label.create-team": "팀 생성", + "label.create-user": "사용자 생성", + "label.created": "생성됨", + "label.created-by": "작성자", + "label.current": "현재", "label.current-password": "현재 비밀번호", "label.custom-range": "범위 지정", "label.dashboard": "대시보드", - "label.data": "Data", - "label.date": "Date", + "label.data": "데이터", + "label.date": "날짜", "label.date-range": "날짜 범위", - "label.day": "Day", + "label.day": "일", "label.default-date-range": "기본 날짜 범위", "label.delete": "삭제", - "label.delete-report": "Delete report", - "label.delete-team": "Delete team", - "label.delete-user": "Delete user", + "label.delete-report": "리포트 삭제", + "label.delete-team": "팀 삭제", + "label.delete-user": "사용자 삭제", "label.delete-website": "웹사이트 삭제", - "label.description": "Description", + "label.description": "설명", "label.desktop": "데스크탑", - "label.details": "Details", - "label.device": "Device", + "label.details": "세부 사항", + "label.device": "기기", "label.devices": "기기", "label.dismiss": "무시하기", - "label.does-not-contain": "Does not contain", + "label.does-not-contain": "포함하지 않음", "label.domain": "도메인", - "label.dropoff": "Dropoff", + "label.dropoff": "이탈", "label.edit": "편집", - "label.edit-dashboard": "Edit dashboard", - "label.edit-member": "Edit member", + "label.edit-dashboard": "대시보드 편집", + "label.edit-member": "회원 편집", "label.enable-share-url": "URL 공유 활성화", - "label.end-step": "End Step", - "label.entry": "Entry URL", - "label.event": "Event", - "label.event-data": "Event data", + "label.end-step": "종료 단계", + "label.entry": "입장 URL", + "label.event": "이벤트", + "label.event-data": "이벤트 데이터", "label.events": "이벤트", - "label.exit": "Exit URL", - "label.false": "False", - "label.field": "Field", - "label.fields": "Fields", - "label.filter": "Filter", + "label.exit": "퇴장 URL", + "label.false": "거짓", + "label.field": "필드", + "label.fields": "필드", + "label.filter": "필터", "label.filter-combined": "합쳐서 보기", "label.filter-raw": "전체 보기", - "label.filters": "Filters", - "label.funnel": "Funnel", - "label.funnel-description": "Understand the conversion and drop-off rate of users.", - "label.goal": "Goal", - "label.goals": "Goals", - "label.goals-description": "Track your goals for pageviews and events.", - "label.greater-than": "Greater than", - "label.greater-than-equals": "Greater than or equals", - "label.host": "Host", - "label.hosts": "Hosts", - "label.insights": "Insights", - "label.insights-description": "Dive deeper into your data by using segments and filters.", - "label.is": "Is", - "label.is-not": "Is not", - "label.is-not-set": "Is not set", - "label.is-set": "Is set", - "label.join": "Join", - "label.join-team": "Join team", - "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", - "label.language": "Language", - "label.languages": "Languages", + "label.filters": "필터", + "label.funnel": "퍼널", + "label.funnel-description": "사용자 전환율 및 이탈률을 살펴보세요.", + "label.goal": "목표", + "label.goals": "목표", + "label.goals-description": "페이지뷰 및 이벤트 목표를 추적합니다.", + "label.greater-than": "이상", + "label.greater-than-equals": "이상", + "label.host": "호스트", + "label.hosts": "호스트", + "label.insights": "인사이트", + "label.insights-description": "세그먼트 및 필터를 사용하여 데이터를 더 자세히 살펴보세요.", + "label.is": "해당", + "label.is-not": "해당하지 않음", + "label.is-not-set": "설정되지 않음", + "label.is-set": "설정됨", + "label.join": "가입", + "label.join-team": "팀 가입", + "label.journey": "여정", + "label.journey-description": "사용자가 웹사이트를 탐색하는 경로를 살펴보세요.", + "label.language": "언어", + "label.languages": "언어", "label.laptop": "노트북", - "label.last-days": "최근 {x} 일간", + "label.last-days": "최근 {x} 일", "label.last-hours": "최근 {x} 시간", - "label.last-months": "Last {x} months", - "label.leave": "Leave", - "label.leave-team": "Leave team", - "label.less-than": "Less than", - "label.less-than-equals": "Less than or equals", + "label.last-months": "최근 {x} 개월", + "label.leave": "떠나기", + "label.leave-team": "팀 떠나기", + "label.less-than": "미만", + "label.less-than-equals": "이하", "label.login": "로그인", "label.logout": "로그아웃", - "label.manage": "Manage", - "label.manager": "Manager", - "label.max": "Max", - "label.member": "Member", - "label.members": "Members", - "label.min": "Min", + "label.manage": "관리", + "label.manager": "관리자", + "label.max": "최대", + "label.member": "멤버", + "label.members": "멤버", + "label.min": "최소", "label.mobile": "모바일", "label.more": "더 보기", - "label.my-account": "My account", - "label.my-websites": "My websites", + "label.my-account": "내 계정", + "label.my-websites": "내 웹사이트", "label.name": "이름", "label.new-password": "새 비밀번호", - "label.none": "None", - "label.number-of-records": "{x} {x, plural, one {record} other {records}}", - "label.ok": "OK", - "label.os": "OS", - "label.overview": "Overview", - "label.owner": "Owner", - "label.page-of": "Page {current} of {total}", - "label.page-views": "페이지 뷰(PV)", - "label.pageTitle": "Page title", + "label.none": "없음", + "label.number-of-records": "{x} {x, plural, one {record} other {레코드}}", + "label.ok": "확인", + "label.os": "운영체제", + "label.overview": "개요", + "label.owner": "소유자", + "label.page-of": "{total} 중 {current} 페이지", + "label.page-views": "페이지 뷰", + "label.pageTitle": "페이지 제목", "label.pages": "페이지", "label.password": "비밀번호", "label.powered-by": "이 시스템은 {name}에서 구동되고 있습니다.", - "label.previous": "Previous", - "label.previous-period": "Previous period", - "label.previous-year": "Previous year", + "label.previous": "이전", + "label.previous-period": "이전 기간", + "label.previous-year": "이전 연도", "label.profile": "프로필", - "label.property": "Property", - "label.queries": "Queries", - "label.query": "Query", - "label.query-parameters": "Query parameters", + "label.property": "속성", + "label.queries": "쿼리", + "label.query": "쿼리", + "label.query-parameters": "쿼리 매개변수", "label.realtime": "실시간", - "label.referrer": "Referrer", + "label.referrer": "리퍼러", "label.referrers": "리퍼러", "label.refresh": "새로고침", - "label.regenerate": "Regenerate", - "label.region": "Region", - "label.regions": "Regions", - "label.remove": "Remove", - "label.remove-member": "Remove member", - "label.reports": "Reports", + "label.regenerate": "다시 생성", + "label.region": "지역", + "label.regions": "지역", + "label.remove": "제거", + "label.remove-member": "멤버 제거", + "label.reports": "리포트", "label.required": "필수", "label.reset": "리셋", - "label.reset-website": "Reset statistics", - "label.retention": "Retention", - "label.retention-description": "Measure your website stickiness by tracking how often users return.", - "label.role": "Role", - "label.run-query": "Run query", + "label.reset-website": "웹사이트 초기화", + "label.retention": "리텐션", + "label.retention-description": "사용자가 얼마나 자주 돌아오는지를 추적하여 웹사이트의 리텐션을 측정하십시오.", + "label.role": "역할", + "label.run-query": "쿼리 실행", "label.save": "저장", - "label.screens": "Screens", - "label.search": "Search", - "label.select": "Select", - "label.select-date": "Select date", - "label.select-role": "Select role", - "label.select-website": "Select website", - "label.sessions": "Sessions", + "label.screens": "스크린", + "label.search": "검색", + "label.select": "선택", + "label.select-date": "날짜 선택", + "label.select-role": "역할 선택", + "label.select-website": "웹사이트 선택", + "label.sessions": "세션", "label.settings": "설정", "label.share-url": "공유 URL", "label.single-day": "하루", - "label.start-step": "Start Step", - "label.steps": "Steps", - "label.sum": "Sum", + "label.start-step": "시작 단계", + "label.steps": "단계", + "label.sum": "합계", "label.tablet": "태블릿", - "label.team": "Team", - "label.team-id": "Team ID", - "label.team-manager": "Team manager", - "label.team-member": "Team member", - "label.team-name": "Team name", - "label.team-owner": "Team owner", - "label.team-view-only": "Team view only", - "label.team-websites": "Team websites", - "label.teams": "Teams", - "label.theme": "Theme", + "label.team": "팀", + "label.team-id": "팀 ID", + "label.team-manager": "팀 관리자", + "label.team-member": "팀 멤버", + "label.team-name": "팀 이름", + "label.team-owner": "팀 소유자", + "label.team-view-only": "팀 보기 전용", + "label.team-websites": "팀 웹사이트", + "label.teams": "팀", + "label.theme": "테마", "label.this-month": "이번 달", "label.this-week": "이번 주", "label.this-year": "올해", "label.timezone": "표준 시간대", - "label.title": "Title", + "label.title": "제목", "label.today": "오늘", - "label.toggle-charts": "Toggle charts", - "label.total": "Total", - "label.total-records": "Total records", + "label.toggle-charts": "차트 전환", + "label.total": "합계", + "label.total-records": "총 레코드", "label.tracking-code": "추적 코드", - "label.transfer": "Transfer", - "label.transfer-website": "Transfer website", - "label.true": "True", - "label.type": "Type", - "label.unique": "Unique", + "label.transfer": "전송", + "label.transfer-website": "웹사이트 전송", + "label.true": "참", + "label.type": "유형", + "label.unique": "고유", "label.unique-visitors": "순방문자(UV)", "label.unknown": "알 수 없음", - "label.untitled": "Untitled", - "label.update": "Update", + "label.untitled": "제목 없음", + "label.update": "업데이트", "label.url": "URL", - "label.urls": "URLs", - "label.user": "User", + "label.urls": "URL", + "label.user": "사용자", "label.username": "사용자명", - "label.users": "Users", + "label.users": "사용자", "label.utm": "UTM", - "label.utm-description": "Track your campaigns through UTM parameters.", - "label.value": "Value", - "label.view": "View", + "label.utm-description": "UTM 매개변수를 통해 캠페인을 추적합니다.", + "label.value": "값", + "label.view": "보기", "label.view-details": "상세보기", - "label.view-only": "View only", + "label.view-only": "보기 전용", "label.views": "조회수", - "label.views-per-visit": "Views per visit", + "label.views-per-visit": "방문당 조회수", "label.visit-duration": "평균 방문 시간", "label.visitors": "방문객", - "label.visits": "Visits", - "label.website": "Website", - "label.website-id": "Website ID", + "label.visits": "방문", + "label.website": "웹사이트", + "label.website-id": "웹사이트 ID", "label.websites": "웹사이트", - "label.window": "Window", - "label.yesterday": "Yesterday", - "message.action-confirmation": "Type {confirmation} in the box below to confirm.", + "label.window": "창", + "label.yesterday": "어제", + "message.action-confirmation": "확인을 위해 아래 상자에 {confirmation}을(를) 입력하십시오.", "message.active-users": "{x}명의 사용자가 보는 중입니다.", - "message.collected-data": "Collected data", + "message.collected-data": "수집된 데이터", "message.confirm-delete": "{target}을(를) 삭제하시겠습니까?", - "message.confirm-leave": "Are you sure you want to leave {target}?", - "message.confirm-remove": "Are you sure you want to remove {target}?", - "message.confirm-reset": "Are your sure you want to reset {target}'s statistics?", - "message.delete-team-warning": "Deleting a team will also delete all team websites.", - "message.delete-website-warning": "관련된 모든 데이터도 삭제됩니다.", + "message.confirm-leave": "{target}을(를) 떠나시겠습니까?", + "message.confirm-remove": "{target}을(를) 제거하시겠습니까?", + "message.confirm-reset": "{target}을(를) 초기화하시겠습니까?", + "message.delete-team-warning": "팀을 삭제하면 팀에 등록된 모든 웹사이트도 삭제됩니다.", + "message.delete-website-warning": "관련된 모든 데이터가 삭제됩니다.", "message.error": "오류가 발생하였습니다.", - "message.event-log": "{event} on {url}", + "message.event-log": "{event} - {url}", "message.go-to-settings": "설정으로 이동", - "message.incorrect-username-password": "사용자 이름/비밀번호가 잘못되었습니다..", + "message.incorrect-username-password": "사용자 이름/비밀번호가 잘못되었습니다.", "message.invalid-domain": "잘못된 도메인", - "message.min-password-length": "Minimum length of {n} characters", - "message.new-version-available": "A new version of Umami {version} is available!", + "message.min-password-length": "최소 길이는 {n}자입니다", + "message.new-version-available": "새 버전이 사용 가능합니다! - Umami {version}", "message.no-data-available": "사용 가능한 데이터가 없습니다.", - "message.no-event-data": "No event data is available.", + "message.no-event-data": "사용 가능한 이벤트 데이터가 없습니다.", "message.no-match-password": "비밀번호가 일치하지 않음", - "message.no-results-found": "No results were found.", - "message.no-team-websites": "This team does not have any websites.", - "message.no-teams": "You have not created any teams.", - "message.no-users": "There are no users.", - "message.no-websites-configured": "구성된 웹 사이트가 없습니다.", + "message.no-results-found": "결과를 찾을 수 없습니다.", + "message.no-team-websites": "이 팀에는 웹사이트가 없습니다.", + "message.no-teams": "생성된 팀이 없습니다.", + "message.no-users": "사용자가 없습니다.", + "message.no-websites-configured": "설정된 웹사이트가 없습니다.", "message.page-not-found": "페이지를 찾을 수 없습니다.", - "message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.", - "message.reset-website-warning": "All statistics for this website will be deleted, but your tracking code will remain intact.", + "message.reset-website": "이 웹사이트를 초기화하려면, 아래 상자에 {confirmation}을(를) 입력하십시오.", + "message.reset-website-warning": "이 웹사이트의 모든 통계가 삭제되지만 설정은 그대로 유지됩니다.", "message.saved": "성공적으로 저장되었습니다.", - "message.share-url": "이것은 {target}의 공개적으로 공유된 URL입니다.", - "message.team-already-member": "You are already a member of the team.", - "message.team-not-found": "Team not found.", - "message.team-websites-info": "Websites can be viewed by anyone on the team.", - "message.tracking-code": "추적 코드", - "message.transfer-team-website-to-user": "Transfer this website to your account?", - "message.transfer-user-website-to-team": "Select the team to transfer this website to.", - "message.transfer-website": "Transfer website ownership to your account or another team.", - "message.triggered-event": "Triggered event", - "message.user-deleted": "User deleted.", - "message.viewed-page": "Viewed page", - "message.visitor-log": "{os} {device}에서 {browser}을(를) 사용하는 {country}의 방문자", - "message.visitors-dropped-off": "Visitors dropped off" + "message.share-url": "아래 링크를 통해 웹사이트의 통계를 누구나 볼 수 있습니다.", + "message.team-already-member": "이미 팀의 회원입니다.", + "message.team-not-found": "팀을 찾을 수 없습니다.", + "message.team-websites-info": "웹사이트는 팀의 누구나 볼 수 있습니다.", + "message.tracking-code": "이 웹사이트의 통계를 추적하려면, 다음 코드를 HTML의 ... 섹션에 추가하십시오.", + "message.transfer-team-website-to-user": "이 웹사이트를 당신의 계정으로 전송하시겠습니까?", + "message.transfer-user-website-to-team": "이 웹사이트를 전송받을 팀을 선택하십시오.", + "message.transfer-website": "웹사이트 소유권을 계정이나 다른 팀으로 전송합니다.", + "message.triggered-event": "트리거된 이벤트", + "message.user-deleted": "사용자가 삭제되었습니다.", + "message.viewed-page": "페이지 조회", + "message.visitor-log": "{country}의 {browser} 브라우저를 사용하는 {os} {device} 방문자", + "message.visitors-dropped-off": "방문자가 이탈했습니다" } From caaa87c0a749474cb4cdb4f01d7991611ae1e31d Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Thu, 27 Jun 2024 20:12:32 -0700 Subject: [PATCH 07/26] Updated packages and lang files. --- package.json | 8 +- public/intl/messages/ca-ES.json | 46 ++-- public/intl/messages/ko-KR.json | 472 ++++++++++++++++---------------- public/intl/messages/zh-CN.json | 44 +-- yarn.lock | 200 +++++++------- 5 files changed, 380 insertions(+), 390 deletions(-) diff --git a/package.json b/package.json index d002388f..9ef6f738 100644 --- a/package.json +++ b/package.json @@ -64,9 +64,9 @@ ".next/cache" ], "dependencies": { - "@clickhouse/client": "^1.0.2", + "@clickhouse/client": "^1.2.0", "@fontsource/inter": "^4.5.15", - "@prisma/client": "5.14.0", + "@prisma/client": "5.16.1", "@prisma/extension-read-replicas": "^0.3.0", "@react-spring/web": "^9.7.3", "@tanstack/react-query": "^5.28.6", @@ -98,11 +98,11 @@ "maxmind": "^4.3.6", "md5": "^2.3.0", "moment-timezone": "^0.5.35", - "next": "14.2.3", + "next": "14.2.4", "next-basics": "^0.39.0", "node-fetch": "^3.2.8", "npm-run-all": "^4.1.5", - "prisma": "5.14.0", + "prisma": "5.16.1", "react": "^18.2.0", "react-basics": "^0.123.0", "react-beautiful-dnd": "^13.1.0", diff --git a/public/intl/messages/ca-ES.json b/public/intl/messages/ca-ES.json index f9b63535..dc7b27a8 100644 --- a/public/intl/messages/ca-ES.json +++ b/public/intl/messages/ca-ES.json @@ -152,7 +152,7 @@ "label.compare": [ { "type": 0, - "value": "Compare" + "value": "Comparar" } ], "label.confirm": [ @@ -182,7 +182,7 @@ "label.count": [ { "type": 0, - "value": "Count" + "value": "Recompte" } ], "label.countries": [ @@ -236,7 +236,7 @@ "label.current": [ { "type": 0, - "value": "Current" + "value": "Actual" } ], "label.current-password": [ @@ -398,13 +398,13 @@ "label.end-step": [ { "type": 0, - "value": "End Step" + "value": "Pas Final" } ], "label.entry": [ { "type": 0, - "value": "Entry URL" + "value": "URL d'entrada" } ], "label.event": [ @@ -428,7 +428,7 @@ "label.exit": [ { "type": 0, - "value": "Exit URL" + "value": "URL de sortida" } ], "label.false": [ @@ -488,19 +488,19 @@ "label.goal": [ { "type": 0, - "value": "Goal" + "value": "Meta" } ], "label.goals": [ { "type": 0, - "value": "Goals" + "value": "Metes" } ], "label.goals-description": [ { "type": 0, - "value": "Track your goals for pageviews and events." + "value": "Feu un seguiment de les seves metes per a pàgines vistes i esdeveniments." } ], "label.greater-than": [ @@ -518,13 +518,13 @@ "label.host": [ { "type": 0, - "value": "Host" + "value": "Amfitrió" } ], "label.hosts": [ { "type": 0, - "value": "Hosts" + "value": "Amfitrions" } ], "label.insights": [ @@ -578,13 +578,13 @@ "label.journey": [ { "type": 0, - "value": "Journey" + "value": "Trajecte" } ], "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Entengui com naveguen els usuaris pel seu lloc web." } ], "label.language": [ @@ -777,7 +777,7 @@ "value": [ { "type": 0, - "value": "record" + "value": "registre" } ] }, @@ -785,7 +785,7 @@ "value": [ { "type": 0, - "value": "records" + "value": "registres" } ] } @@ -874,19 +874,19 @@ "label.previous": [ { "type": 0, - "value": "Previous" + "value": "Anterior" } ], "label.previous-period": [ { "type": 0, - "value": "Previous period" + "value": "Període anterior" } ], "label.previous-year": [ { "type": 0, - "value": "Previous year" + "value": "Any anterior" } ], "label.profile": [ @@ -898,7 +898,7 @@ "label.property": [ { "type": 0, - "value": "Property" + "value": "Propietat" } ], "label.queries": [ @@ -1090,7 +1090,7 @@ "label.start-step": [ { "type": 0, - "value": "Start Step" + "value": "Pas inicial" } ], "label.steps": [ @@ -1360,7 +1360,7 @@ "label.views-per-visit": [ { "type": 0, - "value": "Views per visit" + "value": "Vistes per visita" } ], "label.visit-duration": [ @@ -1462,7 +1462,7 @@ "message.collected-data": [ { "type": 0, - "value": "Collected data" + "value": "Dades recol·lectades" } ], "message.confirm-delete": [ @@ -1790,7 +1790,7 @@ "message.visitors-dropped-off": [ { "type": 0, - "value": "Els visitants han sortit" + "value": "Visitants han sortit" } ] } diff --git a/public/intl/messages/ko-KR.json b/public/intl/messages/ko-KR.json index da196a3c..deab1408 100644 --- a/public/intl/messages/ko-KR.json +++ b/public/intl/messages/ko-KR.json @@ -2,7 +2,7 @@ "label.access-code": [ { "type": 0, - "value": "Access code" + "value": "액세스 코드" } ], "label.actions": [ @@ -14,31 +14,31 @@ "label.activity-log": [ { "type": 0, - "value": "Activity log" + "value": "활동 기록" } ], "label.add": [ { "type": 0, - "value": "Add" + "value": "추가" } ], "label.add-description": [ { "type": 0, - "value": "Add description" + "value": "설명 추가" } ], "label.add-member": [ { "type": 0, - "value": "Add member" + "value": "멤버 추가" } ], "label.add-step": [ { "type": 0, - "value": "Add step" + "value": "단계 추가" } ], "label.add-website": [ @@ -56,7 +56,7 @@ "label.after": [ { "type": 0, - "value": "After" + "value": "이후" } ], "label.all": [ @@ -68,19 +68,19 @@ "label.all-time": [ { "type": 0, - "value": "All time" + "value": "전체 시간" } ], "label.analytics": [ { "type": 0, - "value": "Analytics" + "value": "분석" } ], "label.average": [ { "type": 0, - "value": "Average" + "value": "평균" } ], "label.back": [ @@ -92,7 +92,7 @@ "label.before": [ { "type": 0, - "value": "Before" + "value": "이전" } ], "label.bounce-rate": [ @@ -104,13 +104,13 @@ "label.breakdown": [ { "type": 0, - "value": "Breakdown" + "value": "세부 사항" } ], "label.browser": [ { "type": 0, - "value": "Browser" + "value": "브라우저" } ], "label.browsers": [ @@ -128,37 +128,37 @@ "label.change-password": [ { "type": 0, - "value": "비밀번호 변경" + "value": "비밀번호 변경하기" } ], "label.cities": [ { "type": 0, - "value": "Cities" + "value": "도시" } ], "label.city": [ { "type": 0, - "value": "City" + "value": "도시" } ], "label.clear-all": [ { "type": 0, - "value": "Clear all" + "value": "모두 지우기" } ], "label.compare": [ { "type": 0, - "value": "Compare" + "value": "비교" } ], "label.confirm": [ { "type": 0, - "value": "Confirm" + "value": "확인" } ], "label.confirm-password": [ @@ -170,19 +170,19 @@ "label.contains": [ { "type": 0, - "value": "Contains" + "value": "포함" } ], "label.continue": [ { "type": 0, - "value": "Continue" + "value": "계속" } ], "label.count": [ { "type": 0, - "value": "Count" + "value": "수" } ], "label.countries": [ @@ -194,49 +194,49 @@ "label.country": [ { "type": 0, - "value": "Country" + "value": "국가" } ], "label.create": [ { "type": 0, - "value": "Create" + "value": "생성" } ], "label.create-report": [ { "type": 0, - "value": "Create report" + "value": "리포트 생성" } ], "label.create-team": [ { "type": 0, - "value": "Create team" + "value": "팀 생성" } ], "label.create-user": [ { "type": 0, - "value": "Create user" + "value": "사용자 생성" } ], "label.created": [ { "type": 0, - "value": "Created" + "value": "생성됨" } ], "label.created-by": [ { "type": 0, - "value": "Created By" + "value": "작성자" } ], "label.current": [ { "type": 0, - "value": "Current" + "value": "현재" } ], "label.current-password": [ @@ -260,13 +260,13 @@ "label.data": [ { "type": 0, - "value": "Data" + "value": "데이터" } ], "label.date": [ { "type": 0, - "value": "Date" + "value": "날짜" } ], "label.date-range": [ @@ -278,7 +278,7 @@ "label.day": [ { "type": 0, - "value": "Day" + "value": "일" } ], "label.default-date-range": [ @@ -296,19 +296,19 @@ "label.delete-report": [ { "type": 0, - "value": "Delete report" + "value": "리포트 삭제" } ], "label.delete-team": [ { "type": 0, - "value": "Delete team" + "value": "팀 삭제" } ], "label.delete-user": [ { "type": 0, - "value": "Delete user" + "value": "사용자 삭제" } ], "label.delete-website": [ @@ -320,7 +320,7 @@ "label.description": [ { "type": 0, - "value": "Description" + "value": "설명" } ], "label.desktop": [ @@ -332,13 +332,13 @@ "label.details": [ { "type": 0, - "value": "Details" + "value": "세부 사항" } ], "label.device": [ { "type": 0, - "value": "Device" + "value": "기기" } ], "label.devices": [ @@ -356,7 +356,7 @@ "label.does-not-contain": [ { "type": 0, - "value": "Does not contain" + "value": "포함하지 않음" } ], "label.domain": [ @@ -368,7 +368,7 @@ "label.dropoff": [ { "type": 0, - "value": "Dropoff" + "value": "이탈" } ], "label.edit": [ @@ -380,13 +380,13 @@ "label.edit-dashboard": [ { "type": 0, - "value": "Edit dashboard" + "value": "대시보드 편집" } ], "label.edit-member": [ { "type": 0, - "value": "Edit member" + "value": "회원 편집" } ], "label.enable-share-url": [ @@ -398,25 +398,25 @@ "label.end-step": [ { "type": 0, - "value": "End Step" + "value": "종료 단계" } ], "label.entry": [ { "type": 0, - "value": "Entry URL" + "value": "입장 URL" } ], "label.event": [ { "type": 0, - "value": "Event" + "value": "이벤트" } ], "label.event-data": [ { "type": 0, - "value": "Event data" + "value": "이벤트 데이터" } ], "label.events": [ @@ -428,31 +428,31 @@ "label.exit": [ { "type": 0, - "value": "Exit URL" + "value": "퇴장 URL" } ], "label.false": [ { "type": 0, - "value": "False" + "value": "거짓" } ], "label.field": [ { "type": 0, - "value": "Field" + "value": "필드" } ], "label.fields": [ { "type": 0, - "value": "Fields" + "value": "필드" } ], "label.filter": [ { "type": 0, - "value": "Filter" + "value": "필터" } ], "label.filter-combined": [ @@ -470,133 +470,133 @@ "label.filters": [ { "type": 0, - "value": "Filters" + "value": "필터" } ], "label.funnel": [ { "type": 0, - "value": "Funnel" + "value": "퍼널" } ], "label.funnel-description": [ { "type": 0, - "value": "Understand the conversion and drop-off rate of users." + "value": "사용자 전환율 및 이탈률을 살펴보세요." } ], "label.goal": [ { "type": 0, - "value": "Goal" + "value": "목표" } ], "label.goals": [ { "type": 0, - "value": "Goals" + "value": "목표" } ], "label.goals-description": [ { "type": 0, - "value": "Track your goals for pageviews and events." + "value": "페이지뷰 및 이벤트 목표를 추적합니다." } ], "label.greater-than": [ { "type": 0, - "value": "Greater than" + "value": "이상" } ], "label.greater-than-equals": [ { "type": 0, - "value": "Greater than or equals" + "value": "이상" } ], "label.host": [ { "type": 0, - "value": "Host" + "value": "호스트" } ], "label.hosts": [ { "type": 0, - "value": "Hosts" + "value": "호스트" } ], "label.insights": [ { "type": 0, - "value": "Insights" + "value": "인사이트" } ], "label.insights-description": [ { "type": 0, - "value": "Dive deeper into your data by using segments and filters." + "value": "세그먼트 및 필터를 사용하여 데이터를 더 자세히 살펴보세요." } ], "label.is": [ { "type": 0, - "value": "Is" + "value": "해당" } ], "label.is-not": [ { "type": 0, - "value": "Is not" + "value": "해당하지 않음" } ], "label.is-not-set": [ { "type": 0, - "value": "Is not set" + "value": "설정되지 않음" } ], "label.is-set": [ { "type": 0, - "value": "Is set" + "value": "설정됨" } ], "label.join": [ { "type": 0, - "value": "Join" + "value": "가입" } ], "label.join-team": [ { "type": 0, - "value": "Join team" + "value": "팀 가입" } ], "label.journey": [ { "type": 0, - "value": "Journey" + "value": "여정" } ], "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "사용자가 웹사이트를 탐색하는 경로를 살펴보세요." } ], "label.language": [ { "type": 0, - "value": "Language" + "value": "언어" } ], "label.languages": [ { "type": 0, - "value": "Languages" + "value": "언어" } ], "label.laptop": [ @@ -616,7 +616,7 @@ }, { "type": 0, - "value": " 일간" + "value": " 일" } ], "label.last-hours": [ @@ -636,7 +636,7 @@ "label.last-months": [ { "type": 0, - "value": "Last " + "value": "최근 " }, { "type": 1, @@ -644,31 +644,31 @@ }, { "type": 0, - "value": " months" + "value": " 개월" } ], "label.leave": [ { "type": 0, - "value": "Leave" + "value": "떠나기" } ], "label.leave-team": [ { "type": 0, - "value": "Leave team" + "value": "팀 떠나기" } ], "label.less-than": [ { "type": 0, - "value": "Less than" + "value": "미만" } ], "label.less-than-equals": [ { "type": 0, - "value": "Less than or equals" + "value": "이하" } ], "label.login": [ @@ -686,37 +686,37 @@ "label.manage": [ { "type": 0, - "value": "Manage" + "value": "관리" } ], "label.manager": [ { "type": 0, - "value": "Manager" + "value": "관리자" } ], "label.max": [ { "type": 0, - "value": "Max" + "value": "최대" } ], "label.member": [ { "type": 0, - "value": "Member" + "value": "멤버" } ], "label.members": [ { "type": 0, - "value": "Members" + "value": "멤버" } ], "label.min": [ { "type": 0, - "value": "Min" + "value": "최소" } ], "label.mobile": [ @@ -734,13 +734,13 @@ "label.my-account": [ { "type": 0, - "value": "My account" + "value": "내 계정" } ], "label.my-websites": [ { "type": 0, - "value": "My websites" + "value": "내 웹사이트" } ], "label.name": [ @@ -758,7 +758,7 @@ "label.none": [ { "type": 0, - "value": "None" + "value": "없음" } ], "label.number-of-records": [ @@ -785,7 +785,7 @@ "value": [ { "type": 0, - "value": "records" + "value": "레코드" } ] } @@ -798,31 +798,35 @@ "label.ok": [ { "type": 0, - "value": "OK" + "value": "확인" } ], "label.os": [ { "type": 0, - "value": "OS" + "value": "운영체제" } ], "label.overview": [ { "type": 0, - "value": "Overview" + "value": "개요" } ], "label.owner": [ { "type": 0, - "value": "Owner" + "value": "소유자" } ], "label.page-of": [ + { + "type": 1, + "value": "total" + }, { "type": 0, - "value": "Page " + "value": " 중 " }, { "type": 1, @@ -830,23 +834,19 @@ }, { "type": 0, - "value": " of " - }, - { - "type": 1, - "value": "total" + "value": " 페이지" } ], "label.page-views": [ { "type": 0, - "value": "페이지 뷰(PV)" + "value": "페이지 뷰" } ], "label.pageTitle": [ { "type": 0, - "value": "Page title" + "value": "페이지 제목" } ], "label.pages": [ @@ -878,19 +878,19 @@ "label.previous": [ { "type": 0, - "value": "Previous" + "value": "이전" } ], "label.previous-period": [ { "type": 0, - "value": "Previous period" + "value": "이전 기간" } ], "label.previous-year": [ { "type": 0, - "value": "Previous year" + "value": "이전 연도" } ], "label.profile": [ @@ -902,25 +902,25 @@ "label.property": [ { "type": 0, - "value": "Property" + "value": "속성" } ], "label.queries": [ { "type": 0, - "value": "Queries" + "value": "쿼리" } ], "label.query": [ { "type": 0, - "value": "Query" + "value": "쿼리" } ], "label.query-parameters": [ { "type": 0, - "value": "Query parameters" + "value": "쿼리 매개변수" } ], "label.realtime": [ @@ -932,7 +932,7 @@ "label.referrer": [ { "type": 0, - "value": "Referrer" + "value": "리퍼러" } ], "label.referrers": [ @@ -950,37 +950,37 @@ "label.regenerate": [ { "type": 0, - "value": "Regenerate" + "value": "다시 생성" } ], "label.region": [ { "type": 0, - "value": "Region" + "value": "지역" } ], "label.regions": [ { "type": 0, - "value": "Regions" + "value": "지역" } ], "label.remove": [ { "type": 0, - "value": "Remove" + "value": "제거" } ], "label.remove-member": [ { "type": 0, - "value": "Remove member" + "value": "멤버 제거" } ], "label.reports": [ { "type": 0, - "value": "Reports" + "value": "리포트" } ], "label.required": [ @@ -998,31 +998,31 @@ "label.reset-website": [ { "type": 0, - "value": "Reset statistics" + "value": "웹사이트 초기화" } ], "label.retention": [ { "type": 0, - "value": "Retention" + "value": "리텐션" } ], "label.retention-description": [ { "type": 0, - "value": "Measure your website stickiness by tracking how often users return." + "value": "사용자가 얼마나 자주 돌아오는지를 추적하여 웹사이트의 리텐션을 측정하십시오." } ], "label.role": [ { "type": 0, - "value": "Role" + "value": "역할" } ], "label.run-query": [ { "type": 0, - "value": "Run query" + "value": "쿼리 실행" } ], "label.save": [ @@ -1034,43 +1034,43 @@ "label.screens": [ { "type": 0, - "value": "Screens" + "value": "스크린" } ], "label.search": [ { "type": 0, - "value": "Search" + "value": "검색" } ], "label.select": [ { "type": 0, - "value": "Select" + "value": "선택" } ], "label.select-date": [ { "type": 0, - "value": "Select date" + "value": "날짜 선택" } ], "label.select-role": [ { "type": 0, - "value": "Select role" + "value": "역할 선택" } ], "label.select-website": [ { "type": 0, - "value": "Select website" + "value": "웹사이트 선택" } ], "label.sessions": [ { "type": 0, - "value": "Sessions" + "value": "세션" } ], "label.settings": [ @@ -1094,19 +1094,19 @@ "label.start-step": [ { "type": 0, - "value": "Start Step" + "value": "시작 단계" } ], "label.steps": [ { "type": 0, - "value": "Steps" + "value": "단계" } ], "label.sum": [ { "type": 0, - "value": "Sum" + "value": "합계" } ], "label.tablet": [ @@ -1118,61 +1118,61 @@ "label.team": [ { "type": 0, - "value": "Team" + "value": "팀" } ], "label.team-id": [ { "type": 0, - "value": "Team ID" + "value": "팀 ID" } ], "label.team-manager": [ { "type": 0, - "value": "Team manager" + "value": "팀 관리자" } ], "label.team-member": [ { "type": 0, - "value": "Team member" + "value": "팀 멤버" } ], "label.team-name": [ { "type": 0, - "value": "Team name" + "value": "팀 이름" } ], "label.team-owner": [ { "type": 0, - "value": "Team owner" + "value": "팀 소유자" } ], "label.team-view-only": [ { "type": 0, - "value": "Team view only" + "value": "팀 보기 전용" } ], "label.team-websites": [ { "type": 0, - "value": "Team websites" + "value": "팀 웹사이트" } ], "label.teams": [ { "type": 0, - "value": "Teams" + "value": "팀" } ], "label.theme": [ { "type": 0, - "value": "Theme" + "value": "테마" } ], "label.this-month": [ @@ -1202,7 +1202,7 @@ "label.title": [ { "type": 0, - "value": "Title" + "value": "제목" } ], "label.today": [ @@ -1214,19 +1214,19 @@ "label.toggle-charts": [ { "type": 0, - "value": "Toggle charts" + "value": "차트 전환" } ], "label.total": [ { "type": 0, - "value": "Total" + "value": "합계" } ], "label.total-records": [ { "type": 0, - "value": "Total records" + "value": "총 레코드" } ], "label.tracking-code": [ @@ -1238,31 +1238,31 @@ "label.transfer": [ { "type": 0, - "value": "Transfer" + "value": "전송" } ], "label.transfer-website": [ { "type": 0, - "value": "Transfer website" + "value": "웹사이트 전송" } ], "label.true": [ { "type": 0, - "value": "True" + "value": "참" } ], "label.type": [ { "type": 0, - "value": "Type" + "value": "유형" } ], "label.unique": [ { "type": 0, - "value": "Unique" + "value": "고유" } ], "label.unique-visitors": [ @@ -1280,13 +1280,13 @@ "label.untitled": [ { "type": 0, - "value": "Untitled" + "value": "제목 없음" } ], "label.update": [ { "type": 0, - "value": "Update" + "value": "업데이트" } ], "label.url": [ @@ -1298,13 +1298,13 @@ "label.urls": [ { "type": 0, - "value": "URLs" + "value": "URL" } ], "label.user": [ { "type": 0, - "value": "User" + "value": "사용자" } ], "label.username": [ @@ -1316,7 +1316,7 @@ "label.users": [ { "type": 0, - "value": "Users" + "value": "사용자" } ], "label.utm": [ @@ -1328,19 +1328,19 @@ "label.utm-description": [ { "type": 0, - "value": "Track your campaigns through UTM parameters." + "value": "UTM 매개변수를 통해 캠페인을 추적합니다." } ], "label.value": [ { "type": 0, - "value": "Value" + "value": "값" } ], "label.view": [ { "type": 0, - "value": "View" + "value": "보기" } ], "label.view-details": [ @@ -1352,7 +1352,7 @@ "label.view-only": [ { "type": 0, - "value": "View only" + "value": "보기 전용" } ], "label.views": [ @@ -1364,7 +1364,7 @@ "label.views-per-visit": [ { "type": 0, - "value": "Views per visit" + "value": "방문당 조회수" } ], "label.visit-duration": [ @@ -1382,19 +1382,19 @@ "label.visits": [ { "type": 0, - "value": "Visits" + "value": "방문" } ], "label.website": [ { "type": 0, - "value": "Website" + "value": "웹사이트" } ], "label.website-id": [ { "type": 0, - "value": "Website ID" + "value": "웹사이트 ID" } ], "label.websites": [ @@ -1406,19 +1406,19 @@ "label.window": [ { "type": 0, - "value": "Window" + "value": "창" } ], "label.yesterday": [ { "type": 0, - "value": "Yesterday" + "value": "어제" } ], "message.action-confirmation": [ { "type": 0, - "value": "Type " + "value": "확인을 위해 아래 상자에 " }, { "type": 1, @@ -1426,7 +1426,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": "을(를) 입력하십시오." } ], "message.active-users": [ @@ -1442,7 +1442,7 @@ "message.collected-data": [ { "type": 0, - "value": "Collected data" + "value": "수집된 데이터" } ], "message.confirm-delete": [ @@ -1456,57 +1456,45 @@ } ], "message.confirm-leave": [ - { - "type": 0, - "value": "Are you sure you want to leave " - }, { "type": 1, "value": "target" }, { "type": 0, - "value": "?" + "value": "을(를) 떠나시겠습니까?" } ], "message.confirm-remove": [ - { - "type": 0, - "value": "Are you sure you want to remove " - }, { "type": 1, "value": "target" }, { "type": 0, - "value": "?" + "value": "을(를) 제거하시겠습니까?" } ], "message.confirm-reset": [ - { - "type": 0, - "value": "Are your sure you want to reset " - }, { "type": 1, "value": "target" }, { "type": 0, - "value": "'s statistics?" + "value": "을(를) 초기화하시겠습니까?" } ], "message.delete-team-warning": [ { "type": 0, - "value": "Deleting a team will also delete all team websites." + "value": "팀을 삭제하면 팀에 등록된 모든 웹사이트도 삭제됩니다." } ], "message.delete-website-warning": [ { "type": 0, - "value": "관련된 모든 데이터도 삭제됩니다." + "value": "관련된 모든 데이터가 삭제됩니다." } ], "message.error": [ @@ -1522,7 +1510,7 @@ }, { "type": 0, - "value": " on " + "value": " - " }, { "type": 1, @@ -1538,7 +1526,7 @@ "message.incorrect-username-password": [ { "type": 0, - "value": "사용자 이름/비밀번호가 잘못되었습니다.." + "value": "사용자 이름/비밀번호가 잘못되었습니다." } ], "message.invalid-domain": [ @@ -1550,7 +1538,7 @@ "message.min-password-length": [ { "type": 0, - "value": "Minimum length of " + "value": "최소 길이는 " }, { "type": 1, @@ -1558,21 +1546,17 @@ }, { "type": 0, - "value": " characters" + "value": "자입니다" } ], "message.new-version-available": [ { "type": 0, - "value": "A new version of Umami " + "value": "새 버전이 사용 가능합니다! - Umami " }, { "type": 1, "value": "version" - }, - { - "type": 0, - "value": " is available!" } ], "message.no-data-available": [ @@ -1584,7 +1568,7 @@ "message.no-event-data": [ { "type": 0, - "value": "No event data is available." + "value": "사용 가능한 이벤트 데이터가 없습니다." } ], "message.no-match-password": [ @@ -1596,31 +1580,31 @@ "message.no-results-found": [ { "type": 0, - "value": "No results were found." + "value": "결과를 찾을 수 없습니다." } ], "message.no-team-websites": [ { "type": 0, - "value": "This team does not have any websites." + "value": "이 팀에는 웹사이트가 없습니다." } ], "message.no-teams": [ { "type": 0, - "value": "You have not created any teams." + "value": "생성된 팀이 없습니다." } ], "message.no-users": [ { "type": 0, - "value": "There are no users." + "value": "사용자가 없습니다." } ], "message.no-websites-configured": [ { "type": 0, - "value": "구성된 웹 사이트가 없습니다." + "value": "설정된 웹사이트가 없습니다." } ], "message.page-not-found": [ @@ -1632,7 +1616,7 @@ "message.reset-website": [ { "type": 0, - "value": "To reset this website, type " + "value": "이 웹사이트를 초기화하려면, 아래 상자에 " }, { "type": 1, @@ -1640,13 +1624,13 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": "을(를) 입력하십시오." } ], "message.reset-website-warning": [ { "type": 0, - "value": "All statistics for this website will be deleted, but your tracking code will remain intact." + "value": "이 웹사이트의 모든 통계가 삭제되지만 설정은 그대로 유지됩니다." } ], "message.saved": [ @@ -1658,78 +1642,100 @@ "message.share-url": [ { "type": 0, - "value": "이것은 " - }, - { - "type": 1, - "value": "target" - }, - { - "type": 0, - "value": "의 공개적으로 공유된 URL입니다." + "value": "아래 링크를 통해 웹사이트의 통계를 누구나 볼 수 있습니다." } ], "message.team-already-member": [ { "type": 0, - "value": "You are already a member of the team." + "value": "이미 팀의 회원입니다." } ], "message.team-not-found": [ { "type": 0, - "value": "Team not found." + "value": "팀을 찾을 수 없습니다." } ], "message.team-websites-info": [ { "type": 0, - "value": "Websites can be viewed by anyone on the team." + "value": "웹사이트는 팀의 누구나 볼 수 있습니다." } ], "message.tracking-code": [ { "type": 0, - "value": "추적 코드" + "value": "이 웹사이트의 통계를 추적하려면, 다음 코드를 HTML의 " + }, + { + "children": [ + { + "type": 0, + "value": "..." + } + ], + "type": 8, + "value": "head" + }, + { + "type": 0, + "value": " 섹션에 추가하십시오." } ], "message.transfer-team-website-to-user": [ { "type": 0, - "value": "Transfer this website to your account?" + "value": "이 웹사이트를 당신의 계정으로 전송하시겠습니까?" } ], "message.transfer-user-website-to-team": [ { "type": 0, - "value": "Select the team to transfer this website to." + "value": "이 웹사이트를 전송받을 팀을 선택하십시오." } ], "message.transfer-website": [ { "type": 0, - "value": "Transfer website ownership to your account or another team." + "value": "웹사이트 소유권을 계정이나 다른 팀으로 전송합니다." } ], "message.triggered-event": [ { "type": 0, - "value": "Triggered event" + "value": "트리거된 이벤트" } ], "message.user-deleted": [ { "type": 0, - "value": "User deleted." + "value": "사용자가 삭제되었습니다." } ], "message.viewed-page": [ { "type": 0, - "value": "Viewed page" + "value": "페이지 조회" } ], "message.visitor-log": [ + { + "type": 1, + "value": "country" + }, + { + "type": 0, + "value": "의 " + }, + { + "type": 1, + "value": "browser" + }, + { + "type": 0, + "value": " 브라우저를 사용하는 " + }, { "type": 1, "value": "os" @@ -1744,29 +1750,13 @@ }, { "type": 0, - "value": "에서 " - }, - { - "type": 1, - "value": "browser" - }, - { - "type": 0, - "value": "을(를) 사용하는 " - }, - { - "type": 1, - "value": "country" - }, - { - "type": 0, - "value": "의 방문자" + "value": " 방문자" } ], "message.visitors-dropped-off": [ { "type": 0, - "value": "Visitors dropped off" + "value": "방문자가 이탈했습니다" } ] } diff --git a/public/intl/messages/zh-CN.json b/public/intl/messages/zh-CN.json index e66a8eb1..0b7da8a5 100644 --- a/public/intl/messages/zh-CN.json +++ b/public/intl/messages/zh-CN.json @@ -152,7 +152,7 @@ "label.compare": [ { "type": 0, - "value": "Compare" + "value": "对比" } ], "label.confirm": [ @@ -182,7 +182,7 @@ "label.count": [ { "type": 0, - "value": "Count" + "value": "数量" } ], "label.countries": [ @@ -236,7 +236,7 @@ "label.current": [ { "type": 0, - "value": "Current" + "value": "当前" } ], "label.current-password": [ @@ -398,13 +398,13 @@ "label.end-step": [ { "type": 0, - "value": "End Step" + "value": "最后一步" } ], "label.entry": [ { "type": 0, - "value": "Entry URL" + "value": "首次访问 URL" } ], "label.event": [ @@ -428,7 +428,7 @@ "label.exit": [ { "type": 0, - "value": "Exit URL" + "value": "退出 URL" } ], "label.false": [ @@ -488,19 +488,19 @@ "label.goal": [ { "type": 0, - "value": "Goal" + "value": "目标" } ], "label.goals": [ { "type": 0, - "value": "Goals" + "value": "目标" } ], "label.goals-description": [ { "type": 0, - "value": "Track your goals for pageviews and events." + "value": "追踪您的页面浏览量和事件目标。" } ], "label.greater-than": [ @@ -518,13 +518,13 @@ "label.host": [ { "type": 0, - "value": "Host" + "value": "主机" } ], "label.hosts": [ { "type": 0, - "value": "Hosts" + "value": "主机" } ], "label.insights": [ @@ -578,13 +578,13 @@ "label.journey": [ { "type": 0, - "value": "Journey" + "value": "轨迹" } ], "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "了解用户如何浏览您网站的哪些页面。" } ], "label.language": [ @@ -692,7 +692,7 @@ "label.manager": [ { "type": 0, - "value": "Manager" + "value": "管理者" } ], "label.max": [ @@ -798,7 +798,7 @@ "label.ok": [ { "type": 0, - "value": "OK" + "value": "好的" } ], "label.os": [ @@ -882,19 +882,19 @@ "label.previous": [ { "type": 0, - "value": "Previous" + "value": "之前" } ], "label.previous-period": [ { "type": 0, - "value": "Previous period" + "value": "前一周期" } ], "label.previous-year": [ { "type": 0, - "value": "Previous year" + "value": "前一年" } ], "label.profile": [ @@ -906,7 +906,7 @@ "label.property": [ { "type": 0, - "value": "Property" + "value": "属性" } ], "label.queries": [ @@ -1098,7 +1098,7 @@ "label.start-step": [ { "type": 0, - "value": "Start Step" + "value": "第一步" } ], "label.steps": [ @@ -1134,7 +1134,7 @@ "label.team-manager": [ { "type": 0, - "value": "Team manager" + "value": "团队管理" } ], "label.team-member": [ @@ -1450,7 +1450,7 @@ "message.collected-data": [ { "type": 0, - "value": "Collected data" + "value": "收集数据" } ], "message.confirm-delete": [ diff --git a/yarn.lock b/yarn.lock index 9b29fa74..90f3da53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1206,17 +1206,17 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@clickhouse/client-common@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@clickhouse/client-common/-/client-common-1.0.2.tgz#0fe0a4b33101c08d85c1279e4d74b2a92d42d996" - integrity sha512-5oI2URFsXlzoysv5lAxoTUAnAHjXnaJ+1Jz3HUARR06Hkbr1sN0pGxfGwgjEd8E/lI4+UNdNEZicG2rlFnWSaA== +"@clickhouse/client-common@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@clickhouse/client-common/-/client-common-1.2.0.tgz#8845d373a14c6076d59118a0cb58afad84687372" + integrity sha512-VfA/C/tVJ2eNe72CaQ7eXmai+yqFEvZjQZiNtvJoOMLP+Vtb6DzqH9nfkgsiHHMhUhhclvt2mFh6+euk1Ea5wA== -"@clickhouse/client@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@clickhouse/client/-/client-1.0.2.tgz#7d9675e697ce697f1e6777f4c66ca6d3384e7325" - integrity sha512-PaK0GLjIrlCpXevrp9gliOrurna6MjMMFBgZhDh6Zup8IuJCjQru4LkNsWUl3hJ2nua6+Ygag14iB8ILbeaIjg== +"@clickhouse/client@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@clickhouse/client/-/client-1.2.0.tgz#83aa3b69635e19c94a975ee7ec9a68843915b94b" + integrity sha512-zMp2EhMfp1IrFKr/NjDwNiLsf7nq68nW8lGKszwFe7Iglc6Z5PY9ZA9Hd0XqAk75Q1NmFrkGCP1r3JCM1Nm1Bw== dependencies: - "@clickhouse/client-common" "1.0.2" + "@clickhouse/client-common" "1.2.0" "@colors/colors@1.5.0": version "1.5.0" @@ -2006,10 +2006,10 @@ resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-5.2.2.tgz#3c283d335001f9e0fbcb4db75557e5fe1660db72" integrity sha512-jV/P7o8+v1XaEGb7wvFfkF1fSLggAxjg7WYoBPkD3R93bsI6xmCDKBcUJ/6g7lqECRXt4dGKApSFtGk/pUmAHw== -"@next/env@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.3.tgz#d6def29d1c763c0afb397343a15a82e7d92353a0" - integrity sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA== +"@next/env@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.4.tgz#5546813dc4f809884a37d257b254a5ce1b0248d7" + integrity sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg== "@next/eslint-plugin-next@14.2.3": version "14.2.3" @@ -2018,50 +2018,50 @@ dependencies: glob "10.3.10" -"@next/swc-darwin-arm64@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz#db1a05eb88c0224089b815ad10ac128ec79c2cdb" - integrity sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A== +"@next/swc-darwin-arm64@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz#da9f04c34a3d5f0b8401ed745768420e4a604036" + integrity sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg== -"@next/swc-darwin-x64@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz#a3f8af05b5f9a52ac3082e66ac29e125ab1d7b9c" - integrity sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA== +"@next/swc-darwin-x64@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz#46dedb29ec5503bf171a72a3ecb8aac6e738e9d6" + integrity sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg== -"@next/swc-linux-arm64-gnu@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz#4e63f43879285b52554bfd39e6e0cc78a9b27bbf" - integrity sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA== +"@next/swc-linux-arm64-gnu@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz#c9697ab9eb422bd1d7ffd0eb0779cc2aefa9d4a1" + integrity sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ== -"@next/swc-linux-arm64-musl@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz#ebdaed26214448b1e6f2c3e8b3cd29bfba387990" - integrity sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw== +"@next/swc-linux-arm64-musl@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz#cbbceb2008571c743b5a310a488d2e166d200a75" + integrity sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A== -"@next/swc-linux-x64-gnu@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz#19e3bcc137c3b582a1ab867106817e5c90a20593" - integrity sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w== +"@next/swc-linux-x64-gnu@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz#d79184223f857bacffb92f643cb2943a43632568" + integrity sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q== -"@next/swc-linux-x64-musl@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz#794a539b98e064169cf0ff7741b2a4fb16adec7d" - integrity sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ== +"@next/swc-linux-x64-musl@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz#6b6c3e5ac02ca5e63394d280ec8ee607491902df" + integrity sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ== -"@next/swc-win32-arm64-msvc@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz#eda9fa0fbf1ff9113e87ac2668ee67ce9e5add5a" - integrity sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A== +"@next/swc-win32-arm64-msvc@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz#dbad3906e870dba84c5883d9d4c4838472e0697f" + integrity sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A== -"@next/swc-win32-ia32-msvc@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz#7c1190e3f640ab16580c6bdbd7d0e766b9920457" - integrity sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw== +"@next/swc-win32-ia32-msvc@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz#6074529b91ba49132922ce89a2e16d25d2ec235d" + integrity sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag== -"@next/swc-win32-x64-msvc@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz#2be4e39ee25bfbd85be78eea17c0e7751dc4323c" - integrity sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA== +"@next/swc-win32-x64-msvc@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz#e65a1c6539a671f97bb86d5183d6e3a1733c29c7" + integrity sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2089,51 +2089,51 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@prisma/client@5.14.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.14.0.tgz#dadca5bb1137ddcebb454bbdaf89423823d3363f" - integrity sha512-akMSuyvLKeoU4LeyBAUdThP/uhVP3GuLygFE3MlYzaCb3/J8SfsYBE5PkaFuLuVpLyA6sFoW+16z/aPhNAESqg== +"@prisma/client@5.16.1": + version "5.16.1" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.16.1.tgz#65c5649b4701c097e7fa943c91a3140ce8bf053d" + integrity sha512-wM9SKQjF0qLxdnOZIVAIMKiz6Hu7vDt4FFAih85K1dk/Rr2mdahy6d3QP41K62N9O0DJJA//gUDA3Mp49xsKIg== -"@prisma/debug@5.14.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.14.0.tgz#1227c705893c38284f7c63d72441480ebaa12605" - integrity sha512-iq56qBZuFfX3fCxoxT8gBX33lQzomBU0qIUaEj1RebsKVz1ob/BVH1XSBwwwvRVtZEV1b7Fxx2eVu34Ge/mg3w== +"@prisma/debug@5.16.1": + version "5.16.1" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.16.1.tgz#4887a57a0973fb732a60c30dc48de97bf1eefd7e" + integrity sha512-JsNgZAg6BD9RInLSrg7ZYzo11N7cVvYArq3fHGSD89HSgtN0VDdjV6bib7YddbcO6snzjchTiLfjeTqBjtArVQ== -"@prisma/engines-version@5.14.0-25.e9771e62de70f79a5e1c604a2d7c8e2a0a874b48": - version "5.14.0-25.e9771e62de70f79a5e1c604a2d7c8e2a0a874b48" - resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.14.0-25.e9771e62de70f79a5e1c604a2d7c8e2a0a874b48.tgz#019c3c75a5c3276e580685fe48cdbfd181176858" - integrity sha512-ip6pNkRo1UxWv+6toxNcYvItNYaqQjXdFNGJ+Nuk2eYtRoEdoF13wxo7/jsClJFFenMPVNVqXQDV0oveXnR1cA== +"@prisma/engines-version@5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303": + version "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303.tgz#63ceebefb7daa1eb17f250cad75d35999a50ee1b" + integrity sha512-HkT2WbfmFZ9WUPyuJHhkiADxazHg8Y4gByrTSVeb3OikP6tjQ7txtSUGu9OBOBH0C13dPKN2qqH12xKtHu/Hiw== -"@prisma/engines@5.14.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.14.0.tgz#2ee91dd2220a726c27c906fbea788bbb3efdac6e" - integrity sha512-lgxkKZ6IEygVcw6IZZUlPIfLQ9hjSYAtHjZ5r64sCLDgVzsPFCi2XBBJgzPMkOQ5RHzUD4E/dVdpn9+ez8tk1A== +"@prisma/engines@5.16.1": + version "5.16.1" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.16.1.tgz#a14e5d08d34241ed1f1bb7d11ed44eacb37b6fc6" + integrity sha512-KkyF3eIUtBIyp5A/rJHCtwQO18OjpGgx18PzjyGcJDY/+vNgaVyuVd+TgwBgeq6NLdd1XMwRCI+58vinHsAdfA== dependencies: - "@prisma/debug" "5.14.0" - "@prisma/engines-version" "5.14.0-25.e9771e62de70f79a5e1c604a2d7c8e2a0a874b48" - "@prisma/fetch-engine" "5.14.0" - "@prisma/get-platform" "5.14.0" + "@prisma/debug" "5.16.1" + "@prisma/engines-version" "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303" + "@prisma/fetch-engine" "5.16.1" + "@prisma/get-platform" "5.16.1" "@prisma/extension-read-replicas@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@prisma/extension-read-replicas/-/extension-read-replicas-0.3.0.tgz#2842a7c928f957c1dd58a6256104797596d43426" integrity sha512-F9+rSmYday6GT2qjhJtkZcBOpLO5LtpvFcMGqrBDHf+78LEdSuxfFjOxYlNuqk4B+th62yxpbhfpmB9/Mca14Q== -"@prisma/fetch-engine@5.14.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.14.0.tgz#45297c118d4ec3fea55129886edd5a429da1f6da" - integrity sha512-VrheA9y9DMURK5vu8OJoOgQpxOhas3qF0IBHJ8G/0X44k82kc8E0w98HCn2nhnbOOMwbWsJWXfLC2/F8n5u0gQ== +"@prisma/fetch-engine@5.16.1": + version "5.16.1" + resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.16.1.tgz#506a034eb23222af27ba635eb48c63df0ba7fc14" + integrity sha512-oOkjaPU1lhcA/Rvr4GVfd1NLJBwExgNBE36Ueq7dr71kTMwy++a3U3oLd2ZwrV9dj9xoP6LjCcky799D9nEt4w== dependencies: - "@prisma/debug" "5.14.0" - "@prisma/engines-version" "5.14.0-25.e9771e62de70f79a5e1c604a2d7c8e2a0a874b48" - "@prisma/get-platform" "5.14.0" + "@prisma/debug" "5.16.1" + "@prisma/engines-version" "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303" + "@prisma/get-platform" "5.16.1" -"@prisma/get-platform@5.14.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.14.0.tgz#69112d3dde61905f59a65ed818f153e153ca40f0" - integrity sha512-/yAyBvcEjRv41ynZrhdrPtHgk47xLRRq/o5eWGcUpBJ1YrUZTYB8EoPiopnP7iQrMATK8stXQdPOoVlrzuTQZw== +"@prisma/get-platform@5.16.1": + version "5.16.1" + resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.16.1.tgz#613197c58acaafd5142d48a11f4df45a8f26a9e9" + integrity sha512-R4IKnWnMkR2nUAbU5gjrPehdQYUUd7RENFD2/D+xXTNhcqczp0N+WEGQ3ViyI3+6mtVcjjNIMdnUTNyu3GxIgA== dependencies: - "@prisma/debug" "5.14.0" + "@prisma/debug" "5.16.1" "@react-spring/animated@~9.7.3": version "9.7.3" @@ -7601,12 +7601,12 @@ next-basics@^0.39.0: jsonwebtoken "^9.0.0" pure-rand "^6.0.2" -next@14.2.3: - version "14.2.3" - resolved "https://registry.yarnpkg.com/next/-/next-14.2.3.tgz#f117dd5d5f20c307e7b8e4f9c1c97d961008925d" - integrity sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A== +next@14.2.4: + version "14.2.4" + resolved "https://registry.yarnpkg.com/next/-/next-14.2.4.tgz#ef66c39c71e2d8ad0a3caa0383c8933f4663e4d1" + integrity sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ== dependencies: - "@next/env" "14.2.3" + "@next/env" "14.2.4" "@swc/helpers" "0.5.5" busboy "1.6.0" caniuse-lite "^1.0.30001579" @@ -7614,15 +7614,15 @@ next@14.2.3: postcss "8.4.31" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-darwin-arm64" "14.2.3" - "@next/swc-darwin-x64" "14.2.3" - "@next/swc-linux-arm64-gnu" "14.2.3" - "@next/swc-linux-arm64-musl" "14.2.3" - "@next/swc-linux-x64-gnu" "14.2.3" - "@next/swc-linux-x64-musl" "14.2.3" - "@next/swc-win32-arm64-msvc" "14.2.3" - "@next/swc-win32-ia32-msvc" "14.2.3" - "@next/swc-win32-x64-msvc" "14.2.3" + "@next/swc-darwin-arm64" "14.2.4" + "@next/swc-darwin-x64" "14.2.4" + "@next/swc-linux-arm64-gnu" "14.2.4" + "@next/swc-linux-arm64-musl" "14.2.4" + "@next/swc-linux-x64-gnu" "14.2.4" + "@next/swc-linux-x64-musl" "14.2.4" + "@next/swc-win32-arm64-msvc" "14.2.4" + "@next/swc-win32-ia32-msvc" "14.2.4" + "@next/swc-win32-x64-msvc" "14.2.4" nice-try@^1.0.4: version "1.0.5" @@ -8659,12 +8659,12 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" -prisma@5.14.0: - version "5.14.0" - resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.14.0.tgz#ffc4696a43b044b636c3303b7aa98c13c2ade4dd" - integrity sha512-gCNZco7y5XtjrnQYeDJTiVZmT/ncqCr5RY1/Cf8X2wgLRmyh9ayPAGBNziI4qEE4S6SxCH5omQLVo9lmURaJ/Q== +prisma@5.16.1: + version "5.16.1" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.16.1.tgz#6dfd1e27e6534741326f4a231f04c16b3fbb7ba9" + integrity sha512-Z1Uqodk44diztImxALgJJfNl2Uisl9xDRvqybMKEBYJLNKNhDfAHf+ZIJbZyYiBhLMbKU9cYGdDVG5IIXEnL2Q== dependencies: - "@prisma/engines" "5.14.0" + "@prisma/engines" "5.16.1" process@^0.11.10: version "0.11.10" From 0142e0ff2f5e31d2b008355f4f45e7363f02921b Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Fri, 28 Jun 2024 20:20:12 -0700 Subject: [PATCH 08/26] Fixed typo. --- public/intl/messages/am-ET.json | 2 +- public/intl/messages/ar-SA.json | 2 +- public/intl/messages/be-BY.json | 2 +- public/intl/messages/bg-BG.json | 2 +- public/intl/messages/bn-BD.json | 2 +- public/intl/messages/bs-BA.json | 2 +- public/intl/messages/cs-CZ.json | 2 +- public/intl/messages/da-DK.json | 2 +- public/intl/messages/de-CH.json | 2 +- public/intl/messages/de-DE.json | 2 +- public/intl/messages/el-GR.json | 2 +- public/intl/messages/en-GB.json | 2 +- public/intl/messages/en-US.json | 2 +- public/intl/messages/es-ES.json | 2 +- public/intl/messages/fa-IR.json | 2 +- public/intl/messages/fi-FI.json | 2 +- public/intl/messages/fo-FO.json | 2 +- public/intl/messages/fr-FR.json | 2 +- public/intl/messages/ga-ES.json | 2 +- public/intl/messages/he-IL.json | 2 +- public/intl/messages/hi-IN.json | 2 +- public/intl/messages/hr-HR.json | 2 +- public/intl/messages/hu-HU.json | 2 +- public/intl/messages/id-ID.json | 2 +- public/intl/messages/it-IT.json | 2 +- public/intl/messages/ja-JP.json | 2 +- public/intl/messages/km-KH.json | 2 +- public/intl/messages/lt-LT.json | 2 +- public/intl/messages/mn-MN.json | 2 +- public/intl/messages/ms-MY.json | 2 +- public/intl/messages/my-MM.json | 2 +- public/intl/messages/nb-NO.json | 2 +- public/intl/messages/nl-NL.json | 2 +- public/intl/messages/pl-PL.json | 2 +- public/intl/messages/pt-BR.json | 2 +- public/intl/messages/pt-PT.json | 2 +- public/intl/messages/ro-RO.json | 2 +- public/intl/messages/ru-RU.json | 2 +- public/intl/messages/si-LK.json | 2 +- public/intl/messages/sk-SK.json | 2 +- public/intl/messages/sl-SI.json | 2 +- public/intl/messages/sv-SE.json | 2 +- public/intl/messages/ta-IN.json | 2 +- public/intl/messages/th-TH.json | 2 +- public/intl/messages/tr-TR.json | 2 +- public/intl/messages/uk-UA.json | 2 +- public/intl/messages/ur-PK.json | 2 +- public/intl/messages/vi-VN.json | 2 +- public/intl/messages/zh-TW.json | 2 +- src/components/messages.ts | 2 +- src/lang/am-ET.json | 2 +- src/lang/ar-SA.json | 2 +- src/lang/be-BY.json | 2 +- src/lang/bg-BG.json | 2 +- src/lang/bn-BD.json | 2 +- src/lang/bs-BA.json | 2 +- src/lang/cs-CZ.json | 2 +- src/lang/da-DK.json | 2 +- src/lang/de-CH.json | 2 +- src/lang/de-DE.json | 2 +- src/lang/el-GR.json | 2 +- src/lang/en-GB.json | 2 +- src/lang/en-US.json | 2 +- src/lang/es-ES.json | 2 +- src/lang/fa-IR.json | 2 +- src/lang/fi-FI.json | 2 +- src/lang/fo-FO.json | 2 +- src/lang/fr-FR.json | 2 +- src/lang/ga-ES.json | 2 +- src/lang/he-IL.json | 2 +- src/lang/hi-IN.json | 2 +- src/lang/hr-HR.json | 2 +- src/lang/hu-HU.json | 2 +- src/lang/id-ID.json | 2 +- src/lang/it-IT.json | 2 +- src/lang/ja-JP.json | 2 +- src/lang/km-KH.json | 2 +- src/lang/lt-LT.json | 2 +- src/lang/mn-MN.json | 2 +- src/lang/ms-MY.json | 2 +- src/lang/my-MM.json | 2 +- src/lang/nb-NO.json | 2 +- src/lang/nl-NL.json | 2 +- src/lang/pl-PL.json | 2 +- src/lang/pt-BR.json | 2 +- src/lang/pt-PT.json | 2 +- src/lang/ro-RO.json | 2 +- src/lang/ru-RU.json | 2 +- src/lang/si-LK.json | 2 +- src/lang/sk-SK.json | 2 +- src/lang/sl-SI.json | 2 +- src/lang/sv-SE.json | 2 +- src/lang/ta-IN.json | 2 +- src/lang/th-TH.json | 2 +- src/lang/tr-TR.json | 2 +- src/lang/uk-UA.json | 2 +- src/lang/ur-PK.json | 2 +- src/lang/vi-VN.json | 2 +- src/lang/zh-TW.json | 2 +- 99 files changed, 99 insertions(+), 99 deletions(-) diff --git a/public/intl/messages/am-ET.json b/public/intl/messages/am-ET.json index 6565c98b..65427a02 100644 --- a/public/intl/messages/am-ET.json +++ b/public/intl/messages/am-ET.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/ar-SA.json b/public/intl/messages/ar-SA.json index 721584d5..d6a1855e 100644 --- a/public/intl/messages/ar-SA.json +++ b/public/intl/messages/ar-SA.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/be-BY.json b/public/intl/messages/be-BY.json index 9af4e895..e6afc2ca 100644 --- a/public/intl/messages/be-BY.json +++ b/public/intl/messages/be-BY.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/bg-BG.json b/public/intl/messages/bg-BG.json index bf5f15dc..e970ec52 100644 --- a/public/intl/messages/bg-BG.json +++ b/public/intl/messages/bg-BG.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/bn-BD.json b/public/intl/messages/bn-BD.json index 827271e3..31e04cfa 100644 --- a/public/intl/messages/bn-BD.json +++ b/public/intl/messages/bn-BD.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/bs-BA.json b/public/intl/messages/bs-BA.json index f3edb773..3b5c10ff 100644 --- a/public/intl/messages/bs-BA.json +++ b/public/intl/messages/bs-BA.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/cs-CZ.json b/public/intl/messages/cs-CZ.json index a2500688..eaef4245 100644 --- a/public/intl/messages/cs-CZ.json +++ b/public/intl/messages/cs-CZ.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/da-DK.json b/public/intl/messages/da-DK.json index d9a6903f..aac48bbc 100644 --- a/public/intl/messages/da-DK.json +++ b/public/intl/messages/da-DK.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/de-CH.json b/public/intl/messages/de-CH.json index 32d3b443..0d06a0e0 100644 --- a/public/intl/messages/de-CH.json +++ b/public/intl/messages/de-CH.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/de-DE.json b/public/intl/messages/de-DE.json index 9a9b6d14..2482b208 100644 --- a/public/intl/messages/de-DE.json +++ b/public/intl/messages/de-DE.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/el-GR.json b/public/intl/messages/el-GR.json index f44bd026..af0f11be 100644 --- a/public/intl/messages/el-GR.json +++ b/public/intl/messages/el-GR.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/en-GB.json b/public/intl/messages/en-GB.json index efb8f1be..38a7857c 100644 --- a/public/intl/messages/en-GB.json +++ b/public/intl/messages/en-GB.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/en-US.json b/public/intl/messages/en-US.json index bf911728..52b968dd 100644 --- a/public/intl/messages/en-US.json +++ b/public/intl/messages/en-US.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/es-ES.json b/public/intl/messages/es-ES.json index 40ddded5..496fabc6 100644 --- a/public/intl/messages/es-ES.json +++ b/public/intl/messages/es-ES.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/fa-IR.json b/public/intl/messages/fa-IR.json index cb10df4b..d5408e64 100644 --- a/public/intl/messages/fa-IR.json +++ b/public/intl/messages/fa-IR.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/fi-FI.json b/public/intl/messages/fi-FI.json index e43a1855..0af4dc6f 100644 --- a/public/intl/messages/fi-FI.json +++ b/public/intl/messages/fi-FI.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/fo-FO.json b/public/intl/messages/fo-FO.json index 1b2d4f07..c9df65e1 100644 --- a/public/intl/messages/fo-FO.json +++ b/public/intl/messages/fo-FO.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/fr-FR.json b/public/intl/messages/fr-FR.json index 44fd708b..bc4c51bb 100644 --- a/public/intl/messages/fr-FR.json +++ b/public/intl/messages/fr-FR.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/ga-ES.json b/public/intl/messages/ga-ES.json index 690083ae..7e182d73 100644 --- a/public/intl/messages/ga-ES.json +++ b/public/intl/messages/ga-ES.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/he-IL.json b/public/intl/messages/he-IL.json index 740dfffa..ee8599f3 100644 --- a/public/intl/messages/he-IL.json +++ b/public/intl/messages/he-IL.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/hi-IN.json b/public/intl/messages/hi-IN.json index 2c178669..5fdffe37 100644 --- a/public/intl/messages/hi-IN.json +++ b/public/intl/messages/hi-IN.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/hr-HR.json b/public/intl/messages/hr-HR.json index 974bdebd..87f37e73 100644 --- a/public/intl/messages/hr-HR.json +++ b/public/intl/messages/hr-HR.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/hu-HU.json b/public/intl/messages/hu-HU.json index 227ef208..2cc464e9 100644 --- a/public/intl/messages/hu-HU.json +++ b/public/intl/messages/hu-HU.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/id-ID.json b/public/intl/messages/id-ID.json index dbe78a50..8123d03b 100644 --- a/public/intl/messages/id-ID.json +++ b/public/intl/messages/id-ID.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/it-IT.json b/public/intl/messages/it-IT.json index 21b70650..d755b277 100644 --- a/public/intl/messages/it-IT.json +++ b/public/intl/messages/it-IT.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/ja-JP.json b/public/intl/messages/ja-JP.json index c11311c4..b2bc66a0 100644 --- a/public/intl/messages/ja-JP.json +++ b/public/intl/messages/ja-JP.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/km-KH.json b/public/intl/messages/km-KH.json index d8f7d501..841dabdd 100644 --- a/public/intl/messages/km-KH.json +++ b/public/intl/messages/km-KH.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/lt-LT.json b/public/intl/messages/lt-LT.json index 891aed6f..e6c6cd18 100644 --- a/public/intl/messages/lt-LT.json +++ b/public/intl/messages/lt-LT.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/mn-MN.json b/public/intl/messages/mn-MN.json index b11d88c1..d9461929 100644 --- a/public/intl/messages/mn-MN.json +++ b/public/intl/messages/mn-MN.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/ms-MY.json b/public/intl/messages/ms-MY.json index 996af333..8f47f3cd 100644 --- a/public/intl/messages/ms-MY.json +++ b/public/intl/messages/ms-MY.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/my-MM.json b/public/intl/messages/my-MM.json index 34f83c02..9451a0fe 100644 --- a/public/intl/messages/my-MM.json +++ b/public/intl/messages/my-MM.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/nb-NO.json b/public/intl/messages/nb-NO.json index eeb648c4..3e73b45e 100644 --- a/public/intl/messages/nb-NO.json +++ b/public/intl/messages/nb-NO.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/nl-NL.json b/public/intl/messages/nl-NL.json index 16f2de07..a186de86 100644 --- a/public/intl/messages/nl-NL.json +++ b/public/intl/messages/nl-NL.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/pl-PL.json b/public/intl/messages/pl-PL.json index 29e99d4f..608c0b3a 100644 --- a/public/intl/messages/pl-PL.json +++ b/public/intl/messages/pl-PL.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/pt-BR.json b/public/intl/messages/pt-BR.json index 149af775..ae5b0de4 100644 --- a/public/intl/messages/pt-BR.json +++ b/public/intl/messages/pt-BR.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/pt-PT.json b/public/intl/messages/pt-PT.json index 340ebb88..02704e9e 100644 --- a/public/intl/messages/pt-PT.json +++ b/public/intl/messages/pt-PT.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/ro-RO.json b/public/intl/messages/ro-RO.json index 67d0929b..311199cf 100644 --- a/public/intl/messages/ro-RO.json +++ b/public/intl/messages/ro-RO.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/ru-RU.json b/public/intl/messages/ru-RU.json index 1d0a86a1..30974dd6 100644 --- a/public/intl/messages/ru-RU.json +++ b/public/intl/messages/ru-RU.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/si-LK.json b/public/intl/messages/si-LK.json index d7cfd7bf..e6b06c6b 100644 --- a/public/intl/messages/si-LK.json +++ b/public/intl/messages/si-LK.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/sk-SK.json b/public/intl/messages/sk-SK.json index 2be1f015..738ead43 100644 --- a/public/intl/messages/sk-SK.json +++ b/public/intl/messages/sk-SK.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/sl-SI.json b/public/intl/messages/sl-SI.json index 83c383c1..67f65ad4 100644 --- a/public/intl/messages/sl-SI.json +++ b/public/intl/messages/sl-SI.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/sv-SE.json b/public/intl/messages/sv-SE.json index a6336a30..c2b2c5e0 100644 --- a/public/intl/messages/sv-SE.json +++ b/public/intl/messages/sv-SE.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/ta-IN.json b/public/intl/messages/ta-IN.json index 4afcb8db..13ab6798 100644 --- a/public/intl/messages/ta-IN.json +++ b/public/intl/messages/ta-IN.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/th-TH.json b/public/intl/messages/th-TH.json index 32d5e677..43158951 100644 --- a/public/intl/messages/th-TH.json +++ b/public/intl/messages/th-TH.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/tr-TR.json b/public/intl/messages/tr-TR.json index ac49dd47..1edfdbbc 100644 --- a/public/intl/messages/tr-TR.json +++ b/public/intl/messages/tr-TR.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/uk-UA.json b/public/intl/messages/uk-UA.json index 6ea471a6..33579a33 100644 --- a/public/intl/messages/uk-UA.json +++ b/public/intl/messages/uk-UA.json @@ -566,7 +566,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/ur-PK.json b/public/intl/messages/ur-PK.json index 18fce7eb..9d3c932b 100644 --- a/public/intl/messages/ur-PK.json +++ b/public/intl/messages/ur-PK.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/vi-VN.json b/public/intl/messages/vi-VN.json index 50409fab..424d30a6 100644 --- a/public/intl/messages/vi-VN.json +++ b/public/intl/messages/vi-VN.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/public/intl/messages/zh-TW.json b/public/intl/messages/zh-TW.json index d6514ab4..37c490d7 100644 --- a/public/intl/messages/zh-TW.json +++ b/public/intl/messages/zh-TW.json @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Understand how users navigate through your website." } ], "label.language": [ diff --git a/src/components/messages.ts b/src/components/messages.ts index fa515c66..66090762 100644 --- a/src/components/messages.ts +++ b/src/components/messages.ts @@ -265,7 +265,7 @@ export const labels = defineMessages({ journey: { id: 'label.journey', defaultMessage: 'Journey' }, journeyDescription: { id: 'label.journey-description', - defaultMessage: 'Understand how users nagivate through your website.', + defaultMessage: 'Understand how users navigate through your website.', }, compare: { id: 'label.compare', defaultMessage: 'Compare' }, current: { id: 'label.current', defaultMessage: 'Current' }, diff --git a/src/lang/am-ET.json b/src/lang/am-ET.json index 323fe4e8..7c533031 100644 --- a/src/lang/am-ET.json +++ b/src/lang/am-ET.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "Laptop", diff --git a/src/lang/ar-SA.json b/src/lang/ar-SA.json index a9fd02cf..f764f29e 100644 --- a/src/lang/ar-SA.json +++ b/src/lang/ar-SA.json @@ -96,7 +96,7 @@ "label.join": "انضم", "label.join-team": "انضم للفريق", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "اللغة", "label.languages": "اللغات", "label.laptop": "لابتوب", diff --git a/src/lang/be-BY.json b/src/lang/be-BY.json index 3a4a0335..53533023 100644 --- a/src/lang/be-BY.json +++ b/src/lang/be-BY.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Мова", "label.languages": "Мовы", "label.laptop": "Ноўтбук", diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index 9b22b466..5095b387 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -96,7 +96,7 @@ "label.join": "Присъедини се", "label.join-team": "Присъедини се към екип", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Език", "label.languages": "Езици", "label.laptop": "Лаптоп", diff --git a/src/lang/bn-BD.json b/src/lang/bn-BD.json index 43b41420..18eb1d89 100644 --- a/src/lang/bn-BD.json +++ b/src/lang/bn-BD.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "ভাষা", "label.languages": "ভাষা", "label.laptop": "ল্যাপটপ", diff --git a/src/lang/bs-BA.json b/src/lang/bs-BA.json index 04fb89ee..000af0dc 100644 --- a/src/lang/bs-BA.json +++ b/src/lang/bs-BA.json @@ -96,7 +96,7 @@ "label.join": "Učlani se", "label.join-team": "Učlani se u tim", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Jezik", "label.languages": "Jezici", "label.laptop": "Laptop", diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index 9c6d3ba1..3a57f6b2 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "Přenosný počítač", diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index a0cbe5e6..715df99e 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Sprog", "label.languages": "Sprog", "label.laptop": "Laptop", diff --git a/src/lang/de-CH.json b/src/lang/de-CH.json index bdd37cdc..6891480f 100644 --- a/src/lang/de-CH.json +++ b/src/lang/de-CH.json @@ -96,7 +96,7 @@ "label.join": "Biträte", "label.join-team": "Team biträte", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Sprach", "label.languages": "Sprache", "label.laptop": "Laptop", diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index aca4b863..10b63326 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -96,7 +96,7 @@ "label.join": "Beitreten", "label.join-team": "Team beitreten", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Sprache", "label.languages": "Sprachen", "label.laptop": "Laptop", diff --git a/src/lang/el-GR.json b/src/lang/el-GR.json index 8155b97a..ceb0812b 100644 --- a/src/lang/el-GR.json +++ b/src/lang/el-GR.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "Λάπτοπ", diff --git a/src/lang/en-GB.json b/src/lang/en-GB.json index aeefe439..9bb61811 100644 --- a/src/lang/en-GB.json +++ b/src/lang/en-GB.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "Laptop", diff --git a/src/lang/en-US.json b/src/lang/en-US.json index 7487e220..e895036c 100644 --- a/src/lang/en-US.json +++ b/src/lang/en-US.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "Laptop", diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json index bdcb3e0a..d06bd19c 100644 --- a/src/lang/es-ES.json +++ b/src/lang/es-ES.json @@ -96,7 +96,7 @@ "label.join": "Unir", "label.join-team": "Unirse al equipo", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Idioma", "label.languages": "Idiomas", "label.laptop": "Portátil", diff --git a/src/lang/fa-IR.json b/src/lang/fa-IR.json index 8eb2df24..fe1705e3 100644 --- a/src/lang/fa-IR.json +++ b/src/lang/fa-IR.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "زبان", "label.languages": "زبان‌ها", "label.laptop": "لپ‌تاپ", diff --git a/src/lang/fi-FI.json b/src/lang/fi-FI.json index f6d18b35..02561dcb 100644 --- a/src/lang/fi-FI.json +++ b/src/lang/fi-FI.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Kieli", "label.languages": "Kielet", "label.laptop": "Kannettava tietokone", diff --git a/src/lang/fo-FO.json b/src/lang/fo-FO.json index 98646d28..e9ca2aae 100644 --- a/src/lang/fo-FO.json +++ b/src/lang/fo-FO.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "Fartelda", diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 23c66525..edb2abd3 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -96,7 +96,7 @@ "label.join": "Rejoindre", "label.join-team": "Rejoindre une équipe", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Langue", "label.languages": "Langues", "label.laptop": "Portable", diff --git a/src/lang/ga-ES.json b/src/lang/ga-ES.json index 9e048061..d267137f 100644 --- a/src/lang/ga-ES.json +++ b/src/lang/ga-ES.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Idioma", "label.languages": "Idiomas", "label.laptop": "Portátil", diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json index 584d5f5d..d7ebf875 100644 --- a/src/lang/he-IL.json +++ b/src/lang/he-IL.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "לפטופ", diff --git a/src/lang/hi-IN.json b/src/lang/hi-IN.json index 0cf024e3..1fbee2c0 100644 --- a/src/lang/hi-IN.json +++ b/src/lang/hi-IN.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "लैपटॉप", diff --git a/src/lang/hr-HR.json b/src/lang/hr-HR.json index bc697426..39d4d9d1 100644 --- a/src/lang/hr-HR.json +++ b/src/lang/hr-HR.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Jezik", "label.languages": "Languages", "label.laptop": "Laptop", diff --git a/src/lang/hu-HU.json b/src/lang/hu-HU.json index 111ce00f..6762181b 100644 --- a/src/lang/hu-HU.json +++ b/src/lang/hu-HU.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "Laptop", diff --git a/src/lang/id-ID.json b/src/lang/id-ID.json index 0f2c705a..930b02da 100644 --- a/src/lang/id-ID.json +++ b/src/lang/id-ID.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Bahasa", "label.languages": "Bahasa", "label.laptop": "Laptop", diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index 3e737818..229254d5 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Lingua", "label.languages": "Lingue", "label.laptop": "Portatile", diff --git a/src/lang/ja-JP.json b/src/lang/ja-JP.json index ef0cce1d..02e300bb 100644 --- a/src/lang/ja-JP.json +++ b/src/lang/ja-JP.json @@ -96,7 +96,7 @@ "label.join": "参加", "label.join-team": "チームに参加", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "言語", "label.languages": "言語", "label.laptop": "ノートPC", diff --git a/src/lang/km-KH.json b/src/lang/km-KH.json index 9a374a06..f3189ac2 100644 --- a/src/lang/km-KH.json +++ b/src/lang/km-KH.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "ភាសា", "label.languages": "ភាសា", "label.laptop": "កុំព្យូទ័រយួរដៃ", diff --git a/src/lang/lt-LT.json b/src/lang/lt-LT.json index f96e643e..424c06ce 100644 --- a/src/lang/lt-LT.json +++ b/src/lang/lt-LT.json @@ -96,7 +96,7 @@ "label.join": "Prisijungti", "label.join-team": "Prisijungti į komandą", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Kalba", "label.languages": "Kalbos", "label.laptop": "Laptop", diff --git a/src/lang/mn-MN.json b/src/lang/mn-MN.json index 47e08bca..0e998170 100644 --- a/src/lang/mn-MN.json +++ b/src/lang/mn-MN.json @@ -96,7 +96,7 @@ "label.join": "Нэгдэх", "label.join-team": "Багт нэгдэх", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Хэл", "label.languages": "Хэл", "label.laptop": "Зөөврийн компьютер", diff --git a/src/lang/ms-MY.json b/src/lang/ms-MY.json index bf28b05c..82cfbb6b 100644 --- a/src/lang/ms-MY.json +++ b/src/lang/ms-MY.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "Laptop", diff --git a/src/lang/my-MM.json b/src/lang/my-MM.json index dffbe43e..8a71cd49 100644 --- a/src/lang/my-MM.json +++ b/src/lang/my-MM.json @@ -96,7 +96,7 @@ "label.join": "ဝင်မည်", "label.join-team": "အသင်းဝင်မည်", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "ဘာသာစကား", "label.languages": "ဘာသာစကားများ", "label.laptop": "လက်တော့ပ်", diff --git a/src/lang/nb-NO.json b/src/lang/nb-NO.json index ca360d09..4a6e0409 100644 --- a/src/lang/nb-NO.json +++ b/src/lang/nb-NO.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Språk", "label.languages": "Språk", "label.laptop": "Bærbar", diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 62081473..9a1c852b 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -96,7 +96,7 @@ "label.join": "Lid worden", "label.join-team": "Word lid van een team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Taal", "label.languages": "Talen", "label.laptop": "Laptop", diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index 8068d9b3..e663d445 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -96,7 +96,7 @@ "label.join": "Dołącz", "label.join-team": "Dołącz do zespołu", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Język", "label.languages": "Języki", "label.laptop": "Laptop", diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index c1f9c708..be96d097 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -96,7 +96,7 @@ "label.join": "Participar", "label.join-team": "Participar da equipe", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Idioma", "label.languages": "Idiomas", "label.laptop": "Notebook", diff --git a/src/lang/pt-PT.json b/src/lang/pt-PT.json index d497bb3a..252457f8 100644 --- a/src/lang/pt-PT.json +++ b/src/lang/pt-PT.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Língua", "label.languages": "Línguas", "label.laptop": "Portátil", diff --git a/src/lang/ro-RO.json b/src/lang/ro-RO.json index 107303ae..c06690c2 100644 --- a/src/lang/ro-RO.json +++ b/src/lang/ro-RO.json @@ -96,7 +96,7 @@ "label.join": "Alătură-te", "label.join-team": "Alătură-te echipei", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Limbă", "label.languages": "Limbi", "label.laptop": "Laptop", diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 535d2292..257c0491 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -96,7 +96,7 @@ "label.join": "Присоединиться", "label.join-team": "Присоединиться к команде", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Язык", "label.languages": "Языки", "label.laptop": "Ноутбук", diff --git a/src/lang/si-LK.json b/src/lang/si-LK.json index 03b42df7..6263f91a 100644 --- a/src/lang/si-LK.json +++ b/src/lang/si-LK.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "භාෂාව", "label.languages": "Languages", "label.laptop": "Laptop", diff --git a/src/lang/sk-SK.json b/src/lang/sk-SK.json index 3d5b8fbb..4447ada2 100644 --- a/src/lang/sk-SK.json +++ b/src/lang/sk-SK.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "Prenosný počítač", diff --git a/src/lang/sl-SI.json b/src/lang/sl-SI.json index 01fc7f30..3c684dec 100644 --- a/src/lang/sl-SI.json +++ b/src/lang/sl-SI.json @@ -96,7 +96,7 @@ "label.join": "Pridruži se", "label.join-team": "Pridruži se ekipi", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Jezik", "label.languages": "Jeziki", "label.laptop": "Prenosni računalnik", diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index 92c9df03..c60b6cf9 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -96,7 +96,7 @@ "label.join": "Gå med", "label.join-team": "Gå med i team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Språk", "label.languages": "Språk", "label.laptop": "Bärbar", diff --git a/src/lang/ta-IN.json b/src/lang/ta-IN.json index 99558b11..0f95bc18 100644 --- a/src/lang/ta-IN.json +++ b/src/lang/ta-IN.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Languages", "label.laptop": "மடிக்கணினி", diff --git a/src/lang/th-TH.json b/src/lang/th-TH.json index 253f420c..a594bb31 100644 --- a/src/lang/th-TH.json +++ b/src/lang/th-TH.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "ภาษา", "label.languages": "ภาษา", "label.laptop": "แล็ปท็อป", diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 49e71b9a..b8271ed2 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -96,7 +96,7 @@ "label.join": "Katıl", "label.join-team": "Takıma katıl", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Dil", "label.languages": "Diller", "label.laptop": "Dizüstü", diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index ec658b7e..ecfd27f5 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -93,7 +93,7 @@ "label.join": "Приєднатись", "label.join-team": "Приєднатись до команди", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Мова", "label.languages": "Мови", "label.laptop": "Ноутбук", diff --git a/src/lang/ur-PK.json b/src/lang/ur-PK.json index 7d649148..97de5d69 100644 --- a/src/lang/ur-PK.json +++ b/src/lang/ur-PK.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "زبانیں", "label.laptop": "لیپ ٹاپ", diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json index 1be8684b..054f449a 100644 --- a/src/lang/vi-VN.json +++ b/src/lang/vi-VN.json @@ -96,7 +96,7 @@ "label.join": "Join", "label.join-team": "Join team", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "Language", "label.languages": "Ngôn ngữ", "label.laptop": "Laptop", diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index 9d8329e9..10069181 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -96,7 +96,7 @@ "label.join": "加入", "label.join-team": "加入團隊", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Understand how users navigate through your website.", "label.language": "語言", "label.languages": "語言", "label.laptop": "筆記型電腦", From 490d51bde12693b2e5936a2d206353f0a57563da Mon Sep 17 00:00:00 2001 From: Jacek Maciejak <18230443+RikoDEV@users.noreply.github.com> Date: Sat, 29 Jun 2024 18:57:21 +0200 Subject: [PATCH 09/26] Update pl-PL.json --- src/lang/pl-PL.json | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index 8068d9b3..064f67ab 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -24,12 +24,12 @@ "label.cities": "Miasta", "label.city": "Miasto", "label.clear-all": "Wyczyść wszystko", - "label.compare": "Compare", + "label.compare": "Porównaj", "label.confirm": "Potwierdź", "label.confirm-password": "Potwierdź hasło", "label.contains": "Zawiera", "label.continue": "Kontynuuj", - "label.count": "Count", + "label.count": "Liczba", "label.countries": "Kraje", "label.country": "Państwo", "label.create": "Utwórz", @@ -38,7 +38,7 @@ "label.create-user": "Utwórz użytkownika", "label.created": "Utworzony", "label.created-by": "Utworzony przez", - "label.current": "Current", + "label.current": "Aktualny", "label.current-password": "Aktualne hasło", "label.custom-range": "Zakres niestandardowy", "label.dashboard": "Panel", @@ -65,12 +65,12 @@ "label.edit-dashboard": "Edytuj panel", "label.edit-member": "Edytuj członka", "label.enable-share-url": "Włącz udostępnianie adresu URL", - "label.end-step": "End Step", + "label.end-step": "Krok końcowy", "label.entry": "Entry URL", "label.event": "Zdarzenie", "label.event-data": "Dane zdarzenia", "label.events": "Zdarzenia", - "label.exit": "Exit URL", + "label.exit": "URL wyjściowy", "label.false": "Fałsz", "label.field": "Pole", "label.fields": "Pola", @@ -80,13 +80,13 @@ "label.filters": "Filtry", "label.funnel": "Lejek", "label.funnel-description": "Zrozum wskaźniki konwersji i odpływu użytkowników.", - "label.goal": "Goal", - "label.goals": "Goals", + "label.goal": "Cel", + "label.goals": "Cele", "label.goals-description": "Track your goals for pageviews and events.", "label.greater-than": "Większe niż", "label.greater-than-equals": "Większe niż lub równe", "label.host": "Host", - "label.hosts": "Hosts", + "label.hosts": "Hosty", "label.insights": "Analiza", "label.insights-description": "Poznaj lepiej swoje dane, korzystając z segmentów i filtrów.", "label.is": "Równe", @@ -95,8 +95,8 @@ "label.is-set": "Ustawione", "label.join": "Dołącz", "label.join-team": "Dołącz do zespołu", - "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey": "Droga", + "label.journey-description": "Zrozum, w jaki sposób użytkownicy poruszają się po Twojej witrynie.", "label.language": "Język", "label.languages": "Języki", "label.laptop": "Laptop", @@ -134,22 +134,22 @@ "label.password": "Hasło", "label.powered-by": "Obsługiwane przez {name}", "label.previous": "Previous", - "label.previous-period": "Previous period", - "label.previous-year": "Previous year", + "label.previous-period": "Poprzedni okres", + "label.previous-year": "Poprzedni rok", "label.profile": "Profil", "label.property": "Property", "label.queries": "Zapytania", "label.query": "Zapytanie", "label.query-parameters": "Parametry zapytania", "label.realtime": "Czas rzeczywisty", - "label.referrer": "Referrer", + "label.referrer": "Źródło odsyłające", "label.referrers": "Źródła odsyłające", "label.refresh": "Odśwież", "label.regenerate": "Wygeneruj ponownie", "label.region": "Region", "label.regions": "Regiony", "label.remove": "Usuń", - "label.remove-member": "Remove member", + "label.remove-member": "Usuń członka", "label.reports": "Raporty", "label.required": "Wymagany", "label.reset": "Zresetuj", @@ -169,7 +169,7 @@ "label.settings": "Ustawienia", "label.share-url": "Udostępnij adres URL", "label.single-day": "W tym dniu", - "label.start-step": "Start Step", + "label.start-step": "Krok startowy", "label.steps": "Kroki", "label.sum": "Suma", "label.tablet": "Tablet", @@ -217,7 +217,7 @@ "label.views-per-visit": "Widoków na wizytę", "label.visit-duration": "Średni czas wizyty", "label.visitors": "Odwiedzający", - "label.visits": "Odwiedząjący", + "label.visits": "Wizyty", "label.website": "Witryna", "label.website-id": "ID witryny", "label.websites": "Witryny", @@ -225,7 +225,7 @@ "label.yesterday": "Wczoraj", "message.action-confirmation": "Wpisz {confirmation}, aby potwierdzić.", "message.active-users": "{x} aktualnie {x, plural, one {odwiedzający} other {odwiedzających}}", - "message.collected-data": "Collected data", + "message.collected-data": "Zebrane dane", "message.confirm-delete": "Czy na pewno chcesz usunąć {target}?", "message.confirm-leave": "Czy na pewno chcesz opuścić {target}?", "message.confirm-remove": "Czy na pewno chcesz usunąć {target}?", From 512603d79b3d40e6da29091644f9b3501d4f5eb5 Mon Sep 17 00:00:00 2001 From: Jacek Maciejak <18230443+RikoDEV@users.noreply.github.com> Date: Sat, 29 Jun 2024 19:00:33 +0200 Subject: [PATCH 10/26] Whoops --- src/lang/pl-PL.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/pl-PL.json b/src/lang/pl-PL.json index 064f67ab..953438be 100644 --- a/src/lang/pl-PL.json +++ b/src/lang/pl-PL.json @@ -133,7 +133,7 @@ "label.pages": "Strony", "label.password": "Hasło", "label.powered-by": "Obsługiwane przez {name}", - "label.previous": "Previous", + "label.previous": "Poprzedni", "label.previous-period": "Poprzedni okres", "label.previous-year": "Poprzedni rok", "label.profile": "Profil", From 87779202f9c01d6a39a6dfd4ad03c524a0c2d0f1 Mon Sep 17 00:00:00 2001 From: mobeicanyue <81098819+mobeicanyue@users.noreply.github.com> Date: Sun, 30 Jun 2024 11:26:21 +0800 Subject: [PATCH 11/26] Update zh-CN.json --- src/lang/zh-CN.json | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index bcdd3612..552c2423 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -24,12 +24,12 @@ "label.cities": "市/县", "label.city": "市/县", "label.clear-all": "清除全部", - "label.compare": "Compare", + "label.compare": "比较", "label.confirm": "确认", "label.confirm-password": "确认密码", "label.contains": "包含", "label.continue": "继续", - "label.count": "Count", + "label.count": "统计", "label.countries": "国家/地区", "label.country": "国家/地区", "label.create": "创建", @@ -38,7 +38,7 @@ "label.create-user": "创建用户", "label.created": "已创建", "label.created-by": "创建者", - "label.current": "Current", + "label.current": "目前", "label.current-password": "目前密码", "label.custom-range": "自定义时间段", "label.dashboard": "仪表板", @@ -65,12 +65,12 @@ "label.edit-dashboard": "编辑仪表板", "label.edit-member": "编辑成员", "label.enable-share-url": "启用共享链接", - "label.end-step": "End Step", - "label.entry": "Entry URL", + "label.end-step": "结束步骤", + "label.entry": "入口 URL", "label.event": "事件", "label.event-data": "事件数据", "label.events": "行为类别", - "label.exit": "Exit URL", + "label.exit": "退出 URL", "label.false": "否", "label.field": "字段", "label.fields": "字段", @@ -80,13 +80,13 @@ "label.filters": "筛选", "label.funnel": "分析", "label.funnel-description": "了解用户的转换率和退出率。", - "label.goal": "Goal", - "label.goals": "Goals", - "label.goals-description": "Track your goals for pageviews and events.", + "label.goal": "目标", + "label.goals": "目标", + "label.goals-description": "跟踪页面浏览量和事件的目标。", "label.greater-than": "大于", "label.greater-than-equals": "大于或等于", - "label.host": "Host", - "label.hosts": "Hosts", + "label.host": "主机", + "label.hosts": "主机", "label.insights": "见解", "label.insights-description": "通过使用筛选器和划分时间段来更深入地研究数据。", "label.is": "等于", @@ -95,8 +95,8 @@ "label.is-set": "已设置", "label.join": "加入", "label.join-team": "加入团队", - "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey": "用户浏览轨迹", + "label.journey-description": "了解用户如何浏览网站。", "label.language": "语言", "label.languages": "语言", "label.laptop": "笔记本", @@ -110,7 +110,7 @@ "label.login": "登录", "label.logout": "退出", "label.manage": "管理", - "label.manager": "Manager", + "label.manager": "管理者", "label.max": "最大", "label.member": "成员", "label.members": "成员", @@ -133,11 +133,11 @@ "label.pages": "网页", "label.password": "密码", "label.powered-by": "由 {name} 提供支持", - "label.previous": "Previous", - "label.previous-period": "Previous period", - "label.previous-year": "Previous year", + "label.previous": "先前", + "label.previous-period": "上一时期", + "label.previous-year": "上一年", "label.profile": "个人资料", - "label.property": "Property", + "label.property": "属性", "label.queries": "查询", "label.query": "查询", "label.query-parameters": "查询参数", @@ -169,13 +169,13 @@ "label.settings": "设置", "label.share-url": "共享链接", "label.single-day": "单日", - "label.start-step": "Start Step", + "label.start-step": "开始步骤", "label.steps": "步骤", "label.sum": "总和", "label.tablet": "平板", "label.team": "团队", "label.team-id": "团队 ID", - "label.team-manager": "Team manager", + "label.team-manager": "团队管理者", "label.team-member": "团队成员", "label.team-name": "团队名称", "label.team-owner": "团队所有者", @@ -225,7 +225,7 @@ "label.yesterday": "昨天", "message.action-confirmation": "在下面的框中输入 {confirmation} 以确认。", "message.active-users": "当前在线 {x} 人", - "message.collected-data": "Collected data", + "message.collected-data": "已收集的数据", "message.confirm-delete": "你确定要删除 {target} 吗?", "message.confirm-leave": "你确定要离开 {target} 吗?", "message.confirm-remove": "您确定要移除 {target} ?", From d95e21299076b46e11b481e2daf4e14de52102cf Mon Sep 17 00:00:00 2001 From: Konstantin Tutsch Date: Sun, 30 Jun 2024 13:39:37 +0200 Subject: [PATCH 12/26] Add German translation for v2.12.0 Report categories, Compare, Transfers, Team features --- public/intl/messages/de-DE.json | 108 ++++++++++++++++---------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/public/intl/messages/de-DE.json b/public/intl/messages/de-DE.json index 9a9b6d14..a75a7ee9 100644 --- a/public/intl/messages/de-DE.json +++ b/public/intl/messages/de-DE.json @@ -32,13 +32,13 @@ "label.add-member": [ { "type": 0, - "value": "Add member" + "value": "Mitglied hinzufügen" } ], "label.add-step": [ { "type": 0, - "value": "Add step" + "value": "Schritt hinzufügen" } ], "label.add-website": [ @@ -74,7 +74,7 @@ "label.analytics": [ { "type": 0, - "value": "Analytics" + "value": "Analytiken" } ], "label.average": [ @@ -104,7 +104,7 @@ "label.breakdown": [ { "type": 0, - "value": "Breakdown" + "value": "Aufschlüsselung" } ], "label.browser": [ @@ -152,7 +152,7 @@ "label.compare": [ { "type": 0, - "value": "Compare" + "value": "Vergleich" } ], "label.confirm": [ @@ -182,7 +182,7 @@ "label.count": [ { "type": 0, - "value": "Count" + "value": "Anzahl" } ], "label.countries": [ @@ -200,7 +200,7 @@ "label.create": [ { "type": 0, - "value": "Create" + "value": "Erstellen" } ], "label.create-report": [ @@ -230,13 +230,13 @@ "label.created-by": [ { "type": 0, - "value": "Created By" + "value": "Erstellt von" } ], "label.current": [ { "type": 0, - "value": "Current" + "value": "Aktuell" } ], "label.current-password": [ @@ -296,7 +296,7 @@ "label.delete-report": [ { "type": 0, - "value": "Delete report" + "value": "Bericht löschen" } ], "label.delete-team": [ @@ -386,7 +386,7 @@ "label.edit-member": [ { "type": 0, - "value": "Edit member" + "value": "Mitglied bearbeiten" } ], "label.enable-share-url": [ @@ -398,7 +398,7 @@ "label.end-step": [ { "type": 0, - "value": "End Step" + "value": "Schritt beenden" } ], "label.entry": [ @@ -476,31 +476,31 @@ "label.funnel": [ { "type": 0, - "value": "Funnel" + "value": "Trichter" } ], "label.funnel-description": [ { "type": 0, - "value": "Understand the conversion and drop-off rate of users." + "value": "Verstehe die Konversions- und Dropoffrate von Nutzern." } ], "label.goal": [ { "type": 0, - "value": "Goal" + "value": "Ziel" } ], "label.goals": [ { "type": 0, - "value": "Goals" + "value": "Ziele" } ], "label.goals-description": [ { "type": 0, - "value": "Track your goals for pageviews and events." + "value": "Verfolgen Sie Ihre Ziele für Aufrufe und Events." } ], "label.greater-than": [ @@ -536,7 +536,7 @@ "label.insights-description": [ { "type": 0, - "value": "Dive deeper into your data by using segments and filters." + "value": "Tauchen Sie tiefer in Ihre Daten mit Filtern und Segmenten ein." } ], "label.is": [ @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users nagivate through your website." + "value": "Verstehen Sie, wie Nutzer Ihre Website navigieren." } ], "label.language": [ @@ -636,7 +636,7 @@ "label.last-months": [ { "type": 0, - "value": "Last " + "value": "Letzte " }, { "type": 1, @@ -644,7 +644,7 @@ }, { "type": 0, - "value": " months" + "value": " Monate" } ], "label.leave": [ @@ -686,7 +686,7 @@ "label.manage": [ { "type": 0, - "value": "Manage" + "value": "Verwalten" } ], "label.manager": [ @@ -704,7 +704,7 @@ "label.member": [ { "type": 0, - "value": "Member" + "value": "Mitglied" } ], "label.members": [ @@ -734,7 +734,7 @@ "label.my-account": [ { "type": 0, - "value": "My account" + "value": "Mein Konto" } ], "label.my-websites": [ @@ -777,7 +777,7 @@ "value": [ { "type": 0, - "value": "record" + "value": "Eintrag" } ] }, @@ -785,7 +785,7 @@ "value": [ { "type": 0, - "value": "records" + "value": "Einträge" } ] } @@ -874,19 +874,19 @@ "label.previous": [ { "type": 0, - "value": "Previous" + "value": "Vorherige" } ], "label.previous-period": [ { "type": 0, - "value": "Previous period" + "value": "Vorheriger Zeitraum" } ], "label.previous-year": [ { "type": 0, - "value": "Previous year" + "value": "Vorheriges Jahr" } ], "label.profile": [ @@ -898,7 +898,7 @@ "label.property": [ { "type": 0, - "value": "Property" + "value": "Besitz" } ], "label.queries": [ @@ -970,7 +970,7 @@ "label.remove-member": [ { "type": 0, - "value": "Remove member" + "value": "Mitglied entfernen" } ], "label.reports": [ @@ -1006,7 +1006,7 @@ "label.retention-description": [ { "type": 0, - "value": "Measure your website stickiness by tracking how often users return." + "value": "Messen Sie die Presenz Ihrer Website, indem Sie tracken wie oft Nutzer zurückkehren." } ], "label.role": [ @@ -1036,13 +1036,13 @@ "label.search": [ { "type": 0, - "value": "Search" + "value": "Suche" } ], "label.select": [ { "type": 0, - "value": "Select" + "value": "Auswählen" } ], "label.select-date": [ @@ -1054,7 +1054,7 @@ "label.select-role": [ { "type": 0, - "value": "Select role" + "value": "Rolle auswählen" } ], "label.select-website": [ @@ -1090,13 +1090,13 @@ "label.start-step": [ { "type": 0, - "value": "Start Step" + "value": "Schritt starten" } ], "label.steps": [ { "type": 0, - "value": "Steps" + "value": "Schritte" } ], "label.sum": [ @@ -1126,7 +1126,7 @@ "label.team-manager": [ { "type": 0, - "value": "Team manager" + "value": "Team-Manager" } ], "label.team-member": [ @@ -1234,13 +1234,13 @@ "label.transfer": [ { "type": 0, - "value": "Transfer" + "value": "Übertragung" } ], "label.transfer-website": [ { "type": 0, - "value": "Transfer website" + "value": "Website übertragen" } ], "label.true": [ @@ -1324,7 +1324,7 @@ "label.utm-description": [ { "type": 0, - "value": "Track your campaigns through UTM parameters." + "value": "Tracken Sie Ihre Kampagnen mit Hilfe von UTM Parametern." } ], "label.value": [ @@ -1360,7 +1360,7 @@ "label.views-per-visit": [ { "type": 0, - "value": "Views per visit" + "value": "Aufrufe pro Besuch" } ], "label.visit-duration": [ @@ -1378,7 +1378,7 @@ "label.visits": [ { "type": 0, - "value": "Visits" + "value": "Besuche" } ], "label.website": [ @@ -1414,7 +1414,7 @@ "message.action-confirmation": [ { "type": 0, - "value": "Type " + "value": "Tippe " }, { "type": 1, @@ -1422,7 +1422,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " in das untenliegende Feld, um zu bestätigen." } ], "message.active-users": [ @@ -1462,7 +1462,7 @@ "message.collected-data": [ { "type": 0, - "value": "Collected data" + "value": "Gesammelte Daten" } ], "message.confirm-delete": [ @@ -1496,7 +1496,7 @@ "message.confirm-remove": [ { "type": 0, - "value": "Are you sure you want to remove " + "value": "Sind Sie sicher, dass Sie " }, { "type": 1, @@ -1504,7 +1504,7 @@ }, { "type": 0, - "value": "?" + "value": " entfernen möchten?" } ], "message.confirm-reset": [ @@ -1524,7 +1524,7 @@ "message.delete-team-warning": [ { "type": 0, - "value": "Deleting a team will also delete all team websites." + "value": "Wird ein Team gelöscht werden auch alle Websites des Teams gelöscht." } ], "message.delete-website-warning": [ @@ -1708,25 +1708,25 @@ "message.transfer-team-website-to-user": [ { "type": 0, - "value": "Transfer this website to your account?" + "value": "Möchten Sie diese Website auf Ihr Konto übertragen?" } ], "message.transfer-user-website-to-team": [ { "type": 0, - "value": "Select the team to transfer this website to." + "value": "Wähle das Team, auf das die Website übertragen wird." } ], "message.transfer-website": [ { "type": 0, - "value": "Transfer website ownership to your account or another team." + "value": "Übertragen Sie den Besitz der Website auf Ihren Account oder ein anderes Team." } ], "message.triggered-event": [ { "type": 0, - "value": "Triggered event" + "value": "Event ausgelöst." } ], "message.user-deleted": [ @@ -1738,7 +1738,7 @@ "message.viewed-page": [ { "type": 0, - "value": "Viewed page" + "value": "Seite besucht." } ], "message.visitor-log": [ From 001dbbad9f10e93bcdea3e8858d439b56dcb5dcc Mon Sep 17 00:00:00 2001 From: Konstantin Tutsch Date: Mon, 1 Jul 2024 17:04:56 +0200 Subject: [PATCH 13/26] Revert "Add German translation for v2.12.0" This reverts commit d95e21299076b46e11b481e2daf4e14de52102cf. --- public/intl/messages/de-DE.json | 108 ++++++++++++++++---------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/public/intl/messages/de-DE.json b/public/intl/messages/de-DE.json index a75a7ee9..9a9b6d14 100644 --- a/public/intl/messages/de-DE.json +++ b/public/intl/messages/de-DE.json @@ -32,13 +32,13 @@ "label.add-member": [ { "type": 0, - "value": "Mitglied hinzufügen" + "value": "Add member" } ], "label.add-step": [ { "type": 0, - "value": "Schritt hinzufügen" + "value": "Add step" } ], "label.add-website": [ @@ -74,7 +74,7 @@ "label.analytics": [ { "type": 0, - "value": "Analytiken" + "value": "Analytics" } ], "label.average": [ @@ -104,7 +104,7 @@ "label.breakdown": [ { "type": 0, - "value": "Aufschlüsselung" + "value": "Breakdown" } ], "label.browser": [ @@ -152,7 +152,7 @@ "label.compare": [ { "type": 0, - "value": "Vergleich" + "value": "Compare" } ], "label.confirm": [ @@ -182,7 +182,7 @@ "label.count": [ { "type": 0, - "value": "Anzahl" + "value": "Count" } ], "label.countries": [ @@ -200,7 +200,7 @@ "label.create": [ { "type": 0, - "value": "Erstellen" + "value": "Create" } ], "label.create-report": [ @@ -230,13 +230,13 @@ "label.created-by": [ { "type": 0, - "value": "Erstellt von" + "value": "Created By" } ], "label.current": [ { "type": 0, - "value": "Aktuell" + "value": "Current" } ], "label.current-password": [ @@ -296,7 +296,7 @@ "label.delete-report": [ { "type": 0, - "value": "Bericht löschen" + "value": "Delete report" } ], "label.delete-team": [ @@ -386,7 +386,7 @@ "label.edit-member": [ { "type": 0, - "value": "Mitglied bearbeiten" + "value": "Edit member" } ], "label.enable-share-url": [ @@ -398,7 +398,7 @@ "label.end-step": [ { "type": 0, - "value": "Schritt beenden" + "value": "End Step" } ], "label.entry": [ @@ -476,31 +476,31 @@ "label.funnel": [ { "type": 0, - "value": "Trichter" + "value": "Funnel" } ], "label.funnel-description": [ { "type": 0, - "value": "Verstehe die Konversions- und Dropoffrate von Nutzern." + "value": "Understand the conversion and drop-off rate of users." } ], "label.goal": [ { "type": 0, - "value": "Ziel" + "value": "Goal" } ], "label.goals": [ { "type": 0, - "value": "Ziele" + "value": "Goals" } ], "label.goals-description": [ { "type": 0, - "value": "Verfolgen Sie Ihre Ziele für Aufrufe und Events." + "value": "Track your goals for pageviews and events." } ], "label.greater-than": [ @@ -536,7 +536,7 @@ "label.insights-description": [ { "type": 0, - "value": "Tauchen Sie tiefer in Ihre Daten mit Filtern und Segmenten ein." + "value": "Dive deeper into your data by using segments and filters." } ], "label.is": [ @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Verstehen Sie, wie Nutzer Ihre Website navigieren." + "value": "Understand how users nagivate through your website." } ], "label.language": [ @@ -636,7 +636,7 @@ "label.last-months": [ { "type": 0, - "value": "Letzte " + "value": "Last " }, { "type": 1, @@ -644,7 +644,7 @@ }, { "type": 0, - "value": " Monate" + "value": " months" } ], "label.leave": [ @@ -686,7 +686,7 @@ "label.manage": [ { "type": 0, - "value": "Verwalten" + "value": "Manage" } ], "label.manager": [ @@ -704,7 +704,7 @@ "label.member": [ { "type": 0, - "value": "Mitglied" + "value": "Member" } ], "label.members": [ @@ -734,7 +734,7 @@ "label.my-account": [ { "type": 0, - "value": "Mein Konto" + "value": "My account" } ], "label.my-websites": [ @@ -777,7 +777,7 @@ "value": [ { "type": 0, - "value": "Eintrag" + "value": "record" } ] }, @@ -785,7 +785,7 @@ "value": [ { "type": 0, - "value": "Einträge" + "value": "records" } ] } @@ -874,19 +874,19 @@ "label.previous": [ { "type": 0, - "value": "Vorherige" + "value": "Previous" } ], "label.previous-period": [ { "type": 0, - "value": "Vorheriger Zeitraum" + "value": "Previous period" } ], "label.previous-year": [ { "type": 0, - "value": "Vorheriges Jahr" + "value": "Previous year" } ], "label.profile": [ @@ -898,7 +898,7 @@ "label.property": [ { "type": 0, - "value": "Besitz" + "value": "Property" } ], "label.queries": [ @@ -970,7 +970,7 @@ "label.remove-member": [ { "type": 0, - "value": "Mitglied entfernen" + "value": "Remove member" } ], "label.reports": [ @@ -1006,7 +1006,7 @@ "label.retention-description": [ { "type": 0, - "value": "Messen Sie die Presenz Ihrer Website, indem Sie tracken wie oft Nutzer zurückkehren." + "value": "Measure your website stickiness by tracking how often users return." } ], "label.role": [ @@ -1036,13 +1036,13 @@ "label.search": [ { "type": 0, - "value": "Suche" + "value": "Search" } ], "label.select": [ { "type": 0, - "value": "Auswählen" + "value": "Select" } ], "label.select-date": [ @@ -1054,7 +1054,7 @@ "label.select-role": [ { "type": 0, - "value": "Rolle auswählen" + "value": "Select role" } ], "label.select-website": [ @@ -1090,13 +1090,13 @@ "label.start-step": [ { "type": 0, - "value": "Schritt starten" + "value": "Start Step" } ], "label.steps": [ { "type": 0, - "value": "Schritte" + "value": "Steps" } ], "label.sum": [ @@ -1126,7 +1126,7 @@ "label.team-manager": [ { "type": 0, - "value": "Team-Manager" + "value": "Team manager" } ], "label.team-member": [ @@ -1234,13 +1234,13 @@ "label.transfer": [ { "type": 0, - "value": "Übertragung" + "value": "Transfer" } ], "label.transfer-website": [ { "type": 0, - "value": "Website übertragen" + "value": "Transfer website" } ], "label.true": [ @@ -1324,7 +1324,7 @@ "label.utm-description": [ { "type": 0, - "value": "Tracken Sie Ihre Kampagnen mit Hilfe von UTM Parametern." + "value": "Track your campaigns through UTM parameters." } ], "label.value": [ @@ -1360,7 +1360,7 @@ "label.views-per-visit": [ { "type": 0, - "value": "Aufrufe pro Besuch" + "value": "Views per visit" } ], "label.visit-duration": [ @@ -1378,7 +1378,7 @@ "label.visits": [ { "type": 0, - "value": "Besuche" + "value": "Visits" } ], "label.website": [ @@ -1414,7 +1414,7 @@ "message.action-confirmation": [ { "type": 0, - "value": "Tippe " + "value": "Type " }, { "type": 1, @@ -1422,7 +1422,7 @@ }, { "type": 0, - "value": " in das untenliegende Feld, um zu bestätigen." + "value": " in the box below to confirm." } ], "message.active-users": [ @@ -1462,7 +1462,7 @@ "message.collected-data": [ { "type": 0, - "value": "Gesammelte Daten" + "value": "Collected data" } ], "message.confirm-delete": [ @@ -1496,7 +1496,7 @@ "message.confirm-remove": [ { "type": 0, - "value": "Sind Sie sicher, dass Sie " + "value": "Are you sure you want to remove " }, { "type": 1, @@ -1504,7 +1504,7 @@ }, { "type": 0, - "value": " entfernen möchten?" + "value": "?" } ], "message.confirm-reset": [ @@ -1524,7 +1524,7 @@ "message.delete-team-warning": [ { "type": 0, - "value": "Wird ein Team gelöscht werden auch alle Websites des Teams gelöscht." + "value": "Deleting a team will also delete all team websites." } ], "message.delete-website-warning": [ @@ -1708,25 +1708,25 @@ "message.transfer-team-website-to-user": [ { "type": 0, - "value": "Möchten Sie diese Website auf Ihr Konto übertragen?" + "value": "Transfer this website to your account?" } ], "message.transfer-user-website-to-team": [ { "type": 0, - "value": "Wähle das Team, auf das die Website übertragen wird." + "value": "Select the team to transfer this website to." } ], "message.transfer-website": [ { "type": 0, - "value": "Übertragen Sie den Besitz der Website auf Ihren Account oder ein anderes Team." + "value": "Transfer website ownership to your account or another team." } ], "message.triggered-event": [ { "type": 0, - "value": "Event ausgelöst." + "value": "Triggered event" } ], "message.user-deleted": [ @@ -1738,7 +1738,7 @@ "message.viewed-page": [ { "type": 0, - "value": "Seite besucht." + "value": "Viewed page" } ], "message.visitor-log": [ From 9bb06d86105bd40bbc6c487c9ae08fc86bac26ea Mon Sep 17 00:00:00 2001 From: Konstantin Tutsch Date: Mon, 1 Jul 2024 17:05:48 +0200 Subject: [PATCH 14/26] Update German translation for v2.12 Report categories, Compare, Transfers, Team features --- src/lang/de-DE.json | 94 ++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index aca4b863..aed2655a 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -4,8 +4,8 @@ "label.activity-log": "Aktivitätsverlauf", "label.add": "Hinzufügen", "label.add-description": "Beschreibung hinzufügen", - "label.add-member": "Add member", - "label.add-step": "Add step", + "label.add-member": "Mitglied hinzufügen", + "label.add-step": "Schritt hinzufügen", "label.add-website": "Website hinzufügen", "label.admin": "Administrator", "label.after": "Nach", @@ -16,7 +16,7 @@ "label.back": "Zurück", "label.before": "Vor", "label.bounce-rate": "Absprungrate", - "label.breakdown": "Breakdown", + "label.breakdown": "Aufschlüsselung", "label.browser": "Browser", "label.browsers": "Browser", "label.cancel": "Abbrechen", @@ -24,21 +24,21 @@ "label.cities": "Städte", "label.city": "Stadt", "label.clear-all": "Alles löschen", - "label.compare": "Compare", + "label.compare": "Vergleich", "label.confirm": "Bestätigen", "label.confirm-password": "Passwort wiederholen", "label.contains": "Enthält", "label.continue": "Weiter", - "label.count": "Count", + "label.count": "Anzahl", "label.countries": "Länder", "label.country": "Land", - "label.create": "Create", + "label.create": "Erstellen", "label.create-report": "Bericht erstellen", "label.create-team": "Team erstellen", "label.create-user": "Benutzer erstellen", "label.created": "Erstellt", - "label.created-by": "Created By", - "label.current": "Current", + "label.created-by": "Erstellt von", + "label.current": "Aktuell", "label.current-password": "Derzeitiges Passwort", "label.custom-range": "Benutzerdefinierter Bereich", "label.dashboard": "Übersicht", @@ -48,7 +48,7 @@ "label.day": "Tag", "label.default-date-range": "Voreingestellter Datumsbereich", "label.delete": "Löschen", - "label.delete-report": "Delete report", + "label.delete-report": "Bericht löschen", "label.delete-team": "Team löschen", "label.delete-user": "Benutzer löschen", "label.delete-website": "Website löschen", @@ -63,9 +63,9 @@ "label.dropoff": "Dropoff", "label.edit": "Bearbeiten", "label.edit-dashboard": "Dashboard bearbeiten", - "label.edit-member": "Edit member", + "label.edit-member": "Mitglied bearbeiten", "label.enable-share-url": "Freigabe-URL aktivieren", - "label.end-step": "End Step", + "label.end-step": "Schritt beenden", "label.entry": "Entry URL", "label.event": "Event", "label.event-data": "Eventdaten", @@ -79,16 +79,16 @@ "label.filter-raw": "Rohdaten", "label.filters": "Filter", "label.funnel": "Funnel", - "label.funnel-description": "Understand the conversion and drop-off rate of users.", - "label.goal": "Goal", - "label.goals": "Goals", - "label.goals-description": "Track your goals for pageviews and events.", + "label.funnel-description": "Verstehe die Konversions- und Dropoffrate von Nutzern.", + "label.goal": "Ziel", + "label.goals": "Ziele", + "label.goals-description": "Verfolgen Sie Ihre Ziele für Aufrufe und Events.", "label.greater-than": "Größer als", "label.greater-than-equals": "Größer oder gleich", "label.host": "Host", "label.hosts": "Hosts", "label.insights": "Insights", - "label.insights-description": "Dive deeper into your data by using segments and filters.", + "label.insights-description": "Tauchen Sie tiefer in Ihre Daten mit Filtern und Segmenten ein.", "label.is": "Ist", "label.is-not": "Ist nicht", "label.is-not-set": "Ist nicht gesetzt", @@ -96,7 +96,7 @@ "label.join": "Beitreten", "label.join-team": "Team beitreten", "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.journey-description": "Verstehen Sie, wie Nutzer Ihre Website navigieren.", "label.language": "Sprache", "label.languages": "Sprachen", "label.laptop": "Laptop", @@ -109,15 +109,15 @@ "label.less-than-equals": "Kleiner oder gleich", "label.login": "Anmelden", "label.logout": "Abmelden", - "label.manage": "Manage", + "label.manage": "Verwalten", "label.manager": "Manager", "label.max": "Max", - "label.member": "Member", + "label.member": "Mitglied", "label.members": "Mitglieder", "label.min": "Min", "label.mobile": "Handy", "label.more": "Mehr", - "label.my-account": "My account", + "label.my-account": "Mein Konto", "label.my-websites": "Meine Websites", "label.name": "Name", "label.new-password": "Neues Passwort", @@ -133,11 +133,11 @@ "label.pages": "Seiten", "label.password": "Passwort", "label.powered-by": "Betrieben durch {name}", - "label.previous": "Previous", - "label.previous-period": "Previous period", - "label.previous-year": "Previous year", + "label.previous": "Vorherige", + "label.previous-period": "Vorheriger Zeitraum", + "label.previous-year": "Vorheriges Jahr", "label.profile": "Profil", - "label.property": "Property", + "label.property": "Besitz", "label.queries": "Abfragen", "label.query": "Abfrage", "label.query-parameters": "Abfrageparameter", @@ -149,33 +149,33 @@ "label.region": "Region", "label.regions": "Regionen", "label.remove": "Entfernen", - "label.remove-member": "Remove member", + "label.remove-member": "Mitglied entfernen", "label.reports": "Berichte", "label.required": "Erforderlich", "label.reset": "Zurücksetzen", "label.reset-website": "Statistik zurücksetzen", "label.retention": "Retention", - "label.retention-description": "Measure your website stickiness by tracking how often users return.", + "label.retention-description": "Messen Sie die Presenz Ihrer Website, indem Sie tracken wie oft Nutzer zurückkehren.", "label.role": "Rolle", "label.run-query": "Abfrage starten", "label.save": "Speichern", "label.screens": "Bildschirmauflösungen", - "label.search": "Search", - "label.select": "Select", + "label.search": "Suche", + "label.select": "Auswählen", "label.select-date": "Datum auswählen", - "label.select-role": "Select role", + "label.select-role": "Rolle auswählen", "label.select-website": "Website auswählen", "label.sessions": "Sitzungen", "label.settings": "Einstellungen", "label.share-url": "Freigabe-URL", "label.single-day": "Ein Tag", - "label.start-step": "Start Step", - "label.steps": "Steps", + "label.start-step": "Schritt starten", + "label.steps": "Schritte", "label.sum": "Summe", "label.tablet": "Tablet", "label.team": "Team", "label.team-id": "Team-ID", - "label.team-manager": "Team manager", + "label.team-manager": "Team-Manager", "label.team-member": "Team-Mitglied", "label.team-name": "Name des Teams", "label.team-owner": "Team-Eigentümer", @@ -193,8 +193,8 @@ "label.total": "Gesamt", "label.total-records": "Datensätze insgesamt", "label.tracking-code": "Tracking Code", - "label.transfer": "Transfer", - "label.transfer-website": "Transfer website", + "label.transfer": "Übertragung", + "label.transfer-website": "Website übertragen", "label.true": "Wahr", "label.type": "Typ", "label.unique": "Eindeutig", @@ -208,29 +208,29 @@ "label.username": "Benutzername", "label.users": "Benutzer", "label.utm": "UTM", - "label.utm-description": "Track your campaigns through UTM parameters.", + "label.utm-description": "Tracken Sie Ihre Kampagnen mit Hilfe von UTM Parametern.", "label.value": "Wert", "label.view": "Anzeigen", "label.view-details": "Details anzeigen", "label.view-only": "Nur ansehen", "label.views": "Aufrufe", - "label.views-per-visit": "Views per visit", + "label.views-per-visit": "Aufrufe pro Besuch", "label.visit-duration": "Durchschn. Besuchszeit", "label.visitors": "Besucher", - "label.visits": "Visits", + "label.visits": "Besuche", "label.website": "Website", "label.website-id": "Website ID", "label.websites": "Websites", "label.window": "Fenster", "label.yesterday": "Gestern", - "message.action-confirmation": "Type {confirmation} in the box below to confirm.", + "message.action-confirmation": "Tippen Sie {confirmation} in das untenliegende Feld, um zu bestätigen.", "message.active-users": "{x} {x, plural, one {aktiver Besucher} other {aktive Besucher}}", - "message.collected-data": "Collected data", + "message.collected-data": "Gesammelte Daten", "message.confirm-delete": "Sind Sie sich sicher, {target} zu löschen?", "message.confirm-leave": "Sind Sie sicher, dass die {target} verlassen möchten?", - "message.confirm-remove": "Are you sure you want to remove {target}?", + "message.confirm-remove": "Sind Sie sicher, dass Sie {target} entfernen möchten?", "message.confirm-reset": "Sind Sie sicher, dass Sie die Statistiken von {target} zurücksetzen wollen?", - "message.delete-team-warning": "Deleting a team will also delete all team websites.", + "message.delete-team-warning": "Alle zugehörigen Websiten werden ebenfalls gelöscht.", "message.delete-website-warning": "Alle zugehörigen Daten werden ebenfalls gelöscht.", "message.error": "Es ist ein Fehler aufgetreten.", "message.event-log": "{event} auf {url}", @@ -256,12 +256,12 @@ "message.team-not-found": "Team nicht gefunden.", "message.team-websites-info": "Websites können von jedem im Team eingesehen werden.", "message.tracking-code": "Tracking Code", - "message.transfer-team-website-to-user": "Transfer this website to your account?", - "message.transfer-user-website-to-team": "Select the team to transfer this website to.", - "message.transfer-website": "Transfer website ownership to your account or another team.", - "message.triggered-event": "Triggered event", + "message.transfer-team-website-to-user": "Möchten Sie diese Website auf Ihr Konto übertragen?", + "message.transfer-user-website-to-team": "Wählen Sie das Team, auf das die Website übertragen wird.", + "message.transfer-website": "Übertragen Sie den Besitz der Website auf Ihren Account oder ein anderes Team.", + "message.triggered-event": "Event ausgelöst", "message.user-deleted": "Benutzer gelöscht.", - "message.viewed-page": "Viewed page", + "message.viewed-page": "Seite besucht", "message.visitor-log": "Besucher aus {country} benutzt {browser} auf {os} {device}", - "message.visitors-dropped-off": "Visitors dropped off" + "message.visitors-dropped-off": "Besucher haben die Seite verlassen" } From 05894df58fc61d1096b846703f02ab7f9ab3fdf8 Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Mon, 1 Jul 2024 12:18:43 -0700 Subject: [PATCH 15/26] replace count(distinct with uniq for session / visits --- src/queries/analytics/getWebsiteStats.ts | 4 ++-- src/queries/analytics/sessions/getSessionMetrics.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/queries/analytics/getWebsiteStats.ts b/src/queries/analytics/getWebsiteStats.ts index 6257e166..2f3c82e8 100644 --- a/src/queries/analytics/getWebsiteStats.ts +++ b/src/queries/analytics/getWebsiteStats.ts @@ -71,8 +71,8 @@ async function clickhouseQuery( ` select sum(t.c) as "pageviews", - count(distinct t.session_id) as "visitors", - count(distinct t.visit_id) as "visits", + uniq(t.session_id) as "visitors", + uniq(t.visit_id) as "visits", sum(if(t.c = 1, 1, 0)) as "bounces", sum(max_time-min_time) as "totaltime" from ( diff --git a/src/queries/analytics/sessions/getSessionMetrics.ts b/src/queries/analytics/sessions/getSessionMetrics.ts index e28f1fb2..e522a7ef 100644 --- a/src/queries/analytics/sessions/getSessionMetrics.ts +++ b/src/queries/analytics/sessions/getSessionMetrics.ts @@ -75,7 +75,7 @@ async function clickhouseQuery( ` select ${column} x, - count(distinct session_id) y + uniq(session_id) y ${includeCountry ? ', country' : ''} from website_event where website_id = {websiteId:UUID} From d501410a63ac151000356274f22a1e3403c8936d Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Thu, 4 Jul 2024 15:55:06 -0700 Subject: [PATCH 16/26] Fixed console command. Updated packages. --- package.json | 2 +- src/app/(main)/console/TestConsole.tsx | 14 +- src/lib/detect.ts | 30 +- src/pages/api/send.ts | 31 +- yarn.lock | 575 ++++++++++++++----------- 5 files changed, 371 insertions(+), 281 deletions(-) diff --git a/package.json b/package.json index 9ef6f738..a7a3aba1 100644 --- a/package.json +++ b/package.json @@ -175,6 +175,6 @@ "tar": "^6.1.2", "ts-jest": "^29.1.2", "ts-node": "^10.9.1", - "typescript": "^5.4.3" + "typescript": "^5.5.3" } } diff --git a/src/app/(main)/console/TestConsole.tsx b/src/app/(main)/console/TestConsole.tsx index d0afb14c..7461454f 100644 --- a/src/app/(main)/console/TestConsole.tsx +++ b/src/app/(main)/console/TestConsole.tsx @@ -21,8 +21,12 @@ export function TestConsole({ websiteId }: { websiteId: string }) { router.push(`/console/${value}`); } - function handleClick() { - window['umami'].track({ url: '/page-view', referrer: 'https://www.google.com' }); + function handleRunScript() { + window['umami'].track(props => ({ + ...props, + url: '/page-view', + referrer: 'https://www.google.com', + })); window['umami'].track('track-event-no-data'); window['umami'].track('track-event-with-data', { test: 'test-data', @@ -44,7 +48,7 @@ export function TestConsole({ websiteId }: { websiteId: string }) { }); } - function handleIdentifyClick() { + function handleRunIdentify() { window['umami'].identify({ userId: 123, name: 'brian', @@ -145,10 +149,10 @@ export function TestConsole({ websiteId }: { websiteId: string }) {
Javascript events
- -
diff --git a/src/lib/detect.ts b/src/lib/detect.ts index 64f70e6c..56a037ec 100644 --- a/src/lib/detect.ts +++ b/src/lib/detect.ts @@ -2,9 +2,9 @@ import path from 'path'; import { getClientIp } from 'request-ip'; import { browserName, detectOS } from 'detect-browser'; import isLocalhost from 'is-localhost-ip'; +import ipaddr from 'ipaddr.js'; import maxmind from 'maxmind'; import { safeDecodeURIComponent } from 'next-basics'; - import { DESKTOP_OS, MOBILE_OS, @@ -137,3 +137,31 @@ export async function getClientInfo(req: NextApiRequestCollect) { return { userAgent, browser, os, ip, country, subdivision1, subdivision2, city, device }; } + +export function hasBlockedIp(req: NextApiRequestCollect) { + const ignoreIps = process.env.IGNORE_IP; + + if (ignoreIps) { + const ips = []; + + if (ignoreIps) { + ips.push(...ignoreIps.split(',').map(n => n.trim())); + } + + const clientIp = getIpAddress(req); + + return ips.find(ip => { + if (ip === clientIp) return true; + + // CIDR notation + if (ip.indexOf('/') > 0) { + const addr = ipaddr.parse(clientIp); + const range = ipaddr.parseCIDR(ip); + + if (addr.kind() === range[0].kind() && addr.match(range)) return true; + } + }); + } + + return false; +} diff --git a/src/pages/api/send.ts b/src/pages/api/send.ts index ab565e6e..3431795e 100644 --- a/src/pages/api/send.ts +++ b/src/pages/api/send.ts @@ -1,4 +1,3 @@ -import ipaddr from 'ipaddr.js'; import { isbot } from 'isbot'; import { NextApiRequest, NextApiResponse } from 'next'; import { @@ -12,7 +11,7 @@ import { } from 'next-basics'; import { COLLECTION_TYPE, HOSTNAME_REGEX, IP_REGEX } from 'lib/constants'; import { secret, visitSalt, uuid } from 'lib/crypto'; -import { getIpAddress } from 'lib/detect'; +import { hasBlockedIp } from 'lib/detect'; import { useCors, useSession, useValidate } from 'lib/middleware'; import { CollectionType, YupRequest } from 'lib/types'; import { saveEvent, saveSessionData } from 'queries'; @@ -166,31 +165,3 @@ export default async (req: NextApiRequestCollect, res: NextApiResponse) => { return methodNotAllowed(res); }; - -function hasBlockedIp(req: NextApiRequestCollect) { - const ignoreIps = process.env.IGNORE_IP; - - if (ignoreIps) { - const ips = []; - - if (ignoreIps) { - ips.push(...ignoreIps.split(',').map(n => n.trim())); - } - - const clientIp = getIpAddress(req); - - return ips.find(ip => { - if (ip === clientIp) return true; - - // CIDR notation - if (ip.indexOf('/') > 0) { - const addr = ipaddr.parse(clientIp); - const range = ipaddr.parseCIDR(ip); - - if (addr.kind() === range[0].kind() && addr.match(range)) return true; - } - }); - } - - return false; -} diff --git a/yarn.lock b/yarn.lock index 90f3da53..7944a0c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1126,13 +1126,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.23.2": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" - integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/template@^7.22.15", "@babel/template@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" @@ -1565,14 +1558,6 @@ "@formatjs/intl-localematcher" "0.2.25" tslib "^2.1.0" -"@formatjs/ecma402-abstract@1.18.2": - version "1.18.2" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz#bf103712a406874eb1e387858d5be2371ab3aa14" - integrity sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA== - dependencies: - "@formatjs/intl-localematcher" "0.5.4" - tslib "^2.4.0" - "@formatjs/ecma402-abstract@1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.4.0.tgz#ac6c17a8fffac43c6d68c849a7b732626d32654c" @@ -1587,6 +1572,14 @@ dependencies: tslib "^2.0.1" +"@formatjs/ecma402-abstract@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz#39197ab90b1c78b7342b129a56a7acdb8f512e17" + integrity sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g== + dependencies: + "@formatjs/intl-localematcher" "0.5.4" + tslib "^2.4.0" + "@formatjs/fast-memoize@2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz#33bd616d2e486c3e8ef4e68c99648c196887802b" @@ -1603,13 +1596,13 @@ "@formatjs/icu-skeleton-parser" "1.3.6" tslib "^2.1.0" -"@formatjs/icu-messageformat-parser@2.7.6": - version "2.7.6" - resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.6.tgz#3d69806de056d2919d53dad895a5ff4851e4e9ff" - integrity sha512-etVau26po9+eewJKYoiBKP6743I1br0/Ie00Pb/S/PtmYfmjTcOn2YCh2yNkSZI12h6Rg+BOgQYborXk46BvkA== +"@formatjs/icu-messageformat-parser@2.7.8": + version "2.7.8" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz#f6d7643001e9bb5930d812f1f9a9856f30fa0343" + integrity sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA== dependencies: - "@formatjs/ecma402-abstract" "1.18.2" - "@formatjs/icu-skeleton-parser" "1.8.0" + "@formatjs/ecma402-abstract" "2.0.0" + "@formatjs/icu-skeleton-parser" "1.8.2" tslib "^2.4.0" "@formatjs/icu-skeleton-parser@1.3.6": @@ -1620,29 +1613,29 @@ "@formatjs/ecma402-abstract" "1.11.4" tslib "^2.1.0" -"@formatjs/icu-skeleton-parser@1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.0.tgz#5f3d3a620c687d6f8c180d80d1241e8f213acf79" - integrity sha512-QWLAYvM0n8hv7Nq5BEs4LKIjevpVpbGLAJgOaYzg9wABEoX1j0JO1q2/jVkO6CVlq0dbsxZCngS5aXbysYueqA== +"@formatjs/icu-skeleton-parser@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz#2252c949ae84ee66930e726130ea66731a123c9f" + integrity sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q== dependencies: - "@formatjs/ecma402-abstract" "1.18.2" + "@formatjs/ecma402-abstract" "2.0.0" tslib "^2.4.0" -"@formatjs/intl-displaynames@6.6.6": - version "6.6.6" - resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.6.tgz#be9fea4d24f577bb1a9d0f3ef4f2dcdabb4fe42d" - integrity sha512-Dg5URSjx0uzF8VZXtHb6KYZ6LFEEhCbAbKoYChYHEOnMFTw/ZU3jIo/NrujzQD2EfKPgQzIq73LOUvW6Z/LpFA== +"@formatjs/intl-displaynames@6.6.8": + version "6.6.8" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz#2f5afac8df83167f5a6ef8543600eaf1ef99c885" + integrity sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g== dependencies: - "@formatjs/ecma402-abstract" "1.18.2" + "@formatjs/ecma402-abstract" "2.0.0" "@formatjs/intl-localematcher" "0.5.4" tslib "^2.4.0" -"@formatjs/intl-listformat@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.5.tgz#e4c7d741f2201c65e7da71326726e61332c7161e" - integrity sha512-XoI52qrU6aBGJC9KJddqnacuBbPlb/bXFN+lIFVFhQ1RnFHpzuFrlFdjD9am2O7ZSYsyqzYRpkVcXeT1GHkwDQ== +"@formatjs/intl-listformat@7.5.7": + version "7.5.7" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz#125e05105fabd1ae5f11881d6ab74484f2098ee4" + integrity sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g== dependencies: - "@formatjs/ecma402-abstract" "1.18.2" + "@formatjs/ecma402-abstract" "2.0.0" "@formatjs/intl-localematcher" "0.5.4" tslib "^2.4.0" @@ -1668,17 +1661,17 @@ "@formatjs/ecma402-abstract" "1.4.0" tslib "^2.0.1" -"@formatjs/intl@2.10.2": - version "2.10.2" - resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.10.2.tgz#c074439ac2dbde4c2b3768b8108dfc3932b7fb30" - integrity sha512-raPGWr3JRv3neXV78SqPFrGC05fIbhhNzVghHNxFde27ls2KkXiMhtP7HBybjGpikVSjjhdhaZto+4p1vmm9bQ== +"@formatjs/intl@2.10.4": + version "2.10.4" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.10.4.tgz#e1819e0858fb05ca65923a020f346bc74e894e92" + integrity sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw== dependencies: - "@formatjs/ecma402-abstract" "1.18.2" + "@formatjs/ecma402-abstract" "2.0.0" "@formatjs/fast-memoize" "2.2.0" - "@formatjs/icu-messageformat-parser" "2.7.6" - "@formatjs/intl-displaynames" "6.6.6" - "@formatjs/intl-listformat" "7.5.5" - intl-messageformat "10.5.12" + "@formatjs/icu-messageformat-parser" "2.7.8" + "@formatjs/intl-displaynames" "6.6.8" + "@formatjs/intl-listformat" "7.5.7" + intl-messageformat "10.5.14" tslib "^2.4.0" "@formatjs/ts-transformer@3.9.4": @@ -2002,19 +1995,19 @@ integrity sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw== "@netlify/plugin-nextjs@^5.1.0": - version "5.2.2" - resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-5.2.2.tgz#3c283d335001f9e0fbcb4db75557e5fe1660db72" - integrity sha512-jV/P7o8+v1XaEGb7wvFfkF1fSLggAxjg7WYoBPkD3R93bsI6xmCDKBcUJ/6g7lqECRXt4dGKApSFtGk/pUmAHw== + version "5.3.3" + resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-5.3.3.tgz#414cb0f4c21e6b80d6127b824efb00ae2f732a89" + integrity sha512-QhvZLOHhPuTnh6TZ5G0/jtjAJ1Y52A67b39eygKv6znQUPti8p+8y2WulcntpCRzVp2stzEULMNPlnptna1ikg== "@next/env@14.2.4": version "14.2.4" resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.4.tgz#5546813dc4f809884a37d257b254a5ce1b0248d7" integrity sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg== -"@next/eslint-plugin-next@14.2.3": - version "14.2.3" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz#287ad8620e7061ba01e8d3313d464db6d217b6df" - integrity sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw== +"@next/eslint-plugin-next@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.4.tgz#c7f965cb76f0b454e726ef0f69157c4fb4e28f53" + integrity sha512-svSFxW9f3xDaZA3idQmlFw7SusOuWTpDTAeBlO3AEPDltrraV+lqs7mAc6A27YdnpQVVIA3sODqUAAHdWhVWsA== dependencies: glob "10.3.10" @@ -2216,9 +2209,9 @@ slash "^4.0.0" "@rollup/plugin-commonjs@^25.0.4": - version "25.0.7" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz#145cec7589ad952171aeb6a585bbeabd0fd3b4cf" - integrity sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ== + version "25.0.8" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz#c77e608ab112a666b7f2a6bea625c73224f7dd34" + integrity sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A== dependencies: "@rollup/pluginutils" "^5.0.1" commondir "^1.0.1" @@ -2247,9 +2240,9 @@ resolve "^1.22.1" "@rollup/plugin-replace@^5.0.2": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz#33d5653dce6d03cb24ef98bef7f6d25b57faefdf" - integrity sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ== + version "5.0.7" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.7.tgz#150c9ee9db8031d9e4580a61a0edeaaed3d37687" + integrity sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ== dependencies: "@rollup/pluginutils" "^5.0.1" magic-string "^0.30.3" @@ -2273,9 +2266,9 @@ picomatch "^2.3.1" "@rushstack/eslint-patch@^1.3.3": - version "1.10.2" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz#053f1540703faa81dea2966b768ee5581c66aeda" - integrity sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw== + version "1.10.3" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz#391d528054f758f81e53210f1a1eebcf1a8b1d20" + integrity sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -2430,17 +2423,17 @@ "@swc/counter" "^0.1.3" tslib "^2.4.0" -"@tanstack/query-core@5.35.5": - version "5.35.5" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.35.5.tgz#7b4100dc9cc7fee314b8a1bcbf502a236d43ffe3" - integrity sha512-OMWvlEqG01RfGj+XZb/piDzPp0eZkkHWSDHt2LvE/fd1zWburP/xwm0ghk6Iv8cuPlP+ACFkZviKXK0OVt6lhg== +"@tanstack/query-core@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.48.0.tgz#a3308ec925d8c16d64c789899d6c084c2fe30cbc" + integrity sha512-lZAfPPeVIqXCswE9SSbG33B6/91XOWt/Iq41bFeWb/mnHwQSIfFRbkS4bfs+WhIk9abRArF9Id2fp0Mgo+hq6Q== "@tanstack/react-query@^5.28.6": - version "5.35.5" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.35.5.tgz#d41a087d58f42418824fa04aaca00ba93c99075c" - integrity sha512-sppX7L+PVn5GBV3In6zzj0zcKfnZRKhXbX1MfIfKo1OjIq2GMaopvAFOP0x1bRYTUk2ikrdYcQYOozX7PWkb8A== + version "5.48.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.48.0.tgz#7890620272b48aeb278498dfe082f27518f3ac6d" + integrity sha512-GDExbjYWzvDokyRqMSWXdrPiYpp95Aig0oeMIrxTaruOJJgWiWfUP//OAaowm2RrRkGVsavSZdko/XmIrrV2Nw== dependencies: - "@tanstack/query-core" "5.35.5" + "@tanstack/query-core" "5.48.0" "@trysound/sax@0.2.0": version "0.2.0" @@ -2525,21 +2518,16 @@ dependencies: cypress "*" -"@types/estree@*": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.3.tgz#2be19e759a3dd18c79f9f436bd7363556c1a73dd" - integrity sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ== +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/estree@^0.0.50": version "0.0.50" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== -"@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - "@types/fs-extra@^8.0.1": version "8.1.4" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.4.tgz#8171df1d16a80d69fc9c3aab07d7961349a5cb8b" @@ -2653,9 +2641,9 @@ integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node@*", "@types/node@^20.9.0": - version "20.12.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be" - integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw== + version "20.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" + integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== dependencies: undici-types "~5.26.4" @@ -2704,9 +2692,9 @@ "@types/react" "*" "@types/react@*", "@types/react@16 || 17 || 18", "@types/react@^18.2.41": - version "18.3.1" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.1.tgz#fed43985caa834a2084d002e4771e15dfcbdbe8e" - integrity sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw== + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -3209,14 +3197,14 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== +aria-query@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: - dequal "^2.0.3" + deep-equal "^2.0.5" -array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -3229,7 +3217,7 @@ array-find-index@^1.0.1: resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== -array-includes@^3.1.6, array-includes@^3.1.7: +array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: version "3.1.8" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== @@ -3246,7 +3234,7 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlast@^1.2.4: +array.prototype.findlast@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== @@ -3300,15 +3288,15 @@ array.prototype.toreversed@^1.1.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" - integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.1.0" + es-abstract "^1.23.3" + es-errors "^1.3.0" es-shim-unscopables "^1.0.2" arraybuffer.prototype.slice@^1.0.3: @@ -3392,21 +3380,21 @@ aws-sign2@~0.7.0: integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + version "1.13.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.0.tgz#d9b802e9bb9c248d7be5f7f5ef178dc3684e9dcc" + integrity sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g== -axe-core@=4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" - integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== +axe-core@^4.9.1: + version "4.9.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae" + integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw== -axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== +axobject-query@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" + integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== dependencies: - dequal "^2.0.3" + deep-equal "^2.0.5" babel-jest@^29.7.0: version "29.7.0" @@ -3565,7 +3553,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2: +braces@^3.0.2, braces@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -3754,9 +3742,9 @@ charenc@0.0.2: integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== chart.js@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.2.tgz#95962fa6430828ed325a480cc2d5f2b4e385ac31" - integrity sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg== + version "4.4.3" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.3.tgz#3b2e11e7010fefa99b07d0349236f5098e5226ad" + integrity sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw== dependencies: "@kurkle/color" "^0.3.0" @@ -3810,9 +3798,9 @@ cli-cursor@^4.0.0: restore-cursor "^4.0.0" cli-table3@~0.6.1: - version "0.6.4" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.4.tgz#d1c536b8a3f2e7bec58f67ac9e5769b1b30088b0" - integrity sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw== + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== dependencies: string-width "^4.2.0" optionalDependencies: @@ -4267,9 +4255,9 @@ cypress@*: yauzl "^2.10.0" cypress@^13.6.6: - version "13.9.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.9.0.tgz#b529cfa8f8c39ba163ed0501a25bb5b09c143652" - integrity sha512-atNjmYfHsvTuCaxTxLZr9xGoHz53LLui3266WWxXJHY7+N6OdwJdg/feEa3T+buez9dmUXHT1izCOklqG82uCQ== + version "13.12.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.12.0.tgz#1a4ea89b7fa6855e32bc02eaf5e25fc45b9e273f" + integrity sha512-udzS2JilmI9ApO/UuqurEwOvThclin5ntz7K0BtnHBs+tg2Bl9QShLISXpSEMDv/u8b6mqdoAdyKeZiSqKWL8g== dependencies: "@cypress/request" "^3.0.0" "@cypress/xvfb" "^1.2.4" @@ -4461,7 +4449,7 @@ debounce@^1.2.1: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4.3.4, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4475,6 +4463,13 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.1.1, debug@^4.3.4: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -4498,6 +4493,30 @@ dedent@^1.0.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== +deep-equal@^2.0.5: + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.5" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.2" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.13" + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -4517,7 +4536,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -4559,11 +4578,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - detect-browser@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" @@ -4731,9 +4745,9 @@ end-of-stream@^1.1.0: once "^1.4.0" enhanced-resolve@^5.12.0: - version "5.16.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" - integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== + version "5.17.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" + integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -4763,7 +4777,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: +es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -4822,12 +4836,27 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17: +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + +es-iterator-helpers@^1.0.19: version "1.0.19" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== @@ -4933,11 +4962,11 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-next@^14.0.4: - version "14.2.3" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.2.3.tgz#2fb0f7c4eccda530a4b5054438162b2303786d4f" - integrity sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg== + version "14.2.4" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.2.4.tgz#eb0bedfe4a894bc2aea918214bb5243ee4fa7d4b" + integrity sha512-Qr0wMgG9m6m4uYy2jrYJmyuNlYZzPRQq5Kvb9IDlYwn+7yq6W6sfMNFgb+9guM1KYwuIo6TIaiFhZJ6SnQ/Efw== dependencies: - "@next/eslint-plugin-next" "14.2.3" + "@next/eslint-plugin-next" "14.2.4" "@rushstack/eslint-patch" "^1.3.3" "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" eslint-import-resolver-node "^0.3.6" @@ -5032,26 +5061,26 @@ eslint-plugin-jest@^27.9.0: "@typescript-eslint/utils" "^5.10.0" eslint-plugin-jsx-a11y@^6.7.1: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" - integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== + version "6.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz#67ab8ff460d4d3d6a0b4a570e9c1670a0a8245c8" + integrity sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g== dependencies: - "@babel/runtime" "^7.23.2" - aria-query "^5.3.0" - array-includes "^3.1.7" + aria-query "~5.1.3" + array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" - axe-core "=4.7.0" - axobject-query "^3.2.1" + axe-core "^4.9.1" + axobject-query "~3.1.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.15" - hasown "^2.0.0" + es-iterator-helpers "^1.0.19" + hasown "^2.0.2" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.0" eslint-plugin-prettier@^4.0.0: version "4.2.1" @@ -5061,9 +5090,9 @@ eslint-plugin-prettier@^4.0.0: prettier-linter-helpers "^1.0.0" eslint-plugin-promise@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" - integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + version "6.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz#e24ab0e3c0a25fa227d98d9ff612156b5af15945" + integrity sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA== "eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": version "4.6.2" @@ -5071,28 +5100,28 @@ eslint-plugin-promise@^6.1.1: integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react@^7.33.2: - version "7.34.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" - integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== + version "7.34.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz#9965f27bd1250a787b5d4cfcc765e5a5d58dcb7b" + integrity sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA== dependencies: - array-includes "^3.1.7" - array.prototype.findlast "^1.2.4" + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" array.prototype.flatmap "^1.3.2" array.prototype.toreversed "^1.1.2" - array.prototype.tosorted "^1.1.3" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.17" + es-iterator-helpers "^1.0.19" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" - object.hasown "^1.1.3" - object.values "^1.1.7" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.hasown "^1.1.4" + object.values "^1.2.0" prop-types "^15.8.1" resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.10" + string.prototype.matchall "^4.0.11" eslint-scope@^5.1.1: version "5.1.1" @@ -5489,9 +5518,9 @@ for-each@^0.3.3: is-callable "^1.1.3" foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + version "3.2.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" @@ -5609,7 +5638,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -6039,7 +6068,7 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.7: +internal-slot@^1.0.4, internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -6068,14 +6097,14 @@ intl-messageformat-parser@^5.3.7: dependencies: "@formatjs/intl-numberformat" "^5.5.2" -intl-messageformat@10.5.12: - version "10.5.12" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.12.tgz#a0c1a20da896b7a1f4ba1b59c8ba5d9943c29c3f" - integrity sha512-izl0uxhy/melhw8gP2r8pGiVieviZmM4v5Oqx3c1/R7g9cwER2smmGfSjcIsp8Y3Q53bfciL/gkxacJRx/dUvg== +intl-messageformat@10.5.14: + version "10.5.14" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.14.tgz#e5bb373f8a37b88fbe647d7b941f3ab2a37ed00a" + integrity sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w== dependencies: - "@formatjs/ecma402-abstract" "1.18.2" + "@formatjs/ecma402-abstract" "2.0.0" "@formatjs/fast-memoize" "2.2.0" - "@formatjs/icu-messageformat-parser" "2.7.6" + "@formatjs/icu-messageformat-parser" "2.7.8" tslib "^2.4.0" ipaddr.js@^2.0.1: @@ -6083,7 +6112,15 @@ ipaddr.js@^2.0.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== -is-array-buffer@^3.0.4: +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -6142,7 +6179,14 @@ is-ci@^3.0.1: dependencies: ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0: +is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" + integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== + dependencies: + hasown "^2.0.2" + +is-core-module@^2.5.0: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== @@ -6222,7 +6266,7 @@ is-localhost-ip@^1.4.0: resolved "https://registry.yarnpkg.com/is-localhost-ip/-/is-localhost-ip-1.4.0.tgz#dd66aaabcbb5dbbc943e00adad5f715d2c3b3a1d" integrity sha512-cN7SzlY7BVxSeoJu5equjsZaKSgD4HCfXrTwu0Jgbq5BbT1BU+D7Lyi/l1KO8H0un0JTlxcQaT/GWVapu+DIDg== -is-map@^2.0.3: +is-map@^2.0.2, is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== @@ -6294,7 +6338,7 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.3: +is-set@^2.0.2, is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== @@ -6373,9 +6417,9 @@ isarray@^2.0.5: integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isbot@^5.1.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/isbot/-/isbot-5.1.6.tgz#579a48515e92a3e064da63a41709815d8e641a30" - integrity sha512-Phksj1A0dBP/M/5xeOx0zWemKlZRQvrbNzI19/HWso0uodiOcR8YYCXN60IdzwbKsGj5LnxPkMy6FuBtgckMNw== + version "5.1.11" + resolved "https://registry.yarnpkg.com/isbot/-/isbot-5.1.11.tgz#55e91e887c806a5f07d18ce04c2efe194215ba36" + integrity sha512-Asuou7OsKVbATgXlrlqdeSRw4fYnD6CNcc0IXy1f5m1AImL2S6IP0xRcRRzjGjoARbegvnBnju9kk5z/Itf70Q== isexe@^2.0.0: version "2.0.0" @@ -7033,9 +7077,9 @@ known-css-properties@^0.29.0: integrity sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ== language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== language-tags@^1.0.9: version "1.0.9" @@ -7290,9 +7334,9 @@ lower-case@^2.0.2: tslib "^2.0.3" lru-cache@^10.2.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + version "10.3.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.3.0.tgz#4a4aaf10c84658ab70f79a85a9a3f1e1fb11196b" + integrity sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ== lru-cache@^5.1.1: version "5.1.1" @@ -7308,13 +7352,20 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -magic-string@^0.30.0, magic-string@^0.30.2, magic-string@^0.30.3: +magic-string@^0.30.0, magic-string@^0.30.2: version "0.30.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" +magic-string@^0.30.3: + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -7357,11 +7408,11 @@ mathml-tag-names@^2.1.3: integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== maxmind@^4.3.6: - version "4.3.19" - resolved "https://registry.yarnpkg.com/maxmind/-/maxmind-4.3.19.tgz#da97391185b41373961685419f0f12dfd7b97ff9" - integrity sha512-Bu/VEN7ZWAOCjifdZaXJQuN6/yO7+OK35pnJsqmz8sOndK3KQFvJoY+6HX09/MmLLqtCfa+sMK0iaQOaTejGNA== + version "4.3.20" + resolved "https://registry.yarnpkg.com/maxmind/-/maxmind-4.3.20.tgz#1b85c4b0d9a8df072c5cbe50dc5c54c130a02889" + integrity sha512-xwnLGghs96DyNK3ANs1jzW8+JwS6pBQ3eTh3kNsi23n5wySZb9FgqCghmde5JZFOv23bxGehcyh6lT522llNKw== dependencies: - mmdb-lib "2.1.0" + mmdb-lib "2.1.1" tiny-lru "11.2.6" md5@^2.3.0: @@ -7443,7 +7494,7 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@4.0.5, micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@4.0.5, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -7451,6 +7502,14 @@ micromatch@4.0.5, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +micromatch@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -7500,9 +7559,9 @@ minimatch@^5.0.1: brace-expansion "^2.0.1" minimatch@^9.0.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -7533,9 +7592,9 @@ minipass@^5.0.0: integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.1.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481" - integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA== + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== minizlib@^2.1.1: version "2.1.2" @@ -7550,10 +7609,10 @@ mkdirp@^1.0.3: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mmdb-lib@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mmdb-lib/-/mmdb-lib-2.1.0.tgz#c2456caaf4c7ffa056f77575da6d40988e9e878b" - integrity sha512-tdDTZmnI5G4UoSctv2KxM/3VQt2XRj4CmR5R4VsAWsOUcS3LysHR34wtixWm/pXxXdkBDuN92auxkC0T2+qd1Q== +mmdb-lib@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/mmdb-lib/-/mmdb-lib-2.1.1.tgz#c0d0bd35dc1fca41f0ebd043e43227ab04eb1792" + integrity sha512-yx8H/1H5AfnufiLnzzPqPf4yr/dKU9IFT1rPVwSkrKWHsQEeVVd6+X+L0nUbXhlEFTu3y/7hu38CFmEVgzvyeg== moment-timezone@^0.5.35: version "0.5.45" @@ -7743,9 +7802,17 @@ object-assign@^4, object-assign@^4.1.1: integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" object-keys@^1.1.1: version "1.1.1" @@ -7762,7 +7829,7 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.7: +object.entries@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== @@ -7771,7 +7838,7 @@ object.entries@^1.1.7: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.7: +object.fromentries@^2.0.7, object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -7790,7 +7857,7 @@ object.groupby@^1.0.1: define-properties "^1.2.1" es-abstract "^1.23.2" -object.hasown@^1.1.3: +object.hasown@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== @@ -7799,7 +7866,7 @@ object.hasown@^1.1.3: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.values@^1.1.6, object.values@^1.1.7: +object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -7969,9 +8036,9 @@ path-parse@^1.0.7: integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-scurry@^1.10.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.0.tgz#332d64e9726bf667fb348e5a1c71005c09ad741a" - integrity sha512-LNHTaVkzaYaLGlO+0u3rQTz7QrHTFOuKyba9JMTQutkmtNew8dw8wOD7mTU/5fCPZzCWpfW0XnQKzY61P0aTaw== + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -8810,19 +8877,19 @@ react-hook-form@^7.34.2: integrity sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg== react-intl@^6.5.5: - version "6.6.6" - resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.6.6.tgz#67979f790263c5ebd95b6ea581110eea3e7b550f" - integrity sha512-dKXQNUrhZTlCp8uelYW8PHiM4saNKyLmHCfsJYWK0N/kZ/Ien35wjPHB8x9yQcTJbeN/hBOmb4x16iKUrdL9MA== + version "6.6.8" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.6.8.tgz#cb60c90502d0025caf9f86ec298cdc4348da17c2" + integrity sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA== dependencies: - "@formatjs/ecma402-abstract" "1.18.2" - "@formatjs/icu-messageformat-parser" "2.7.6" - "@formatjs/intl" "2.10.2" - "@formatjs/intl-displaynames" "6.6.6" - "@formatjs/intl-listformat" "7.5.5" + "@formatjs/ecma402-abstract" "2.0.0" + "@formatjs/icu-messageformat-parser" "2.7.8" + "@formatjs/intl" "2.10.4" + "@formatjs/intl-displaynames" "6.6.8" + "@formatjs/intl-listformat" "7.5.7" "@types/hoist-non-react-statics" "^3.3.1" "@types/react" "16 || 17 || 18" hoist-non-react-statics "^3.3.2" - intl-messageformat "10.5.12" + intl-messageformat "10.5.14" tslib "^2.4.0" react-is@^16.13.1, react-is@^16.7.0: @@ -9018,7 +9085,7 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -9141,9 +9208,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" - integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" @@ -9567,6 +9634,13 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" @@ -9617,7 +9691,15 @@ string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.10: +string.prototype.includes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" + integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.matchall@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== @@ -9770,9 +9852,9 @@ stylelint-config-prettier@^9.0.3: integrity sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA== stylelint-config-recommended@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz#b395c7014838d2aaca1755eebd914d0bb5274994" - integrity sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ== + version "14.0.1" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz#d25e86409aaf79ee6c6085c2c14b33c7e23c90c6" + integrity sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg== stylelint-scss@^6.0.0: version "6.1.0" @@ -10037,9 +10119,9 @@ ts-api-utils@^1.0.1: integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== ts-jest@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" - integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== + version "29.1.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.5.tgz#d6c0471cc78bffa2cb4664a0a6741ef36cfe8f69" + integrity sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg== dependencies: bs-logger "0.x" fast-json-stable-stringify "2.x" @@ -10084,11 +10166,16 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.0.1, tslib@^2.0.3: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.1.0, tslib@^2.4.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -10206,10 +10293,10 @@ typescript@^4.0, typescript@^4.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -typescript@^5.4.3: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@^5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" + integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== unbox-primitive@^1.0.2: version "1.0.2" @@ -10415,7 +10502,7 @@ which-collection@^1.0.1: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -10607,8 +10694,8 @@ yup@^0.32.11: toposort "^2.0.2" zustand@^4.3.8: - version "4.5.2" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.2.tgz#fddbe7cac1e71d45413b3682cdb47b48034c3848" - integrity sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g== + version "4.5.4" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.4.tgz#63abdd81edfb190bc61e0bbae045cc4d52158a05" + integrity sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg== dependencies: use-sync-external-store "1.2.0" From 9bf34bd5e48a86d7ee3038203b865022d75514e3 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Thu, 4 Jul 2024 20:30:15 -0700 Subject: [PATCH 17/26] Support Clickhouse insert without Kafka. --- src/lib/clickhouse.ts | 11 +++++++++-- src/queries/analytics/eventData/saveEventData.ts | 8 +++++++- src/queries/analytics/events/saveEvent.ts | 8 +++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/lib/clickhouse.ts b/src/lib/clickhouse.ts index b6d0fc3f..cd057cd7 100644 --- a/src/lib/clickhouse.ts +++ b/src/lib/clickhouse.ts @@ -32,7 +32,7 @@ function getClient() { } = new URL(process.env.CLICKHOUSE_URL); const client = createClient({ - host: `${protocol}//${hostname}:${port}`, + url: `${protocol}//${hostname}:${port}`, database: pathname.replace('/', ''), username: username, password, @@ -136,7 +136,13 @@ async function rawQuery( format: 'JSONEachRow', }); - return resultSet.json(); + return resultSet.json() as T; +} + +async function insert(table: string, values: any[]) { + await connect(); + + return clickhouse.insert({ table, values, format: 'JSONEachRow' }); } async function findUnique(data: any[]) { @@ -172,4 +178,5 @@ export default { findUnique, findFirst, rawQuery, + insert, }; diff --git a/src/queries/analytics/eventData/saveEventData.ts b/src/queries/analytics/eventData/saveEventData.ts index 0ed3c8b0..222e8b73 100644 --- a/src/queries/analytics/eventData/saveEventData.ts +++ b/src/queries/analytics/eventData/saveEventData.ts @@ -3,6 +3,7 @@ import { DATA_TYPE } from 'lib/constants'; import { uuid } from 'lib/crypto'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import { flattenJSON, getStringValue } from 'lib/data'; +import clickhouse from 'lib/clickhouse'; import kafka from 'lib/kafka'; import prisma from 'lib/prisma'; import { DynamicData } from 'lib/types'; @@ -59,6 +60,7 @@ async function clickhouseQuery(data: { }) { const { websiteId, sessionId, eventId, urlPath, eventName, eventData, createdAt } = data; + const { insert } = clickhouse; const { getDateFormat, sendMessages } = kafka; const jsonKeys = flattenJSON(eventData); @@ -79,7 +81,11 @@ async function clickhouseQuery(data: { }; }); - await sendMessages(messages, 'event_data'); + if (kafka.enabled) { + await sendMessages(messages, 'event_data'); + } else { + await insert('event_data', messages); + } return data; } diff --git a/src/queries/analytics/events/saveEvent.ts b/src/queries/analytics/events/saveEvent.ts index 25bcf9e7..9a5787a3 100644 --- a/src/queries/analytics/events/saveEvent.ts +++ b/src/queries/analytics/events/saveEvent.ts @@ -1,5 +1,6 @@ import { EVENT_NAME_LENGTH, URL_LENGTH, EVENT_TYPE, PAGE_TITLE_LENGTH } from 'lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import clickhouse from 'lib/clickhouse'; import kafka from 'lib/kafka'; import prisma from 'lib/prisma'; import { uuid } from 'lib/crypto'; @@ -134,6 +135,7 @@ async function clickhouseQuery(data: { city, ...args } = data; + const { insert } = clickhouse; const { getDateFormat, sendMessage } = kafka; const eventId = uuid(); const createdAt = getDateFormat(new Date()); @@ -164,7 +166,11 @@ async function clickhouseQuery(data: { created_at: createdAt, }; - await sendMessage(message, 'event'); + if (kafka.enabled) { + await sendMessage(message, 'event'); + } else { + await insert('website_event', [message]); + } if (eventData) { await saveEventData({ From 26462cffbc697b23527415005639cc6a7e183afa Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Fri, 5 Jul 2024 02:04:51 -0700 Subject: [PATCH 18/26] Support clickhouse for save session data. --- src/queries/analytics/sessions/saveSessionData.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/queries/analytics/sessions/saveSessionData.ts b/src/queries/analytics/sessions/saveSessionData.ts index 429c6e28..6ab5d6ae 100644 --- a/src/queries/analytics/sessions/saveSessionData.ts +++ b/src/queries/analytics/sessions/saveSessionData.ts @@ -5,6 +5,7 @@ import prisma from 'lib/prisma'; import { DynamicData } from 'lib/types'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import kafka from 'lib/kafka'; +import clickhouse from 'lib/clickhouse'; export async function saveSessionData(data: { websiteId: string; @@ -81,6 +82,7 @@ async function clickhouseQuery(data: { }) { const { websiteId, sessionId, sessionData, createdAt } = data; + const { insert } = clickhouse; const { getDateFormat, sendMessages } = kafka; const jsonKeys = flattenJSON(sessionData); @@ -98,7 +100,11 @@ async function clickhouseQuery(data: { }; }); - await sendMessages(messages, 'session_data'); + if (kafka.enabled) { + await sendMessages(messages, 'session_data'); + } else { + await insert('event_data', messages); + } return data; } From 72b3b6158ab3999767de351e30122ac56f2dd4cf Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Fri, 5 Jul 2024 02:29:12 -0700 Subject: [PATCH 19/26] Changed kafka method signature. --- src/lib/kafka.ts | 4 ++-- src/queries/analytics/eventData/saveEventData.ts | 2 +- src/queries/analytics/events/saveEvent.ts | 2 +- src/queries/analytics/sessions/saveSessionData.ts | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/kafka.ts b/src/lib/kafka.ts index da38baa4..76692afb 100644 --- a/src/lib/kafka.ts +++ b/src/lib/kafka.ts @@ -61,8 +61,8 @@ function getDateFormat(date: Date, format?: string): string { } async function sendMessage( - message: { [key: string]: string | number }, topic: string, + message: { [key: string]: string | number }, ): Promise { await connect(); @@ -77,7 +77,7 @@ async function sendMessage( }); } -async function sendMessages(messages: { [key: string]: string | number }[], topic: string) { +async function sendMessages(topic: string, messages: { [key: string]: string | number }[]) { await connect(); await producer.send({ diff --git a/src/queries/analytics/eventData/saveEventData.ts b/src/queries/analytics/eventData/saveEventData.ts index 222e8b73..9c7218e9 100644 --- a/src/queries/analytics/eventData/saveEventData.ts +++ b/src/queries/analytics/eventData/saveEventData.ts @@ -82,7 +82,7 @@ async function clickhouseQuery(data: { }); if (kafka.enabled) { - await sendMessages(messages, 'event_data'); + await sendMessages('event_data', messages); } else { await insert('event_data', messages); } diff --git a/src/queries/analytics/events/saveEvent.ts b/src/queries/analytics/events/saveEvent.ts index 9a5787a3..cd41b7a3 100644 --- a/src/queries/analytics/events/saveEvent.ts +++ b/src/queries/analytics/events/saveEvent.ts @@ -167,7 +167,7 @@ async function clickhouseQuery(data: { }; if (kafka.enabled) { - await sendMessage(message, 'event'); + await sendMessage('event', message); } else { await insert('website_event', [message]); } diff --git a/src/queries/analytics/sessions/saveSessionData.ts b/src/queries/analytics/sessions/saveSessionData.ts index 6ab5d6ae..1f5c1494 100644 --- a/src/queries/analytics/sessions/saveSessionData.ts +++ b/src/queries/analytics/sessions/saveSessionData.ts @@ -101,9 +101,9 @@ async function clickhouseQuery(data: { }); if (kafka.enabled) { - await sendMessages(messages, 'session_data'); + await sendMessages('session_data', messages); } else { - await insert('event_data', messages); + await insert('session_data', messages); } return data; From 082a751ffec85601cbc66d218d5ebf638f664edb Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Fri, 5 Jul 2024 02:52:36 -0700 Subject: [PATCH 20/26] Should allow non http referrers. Closes #2831 --- src/pages/api/send.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/api/send.ts b/src/pages/api/send.ts index 3431795e..31318420 100644 --- a/src/pages/api/send.ts +++ b/src/pages/api/send.ts @@ -121,7 +121,7 @@ export default async (req: NextApiRequestCollect, res: NextApiResponse) => { urlPath = '/'; } - if (referrerPath?.startsWith('http')) { + if (/^[\w-]+:\/\/\w+/.test(referrerPath)) { const refUrl = new URL(referrer); referrerPath = refUrl.pathname; referrerQuery = refUrl.search.substring(1); From db36c37d32038c52b066c80a22bb3c4cbca5c5cf Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Mon, 8 Jul 2024 01:45:54 -0700 Subject: [PATCH 21/26] Updated session and events queries. Added sessions page. --- .../websites/[websiteId]/WebsiteHeader.tsx | 9 ++- .../EventDataMetricsBar.module.css | 0 .../EventDataMetricsBar.tsx | 0 .../{event-data => events}/EventDataPage.tsx | 0 .../{event-data => events}/EventDataTable.tsx | 0 .../EventDataValueTable.tsx | 0 .../WebsiteEventData.module.css | 0 .../WebsiteEventData.tsx | 0 .../{event-data => events}/page.tsx | 0 .../[websiteId]/realtime/RealtimeLog.tsx | 5 +- .../sessions/SessionsDataTable.tsx | 25 ++++++++ .../[websiteId]/sessions/SessionsPage.tsx | 14 +++++ .../[websiteId]/sessions/SessionsTable.tsx | 21 +++++++ .../websites/[websiteId]/sessions/page.tsx | 10 ++++ src/app/api/scripts/telemetry/route.ts | 28 +++++++++ src/components/hooks/index.ts | 1 + src/components/hooks/queries/useSessions.ts | 20 +++++++ src/lib/clickhouse.ts | 54 +++++++++++++++-- src/lib/prisma.ts | 43 +++++++++++--- src/pages/api/scripts/telemetry.ts | 24 -------- .../api/websites/[websiteId]/sessions.ts | 42 ++++++++++++++ .../analytics/events/getEventMetrics.ts | 8 +-- src/queries/analytics/events/getEvents.ts | 58 ++++++++----------- src/queries/analytics/getRealtimeData.ts | 12 ++-- src/queries/analytics/getValues.ts | 4 +- src/queries/analytics/getWebsiteStats.ts | 4 +- .../analytics/pageviews/getPageviewMetrics.ts | 42 ++++++++------ .../analytics/pageviews/getPageviewStats.ts | 10 ++-- src/queries/analytics/reports/getInsights.ts | 4 +- src/queries/analytics/reports/getRetention.ts | 17 +++--- src/queries/analytics/reports/getRevenue.ts | 10 ++-- .../analytics/sessions/getSessionStats.ts | 10 ++-- src/queries/analytics/sessions/getSessions.ts | 53 +++++++---------- src/queries/index.ts | 10 ++-- src/queries/{admin => prisma}/report.ts | 6 +- src/queries/{admin => prisma}/team.ts | 0 src/queries/{admin => prisma}/teamUser.ts | 0 src/queries/{admin => prisma}/user.ts | 6 +- src/queries/{admin => prisma}/website.ts | 6 +- 39 files changed, 376 insertions(+), 180 deletions(-) rename src/app/(main)/websites/[websiteId]/{event-data => events}/EventDataMetricsBar.module.css (100%) rename src/app/(main)/websites/[websiteId]/{event-data => events}/EventDataMetricsBar.tsx (100%) rename src/app/(main)/websites/[websiteId]/{event-data => events}/EventDataPage.tsx (100%) rename src/app/(main)/websites/[websiteId]/{event-data => events}/EventDataTable.tsx (100%) rename src/app/(main)/websites/[websiteId]/{event-data => events}/EventDataValueTable.tsx (100%) rename src/app/(main)/websites/[websiteId]/{event-data => events}/WebsiteEventData.module.css (100%) rename src/app/(main)/websites/[websiteId]/{event-data => events}/WebsiteEventData.tsx (100%) rename src/app/(main)/websites/[websiteId]/{event-data => events}/page.tsx (100%) create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/page.tsx create mode 100644 src/app/api/scripts/telemetry/route.ts create mode 100644 src/components/hooks/queries/useSessions.ts delete mode 100644 src/pages/api/scripts/telemetry.ts create mode 100644 src/pages/api/websites/[websiteId]/sessions.ts rename src/queries/{admin => prisma}/report.ts (93%) rename src/queries/{admin => prisma}/team.ts (100%) rename src/queries/{admin => prisma}/teamUser.ts (100%) rename src/queries/{admin => prisma}/user.ts (98%) rename src/queries/{admin => prisma}/website.ts (97%) diff --git a/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx b/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx index 0cbaeb44..bbd6460a 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx @@ -46,9 +46,14 @@ export function WebsiteHeader({ path: '/reports', }, { - label: formatMessage(labels.eventData), + label: formatMessage(labels.sessions), + icon: , + path: '/sessions', + }, + { + label: formatMessage(labels.events), icon: , - path: '/event-data', + path: '/events', }, ]; diff --git a/src/app/(main)/websites/[websiteId]/event-data/EventDataMetricsBar.module.css b/src/app/(main)/websites/[websiteId]/events/EventDataMetricsBar.module.css similarity index 100% rename from src/app/(main)/websites/[websiteId]/event-data/EventDataMetricsBar.module.css rename to src/app/(main)/websites/[websiteId]/events/EventDataMetricsBar.module.css diff --git a/src/app/(main)/websites/[websiteId]/event-data/EventDataMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/events/EventDataMetricsBar.tsx similarity index 100% rename from src/app/(main)/websites/[websiteId]/event-data/EventDataMetricsBar.tsx rename to src/app/(main)/websites/[websiteId]/events/EventDataMetricsBar.tsx diff --git a/src/app/(main)/websites/[websiteId]/event-data/EventDataPage.tsx b/src/app/(main)/websites/[websiteId]/events/EventDataPage.tsx similarity index 100% rename from src/app/(main)/websites/[websiteId]/event-data/EventDataPage.tsx rename to src/app/(main)/websites/[websiteId]/events/EventDataPage.tsx diff --git a/src/app/(main)/websites/[websiteId]/event-data/EventDataTable.tsx b/src/app/(main)/websites/[websiteId]/events/EventDataTable.tsx similarity index 100% rename from src/app/(main)/websites/[websiteId]/event-data/EventDataTable.tsx rename to src/app/(main)/websites/[websiteId]/events/EventDataTable.tsx diff --git a/src/app/(main)/websites/[websiteId]/event-data/EventDataValueTable.tsx b/src/app/(main)/websites/[websiteId]/events/EventDataValueTable.tsx similarity index 100% rename from src/app/(main)/websites/[websiteId]/event-data/EventDataValueTable.tsx rename to src/app/(main)/websites/[websiteId]/events/EventDataValueTable.tsx diff --git a/src/app/(main)/websites/[websiteId]/event-data/WebsiteEventData.module.css b/src/app/(main)/websites/[websiteId]/events/WebsiteEventData.module.css similarity index 100% rename from src/app/(main)/websites/[websiteId]/event-data/WebsiteEventData.module.css rename to src/app/(main)/websites/[websiteId]/events/WebsiteEventData.module.css diff --git a/src/app/(main)/websites/[websiteId]/event-data/WebsiteEventData.tsx b/src/app/(main)/websites/[websiteId]/events/WebsiteEventData.tsx similarity index 100% rename from src/app/(main)/websites/[websiteId]/event-data/WebsiteEventData.tsx rename to src/app/(main)/websites/[websiteId]/events/WebsiteEventData.tsx diff --git a/src/app/(main)/websites/[websiteId]/event-data/page.tsx b/src/app/(main)/websites/[websiteId]/events/page.tsx similarity index 100% rename from src/app/(main)/websites/[websiteId]/event-data/page.tsx rename to src/app/(main)/websites/[websiteId]/events/page.tsx diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx index cbdeb1ac..700e83ae 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx @@ -144,7 +144,10 @@ export function RealtimeLog({ data }: { data: RealtimeData }) { const { events, visitors } = data; let logs = [ - ...events.map(e => ({ __type: e.eventName ? TYPE_EVENT : TYPE_PAGEVIEW, ...e })), + ...events.map(e => ({ + __type: e.eventName ? TYPE_EVENT : TYPE_PAGEVIEW, + ...e, + })), ...visitors.map(v => ({ __type: TYPE_SESSION, ...v })), ].sort(thenby.firstBy('timestamp', -1)); diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx new file mode 100644 index 00000000..9e9f97e9 --- /dev/null +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx @@ -0,0 +1,25 @@ +import { useSessions } from 'components/hooks'; +import SessionsTable from './SessionsTable'; +import DataTable from 'components/common/DataTable'; +import { ReactNode } from 'react'; + +export default function SessionsDataTable({ + websiteId, + children, +}: { + websiteId?: string; + teamId?: string; + children?: ReactNode; +}) { + const queryResult = useSessions(websiteId); + + if (queryResult?.result?.data?.length === 0) { + return children; + } + + return ( + + {({ data }) => } + + ); +} diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx new file mode 100644 index 00000000..e95145a7 --- /dev/null +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx @@ -0,0 +1,14 @@ +'use client'; +import WebsiteHeader from '../WebsiteHeader'; +import SessionsDataTable from './SessionsDataTable'; + +export function SessionsPage({ websiteId }) { + return ( + <> + + + + ); +} + +export default SessionsPage; diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx new file mode 100644 index 00000000..41c0fef3 --- /dev/null +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx @@ -0,0 +1,21 @@ +import { GridColumn, GridTable, useBreakpoint } from 'react-basics'; +import { useMessages } from 'components/hooks'; + +export function SessionsTable({ data = [] }: { data: any[]; showDomain?: boolean }) { + const { formatMessage, labels } = useMessages(); + const breakpoint = useBreakpoint(); + + return ( + + + + + + + + + + ); +} + +export default SessionsTable; diff --git a/src/app/(main)/websites/[websiteId]/sessions/page.tsx b/src/app/(main)/websites/[websiteId]/sessions/page.tsx new file mode 100644 index 00000000..771f682d --- /dev/null +++ b/src/app/(main)/websites/[websiteId]/sessions/page.tsx @@ -0,0 +1,10 @@ +import SessionsPage from './SessionsPage'; +import { Metadata } from 'next'; + +export default function ({ params: { websiteId } }) { + return ; +} + +export const metadata: Metadata = { + title: 'Sessions', +}; diff --git a/src/app/api/scripts/telemetry/route.ts b/src/app/api/scripts/telemetry/route.ts new file mode 100644 index 00000000..ecd83fcb --- /dev/null +++ b/src/app/api/scripts/telemetry/route.ts @@ -0,0 +1,28 @@ +import { CURRENT_VERSION, TELEMETRY_PIXEL } from 'lib/constants'; + +export async function GET() { + if ( + process.env.NODE_ENV !== 'production' && + process.env.DISABLE_TELEMETRY && + process.env.PRIVATE_MODE + ) { + const script = ` + (()=>{const i=document.createElement('img'); + i.setAttribute('src','${TELEMETRY_PIXEL}?v=${CURRENT_VERSION}'); + i.setAttribute('style','width:0;height:0;position:absolute;pointer-events:none;'); + document.body.appendChild(i);})(); + `; + + return new Response(script.replace(/\s\s+/g, ''), { + headers: { + 'content-type': 'text/javascript', + }, + }); + } + + return new Response('/* telemetry disabled */', { + headers: { + 'content-type': 'text/javascript', + }, + }); +} diff --git a/src/components/hooks/index.ts b/src/components/hooks/index.ts index df4fbd88..86abdd84 100644 --- a/src/components/hooks/index.ts +++ b/src/components/hooks/index.ts @@ -5,6 +5,7 @@ export * from './queries/useLogin'; export * from './queries/useRealtime'; export * from './queries/useReport'; export * from './queries/useReports'; +export * from './queries/useSessions'; export * from './queries/useShareToken'; export * from './queries/useTeam'; export * from './queries/useTeams'; diff --git a/src/components/hooks/queries/useSessions.ts b/src/components/hooks/queries/useSessions.ts new file mode 100644 index 00000000..c54c3acd --- /dev/null +++ b/src/components/hooks/queries/useSessions.ts @@ -0,0 +1,20 @@ +import { useApi } from './useApi'; +import { useFilterQuery } from './useFilterQuery'; +import useModified from '../useModified'; + +export function useSessions(websiteId: string, params?: { [key: string]: string | number }) { + const { get } = useApi(); + const { modified } = useModified(`websites`); + + return useFilterQuery({ + queryKey: ['sessions', { websiteId, modified, ...params }], + queryFn: (data: any) => { + return get(`/websites/${websiteId}/sessions`, { + ...data, + ...params, + }); + }, + }); +} + +export default useSessions; diff --git a/src/lib/clickhouse.ts b/src/lib/clickhouse.ts index cd057cd7..e716d649 100644 --- a/src/lib/clickhouse.ts +++ b/src/lib/clickhouse.ts @@ -2,8 +2,8 @@ import { ClickHouseClient, createClient } from '@clickhouse/client'; import dateFormat from 'dateformat'; import debug from 'debug'; import { CLICKHOUSE } from 'lib/db'; -import { QueryFilters, QueryOptions } from './types'; -import { OPERATORS } from './constants'; +import { PageParams, QueryFilters, QueryOptions } from './types'; +import { DEFAULT_PAGE_SIZE, OPERATORS } from './constants'; import { fetchWebsite } from './load'; import { maxDate } from './date'; import { filtersToArray } from './params'; @@ -47,11 +47,11 @@ function getClient() { return client; } -function getDateStringQuery(data: any, unit: string | number) { +function getDateStringSQL(data: any, unit: string | number) { return `formatDateTime(${data}, '${CLICKHOUSE_DATE_FORMATS[unit]}')`; } -function getDateQuery(field: string, unit: string, timezone?: string) { +function getDateSQL(field: string, unit: string, timezone?: string) { if (timezone) { return `date_trunc('${unit}', ${field}, '${timezone}')`; } @@ -95,6 +95,20 @@ function getFilterQuery(filters: QueryFilters = {}, options: QueryOptions = {}) return query.join('\n'); } +function getDateQuery(filters: QueryFilters = {}) { + const { startDate, endDate } = filters; + + if (startDate) { + if (endDate) { + return `and created_at between {startDate:DateTime64} and {endDate:DateTime64}`; + } else { + return `and created_at >= {startDate:DateTime64}`; + } + } + + return ''; +} + function getFilterParams(filters: QueryFilters = {}) { return filtersToArray(filters).reduce((obj, { name, value }) => { if (name && value !== undefined) { @@ -110,6 +124,7 @@ async function parseFilters(websiteId: string, filters: QueryFilters = {}, optio return { filterQuery: getFilterQuery(filters, options), + dateQuery: getDateQuery(filters), params: { ...getFilterParams(filters), websiteId, @@ -119,6 +134,32 @@ async function parseFilters(websiteId: string, filters: QueryFilters = {}, optio }; } +async function pagedQuery( + query: string, + queryParams: { [key: string]: any }, + pageParams: PageParams = {}, +) { + const { page = 1, pageSize, orderBy, sortDescending = false } = pageParams; + const size = +pageSize || DEFAULT_PAGE_SIZE; + const offset = +size * (page - 1); + const direction = sortDescending ? 'desc' : 'asc'; + + const statements = [ + orderBy && `order by ${orderBy} ${direction}`, + +size > 0 && `limit ${+size} offset ${offset}`, + ] + .filter(n => n) + .join('\n'); + + const count = await rawQuery(`select count(*) as num from (${query}) t`, queryParams).then( + res => res[0].num, + ); + + const data = await rawQuery(`${query}${statements}`, queryParams); + + return { data, count, page: +page, pageSize: size, orderBy }; +} + async function rawQuery( query: string, params: Record = {}, @@ -170,11 +211,12 @@ export default { client: clickhouse, log, connect, - getDateStringQuery, - getDateQuery, + getDateStringSQL, + getDateSQL, getDateFormat, getFilterQuery, parseFilters, + pagedQuery, findUnique, findFirst, rawQuery, diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts index 6250f2e5..28835414 100644 --- a/src/lib/prisma.ts +++ b/src/lib/prisma.ts @@ -60,7 +60,7 @@ function getCastColumnQuery(field: string, type: string): string { } } -function getDateQuery(field: string, unit: string, timezone?: string): string { +function getDateSQL(field: string, unit: string, timezone?: string): string { const db = getDatabaseType(); if (db === POSTGRESQL) { @@ -81,7 +81,19 @@ function getDateQuery(field: string, unit: string, timezone?: string): string { } } -function getTimestampDiffQuery(field1: string, field2: string): string { +export function getTimestampSQL(field: string) { + const db = getDatabaseType(); + + if (db === POSTGRESQL) { + return `floor(extract(epoch from ${field}))`; + } + + if (db === MYSQL) { + return `UNIX_TIMESTAMP(${field})`; + } +} + +function getTimestampDiffSQL(field1: string, field2: string): string { const db = getDatabaseType(); if (db === POSTGRESQL) { @@ -93,7 +105,7 @@ function getTimestampDiffQuery(field1: string, field2: string): string { } } -function getSearchQuery(column: string): string { +function getSearchSQL(column: string): string { const db = getDatabaseType(); const like = db === POSTGRESQL ? 'ilike' : 'like'; @@ -137,6 +149,20 @@ function getFilterQuery(filters: QueryFilters = {}, options: QueryOptions = {}): return query.join('\n'); } +function getDateQuery(filters: QueryFilters = {}) { + const { startDate, endDate } = filters; + + if (startDate) { + if (endDate) { + return `and website_event.created_at between {{startDate}} and {{endDate}}`; + } else { + return `and website_event.created_at >= {{startDate}}`; + } + } + + return ''; +} + function getFilterParams(filters: QueryFilters = {}) { return filtersToArray(filters).reduce((obj, { name, operator, value }) => { obj[name] = [OPERATORS.contains, OPERATORS.doesNotContain].includes(operator) @@ -161,6 +187,7 @@ async function parseFilters( ? `inner join session on website_event.session_id = session.session_id` : '', filterQuery: getFilterQuery(filters, options), + dateQuery: getDateQuery(filters), params: { ...getFilterParams(filters), websiteId, @@ -191,8 +218,8 @@ async function rawQuery(sql: string, data: object): Promise { return prisma.rawQuery(query, params); } -async function pagedQuery(model: string, criteria: T, filters: PageParams) { - const { page = 1, pageSize, orderBy, sortDescending = false } = filters || {}; +async function pagedQuery(model: string, criteria: T, pageParams: PageParams) { + const { page = 1, pageSize, orderBy, sortDescending = false } = pageParams || {}; const size = +pageSize || DEFAULT_PAGE_SIZE; const data = await prisma.client[model].findMany({ @@ -256,11 +283,11 @@ export default { getAddIntervalQuery, getCastColumnQuery, getDayDiffQuery, - getDateQuery, + getDateSQL, getFilterQuery, getSearchParameters, - getTimestampDiffQuery, - getSearchQuery, + getTimestampDiffSQL, + getSearchSQL, getQueryMode, pagedQuery, parseFilters, diff --git a/src/pages/api/scripts/telemetry.ts b/src/pages/api/scripts/telemetry.ts deleted file mode 100644 index a8a8872e..00000000 --- a/src/pages/api/scripts/telemetry.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ok } from 'next-basics'; -import { CURRENT_VERSION, TELEMETRY_PIXEL } from 'lib/constants'; -import { NextApiRequest, NextApiResponse } from 'next'; - -export default function handler(req: NextApiRequest, res: NextApiResponse) { - if (process.env.NODE_ENV === 'production') { - res.setHeader('content-type', 'text/javascript'); - - if (process.env.DISABLE_TELEMETRY || process.env.PRIVATE_MODE) { - return res.send('/* telemetry disabled */'); - } - - const script = ` - (()=>{const i=document.createElement('img'); - i.setAttribute('src','${TELEMETRY_PIXEL}?v=${CURRENT_VERSION}'); - i.setAttribute('style','width:0;height:0;position:absolute;pointer-events:none;'); - document.body.appendChild(i);})(); - `; - - return res.send(script.replace(/\s\s+/g, '')); - } - - return ok(res); -} diff --git a/src/pages/api/websites/[websiteId]/sessions.ts b/src/pages/api/websites/[websiteId]/sessions.ts new file mode 100644 index 00000000..21cacb1c --- /dev/null +++ b/src/pages/api/websites/[websiteId]/sessions.ts @@ -0,0 +1,42 @@ +import * as yup from 'yup'; +import { canViewWebsite } from 'lib/auth'; +import { useAuth, useCors, useValidate } from 'lib/middleware'; +import { NextApiRequestQueryBody, PageParams } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { pageInfo } from 'lib/schema'; +import { getSessions } from 'queries'; + +export interface ReportsRequestQuery extends PageParams { + websiteId: string; +} + +const schema = { + GET: yup.object().shape({ + websiteId: yup.string().uuid().required(), + ...pageInfo, + }), +}; + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + await useValidate(schema, req, res); + + const { websiteId } = req.query; + + if (req.method === 'GET') { + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const data = await getSessions(websiteId, {}, req.query); + + return ok(res, data); + } + + return methodNotAllowed(res); +}; diff --git a/src/queries/analytics/events/getEventMetrics.ts b/src/queries/analytics/events/getEventMetrics.ts index 32cccd3e..8efbf769 100644 --- a/src/queries/analytics/events/getEventMetrics.ts +++ b/src/queries/analytics/events/getEventMetrics.ts @@ -15,7 +15,7 @@ export async function getEventMetrics( async function relationalQuery(websiteId: string, filters: QueryFilters) { const { timezone = 'utc', unit = 'day' } = filters; - const { rawQuery, getDateQuery, parseFilters } = prisma; + const { rawQuery, getDateSQL, parseFilters } = prisma; const { filterQuery, joinSession, params } = await parseFilters(websiteId, { ...filters, eventType: EVENT_TYPE.customEvent, @@ -25,7 +25,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) { ` select event_name x, - ${getDateQuery('website_event.created_at', unit, timezone)} t, + ${getDateSQL('website_event.created_at', unit, timezone)} t, count(*) y from website_event ${joinSession} @@ -45,7 +45,7 @@ async function clickhouseQuery( filters: QueryFilters, ): Promise<{ x: string; t: string; y: number }[]> { const { timezone = 'UTC', unit = 'day' } = filters; - const { rawQuery, getDateQuery, parseFilters } = clickhouse; + const { rawQuery, getDateSQL, parseFilters } = clickhouse; const { filterQuery, params } = await parseFilters(websiteId, { ...filters, eventType: EVENT_TYPE.customEvent, @@ -55,7 +55,7 @@ async function clickhouseQuery( ` select event_name x, - ${getDateQuery('created_at', unit, timezone)} t, + ${getDateSQL('created_at', unit, timezone)} t, count(*) y from website_event where website_id = {websiteId:UUID} diff --git a/src/queries/analytics/events/getEvents.ts b/src/queries/analytics/events/getEvents.ts index c333242e..a00f6848 100644 --- a/src/queries/analytics/events/getEvents.ts +++ b/src/queries/analytics/events/getEvents.ts @@ -1,45 +1,33 @@ import clickhouse from 'lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import prisma from 'lib/prisma'; -import { QueryFilters } from 'lib/types'; +import { PageParams, QueryFilters } from 'lib/types'; -export function getEvents(...args: [websiteId: string, filters: QueryFilters]) { +export function getEvents( + ...args: [websiteId: string, filters: QueryFilters, pageParams?: PageParams] +) { return runQuery({ [PRISMA]: () => relationalQuery(...args), [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteId: string, filters: QueryFilters) { - const { startDate } = filters; +async function relationalQuery(websiteId: string, filters: QueryFilters, pageParams?: PageParams) { + const { pagedQuery } = prisma; - return prisma.client.websiteEvent - .findMany({ - where: { - websiteId, - createdAt: { - gte: startDate, - }, - }, - orderBy: { - createdAt: 'desc', - }, - }) - .then(a => { - return Object.values(a).map(a => { - return { - ...a, - timestamp: new Date(a.createdAt).getTime() / 1000, - }; - }); - }); + const where = { + ...filters, + id: websiteId, + }; + + return pagedQuery('website_event', { where }, pageParams); } -function clickhouseQuery(websiteId: string, filters: QueryFilters) { - const { rawQuery } = clickhouse; - const { startDate } = filters; +async function clickhouseQuery(websiteId: string, filters: QueryFilters, pageParams?: PageParams) { + const { pagedQuery, parseFilters } = clickhouse; + const { params, dateQuery, filterQuery } = await parseFilters(websiteId, filters); - return rawQuery( + return pagedQuery( ` select event_id as id, @@ -48,16 +36,20 @@ function clickhouseQuery(websiteId: string, filters: QueryFilters) { created_at as createdAt, toUnixTimestamp(created_at) as timestamp, url_path as urlPath, + url_query as urlQuery, + referrer_path as referrerPath, + referrer_query as referrerQuery, referrer_domain as referrerDomain, + page_title as pageTitle, + event_type as eventType, event_name as eventName from website_event where website_id = {websiteId:UUID} - and created_at >= {startDate:DateTime64} + ${dateQuery} + ${filterQuery} order by created_at desc `, - { - websiteId, - startDate, - }, + params, + pageParams, ); } diff --git a/src/queries/analytics/getRealtimeData.ts b/src/queries/analytics/getRealtimeData.ts index b42fbc50..afc7ff8f 100644 --- a/src/queries/analytics/getRealtimeData.ts +++ b/src/queries/analytics/getRealtimeData.ts @@ -19,15 +19,15 @@ export async function getRealtimeData( const { startDate, timezone } = criteria; const filters = { startDate, endDate: new Date(), unit: 'minute', timezone }; const [events, sessions, pageviews, sessionviews] = await Promise.all([ - getEvents(websiteId, { startDate }), - getSessions(websiteId, { startDate }), + getEvents(websiteId, { startDate }, { pageSize: 10000 }), + getSessions(websiteId, { startDate }, { pageSize: 10000 }), getPageviewStats(websiteId, filters), getSessionStats(websiteId, filters), ]); const uniques = new Set(); - const sessionStats = sessions.reduce( + const sessionStats = sessions.data.reduce( (obj: { visitors: any; countries: any }, session: { id: any; country: any }) => { const { countries, visitors } = obj; const { id, country } = session; @@ -49,7 +49,7 @@ export async function getRealtimeData( }, ); - const eventStats = events.reduce( + const eventStats = events.data.reduce( ( obj: { urls: any; referrers: any; events: any }, event: { urlPath: any; referrerDomain: any }, @@ -81,9 +81,9 @@ export async function getRealtimeData( visitors: sessionviews, }, totals: { - views: events.filter(e => !e.eventName).length, + views: events.data.filter(e => !e.eventName).length, visitors: uniques.size, - events: events.filter(e => e.eventName).length, + events: events.data.filter(e => e.eventName).length, countries: Object.keys(sessionStats.countries).length, }, timestamp: Date.now(), diff --git a/src/queries/analytics/getValues.ts b/src/queries/analytics/getValues.ts index 7cd34994..8b1afb3f 100644 --- a/src/queries/analytics/getValues.ts +++ b/src/queries/analytics/getValues.ts @@ -18,11 +18,11 @@ async function relationalQuery( endDate: Date, search: string, ) { - const { rawQuery, getSearchQuery } = prisma; + const { rawQuery, getSearchSQL } = prisma; let searchQuery = ''; if (search) { - searchQuery = getSearchQuery(column); + searchQuery = getSearchSQL(column); } return rawQuery( diff --git a/src/queries/analytics/getWebsiteStats.ts b/src/queries/analytics/getWebsiteStats.ts index 2f3c82e8..84ceaf1c 100644 --- a/src/queries/analytics/getWebsiteStats.ts +++ b/src/queries/analytics/getWebsiteStats.ts @@ -21,7 +21,7 @@ async function relationalQuery( ): Promise< { pageviews: number; visitors: number; visits: number; bounces: number; totaltime: number }[] > { - const { getTimestampDiffQuery, parseFilters, rawQuery } = prisma; + const { getTimestampDiffSQL, parseFilters, rawQuery } = prisma; const { filterQuery, joinSession, params } = await parseFilters(websiteId, { ...filters, eventType: EVENT_TYPE.pageView, @@ -34,7 +34,7 @@ async function relationalQuery( count(distinct t.session_id) as "visitors", count(distinct t.visit_id) as "visits", sum(case when t.c = 1 then 1 else 0 end) as "bounces", - sum(${getTimestampDiffQuery('t.min_time', 't.max_time')}) as "totaltime" + sum(${getTimestampDiffSQL('t.min_time', 't.max_time')}) as "totaltime" from ( select website_event.session_id, diff --git a/src/queries/analytics/pageviews/getPageviewMetrics.ts b/src/queries/analytics/pageviews/getPageviewMetrics.ts index 67ccb04a..b3ae633a 100644 --- a/src/queries/analytics/pageviews/getPageviewMetrics.ts +++ b/src/queries/analytics/pageviews/getPageviewMetrics.ts @@ -42,15 +42,18 @@ async function relationalQuery( const aggregrate = type === 'entry' ? 'min' : 'max'; entryExitQuery = ` - JOIN (select visit_id, - ${aggregrate}(created_at) target_created_at - from website_event - where website_event.website_id = {{websiteId::uuid}} - and website_event.created_at between {{startDate}} and {{endDate}} - and event_type = {{eventType}} - group by visit_id) x - ON x.visit_id = website_event.visit_id - and x.target_created_at = website_event.created_at`; + join ( + select visit_id, + ${aggregrate}(created_at) target_created_at + from website_event + where website_event.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} + group by visit_id + ) x + on x.visit_id = website_event.visit_id + and x.target_created_at = website_event.created_at + `; } return rawQuery( @@ -97,15 +100,18 @@ async function clickhouseQuery( const aggregrate = type === 'entry' ? 'min' : 'max'; entryExitQuery = ` - JOIN (select visit_id, - ${aggregrate}(created_at) target_created_at - from website_event - where website_id = {websiteId:UUID} - and created_at between {startDate:DateTime64} and {endDate:DateTime64} - and event_type = {eventType:UInt32} - group by visit_id) x - ON x.visit_id = website_event.visit_id - and x.target_created_at = website_event.created_at`; + join ( + select visit_id, + ${aggregrate}(created_at) target_created_at + from website_event + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and event_type = {eventType:UInt32} + group by visit_id + ) x + on x.visit_id = website_event.visit_id + and x.target_created_at = website_event.created_at + `; } return rawQuery( diff --git a/src/queries/analytics/pageviews/getPageviewStats.ts b/src/queries/analytics/pageviews/getPageviewStats.ts index a37a1566..65bc8625 100644 --- a/src/queries/analytics/pageviews/getPageviewStats.ts +++ b/src/queries/analytics/pageviews/getPageviewStats.ts @@ -13,7 +13,7 @@ export async function getPageviewStats(...args: [websiteId: string, filters: Que async function relationalQuery(websiteId: string, filters: QueryFilters) { const { timezone = 'utc', unit = 'day' } = filters; - const { getDateQuery, parseFilters, rawQuery } = prisma; + const { getDateSQL, parseFilters, rawQuery } = prisma; const { filterQuery, joinSession, params } = await parseFilters(websiteId, { ...filters, eventType: EVENT_TYPE.pageView, @@ -22,7 +22,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) { return rawQuery( ` select - ${getDateQuery('website_event.created_at', unit, timezone)} x, + ${getDateSQL('website_event.created_at', unit, timezone)} x, count(*) y from website_event ${joinSession} @@ -41,7 +41,7 @@ async function clickhouseQuery( filters: QueryFilters, ): Promise<{ x: string; y: number }[]> { const { timezone = 'UTC', unit = 'day' } = filters; - const { parseFilters, rawQuery, getDateStringQuery, getDateQuery } = clickhouse; + const { parseFilters, rawQuery, getDateStringSQL, getDateSQL } = clickhouse; const { filterQuery, params } = await parseFilters(websiteId, { ...filters, eventType: EVENT_TYPE.pageView, @@ -50,11 +50,11 @@ async function clickhouseQuery( return rawQuery( ` select - ${getDateStringQuery('g.t', unit)} as x, + ${getDateStringSQL('g.t', unit)} as x, g.y as y from ( select - ${getDateQuery('created_at', unit, timezone)} as t, + ${getDateSQL('created_at', unit, timezone)} as t, count(*) as y from website_event where website_id = {websiteId:UUID} diff --git a/src/queries/analytics/reports/getInsights.ts b/src/queries/analytics/reports/getInsights.ts index c1a4f1f1..8e6e3289 100644 --- a/src/queries/analytics/reports/getInsights.ts +++ b/src/queries/analytics/reports/getInsights.ts @@ -23,7 +23,7 @@ async function relationalQuery( y: number; }[] > { - const { getTimestampDiffQuery, parseFilters, rawQuery } = prisma; + const { getTimestampDiffSQL, parseFilters, rawQuery } = prisma; const { filterQuery, joinSession, params } = await parseFilters( websiteId, { @@ -42,7 +42,7 @@ async function relationalQuery( count(distinct t.session_id) as "visitors", count(distinct t.visit_id) as "visits", sum(case when t.c = 1 then 1 else 0 end) as "bounces", - sum(${getTimestampDiffQuery('t.min_time', 't.max_time')}) as "totaltime", + sum(${getTimestampDiffSQL('t.min_time', 't.max_time')}) as "totaltime", ${parseFieldsByName(fields)} from ( select diff --git a/src/queries/analytics/reports/getRetention.ts b/src/queries/analytics/reports/getRetention.ts index de495cc4..24aa2e3a 100644 --- a/src/queries/analytics/reports/getRetention.ts +++ b/src/queries/analytics/reports/getRetention.ts @@ -35,14 +35,14 @@ async function relationalQuery( }[] > { const { startDate, endDate, timezone = 'UTC' } = filters; - const { getDateQuery, getDayDiffQuery, getCastColumnQuery, rawQuery } = prisma; + const { getDateSQL, getDayDiffQuery, getCastColumnQuery, rawQuery } = prisma; const unit = 'day'; return rawQuery( ` WITH cohort_items AS ( select session_id, - ${getDateQuery('created_at', unit, timezone)} as cohort_date + ${getDateSQL('created_at', unit, timezone)} as cohort_date from session where website_id = {{websiteId::uuid}} and created_at between {{startDate}} and {{endDate}} @@ -50,10 +50,7 @@ async function relationalQuery( user_activities AS ( select distinct w.session_id, - ${getDayDiffQuery( - getDateQuery('created_at', unit, timezone), - 'c.cohort_date', - )} as day_number + ${getDayDiffQuery(getDateSQL('created_at', unit, timezone), 'c.cohort_date')} as day_number from website_event w join cohort_items c on w.session_id = c.session_id @@ -115,14 +112,14 @@ async function clickhouseQuery( }[] > { const { startDate, endDate, timezone = 'UTC' } = filters; - const { getDateQuery, getDateStringQuery, rawQuery } = clickhouse; + const { getDateSQL, getDateStringSQL, rawQuery } = clickhouse; const unit = 'day'; return rawQuery( ` WITH cohort_items AS ( select - min(${getDateQuery('created_at', unit, timezone)}) as cohort_date, + min(${getDateSQL('created_at', unit, timezone)}) as cohort_date, session_id from website_event where website_id = {websiteId:UUID} @@ -132,7 +129,7 @@ async function clickhouseQuery( user_activities AS ( select distinct w.session_id, - (${getDateQuery('created_at', unit, timezone)} - c.cohort_date) / 86400 as day_number + (${getDateSQL('created_at', unit, timezone)} - c.cohort_date) / 86400 as day_number from website_event w join cohort_items c on w.session_id = c.session_id @@ -157,7 +154,7 @@ async function clickhouseQuery( group by 1, 2 ) select - ${getDateStringQuery('c.cohort_date', unit)} as date, + ${getDateStringSQL('c.cohort_date', unit)} as date, c.day_number as day, s.visitors as visitors, c.visitors returnVisitors, diff --git a/src/queries/analytics/reports/getRevenue.ts b/src/queries/analytics/reports/getRevenue.ts index 6b151bb7..e4857a43 100644 --- a/src/queries/analytics/reports/getRevenue.ts +++ b/src/queries/analytics/reports/getRevenue.ts @@ -46,12 +46,12 @@ async function relationalQuery( timezone = 'UTC', unit = 'day', } = criteria; - const { getDateQuery, rawQuery } = prisma; + const { getDateSQL, rawQuery } = prisma; const chartRes = await rawQuery( ` select - ${getDateQuery('website_event.created_at', unit, timezone)} time, + ${getDateSQL('website_event.created_at', unit, timezone)} time, sum(case when data_key = {{revenueProperty}} then number_value else 0 end) sum, avg(case when data_key = {{revenueProperty}} then number_value else 0 end) avg, count(case when data_key = {{revenueProperty}} then 1 else 0 end) count, @@ -110,7 +110,7 @@ async function clickhouseQuery( timezone = 'UTC', unit = 'day', } = criteria; - const { getDateStringQuery, getDateQuery, rawQuery } = clickhouse; + const { getDateStringSQL, getDateSQL, rawQuery } = clickhouse; const chartRes = await rawQuery<{ time: string; @@ -121,14 +121,14 @@ async function clickhouseQuery( }>( ` select - ${getDateStringQuery('g.time', unit)} as time, + ${getDateStringSQL('g.time', unit)} as time, g.sum as sum, g.avg as avg, g.count as count, g.uniqueCount as uniqueCount from ( select - ${getDateQuery('created_at', unit, timezone)} as time, + ${getDateSQL('created_at', unit, timezone)} as time, sumIf(number_value, data_key = {revenueProperty:String}) as sum, avgIf(number_value, data_key = {revenueProperty:String}) as avg, countIf(data_key = {revenueProperty:String}) as count, diff --git a/src/queries/analytics/sessions/getSessionStats.ts b/src/queries/analytics/sessions/getSessionStats.ts index e3af7ba6..54c46c35 100644 --- a/src/queries/analytics/sessions/getSessionStats.ts +++ b/src/queries/analytics/sessions/getSessionStats.ts @@ -13,7 +13,7 @@ export async function getSessionStats(...args: [websiteId: string, filters: Quer async function relationalQuery(websiteId: string, filters: QueryFilters) { const { timezone = 'utc', unit = 'day' } = filters; - const { getDateQuery, parseFilters, rawQuery } = prisma; + const { getDateSQL, parseFilters, rawQuery } = prisma; const { filterQuery, joinSession, params } = await parseFilters(websiteId, { ...filters, eventType: EVENT_TYPE.pageView, @@ -22,7 +22,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) { return rawQuery( ` select - ${getDateQuery('website_event.created_at', unit, timezone)} x, + ${getDateSQL('website_event.created_at', unit, timezone)} x, count(distinct website_event.session_id) y from website_event ${joinSession} @@ -41,7 +41,7 @@ async function clickhouseQuery( filters: QueryFilters, ): Promise<{ x: string; y: number }[]> { const { timezone = 'UTC', unit = 'day' } = filters; - const { parseFilters, rawQuery, getDateStringQuery, getDateQuery } = clickhouse; + const { parseFilters, rawQuery, getDateStringSQL, getDateSQL } = clickhouse; const { filterQuery, params } = await parseFilters(websiteId, { ...filters, eventType: EVENT_TYPE.pageView, @@ -50,11 +50,11 @@ async function clickhouseQuery( return rawQuery( ` select - ${getDateStringQuery('g.t', unit)} as x, + ${getDateStringSQL('g.t', unit)} as x, g.y as y from ( select - ${getDateQuery('created_at', unit, timezone)} as t, + ${getDateSQL('created_at', unit, timezone)} as t, count(distinct session_id) as y from website_event where website_id = {websiteId:UUID} diff --git a/src/queries/analytics/sessions/getSessions.ts b/src/queries/analytics/sessions/getSessions.ts index a11edd39..47471d98 100644 --- a/src/queries/analytics/sessions/getSessions.ts +++ b/src/queries/analytics/sessions/getSessions.ts @@ -1,45 +1,33 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, PRISMA, CLICKHOUSE } from 'lib/db'; -import { QueryFilters } from 'lib/types'; +import { PageParams, QueryFilters } from 'lib/types'; -export async function getSessions(...args: [websiteId: string, filters: QueryFilters]) { +export async function getSessions( + ...args: [websiteId: string, filters?: QueryFilters, pageParams?: PageParams] +) { return runQuery({ [PRISMA]: () => relationalQuery(...args), [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -async function relationalQuery(websiteId: string, filters: QueryFilters) { - const { startDate } = filters; +async function relationalQuery(websiteId: string, filters: QueryFilters, pageParams: PageParams) { + const { pagedQuery } = prisma; - return prisma.client.session - .findMany({ - where: { - websiteId, - createdAt: { - gte: startDate, - }, - }, - orderBy: { - createdAt: 'desc', - }, - }) - .then(a => { - return Object.values(a).map(a => { - return { - ...a, - timestamp: new Date(a.createdAt).getTime() / 1000, - }; - }); - }); + const where = { + ...filters, + id: websiteId, + }; + + return pagedQuery('session', { where }, pageParams); } -async function clickhouseQuery(websiteId: string, filters: QueryFilters) { - const { rawQuery } = clickhouse; - const { startDate } = filters; +async function clickhouseQuery(websiteId: string, filters: QueryFilters, pageParams?: PageParams) { + const { pagedQuery, parseFilters } = clickhouse; + const { params, dateQuery, filterQuery } = await parseFilters(websiteId, filters); - return rawQuery( + return pagedQuery( ` select session_id as id, @@ -58,12 +46,11 @@ async function clickhouseQuery(websiteId: string, filters: QueryFilters) { city from website_event where website_id = {websiteId:UUID} - and created_at >= {startDate:DateTime64} + ${dateQuery} + ${filterQuery} order by created_at desc `, - { - websiteId, - startDate, - }, + params, + pageParams, ); } diff --git a/src/queries/index.ts b/src/queries/index.ts index 8cef080a..796adea6 100644 --- a/src/queries/index.ts +++ b/src/queries/index.ts @@ -1,8 +1,8 @@ -export * from './admin/report'; -export * from './admin/team'; -export * from './admin/teamUser'; -export * from './admin/user'; -export * from './admin/website'; +export * from 'queries/prisma/report'; +export * from 'queries/prisma/team'; +export * from 'queries/prisma/teamUser'; +export * from 'queries/prisma/user'; +export * from 'queries/prisma/website'; export * from './analytics/events/getEventMetrics'; export * from './analytics/events/getEventUsage'; export * from './analytics/events/getEvents'; diff --git a/src/queries/admin/report.ts b/src/queries/prisma/report.ts similarity index 93% rename from src/queries/admin/report.ts rename to src/queries/prisma/report.ts index dc05a1d5..a0e6364c 100644 --- a/src/queries/admin/report.ts +++ b/src/queries/prisma/report.ts @@ -17,9 +17,9 @@ export async function getReport(reportId: string): Promise { export async function getReports( criteria: ReportFindManyArgs, - filters: PageParams = {}, + pageParams: PageParams = {}, ): Promise> { - const { query } = filters; + const { query } = pageParams; const where: Prisma.ReportWhereInput = { ...criteria.where, @@ -45,7 +45,7 @@ export async function getReports( ]), }; - return prisma.pagedQuery('report', { ...criteria, where }, filters); + return prisma.pagedQuery('report', { ...criteria, where }, pageParams); } export async function getUserReports( diff --git a/src/queries/admin/team.ts b/src/queries/prisma/team.ts similarity index 100% rename from src/queries/admin/team.ts rename to src/queries/prisma/team.ts diff --git a/src/queries/admin/teamUser.ts b/src/queries/prisma/teamUser.ts similarity index 100% rename from src/queries/admin/teamUser.ts rename to src/queries/prisma/teamUser.ts diff --git a/src/queries/admin/user.ts b/src/queries/prisma/user.ts similarity index 98% rename from src/queries/admin/user.ts rename to src/queries/prisma/user.ts index 9e085112..9b471787 100644 --- a/src/queries/admin/user.ts +++ b/src/queries/prisma/user.ts @@ -49,9 +49,9 @@ export async function getUserByUsername(username: string, options: GetUserOption export async function getUsers( criteria: UserFindManyArgs, - filters?: PageParams, + pageParams?: PageParams, ): Promise> { - const { query } = filters; + const { query } = pageParams; const where: Prisma.UserWhereInput = { ...criteria.where, @@ -68,7 +68,7 @@ export async function getUsers( { orderBy: 'createdAt', sortDescending: true, - ...filters, + ...pageParams, }, ); } diff --git a/src/queries/admin/website.ts b/src/queries/prisma/website.ts similarity index 97% rename from src/queries/admin/website.ts rename to src/queries/prisma/website.ts index eb07f779..0814a137 100644 --- a/src/queries/admin/website.ts +++ b/src/queries/prisma/website.ts @@ -27,9 +27,9 @@ export async function getSharedWebsite(shareId: string) { export async function getWebsites( criteria: WebsiteFindManyArgs, - filters: PageParams, + pageParams: PageParams, ): Promise> { - const { query } = filters; + const { query } = pageParams; const where: Prisma.WebsiteWhereInput = { ...criteria.where, @@ -42,7 +42,7 @@ export async function getWebsites( deletedAt: null, }; - return prisma.pagedQuery('website', { ...criteria, where }, filters); + return prisma.pagedQuery('website', { ...criteria, where }, pageParams); } export async function getAllWebsites(userId: string) { From 62f35668ae785799b6bec1b67b4737d00876f451 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Mon, 8 Jul 2024 23:39:06 -0700 Subject: [PATCH 22/26] Fixed funnel chart. --- src/app/(main)/reports/funnel/FunnelChart.module.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/(main)/reports/funnel/FunnelChart.module.css b/src/app/(main)/reports/funnel/FunnelChart.module.css index 81b22c78..7972d573 100644 --- a/src/app/(main)/reports/funnel/FunnelChart.module.css +++ b/src/app/(main)/reports/funnel/FunnelChart.module.css @@ -34,6 +34,10 @@ background-color: var(--base100); } +.step:last-child::before { + display: none; +} + .card { display: grid; gap: 20px; From 4494665d2e72fc39cb3baa9f70726a6590a48080 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Mon, 8 Jul 2024 23:41:40 -0700 Subject: [PATCH 23/26] Updated date output for Clickhouse. --- .../[websiteId]/realtime/RealtimeLog.tsx | 4 ++-- src/lib/clickhouse.ts | 17 +++++++++++------ src/lib/date.ts | 2 +- src/queries/analytics/events/getEvents.ts | 5 ++--- src/queries/analytics/getRealtimeData.ts | 4 ++-- src/queries/analytics/sessions/getSessions.ts | 5 ++--- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx index 700e83ae..97fb1659 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx @@ -54,7 +54,7 @@ export function RealtimeLog({ data }: { data: RealtimeData }) { }, ]; - const getTime = ({ timestamp }) => format(timestamp * 1000, 'h:mm:ss'); + const getTime = ({ createdAt }) => format(new Date(createdAt), 'h:mm:ss'); const getColor = ({ id, sessionId }) => stringToColor(sessionId || id); @@ -149,7 +149,7 @@ export function RealtimeLog({ data }: { data: RealtimeData }) { ...e, })), ...visitors.map(v => ({ __type: TYPE_SESSION, ...v })), - ].sort(thenby.firstBy('timestamp', -1)); + ].sort(thenby.firstBy('createdAt', -1)); if (search) { logs = logs.filter(({ eventName, urlPath, browser, os, country, device }) => { diff --git a/src/lib/clickhouse.ts b/src/lib/clickhouse.ts index e716d649..2bda9bfa 100644 --- a/src/lib/clickhouse.ts +++ b/src/lib/clickhouse.ts @@ -9,11 +9,12 @@ import { maxDate } from './date'; import { filtersToArray } from './params'; export const CLICKHOUSE_DATE_FORMATS = { - minute: '%Y-%m-%d %H:%i:00', - hour: '%Y-%m-%d %H:00:00', - day: '%Y-%m-%d', - month: '%Y-%m-01', - year: '%Y-01-01', + second: '%Y-%m-%dT%H:%i:%S', + minute: '%Y-%m-%dT%H:%i:00', + hour: '%Y-%m-%dT%H:00:00', + day: '%Y-%m-%dT00:00:00', + month: '%Y-%m-01T00:00:00', + year: '%Y-01-01T00:00:00', }; const log = debug('umami:clickhouse'); @@ -47,7 +48,11 @@ function getClient() { return client; } -function getDateStringSQL(data: any, unit: string | number) { +function getDateStringSQL(data: any, unit: string | number, timezone?: string) { + if (timezone) { + return `formatDateTime(${data}, '${CLICKHOUSE_DATE_FORMATS[unit]}', '${timezone}')`; + } + return `formatDateTime(${data}, '${CLICKHOUSE_DATE_FORMATS[unit]}')`; } diff --git a/src/lib/date.ts b/src/lib/date.ts index de76f7f3..2fb24073 100644 --- a/src/lib/date.ts +++ b/src/lib/date.ts @@ -292,7 +292,7 @@ export function getDateArray(data: any[], startDate: Date, endDate: Date, unit: for (let i = 0; i <= n; i++) { const t = start(add(startDate, i)); - const y = data.find(({ x }) => start(getDateFromString(x)).getTime() === t.getTime())?.y || 0; + const y = data.find(({ x }) => start(new Date(x)).getTime() === t.getTime())?.y || 0; arr.push({ x: t, y }); } diff --git a/src/queries/analytics/events/getEvents.ts b/src/queries/analytics/events/getEvents.ts index a00f6848..540c1a05 100644 --- a/src/queries/analytics/events/getEvents.ts +++ b/src/queries/analytics/events/getEvents.ts @@ -24,7 +24,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters, pagePar } async function clickhouseQuery(websiteId: string, filters: QueryFilters, pageParams?: PageParams) { - const { pagedQuery, parseFilters } = clickhouse; + const { pagedQuery, parseFilters, getDateStringSQL } = clickhouse; const { params, dateQuery, filterQuery } = await parseFilters(websiteId, filters); return pagedQuery( @@ -33,8 +33,7 @@ async function clickhouseQuery(websiteId: string, filters: QueryFilters, pagePar event_id as id, website_id as websiteId, session_id as sessionId, - created_at as createdAt, - toUnixTimestamp(created_at) as timestamp, + ${getDateStringSQL('created_at', 'second', filters.timezone)} as createdAt, url_path as urlPath, url_query as urlQuery, referrer_path as referrerPath, diff --git a/src/queries/analytics/getRealtimeData.ts b/src/queries/analytics/getRealtimeData.ts index afc7ff8f..5a9c5a36 100644 --- a/src/queries/analytics/getRealtimeData.ts +++ b/src/queries/analytics/getRealtimeData.ts @@ -19,8 +19,8 @@ export async function getRealtimeData( const { startDate, timezone } = criteria; const filters = { startDate, endDate: new Date(), unit: 'minute', timezone }; const [events, sessions, pageviews, sessionviews] = await Promise.all([ - getEvents(websiteId, { startDate }, { pageSize: 10000 }), - getSessions(websiteId, { startDate }, { pageSize: 10000 }), + getEvents(websiteId, { startDate, timezone }, { pageSize: 10000 }), + getSessions(websiteId, { startDate, timezone }, { pageSize: 10000 }), getPageviewStats(websiteId, filters), getSessionStats(websiteId, filters), ]); diff --git a/src/queries/analytics/sessions/getSessions.ts b/src/queries/analytics/sessions/getSessions.ts index 47471d98..538133ba 100644 --- a/src/queries/analytics/sessions/getSessions.ts +++ b/src/queries/analytics/sessions/getSessions.ts @@ -24,7 +24,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters, pagePar } async function clickhouseQuery(websiteId: string, filters: QueryFilters, pageParams?: PageParams) { - const { pagedQuery, parseFilters } = clickhouse; + const { pagedQuery, parseFilters, getDateStringSQL } = clickhouse; const { params, dateQuery, filterQuery } = await parseFilters(websiteId, filters); return pagedQuery( @@ -32,8 +32,7 @@ async function clickhouseQuery(websiteId: string, filters: QueryFilters, pagePar select session_id as id, website_id as websiteId, - created_at as createdAt, - toUnixTimestamp(created_at) as timestamp, + ${getDateStringSQL('created_at', 'second', filters.timezone)} as createdAt, hostname, browser, os, From 374faae27b6590adf09c0a02abeb4a379baf6d88 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Mon, 8 Jul 2024 23:42:26 -0700 Subject: [PATCH 24/26] Updated lang files. --- public/intl/messages/de-DE.json | 98 ++++++++++++++++----------------- public/intl/messages/pl-PL.json | 36 ++++++------ public/intl/messages/zh-CN.json | 28 +++++----- 3 files changed, 81 insertions(+), 81 deletions(-) diff --git a/public/intl/messages/de-DE.json b/public/intl/messages/de-DE.json index 2482b208..a7d1f1ab 100644 --- a/public/intl/messages/de-DE.json +++ b/public/intl/messages/de-DE.json @@ -32,13 +32,13 @@ "label.add-member": [ { "type": 0, - "value": "Add member" + "value": "Mitglied hinzufügen" } ], "label.add-step": [ { "type": 0, - "value": "Add step" + "value": "Schritt hinzufügen" } ], "label.add-website": [ @@ -104,7 +104,7 @@ "label.breakdown": [ { "type": 0, - "value": "Breakdown" + "value": "Aufschlüsselung" } ], "label.browser": [ @@ -152,7 +152,7 @@ "label.compare": [ { "type": 0, - "value": "Compare" + "value": "Vergleich" } ], "label.confirm": [ @@ -182,7 +182,7 @@ "label.count": [ { "type": 0, - "value": "Count" + "value": "Anzahl" } ], "label.countries": [ @@ -200,7 +200,7 @@ "label.create": [ { "type": 0, - "value": "Create" + "value": "Erstellen" } ], "label.create-report": [ @@ -230,13 +230,13 @@ "label.created-by": [ { "type": 0, - "value": "Created By" + "value": "Erstellt von" } ], "label.current": [ { "type": 0, - "value": "Current" + "value": "Aktuell" } ], "label.current-password": [ @@ -296,7 +296,7 @@ "label.delete-report": [ { "type": 0, - "value": "Delete report" + "value": "Bericht löschen" } ], "label.delete-team": [ @@ -386,7 +386,7 @@ "label.edit-member": [ { "type": 0, - "value": "Edit member" + "value": "Mitglied bearbeiten" } ], "label.enable-share-url": [ @@ -398,7 +398,7 @@ "label.end-step": [ { "type": 0, - "value": "End Step" + "value": "Schritt beenden" } ], "label.entry": [ @@ -482,25 +482,25 @@ "label.funnel-description": [ { "type": 0, - "value": "Understand the conversion and drop-off rate of users." + "value": "Verstehe die Konversions- und Dropoffrate von Nutzern." } ], "label.goal": [ { "type": 0, - "value": "Goal" + "value": "Ziel" } ], "label.goals": [ { "type": 0, - "value": "Goals" + "value": "Ziele" } ], "label.goals-description": [ { "type": 0, - "value": "Track your goals for pageviews and events." + "value": "Verfolgen Sie Ihre Ziele für Aufrufe und Events." } ], "label.greater-than": [ @@ -536,7 +536,7 @@ "label.insights-description": [ { "type": 0, - "value": "Dive deeper into your data by using segments and filters." + "value": "Tauchen Sie tiefer in Ihre Daten mit Filtern und Segmenten ein." } ], "label.is": [ @@ -584,7 +584,7 @@ "label.journey-description": [ { "type": 0, - "value": "Understand how users navigate through your website." + "value": "Verstehen Sie, wie Nutzer Ihre Website navigieren." } ], "label.language": [ @@ -686,7 +686,7 @@ "label.manage": [ { "type": 0, - "value": "Manage" + "value": "Verwalten" } ], "label.manager": [ @@ -704,7 +704,7 @@ "label.member": [ { "type": 0, - "value": "Member" + "value": "Mitglied" } ], "label.members": [ @@ -734,7 +734,7 @@ "label.my-account": [ { "type": 0, - "value": "My account" + "value": "Mein Konto" } ], "label.my-websites": [ @@ -874,19 +874,19 @@ "label.previous": [ { "type": 0, - "value": "Previous" + "value": "Vorherige" } ], "label.previous-period": [ { "type": 0, - "value": "Previous period" + "value": "Vorheriger Zeitraum" } ], "label.previous-year": [ { "type": 0, - "value": "Previous year" + "value": "Vorheriges Jahr" } ], "label.profile": [ @@ -898,7 +898,7 @@ "label.property": [ { "type": 0, - "value": "Property" + "value": "Besitz" } ], "label.queries": [ @@ -970,7 +970,7 @@ "label.remove-member": [ { "type": 0, - "value": "Remove member" + "value": "Mitglied entfernen" } ], "label.reports": [ @@ -1006,7 +1006,7 @@ "label.retention-description": [ { "type": 0, - "value": "Measure your website stickiness by tracking how often users return." + "value": "Messen Sie die Presenz Ihrer Website, indem Sie tracken wie oft Nutzer zurückkehren." } ], "label.role": [ @@ -1036,13 +1036,13 @@ "label.search": [ { "type": 0, - "value": "Search" + "value": "Suche" } ], "label.select": [ { "type": 0, - "value": "Select" + "value": "Auswählen" } ], "label.select-date": [ @@ -1054,7 +1054,7 @@ "label.select-role": [ { "type": 0, - "value": "Select role" + "value": "Rolle auswählen" } ], "label.select-website": [ @@ -1090,13 +1090,13 @@ "label.start-step": [ { "type": 0, - "value": "Start Step" + "value": "Schritt starten" } ], "label.steps": [ { "type": 0, - "value": "Steps" + "value": "Schritte" } ], "label.sum": [ @@ -1126,7 +1126,7 @@ "label.team-manager": [ { "type": 0, - "value": "Team manager" + "value": "Team-Manager" } ], "label.team-member": [ @@ -1234,13 +1234,13 @@ "label.transfer": [ { "type": 0, - "value": "Transfer" + "value": "Übertragung" } ], "label.transfer-website": [ { "type": 0, - "value": "Transfer website" + "value": "Website übertragen" } ], "label.true": [ @@ -1324,7 +1324,7 @@ "label.utm-description": [ { "type": 0, - "value": "Track your campaigns through UTM parameters." + "value": "Tracken Sie Ihre Kampagnen mit Hilfe von UTM Parametern." } ], "label.value": [ @@ -1360,7 +1360,7 @@ "label.views-per-visit": [ { "type": 0, - "value": "Views per visit" + "value": "Aufrufe pro Besuch" } ], "label.visit-duration": [ @@ -1378,7 +1378,7 @@ "label.visits": [ { "type": 0, - "value": "Visits" + "value": "Besuche" } ], "label.website": [ @@ -1414,7 +1414,7 @@ "message.action-confirmation": [ { "type": 0, - "value": "Type " + "value": "Tippen Sie " }, { "type": 1, @@ -1422,7 +1422,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " in das untenliegende Feld, um zu bestätigen." } ], "message.active-users": [ @@ -1462,7 +1462,7 @@ "message.collected-data": [ { "type": 0, - "value": "Collected data" + "value": "Gesammelte Daten" } ], "message.confirm-delete": [ @@ -1496,7 +1496,7 @@ "message.confirm-remove": [ { "type": 0, - "value": "Are you sure you want to remove " + "value": "Sind Sie sicher, dass Sie " }, { "type": 1, @@ -1504,7 +1504,7 @@ }, { "type": 0, - "value": "?" + "value": " entfernen möchten?" } ], "message.confirm-reset": [ @@ -1524,7 +1524,7 @@ "message.delete-team-warning": [ { "type": 0, - "value": "Deleting a team will also delete all team websites." + "value": "Alle zugehörigen Websiten werden ebenfalls gelöscht." } ], "message.delete-website-warning": [ @@ -1708,25 +1708,25 @@ "message.transfer-team-website-to-user": [ { "type": 0, - "value": "Transfer this website to your account?" + "value": "Möchten Sie diese Website auf Ihr Konto übertragen?" } ], "message.transfer-user-website-to-team": [ { "type": 0, - "value": "Select the team to transfer this website to." + "value": "Wählen Sie das Team, auf das die Website übertragen wird." } ], "message.transfer-website": [ { "type": 0, - "value": "Transfer website ownership to your account or another team." + "value": "Übertragen Sie den Besitz der Website auf Ihren Account oder ein anderes Team." } ], "message.triggered-event": [ { "type": 0, - "value": "Triggered event" + "value": "Event ausgelöst" } ], "message.user-deleted": [ @@ -1738,7 +1738,7 @@ "message.viewed-page": [ { "type": 0, - "value": "Viewed page" + "value": "Seite besucht" } ], "message.visitor-log": [ @@ -1778,7 +1778,7 @@ "message.visitors-dropped-off": [ { "type": 0, - "value": "Visitors dropped off" + "value": "Besucher haben die Seite verlassen" } ] } diff --git a/public/intl/messages/pl-PL.json b/public/intl/messages/pl-PL.json index 608c0b3a..7157a4f2 100644 --- a/public/intl/messages/pl-PL.json +++ b/public/intl/messages/pl-PL.json @@ -152,7 +152,7 @@ "label.compare": [ { "type": 0, - "value": "Compare" + "value": "Porównaj" } ], "label.confirm": [ @@ -182,7 +182,7 @@ "label.count": [ { "type": 0, - "value": "Count" + "value": "Liczba" } ], "label.countries": [ @@ -236,7 +236,7 @@ "label.current": [ { "type": 0, - "value": "Current" + "value": "Aktualny" } ], "label.current-password": [ @@ -398,7 +398,7 @@ "label.end-step": [ { "type": 0, - "value": "End Step" + "value": "Krok końcowy" } ], "label.entry": [ @@ -428,7 +428,7 @@ "label.exit": [ { "type": 0, - "value": "Exit URL" + "value": "URL wyjściowy" } ], "label.false": [ @@ -488,13 +488,13 @@ "label.goal": [ { "type": 0, - "value": "Goal" + "value": "Cel" } ], "label.goals": [ { "type": 0, - "value": "Goals" + "value": "Cele" } ], "label.goals-description": [ @@ -524,7 +524,7 @@ "label.hosts": [ { "type": 0, - "value": "Hosts" + "value": "Hosty" } ], "label.insights": [ @@ -578,13 +578,13 @@ "label.journey": [ { "type": 0, - "value": "Journey" + "value": "Droga" } ], "label.journey-description": [ { "type": 0, - "value": "Understand how users navigate through your website." + "value": "Zrozum, w jaki sposób użytkownicy poruszają się po Twojej witrynie." } ], "label.language": [ @@ -874,19 +874,19 @@ "label.previous": [ { "type": 0, - "value": "Previous" + "value": "Poprzedni" } ], "label.previous-period": [ { "type": 0, - "value": "Previous period" + "value": "Poprzedni okres" } ], "label.previous-year": [ { "type": 0, - "value": "Previous year" + "value": "Poprzedni rok" } ], "label.profile": [ @@ -928,7 +928,7 @@ "label.referrer": [ { "type": 0, - "value": "Referrer" + "value": "Źródło odsyłające" } ], "label.referrers": [ @@ -970,7 +970,7 @@ "label.remove-member": [ { "type": 0, - "value": "Remove member" + "value": "Usuń członka" } ], "label.reports": [ @@ -1090,7 +1090,7 @@ "label.start-step": [ { "type": 0, - "value": "Start Step" + "value": "Krok startowy" } ], "label.steps": [ @@ -1378,7 +1378,7 @@ "label.visits": [ { "type": 0, - "value": "Odwiedząjący" + "value": "Wizyty" } ], "label.website": [ @@ -1462,7 +1462,7 @@ "message.collected-data": [ { "type": 0, - "value": "Collected data" + "value": "Zebrane dane" } ], "message.confirm-delete": [ diff --git a/public/intl/messages/zh-CN.json b/public/intl/messages/zh-CN.json index 0b7da8a5..bb77d83b 100644 --- a/public/intl/messages/zh-CN.json +++ b/public/intl/messages/zh-CN.json @@ -152,7 +152,7 @@ "label.compare": [ { "type": 0, - "value": "对比" + "value": "比较" } ], "label.confirm": [ @@ -182,7 +182,7 @@ "label.count": [ { "type": 0, - "value": "数量" + "value": "统计" } ], "label.countries": [ @@ -236,7 +236,7 @@ "label.current": [ { "type": 0, - "value": "当前" + "value": "目前" } ], "label.current-password": [ @@ -398,13 +398,13 @@ "label.end-step": [ { "type": 0, - "value": "最后一步" + "value": "结束步骤" } ], "label.entry": [ { "type": 0, - "value": "首次访问 URL" + "value": "入口 URL" } ], "label.event": [ @@ -500,7 +500,7 @@ "label.goals-description": [ { "type": 0, - "value": "追踪您的页面浏览量和事件目标。" + "value": "跟踪页面浏览量和事件的目标。" } ], "label.greater-than": [ @@ -578,13 +578,13 @@ "label.journey": [ { "type": 0, - "value": "轨迹" + "value": "用户浏览轨迹" } ], "label.journey-description": [ { "type": 0, - "value": "了解用户如何浏览您网站的哪些页面。" + "value": "了解用户如何浏览网站。" } ], "label.language": [ @@ -882,19 +882,19 @@ "label.previous": [ { "type": 0, - "value": "之前" + "value": "先前" } ], "label.previous-period": [ { "type": 0, - "value": "前一周期" + "value": "上一时期" } ], "label.previous-year": [ { "type": 0, - "value": "前一年" + "value": "上一年" } ], "label.profile": [ @@ -1098,7 +1098,7 @@ "label.start-step": [ { "type": 0, - "value": "第一步" + "value": "开始步骤" } ], "label.steps": [ @@ -1134,7 +1134,7 @@ "label.team-manager": [ { "type": 0, - "value": "团队管理" + "value": "团队管理者" } ], "label.team-member": [ @@ -1450,7 +1450,7 @@ "message.collected-data": [ { "type": 0, - "value": "收集数据" + "value": "已收集的数据" } ], "message.confirm-delete": [ From d6a4eea7f8be6e8af118e3f199197cf6e500d6fc Mon Sep 17 00:00:00 2001 From: manethpak Date: Wed, 10 Jul 2024 17:39:40 +0700 Subject: [PATCH 25/26] Update and fill missing translation for khmer lang --- src/lang/km-KH.json | 268 ++++++++++++++++++++++---------------------- 1 file changed, 134 insertions(+), 134 deletions(-) diff --git a/src/lang/km-KH.json b/src/lang/km-KH.json index 9a374a06..e10b32b5 100644 --- a/src/lang/km-KH.json +++ b/src/lang/km-KH.json @@ -1,170 +1,170 @@ { "label.access-code": "Access code", "label.actions": "សកម្មភាព", - "label.activity-log": "Activity log", - "label.add": "Add", - "label.add-description": "Add description", - "label.add-member": "Add member", - "label.add-step": "Add step", + "label.activity-log": "កំណត់ហេតុ​សកម្មភាព", + "label.add": "បង្កើតបន្ថែម", + "label.add-description": "បន្ថែមពិពណ៌នា", + "label.add-member": "បន្ថែមសមាជិក", + "label.add-step": "បន្ថែមជំហាន", "label.add-website": "បន្ថែមគេហទំព័រ", "label.admin": "អ្នកគ្រប់គ្រង", - "label.after": "After", + "label.after": "បន្ទាប់", "label.all": "ទាំងអស់", "label.all-time": "គ្រប់ពេល", "label.analytics": "Analytics", - "label.average": "Average", + "label.average": "ជាមធ្យម", "label.back": "ថយក្រោយ", - "label.before": "Before", + "label.before": "មុន", "label.bounce-rate": "ចំនួនវិលត្រឡប់", "label.breakdown": "Breakdown", "label.browser": "Browser", "label.browsers": "កម្មវិធី", "label.cancel": "បោះបង់", "label.change-password": "ផ្លាស់ប្តូរពាក្យសម្ងាត់", - "label.cities": "Cities", - "label.city": "City", - "label.clear-all": "Clear all", - "label.compare": "Compare", - "label.confirm": "Confirm", + "label.cities": "ទីក្រុង", + "label.city": "ទីក្រុង", + "label.clear-all": "លុបទាំងអស់", + "label.compare": "ប្រៀបធៀប", + "label.confirm": "បញ្ជាក់", "label.confirm-password": "បញ្ជាក់ពាក្យសម្ងាត់", - "label.contains": "Contains", - "label.continue": "Continue", - "label.count": "Count", + "label.contains": "មាន", + "label.continue": "បន្ត", + "label.count": "ចំនួន", "label.countries": "ប្រទេស", - "label.country": "Country", - "label.create": "Create", - "label.create-report": "Create report", - "label.create-team": "Create team", - "label.create-user": "Create user", - "label.created": "Created", - "label.created-by": "Created By", - "label.current": "Current", + "label.country": "ប្រទេស", + "label.create": "បង្កើត", + "label.create-report": "បង្កើតរបាយការណ៍", + "label.create-team": "បង្កើតរបាយក្រុម", + "label.create-user": "បង្កើតអ្នកប្រើប្រាស់", + "label.created": "បង្កើតនៅ", + "label.created-by": "បង្កើតដោយ", + "label.current": "បច្ចុប្បន្ន", "label.current-password": "ពាក្យសម្ងាត់បច្ចុប្បន្ន", "label.custom-range": "កំណត់ដោយខ្លួនឯង", "label.dashboard": "ផ្ទាំងគ្រប់គ្រង", - "label.data": "Data", - "label.date": "Date", + "label.data": "ទិន្នន័យ", + "label.date": "កាលបរិច្ឆេទ", "label.date-range": "ចន្លោះកាលបរិច្ឆេទ", - "label.day": "Day", - "label.default-date-range": "ចន្លោះកាលបរិច្ឆេទស្រាប់", + "label.day": "ថ្ងៃ", + "label.default-date-range": "ចន្លោះកាលបរិច្ឆេទដើម", "label.delete": "លុប", - "label.delete-report": "Delete report", - "label.delete-team": "Delete team", - "label.delete-user": "Delete user", + "label.delete-report": "លុបរបាយការណ៍", + "label.delete-team": "លុបក្រុម", + "label.delete-user": "លុបអ្នកប្រើប្រាស់", "label.delete-website": "លុបគេហទំព័រ", - "label.description": "Description", + "label.description": "ការពិពណ៌នា", "label.desktop": "កុំព្យូទ័រលើតុ", - "label.details": "Details", - "label.device": "Device", + "label.details": "ព័ត៌មានលម្អិត", + "label.device": "ឧបករណ៍", "label.devices": "ឧបករណ៍", - "label.dismiss": "បដិសេធ", - "label.does-not-contain": "Does not contain", - "label.domain": "ឈ្មោះគេហទំព័រ", + "label.dismiss": "រំសាយ", + "label.does-not-contain": "មិនមាន", + "label.domain": "Domain", "label.dropoff": "Dropoff", "label.edit": "កែប្រែ", "label.edit-dashboard": "កែផ្ទាំងគ្រប់គ្រង", - "label.edit-member": "Edit member", + "label.edit-member": "កែព័ត៌មានសមាជិក", "label.enable-share-url": "បើកការចែករំលែក URL", - "label.end-step": "End Step", - "label.entry": "Entry URL", - "label.event": "Event", - "label.event-data": "Event data", + "label.end-step": "បញ្ចប់ជំហាន", + "label.entry": "URL ចូល", + "label.event": "ព្រឹត្តិការណ៍", + "label.event-data": "ទិន្នន័យព្រឹត្តិការណ៍", "label.events": "ព្រឹត្តិការណ៍", - "label.exit": "Exit URL", - "label.false": "False", + "label.exit": "URL ចេញ", + "label.false": "មិនពិត", "label.field": "Field", "label.fields": "Fields", - "label.filter": "Filter", + "label.filter": "ចម្រោះ", "label.filter-combined": "រួមបញ្ចូលគ្នា", "label.filter-raw": "ដើម", - "label.filters": "Filters", + "label.filters": "ចម្រោះ", "label.funnel": "Funnel", "label.funnel-description": "Understand the conversion and drop-off rate of users.", - "label.goal": "Goal", - "label.goals": "Goals", - "label.goals-description": "Track your goals for pageviews and events.", - "label.greater-than": "Greater than", - "label.greater-than-equals": "Greater than or equals", + "label.goal": "គោលដៅ", + "label.goals": "គោលដៅ", + "label.goals-description": "តាមដានគោលដៅរបស់អ្នកសម្រាប់ pageviews និង events។", + "label.greater-than": "ធំជាង", + "label.greater-than-equals": "ធំជាងឬស្មើ", "label.host": "Host", "label.hosts": "Hosts", "label.insights": "Insights", "label.insights-description": "Dive deeper into your data by using segments and filters.", - "label.is": "Is", - "label.is-not": "Is not", - "label.is-not-set": "Is not set", - "label.is-set": "Is set", - "label.join": "Join", - "label.join-team": "Join team", - "label.journey": "Journey", - "label.journey-description": "Understand how users nagivate through your website.", + "label.is": "គឺ", + "label.is-not": "មិនមែន", + "label.is-not-set": "មិនបានកំណត់", + "label.is-set": "បានកំណត់", + "label.join": "ចូលរួម", + "label.join-team": "ចូលក្រុម", + "label.journey": "​ដំណើរ", + "label.journey-description": "ស្វែងយល់ពីការប្រើប្រាស់គេហទំព័ររបស់អតិថិជនអ្នក។", "label.language": "ភាសា", "label.languages": "ភាសា", "label.laptop": "កុំព្យូទ័រយួរដៃ", - "label.last-days": "{x} ថ្ងៃមុន", - "label.last-hours": "{x} ម៉ោងមុន", - "label.last-months": "Last {x} months", - "label.leave": "Leave", - "label.leave-team": "Leave team", - "label.less-than": "Less than", - "label.less-than-equals": "Less than or equals", + "label.last-days": "{x} ថ្ងៃចុងក្រោយ", + "label.last-hours": "{x} ម៉ោងចុងក្រោយ", + "label.last-months": "{x} ខែចុងក្រោយ", + "label.leave": "ចាកចេញ", + "label.leave-team": "ចេញពីក្រុម", + "label.less-than": "តិច​ជាង", + "label.less-than-equals": "តិចជាង ឬស្មើ", "label.login": "Login", - "label.logout": "ចេញ", - "label.manage": "Manage", - "label.manager": "Manager", + "label.logout": "Logout", + "label.manage": "គ្រប់គ្រង", + "label.manager": "អ្នកគ្រប់គ្រង", "label.max": "Max", - "label.member": "Member", - "label.members": "Members", + "label.member": "សមាជិក", + "label.members": "សមាជិក", "label.min": "Min", "label.mobile": "ទូរស័ព្ទចល័ត", "label.more": "បន្ថែម", - "label.my-account": "My account", - "label.my-websites": "My websites", + "label.my-account": "គណនី​របស់ខ្ញុំ", + "label.my-websites": "គេហទំព័ររបស់ខ្ញុំ", "label.name": "ឈ្មោះ", "label.new-password": "ពាក្យសម្ងាត់​ថ្មី", "label.none": "មិនមាន", "label.number-of-records": "{x} {x, plural, one {record} other {records}}", "label.ok": "OK", "label.os": "OS", - "label.overview": "Overview", + "label.overview": "ទិដ្ឋភាពរួម", "label.owner": "ម្ចាស់", - "label.page-of": "Page {current} of {total}", + "label.page-of": "ទំព័រទី {current} នៃ {total}", "label.page-views": "អ្នកមើលទំព័រ", - "label.pageTitle": "Page title", + "label.pageTitle": "ចំណងជើងទំព័រ", "label.pages": "ទំព័រ", "label.password": "ពាក្យសម្ងាត់​", "label.powered-by": "ដំណើរការដោយ {name}", - "label.previous": "Previous", - "label.previous-period": "Previous period", - "label.previous-year": "Previous year", - "label.profile": "ប្រវត្តិរូប", + "label.previous": "មុន", + "label.previous-period": "មួយរយៈពេលមុន", + "label.previous-year": "ឆ្នាំ​មុន", + "label.profile": "គណនី", "label.property": "Property", "label.queries": "Queries", "label.query": "Query", "label.query-parameters": "ប៉ារ៉ាម៉ែត្រ Query", "label.realtime": "ឥលូវនេះ", - "label.referrer": "Referrer", + "label.referrer": "អ្នកណែនាំ", "label.referrers": "អ្នកណែនាំ", "label.refresh": "ផ្ទុកឡើងវិញ", "label.regenerate": "Regenerate", "label.region": "Region", "label.regions": "Regions", - "label.remove": "Remove", - "label.remove-member": "Remove member", - "label.reports": "Reports", + "label.remove": "លុប", + "label.remove-member": "លុបសមាជិកក្រុម", + "label.reports": "របាយការណ៍", "label.required": "ទាមទារ", - "label.reset": "កំណត់ឡើងវិញ", + "label.reset": "កែសម្រួល", "label.reset-website": "កំណត់ស្ថិតិឡើងវិញ", "label.retention": "Retention", "label.retention-description": "Measure your website stickiness by tracking how often users return.", - "label.role": "Role", + "label.role": "មុខងារ", "label.run-query": "Run query", "label.save": "រក្សាទុក", "label.screens": "ប្រភេទឧបករណ៍", - "label.search": "Search", - "label.select": "Select", - "label.select-date": "Select date", - "label.select-role": "Select role", - "label.select-website": "Select website", + "label.search": "ស្វែងរក", + "label.select": "ជ្រើសរើស", + "label.select-date": "ជ្រើសរើសកាលបរិច្ឆេទ", + "label.select-role": "ជ្រើសរើសមុខងារ", + "label.select-website": "ជ្រើសរើសគេហទំព័រ", "label.sessions": "Sessions", "label.settings": "ការកំណត់", "label.share-url": "ចែករំលែក URL", @@ -173,34 +173,34 @@ "label.steps": "Steps", "label.sum": "Sum", "label.tablet": "ថេប្លេត", - "label.team": "Team", - "label.team-id": "Team ID", - "label.team-manager": "Team manager", - "label.team-member": "Team member", - "label.team-name": "Team name", - "label.team-owner": "Team owner", + "label.team": "ក្រុម", + "label.team-id": "ID ក្រុម", + "label.team-manager": "អ្នកគ្រប់គ្រងក្រុម", + "label.team-member": "សមាជិកក្រុម", + "label.team-name": "ឈ្មោះក្រុម", + "label.team-owner": "ម្ចាស់ក្រុម", "label.team-view-only": "Team view only", - "label.team-websites": "Team websites", - "label.teams": "Teams", + "label.team-websites": "គេហទំព័ររបស់ក្រុម", + "label.teams": "ក្រុម", "label.theme": "រូបរាង", "label.this-month": "ខែនេះ", "label.this-week": "ស​ប្តា​ហ៍​នេះ", "label.this-year": "ឆ្នាំ​នេះ", "label.timezone": "តំបន់ម៉ោង", - "label.title": "Title", + "label.title": "ចំណងជើង", "label.today": "ថ្ងៃនេះ", "label.toggle-charts": "បិទ/បើកតារាង", - "label.total": "Total", - "label.total-records": "Total records", + "label.total": "សរុប", + "label.total-records": "កំណត់ត្រាសរុប", "label.tracking-code": "លេខកូដតាមដាន", - "label.transfer": "Transfer", - "label.transfer-website": "Transfer website", - "label.true": "True", + "label.transfer": "ការផ្ទេរ", + "label.transfer-website": "ការផ្ទេរគេហទំព័រ", + "label.true": "ពិត", "label.type": "Type", "label.unique": "Unique", "label.unique-visitors": "អ្នកចូលមើលម្នាក់ៗ", "label.unknown": "មិនស្គាល់", - "label.untitled": "Untitled", + "label.untitled": "គ្មានចំណងជើង", "label.update": "Update", "label.url": "URL", "label.urls": "URLs", @@ -212,56 +212,56 @@ "label.value": "Value", "label.view": "View", "label.view-details": "មើលព័ត៌មានលម្អិត", - "label.view-only": "View only", + "label.view-only": "បានតែមើលប៉ុណ្ណោះ", "label.views": "អ្នកចូលមើល", "label.views-per-visit": "Views per visit", "label.visit-duration": "មើលជាមធ្យម", "label.visitors": "អ្នកទស្សនា", "label.visits": "Visits", - "label.website": "Website", - "label.website-id": "Website ID", + "label.website": "គេហទំព័រ", + "label.website-id": "ID គេហទំព័រ", "label.websites": "គេហទំព័រ", "label.window": "Window", "label.yesterday": "ម្សិលមិញ", - "message.action-confirmation": "Type {confirmation} in the box below to confirm.", + "message.action-confirmation": "សសេរ {confirmation} នៅក្នុងប្រអប់ខាងក្រោមដើម្បីបញ្ជាក់។", "message.active-users": "មានអ្នកមើល {x} នាក់ ឥលូវនេះ", "message.collected-data": "Collected data", "message.confirm-delete": "តើអ្នកប្រាកដថាចង់លុប {target} ទេ?", - "message.confirm-leave": "Are you sure you want to leave {target}?", - "message.confirm-remove": "Are you sure you want to remove {target}?", + "message.confirm-leave": "តើអ្នកប្រាកដថាចង់ចាកចេញ {target} ទេ?", + "message.confirm-remove": "តើអ្នកប្រាកដថាចង់លុប {target} ទេ?", "message.confirm-reset": "តើអ្នកប្រាកដថាចង់កំណត់ស្ថិតិរបស់ {target} ឡើងវិញទេ?", - "message.delete-team-warning": "Deleting a team will also delete all team websites.", - "message.delete-website-warning": "ទិន្នន័យដែលពាក់ព័ន្ធទាំងអស់នឹងត្រូវបានលុបផងដែរ។", + "message.delete-team-warning": "ពេលលុបក្រុម គេហទំព័ររបស់ក្រុមក៏នឹងត្រូវលប់ចោលទាំងអស់ផងដែរ។", + "message.delete-website-warning": "ទិន្នន័យរបស់គេហទំព័រទាំងអស់នឹងត្រូវលុបចោល។", "message.error": "មាន​អ្វីមួយ​មិន​ប្រក្រតី។", "message.event-log": "{event} on {url}", "message.go-to-settings": "ការកំណត់", - "message.incorrect-username-password": "ឈ្មោះអ្នកប្រើ/ពាក្យសម្ងាត់មិនត្រឹមត្រូវ។", - "message.invalid-domain": "ឈ្មោះគេហទំព័រមិន​ត្រឹមត្រូវ", - "message.min-password-length": "Minimum length of {n} characters", - "message.new-version-available": "A new version of Umami {version} is available!", - "message.no-data-available": "មិនមានទិន្នន័យទេ។", + "message.incorrect-username-password": "ឈ្មោះអ្នកប្រើឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ។", + "message.invalid-domain": "Domain មិន​ត្រឹមត្រូវ", + "message.min-password-length": "តិចបំផុតដែលមានអក្សរ {n} តួអក្សរ", + "message.new-version-available": "Version ថ្មីនៃ Umami {version} អាចប្រើប្រាស់បានហើយ!", + "message.no-data-available": "មិនមានទិន្នន័យ។", "message.no-event-data": "No event data is available.", - "message.no-match-password": "ពាក្យសម្ងាត់មិនត្រូវគ្នាទេ", - "message.no-results-found": "No results were found.", - "message.no-team-websites": "This team does not have any websites.", - "message.no-teams": "You have not created any teams.", - "message.no-users": "There are no users.", + "message.no-match-password": "ពាក្យសម្ងាត់មិនត្រូវគ្នាទេ។", + "message.no-results-found": "មិនមានលទ្ធផល។", + "message.no-team-websites": "ក្រុមនេះមិនមានគេហទំព័រទេ។", + "message.no-teams": "អ្នកមិនទាន់បានបង្កើតក្រុមណាមួយទេ។", + "message.no-users": "មិនមានអ្នកប្រើប្រាស់ទេ។", "message.no-websites-configured": "អ្នកមិនទាន់បានដាក់គេហទំព័រណាមួយចូលទេ។", "message.page-not-found": "រកមិនឃើញទំព័រ។", - "message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.", + "message.reset-website": "ដើម្បីកែគេហទំព័រនេះឡើងវិញ សូមសរសេរ {confirmation} នៅក្នុងប្រអប់ខាងក្រោមដើម្បីបញ្ជាក់។", "message.reset-website-warning": "ស្ថិតិទាំងអស់សម្រាប់គេហទំព័រនេះនឹងត្រូវបានលុប ប៉ុន្តែកូដតាមដានរបស់អ្នកនឹងនៅដដែល។", "message.saved": "រក្សាទុកដោយជោគជ័យ។", - "message.share-url": "នេះគឺជា URL ដែលបានចែករំលែកជាសាធារណៈសម្រាប់ {target}។", + "message.share-url": "នេះគឺជា URL ដែលអាចចែករំលែកជាសាធារណៈបានសម្រាប់ {target}។", "message.team-already-member": "You are already a member of the team.", - "message.team-not-found": "Team not found.", - "message.team-websites-info": "Websites can be viewed by anyone on the team.", - "message.tracking-code": "លេខកូដតាមដាន", - "message.transfer-team-website-to-user": "Transfer this website to your account?", - "message.transfer-user-website-to-team": "Select the team to transfer this website to.", - "message.transfer-website": "Transfer website ownership to your account or another team.", + "message.team-not-found": "រកក្រុមមិនឃើញទេ។", + "message.team-websites-info": "គេហទំព័រនេះអាចមើលបានតែសមាជិកក្រុមតែប៉ុណ្ណោះ", + "message.tracking-code": "ដើម្បីតាមដានស្ថិតិសម្រាប់គេហទំព័រអ្នក សូមដាក់កូដខាងក្រោមទៅក្នុងផ្នែក ... នៃ HTML របស់អ្នក។", + "message.transfer-team-website-to-user": "ផ្ទេរគេហទំព័រនេះទៅគណនីរបស់អ្នក។?", + "message.transfer-user-website-to-team": "ជ្រើសក្រុមដែរត្រូវផ្ទេរគេហទំព័រនេះទៅ។", + "message.transfer-website": "ផ្ទេរកម្មសិទ្ធិគេហទំព័រទៅគណនីរបស់អ្នក ឬក្រុមផ្សេងទៀត។", "message.triggered-event": "Triggered event", - "message.user-deleted": "User deleted.", - "message.viewed-page": "Viewed page", + "message.user-deleted": "អ្នកប្រើប្រាស់ត្រូវបានលុបចោល។", + "message.viewed-page": "ទំព័រដែលបានមើល", "message.visitor-log": "អ្នកមើលពីប្រទេស {country} ប្រើប្រាស់កម្មវិធី {browser} លើឧបករណ៍ {os} {device}", "message.visitors-dropped-off": "Visitors dropped off" } From d270031793aaba5239ddd9c8c66180ef5dfc89b4 Mon Sep 17 00:00:00 2001 From: manethpak Date: Wed, 10 Jul 2024 22:18:31 +0700 Subject: [PATCH 26/26] fix: typo, update wording and fill missing words/sentence --- src/lang/km-KH.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lang/km-KH.json b/src/lang/km-KH.json index e10b32b5..f45ed449 100644 --- a/src/lang/km-KH.json +++ b/src/lang/km-KH.json @@ -34,7 +34,7 @@ "label.country": "ប្រទេស", "label.create": "បង្កើត", "label.create-report": "បង្កើតរបាយការណ៍", - "label.create-team": "បង្កើតរបាយក្រុម", + "label.create-team": "បង្កើតក្រុម", "label.create-user": "បង្កើតអ្នកប្រើប្រាស់", "label.created": "បង្កើតនៅ", "label.created-by": "បង្កើតដោយ", @@ -146,15 +146,15 @@ "label.referrers": "អ្នកណែនាំ", "label.refresh": "ផ្ទុកឡើងវិញ", "label.regenerate": "Regenerate", - "label.region": "Region", - "label.regions": "Regions", + "label.region": "តំបន់", + "label.regions": "តំបន់", "label.remove": "លុប", "label.remove-member": "លុបសមាជិកក្រុម", "label.reports": "របាយការណ៍", "label.required": "ទាមទារ", "label.reset": "កែសម្រួល", "label.reset-website": "កំណត់ស្ថិតិឡើងវិញ", - "label.retention": "Retention", + "label.retention": "ការរក្សាទុក", "label.retention-description": "Measure your website stickiness by tracking how often users return.", "label.role": "មុខងារ", "label.run-query": "Run query", @@ -169,8 +169,8 @@ "label.settings": "ការកំណត់", "label.share-url": "ចែករំលែក URL", "label.single-day": "ថ្ងៃតែមួយ", - "label.start-step": "Start Step", - "label.steps": "Steps", + "label.start-step": "ជំហានចាប់ផ្តើម", + "label.steps": "ជំហាន", "label.sum": "Sum", "label.tablet": "ថេប្លេត", "label.team": "ក្រុម", @@ -204,20 +204,20 @@ "label.update": "Update", "label.url": "URL", "label.urls": "URLs", - "label.user": "User", + "label.user": "អ្នកប្រើប្រាស់", "label.username": "ឈ្មោះ​អ្នកប្រើប្រាស់", - "label.users": "Users", + "label.users": "អ្នកប្រើប្រាស់", "label.utm": "UTM", - "label.utm-description": "Track your campaigns through UTM parameters.", + "label.utm-description": "តាមដានយុទ្ធនាការរបស់អ្នកតាមរយៈប៉ារ៉ាម៉ែត្រ UTM។", "label.value": "Value", "label.view": "View", "label.view-details": "មើលព័ត៌មានលម្អិត", "label.view-only": "បានតែមើលប៉ុណ្ណោះ", "label.views": "អ្នកចូលមើល", "label.views-per-visit": "Views per visit", - "label.visit-duration": "មើលជាមធ្យម", + "label.visit-duration": "រយៈពេលទស្សនា", "label.visitors": "អ្នកទស្សនា", - "label.visits": "Visits", + "label.visits": "ទស្សនា", "label.website": "គេហទំព័រ", "label.website-id": "ID គេហទំព័រ", "label.websites": "គេហទំព័រ", @@ -225,7 +225,7 @@ "label.yesterday": "ម្សិលមិញ", "message.action-confirmation": "សសេរ {confirmation} នៅក្នុងប្រអប់ខាងក្រោមដើម្បីបញ្ជាក់។", "message.active-users": "មានអ្នកមើល {x} នាក់ ឥលូវនេះ", - "message.collected-data": "Collected data", + "message.collected-data": "ទិន្នន័យដែលបានប្រមូលទុក", "message.confirm-delete": "តើអ្នកប្រាកដថាចង់លុប {target} ទេ?", "message.confirm-leave": "តើអ្នកប្រាកដថាចង់ចាកចេញ {target} ទេ?", "message.confirm-remove": "តើអ្នកប្រាកដថាចង់លុប {target} ទេ?", @@ -240,7 +240,7 @@ "message.min-password-length": "តិចបំផុតដែលមានអក្សរ {n} តួអក្សរ", "message.new-version-available": "Version ថ្មីនៃ Umami {version} អាចប្រើប្រាស់បានហើយ!", "message.no-data-available": "មិនមានទិន្នន័យ។", - "message.no-event-data": "No event data is available.", + "message.no-event-data": "មិនមានទិន្នន័យព្រឹត្តិការណ៍ទេ។", "message.no-match-password": "ពាក្យសម្ងាត់មិនត្រូវគ្នាទេ។", "message.no-results-found": "មិនមានលទ្ធផល។", "message.no-team-websites": "ក្រុមនេះមិនមានគេហទំព័រទេ។", @@ -252,7 +252,7 @@ "message.reset-website-warning": "ស្ថិតិទាំងអស់សម្រាប់គេហទំព័រនេះនឹងត្រូវបានលុប ប៉ុន្តែកូដតាមដានរបស់អ្នកនឹងនៅដដែល។", "message.saved": "រក្សាទុកដោយជោគជ័យ។", "message.share-url": "នេះគឺជា URL ដែលអាចចែករំលែកជាសាធារណៈបានសម្រាប់ {target}។", - "message.team-already-member": "You are already a member of the team.", + "message.team-already-member": "អ្នកគឺជាសមាជិកនៃក្រុមរួចហើយ។", "message.team-not-found": "រកក្រុមមិនឃើញទេ។", "message.team-websites-info": "គេហទំព័រនេះអាចមើលបានតែសមាជិកក្រុមតែប៉ុណ្ណោះ", "message.tracking-code": "ដើម្បីតាមដានស្ថិតិសម្រាប់គេហទំព័រអ្នក សូមដាក់កូដខាងក្រោមទៅក្នុងផ្នែក ... នៃ HTML របស់អ្នក។", @@ -263,5 +263,5 @@ "message.user-deleted": "អ្នកប្រើប្រាស់ត្រូវបានលុបចោល។", "message.viewed-page": "ទំព័រដែលបានមើល", "message.visitor-log": "អ្នកមើលពីប្រទេស {country} ប្រើប្រាស់កម្មវិធី {browser} លើឧបករណ៍ {os} {device}", - "message.visitors-dropped-off": "Visitors dropped off" + "message.visitors-dropped-off": "ចំនួនអ្នកទស្សនាធ្លាក់ចុះ" }