Merge pull request #2918 from umami-software/dev

v2.13.2
This commit is contained in:
Mike Cao 2024-08-27 19:30:56 -07:00 committed by GitHub
commit e881735a23
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 305 additions and 321 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "umami", "name": "umami",
"version": "2.13.1", "version": "2.13.2",
"description": "A simple, fast, privacy-focused alternative to Google Analytics.", "description": "A simple, fast, privacy-focused alternative to Google Analytics.",
"author": "Umami Software, Inc. <hello@umami.is>", "author": "Umami Software, Inc. <hello@umami.is>",
"license": "MIT", "license": "MIT",

View File

@ -1180,7 +1180,7 @@
"label.team-manager": [ "label.team-manager": [
{ {
"type": 0, "type": 0,
"value": "Responsable d'Equip" "value": "Responsable d'equip"
} }
], ],
"label.team-member": [ "label.team-member": [

View File

@ -404,19 +404,19 @@
"label.entry": [ "label.entry": [
{ {
"type": 0, "type": 0,
"value": "Eintrags-URL" "value": "Eingangs-URL"
} }
], ],
"label.event": [ "label.event": [
{ {
"type": 0, "type": 0,
"value": "Event" "value": "Ereigniss"
} }
], ],
"label.event-data": [ "label.event-data": [
{ {
"type": 0, "type": 0,
"value": "Eventdaten" "value": "Ereignissdaten"
} }
], ],
"label.events": [ "label.events": [
@ -476,19 +476,19 @@
"label.first-seen": [ "label.first-seen": [
{ {
"type": 0, "type": 0,
"value": "First seen" "value": "Erstmalig gesehen"
} }
], ],
"label.funnel": [ "label.funnel": [
{ {
"type": 0, "type": 0,
"value": "Funnel" "value": "Trichter"
} }
], ],
"label.funnel-description": [ "label.funnel-description": [
{ {
"type": 0, "type": 0,
"value": "Verstehe die Konversions- und Abbruchrate der Nutzer." "value": "Verstehen Sie die Konversions- und Absprungrate Ihrer Nutzer."
} }
], ],
"label.goal": [ "label.goal": [
@ -542,7 +542,7 @@
"label.insights-description": [ "label.insights-description": [
{ {
"type": 0, "type": 0,
"value": "Vertiefen Sie Ihre Daten mit Hilfe von Segmenten und Filtern." "value": "Vertiefen Sie sich mit Hilfe von Segmenten und Filtern in Ihre Daten."
} }
], ],
"label.is": [ "label.is": [
@ -590,7 +590,7 @@
"label.journey-description": [ "label.journey-description": [
{ {
"type": 0, "type": 0,
"value": "Verstehe, wie Nutzer auf der Webseite navigieren" "value": "Verstehen Sie, wie Nutzer auf Ihrer Website navigieren."
} }
], ],
"label.language": [ "label.language": [
@ -656,7 +656,7 @@
"label.last-seen": [ "label.last-seen": [
{ {
"type": 0, "type": 0,
"value": "Last seen" "value": "Zuletzt gesehen"
} }
], ],
"label.leave": [ "label.leave": [
@ -752,7 +752,7 @@
"label.my-websites": [ "label.my-websites": [
{ {
"type": 0, "type": 0,
"value": "Meine Webseiten" "value": "Meine Websites"
} }
], ],
"label.name": [ "label.name": [
@ -876,13 +876,13 @@
"label.path": [ "label.path": [
{ {
"type": 0, "type": 0,
"value": "Path" "value": "Pfad"
} }
], ],
"label.paths": [ "label.paths": [
{ {
"type": 0, "type": 0,
"value": "Paths" "value": "Pfade"
} }
], ],
"label.powered-by": [ "label.powered-by": [
@ -898,7 +898,7 @@
"label.previous": [ "label.previous": [
{ {
"type": 0, "type": 0,
"value": "Vorheriges" "value": "Vorherig"
} }
], ],
"label.previous-period": [ "label.previous-period": [
@ -922,7 +922,7 @@
"label.properties": [ "label.properties": [
{ {
"type": 0, "type": 0,
"value": "Properties" "value": "Eigenschaften"
} }
], ],
"label.property": [ "label.property": [
@ -958,13 +958,13 @@
"label.referrer": [ "label.referrer": [
{ {
"type": 0, "type": 0,
"value": "Referrer" "value": "Übermittler"
} }
], ],
"label.referrers": [ "label.referrers": [
{ {
"type": 0, "type": 0,
"value": "Referrer" "value": "Übermittler"
} }
], ],
"label.refresh": [ "label.refresh": [
@ -1030,7 +1030,7 @@
"label.retention": [ "label.retention": [
{ {
"type": 0, "type": 0,
"value": "Bewahrung" "value": "Erhalt"
} }
], ],
"label.retention-description": [ "label.retention-description": [
@ -1042,19 +1042,19 @@
"label.revenue": [ "label.revenue": [
{ {
"type": 0, "type": 0,
"value": "Revenue" "value": "Umsatz"
} }
], ],
"label.revenue-description": [ "label.revenue-description": [
{ {
"type": 0, "type": 0,
"value": "Look into your revenue across time." "value": "Haben Sie einen Blick auf Ihre Umsätze im Laufe der Zeit."
} }
], ],
"label.revenue-property": [ "label.revenue-property": [
{ {
"type": 0, "type": 0,
"value": "Revenue Property" "value": "Umsatzeigenschaften"
} }
], ],
"label.role": [ "label.role": [
@ -1108,13 +1108,13 @@
"label.select-website": [ "label.select-website": [
{ {
"type": 0, "type": 0,
"value": "Webseite auswählen" "value": "Website auswählen"
} }
], ],
"label.session": [ "label.session": [
{ {
"type": 0, "type": 0,
"value": "Session" "value": "Sitzung"
} }
], ],
"label.sessions": [ "label.sessions": [
@ -1204,7 +1204,7 @@
"label.team-view-only": [ "label.team-view-only": [
{ {
"type": 0, "type": 0,
"value": "Nur für Team sichtbar" "value": "Nur für Team-Mitglieder sichtbar"
} }
], ],
"label.team-websites": [ "label.team-websites": [
@ -1288,7 +1288,7 @@
"label.transactions": [ "label.transactions": [
{ {
"type": 0, "type": 0,
"value": "Transactions" "value": "Transaktionen"
} }
], ],
"label.transfer": [ "label.transfer": [
@ -1318,19 +1318,19 @@
"label.unique": [ "label.unique": [
{ {
"type": 0, "type": 0,
"value": "Eindeutig" "value": "Einzigartig"
} }
], ],
"label.unique-visitors": [ "label.unique-visitors": [
{ {
"type": 0, "type": 0,
"value": "Eindeutige Besucher" "value": "Einzigartige Besucher"
} }
], ],
"label.uniqueCustomers": [ "label.uniqueCustomers": [
{ {
"type": 0, "type": 0,
"value": "Unique Customers" "value": "Einzigartige Kunden"
} }
], ],
"label.unknown": [ "label.unknown": [
@ -1372,7 +1372,7 @@
"label.user-property": [ "label.user-property": [
{ {
"type": 0, "type": 0,
"value": "User Property" "value": "Benutzereigenschaften"
} }
], ],
"label.username": [ "label.username": [
@ -1396,7 +1396,7 @@
"label.utm-description": [ "label.utm-description": [
{ {
"type": 0, "type": 0,
"value": "Tracke deine Kampagnen mit UTM parameterns." "value": "Tracken Sie Ihre Kampagnen mit UTM Parametern."
} }
], ],
"label.value": [ "label.value": [
@ -1456,19 +1456,19 @@
"label.website": [ "label.website": [
{ {
"type": 0, "type": 0,
"value": "Webseite" "value": "Website"
} }
], ],
"label.website-id": [ "label.website-id": [
{ {
"type": 0, "type": 0,
"value": "Webseiten-ID" "value": "Website-ID"
} }
], ],
"label.websites": [ "label.websites": [
{ {
"type": 0, "type": 0,
"value": "Webseiten" "value": "Websites"
} }
], ],
"label.window": [ "label.window": [
@ -1596,7 +1596,7 @@
"message.delete-team-warning": [ "message.delete-team-warning": [
{ {
"type": 0, "type": 0,
"value": "Ein Team zu löschen, wird auch alle Team-Webseiten löschen." "value": "Ein Team zu löschen, wird auch alle Team-Websites löschen."
} }
], ],
"message.delete-website-warning": [ "message.delete-website-warning": [
@ -1780,25 +1780,25 @@
"message.transfer-team-website-to-user": [ "message.transfer-team-website-to-user": [
{ {
"type": 0, "type": 0,
"value": "Diese Webseite zu deinem Account transferieren?" "value": "Diese Website zu Ihrem Account transferieren?"
} }
], ],
"message.transfer-user-website-to-team": [ "message.transfer-user-website-to-team": [
{ {
"type": 0, "type": 0,
"value": "Wähle ein Team aus, zu dem die Webseite transferiert werden soll." "value": "Wählen Sie ein Team aus, zu dem die Website transferiert werden soll."
} }
], ],
"message.transfer-website": [ "message.transfer-website": [
{ {
"type": 0, "type": 0,
"value": "Übertrage die Eigentümerrechte zu deinem Account oder einem anderen Team." "value": "Übertragen Sie die Eigentümerrechte zu Ihrem Account oder einem anderen Team."
} }
], ],
"message.triggered-event": [ "message.triggered-event": [
{ {
"type": 0, "type": 0,
"value": "Ausgelöstes Event" "value": "Ausgelöstes Ereigniss"
} }
], ],
"message.user-deleted": [ "message.user-deleted": [
@ -1810,7 +1810,7 @@
"message.viewed-page": [ "message.viewed-page": [
{ {
"type": 0, "type": 0,
"value": "Besuchte Seite" "value": "Seite besucht"
} }
], ],
"message.visitor-log": [ "message.visitor-log": [

View File

@ -8,13 +8,13 @@
"label.actions": [ "label.actions": [
{ {
"type": 0, "type": 0,
"value": "액션" "value": "동작"
} }
], ],
"label.activity": [ "label.activity": [
{ {
"type": 0, "type": 0,
"value": "활동 기록" "value": "활동"
} }
], ],
"label.add": [ "label.add": [
@ -128,7 +128,7 @@
"label.change-password": [ "label.change-password": [
{ {
"type": 0, "type": 0,
"value": "비밀번호 변경하기" "value": "비밀번호 변경"
} }
], ],
"label.cities": [ "label.cities": [
@ -200,25 +200,25 @@
"label.create": [ "label.create": [
{ {
"type": 0, "type": 0,
"value": "생성" "value": "만들기"
} }
], ],
"label.create-report": [ "label.create-report": [
{ {
"type": 0, "type": 0,
"value": "리포트 생성" "value": "보고서 만들기"
} }
], ],
"label.create-team": [ "label.create-team": [
{ {
"type": 0, "type": 0,
"value": "팀 생성" "value": "팀 만들기"
} }
], ],
"label.create-user": [ "label.create-user": [
{ {
"type": 0, "type": 0,
"value": "사용자 생성" "value": "사용자 만들기"
} }
], ],
"label.created": [ "label.created": [
@ -296,7 +296,7 @@
"label.delete-report": [ "label.delete-report": [
{ {
"type": 0, "type": 0,
"value": "리포트 삭제" "value": "보고서 삭제"
} }
], ],
"label.delete-team": [ "label.delete-team": [
@ -326,13 +326,13 @@
"label.desktop": [ "label.desktop": [
{ {
"type": 0, "type": 0,
"value": "데스크" "value": "데스크"
} }
], ],
"label.details": [ "label.details": [
{ {
"type": 0, "type": 0,
"value": "세부 사항" "value": "세부 정보"
} }
], ],
"label.device": [ "label.device": [
@ -386,7 +386,7 @@
"label.edit-member": [ "label.edit-member": [
{ {
"type": 0, "type": 0,
"value": "회원 편집" "value": "멤버 편집"
} }
], ],
"label.enable-share-url": [ "label.enable-share-url": [
@ -398,7 +398,7 @@
"label.end-step": [ "label.end-step": [
{ {
"type": 0, "type": 0,
"value": "종료 단계" "value": "마지막 단계"
} }
], ],
"label.entry": [ "label.entry": [
@ -458,7 +458,7 @@
"label.filter-combined": [ "label.filter-combined": [
{ {
"type": 0, "type": 0,
"value": "합쳐 보기" "value": "합쳐 보기"
} }
], ],
"label.filter-raw": [ "label.filter-raw": [
@ -476,7 +476,7 @@
"label.first-seen": [ "label.first-seen": [
{ {
"type": 0, "type": 0,
"value": "First seen" "value": "첫 접속"
} }
], ],
"label.funnel": [ "label.funnel": [
@ -506,7 +506,7 @@
"label.goals-description": [ "label.goals-description": [
{ {
"type": 0, "type": 0,
"value": "페이지 및 이벤트 목표를 추적합니다." "value": "페이지 조회 및 이벤트 목표를 추적합니다."
} }
], ],
"label.greater-than": [ "label.greater-than": [
@ -572,13 +572,13 @@
"label.join": [ "label.join": [
{ {
"type": 0, "type": 0,
"value": "가입" "value": "가입하기"
} }
], ],
"label.join-team": [ "label.join-team": [
{ {
"type": 0, "type": 0,
"value": "팀 가입" "value": "팀 가입하기"
} }
], ],
"label.journey": [ "label.journey": [
@ -614,7 +614,7 @@
"label.last-days": [ "label.last-days": [
{ {
"type": 0, "type": 0,
"value": "최근 " "value": "지난 "
}, },
{ {
"type": 1, "type": 1,
@ -628,7 +628,7 @@
"label.last-hours": [ "label.last-hours": [
{ {
"type": 0, "type": 0,
"value": "최근 " "value": "지난 "
}, },
{ {
"type": 1, "type": 1,
@ -642,7 +642,7 @@
"label.last-months": [ "label.last-months": [
{ {
"type": 0, "type": 0,
"value": "최근 " "value": "지난 "
}, },
{ {
"type": 1, "type": 1,
@ -656,7 +656,7 @@
"label.last-seen": [ "label.last-seen": [
{ {
"type": 0, "type": 0,
"value": "Last seen" "value": "마지막 접속"
} }
], ],
"label.leave": [ "label.leave": [
@ -780,31 +780,7 @@
}, },
{ {
"type": 0, "type": 0,
"value": " " "value": "개 레코드"
},
{
"offset": 0,
"options": {
"one": {
"value": [
{
"type": 0,
"value": "record"
}
]
},
"other": {
"value": [
{
"type": 0,
"value": "레코드"
}
]
}
},
"pluralType": "cardinal",
"type": 6,
"value": "x"
} }
], ],
"label.ok": [ "label.ok": [
@ -832,13 +808,9 @@
} }
], ],
"label.page-of": [ "label.page-of": [
{
"type": 1,
"value": "total"
},
{ {
"type": 0, "type": 0,
"value": " " "value": "페이지 "
}, },
{ {
"type": 1, "type": 1,
@ -846,13 +818,17 @@
}, },
{ {
"type": 0, "type": 0,
"value": " 페이지" "value": "/"
},
{
"type": 1,
"value": "total"
} }
], ],
"label.page-views": [ "label.page-views": [
{ {
"type": 0, "type": 0,
"value": "페이지 " "value": "페이지 조회"
} }
], ],
"label.pageTitle": [ "label.pageTitle": [
@ -876,27 +852,23 @@
"label.path": [ "label.path": [
{ {
"type": 0, "type": 0,
"value": "Path" "value": "패스"
} }
], ],
"label.paths": [ "label.paths": [
{ {
"type": 0, "type": 0,
"value": "Paths" "value": "패스"
} }
], ],
"label.powered-by": [ "label.powered-by": [
{ {
"type": 0, "type": 0,
"value": "이 시스템은 " "value": "Powered by "
}, },
{ {
"type": 1, "type": 1,
"value": "name" "value": "name"
},
{
"type": 0,
"value": "에서 구동되고 있습니다."
} }
], ],
"label.previous": [ "label.previous": [
@ -926,7 +898,7 @@
"label.properties": [ "label.properties": [
{ {
"type": 0, "type": 0,
"value": "Properties" "value": "속성"
} }
], ],
"label.property": [ "label.property": [
@ -1010,7 +982,7 @@
"label.reports": [ "label.reports": [
{ {
"type": 0, "type": 0,
"value": "리포트" "value": "보고서"
} }
], ],
"label.required": [ "label.required": [
@ -1022,7 +994,7 @@
"label.reset": [ "label.reset": [
{ {
"type": 0, "type": 0,
"value": "리셋" "value": "초기화"
} }
], ],
"label.reset-website": [ "label.reset-website": [
@ -1046,19 +1018,19 @@
"label.revenue": [ "label.revenue": [
{ {
"type": 0, "type": 0,
"value": "Revenue" "value": "수익"
} }
], ],
"label.revenue-description": [ "label.revenue-description": [
{ {
"type": 0, "type": 0,
"value": "Look into your revenue across time." "value": "시간대별 수익을 살펴보세요."
} }
], ],
"label.revenue-property": [ "label.revenue-property": [
{ {
"type": 0, "type": 0,
"value": "Revenue Property" "value": "수익 속성"
} }
], ],
"label.role": [ "label.role": [
@ -1082,7 +1054,7 @@
"label.screens": [ "label.screens": [
{ {
"type": 0, "type": 0,
"value": "스크린" "value": "화면"
} }
], ],
"label.search": [ "label.search": [
@ -1118,7 +1090,7 @@
"label.session": [ "label.session": [
{ {
"type": 0, "type": 0,
"value": "Session" "value": "세션"
} }
], ],
"label.sessions": [ "label.sessions": [
@ -1280,7 +1252,7 @@
"label.total-records": [ "label.total-records": [
{ {
"type": 0, "type": 0,
"value": " 레코드" "value": "전체 레코드"
} }
], ],
"label.tracking-code": [ "label.tracking-code": [
@ -1292,7 +1264,7 @@
"label.transactions": [ "label.transactions": [
{ {
"type": 0, "type": 0,
"value": "Transactions" "value": "거래"
} }
], ],
"label.transfer": [ "label.transfer": [
@ -1328,13 +1300,13 @@
"label.unique-visitors": [ "label.unique-visitors": [
{ {
"type": 0, "type": 0,
"value": "순방문자(UV)" "value": "고유 방문자"
} }
], ],
"label.uniqueCustomers": [ "label.uniqueCustomers": [
{ {
"type": 0, "type": 0,
"value": "Unique Customers" "value": "고유 고객"
} }
], ],
"label.unknown": [ "label.unknown": [
@ -1376,13 +1348,13 @@
"label.user-property": [ "label.user-property": [
{ {
"type": 0, "type": 0,
"value": "User Property" "value": "사용자 속성"
} }
], ],
"label.username": [ "label.username": [
{ {
"type": 0, "type": 0,
"value": "사용자" "value": "사용자 이름"
} }
], ],
"label.users": [ "label.users": [
@ -1418,7 +1390,7 @@
"label.view-details": [ "label.view-details": [
{ {
"type": 0, "type": 0,
"value": "상세보기" "value": "자세히 보기"
} }
], ],
"label.view-only": [ "label.view-only": [
@ -1430,13 +1402,13 @@
"label.views": [ "label.views": [
{ {
"type": 0, "type": 0,
"value": "조회" "value": "조회"
} }
], ],
"label.views-per-visit": [ "label.views-per-visit": [
{ {
"type": 0, "type": 0,
"value": "방문당 조회" "value": "방문당 조회"
} }
], ],
"label.visit-duration": [ "label.visit-duration": [
@ -1448,7 +1420,7 @@
"label.visitors": [ "label.visitors": [
{ {
"type": 0, "type": 0,
"value": "방문" "value": "방문"
} }
], ],
"label.visits": [ "label.visits": [
@ -1498,17 +1470,21 @@
}, },
{ {
"type": 0, "type": 0,
"value": "을(를) 입력하십시오." "value": "을(를) 입력하세요."
} }
], ],
"message.active-users": [ "message.active-users": [
{
"type": 0,
"value": "현재 방문자 "
},
{ {
"type": 1, "type": 1,
"value": "x" "value": "x"
}, },
{ {
"type": 0, "type": 0,
"value": "명의 사용자가 보는 중입니다." "value": "명"
} }
], ],
"message.collected-data": [ "message.collected-data": [
@ -1572,7 +1548,7 @@
"message.error": [ "message.error": [
{ {
"type": 0, "type": 0,
"value": "오류가 발생하였습니다." "value": "오류가 발생습니다."
} }
], ],
"message.event-log": [ "message.event-log": [
@ -1598,19 +1574,19 @@
"message.incorrect-username-password": [ "message.incorrect-username-password": [
{ {
"type": 0, "type": 0,
"value": "사용자 이름/비밀번호가 잘못되었습니다." "value": "사용자 이름 또는 비밀번호를 잘못 입력했습니다."
} }
], ],
"message.invalid-domain": [ "message.invalid-domain": [
{ {
"type": 0, "type": 0,
"value": "잘못된 도메인" "value": "잘못된 도메인입니다. http/https를 포함하지 마세요."
} }
], ],
"message.min-password-length": [ "message.min-password-length": [
{ {
"type": 0, "type": 0,
"value": "최소 길이는 " "value": "최소 "
}, },
{ {
"type": 1, "type": 1,
@ -1618,35 +1594,39 @@
}, },
{ {
"type": 0, "type": 0,
"value": "자니다" "value": "자여야 합니다"
} }
], ],
"message.new-version-available": [ "message.new-version-available": [
{ {
"type": 0, "type": 0,
"value": "새 버전이 사용 가능합니다! - Umami " "value": "Umami의 새 버전 "
}, },
{ {
"type": 1, "type": 1,
"value": "version" "value": "version"
},
{
"type": 0,
"value": "을(를) 사용할 수 있습니다!"
} }
], ],
"message.no-data-available": [ "message.no-data-available": [
{ {
"type": 0, "type": 0,
"value": "사용 가능한 데이터가 없습니다." "value": "사용할 수 있는 데이터가 없습니다."
} }
], ],
"message.no-event-data": [ "message.no-event-data": [
{ {
"type": 0, "type": 0,
"value": "사용 가능한 이벤트 데이터가 없습니다." "value": "사용할 수 있는 이벤트 데이터가 없습니다."
} }
], ],
"message.no-match-password": [ "message.no-match-password": [
{ {
"type": 0, "type": 0,
"value": "비밀번호가 일치하지 않" "value": "비밀번호가 일치하지 않습니다."
} }
], ],
"message.no-results-found": [ "message.no-results-found": [
@ -1658,13 +1638,13 @@
"message.no-team-websites": [ "message.no-team-websites": [
{ {
"type": 0, "type": 0,
"value": "팀에 웹사이트가 없습니다." "value": "팀에 웹사이트가 없습니다."
} }
], ],
"message.no-teams": [ "message.no-teams": [
{ {
"type": 0, "type": 0,
"value": "생성된 팀이 없습니다." "value": "만든 팀이 없습니다."
} }
], ],
"message.no-users": [ "message.no-users": [
@ -1682,13 +1662,13 @@
"message.page-not-found": [ "message.page-not-found": [
{ {
"type": 0, "type": 0,
"value": "페이지를 찾을 수 없습니다." "value": "페이지를 찾을 수 없"
} }
], ],
"message.reset-website": [ "message.reset-website": [
{ {
"type": 0, "type": 0,
"value": "이 웹사이트를 초기화하려면, 아래 상자에 " "value": "이 웹사이트를 초기화하려면 아래 상자에 "
}, },
{ {
"type": 1, "type": 1,
@ -1696,7 +1676,7 @@
}, },
{ {
"type": 0, "type": 0,
"value": "을(를) 입력하십시오." "value": "을(를) 입력하세요."
} }
], ],
"message.reset-website-warning": [ "message.reset-website-warning": [
@ -1708,7 +1688,7 @@
"message.saved": [ "message.saved": [
{ {
"type": 0, "type": 0,
"value": "성공적으로 저장되었습니다." "value": "저장했습니다."
} }
], ],
"message.share-url": [ "message.share-url": [
@ -1720,7 +1700,7 @@
"message.team-already-member": [ "message.team-already-member": [
{ {
"type": 0, "type": 0,
"value": "이미 팀의 회원입니다." "value": "이미 팀 멤버입니다."
} }
], ],
"message.team-not-found": [ "message.team-not-found": [
@ -1732,13 +1712,13 @@
"message.team-websites-info": [ "message.team-websites-info": [
{ {
"type": 0, "type": 0,
"value": "웹사이트는 팀 누구나 볼 수 있습니다." "value": "웹사이트는 팀 멤버 누구나 볼 수 있습니다."
} }
], ],
"message.tracking-code": [ "message.tracking-code": [
{ {
"type": 0, "type": 0,
"value": "이 웹사이트의 통계를 추적하려면, 다음 코드를 HTML의 " "value": "이 웹사이트의 통계를 추적하려면 다음 코드를 HTML의 "
}, },
{ {
"children": [ "children": [
@ -1752,7 +1732,7 @@
}, },
{ {
"type": 0, "type": 0,
"value": " 섹션에 추가하십시오." "value": " 부분에 추가하세요."
} }
], ],
"message.transfer-team-website-to-user": [ "message.transfer-team-website-to-user": [
@ -1764,7 +1744,7 @@
"message.transfer-user-website-to-team": [ "message.transfer-user-website-to-team": [
{ {
"type": 0, "type": 0,
"value": "이 웹사이트를 전송받을 팀을 선택하십시오." "value": "이 웹사이트를 전송받을 팀을 선택하세요."
} }
], ],
"message.transfer-website": [ "message.transfer-website": [
@ -1782,32 +1762,16 @@
"message.user-deleted": [ "message.user-deleted": [
{ {
"type": 0, "type": 0,
"value": "사용자가 삭제되었습니다." "value": "사용자를 삭제했습니다."
} }
], ],
"message.viewed-page": [ "message.viewed-page": [
{ {
"type": 0, "type": 0,
"value": "페이지 조회" "value": "조회한 페이지"
} }
], ],
"message.visitor-log": [ "message.visitor-log": [
{
"type": 1,
"value": "country"
},
{
"type": 0,
"value": "의 "
},
{
"type": 1,
"value": "browser"
},
{
"type": 0,
"value": " 브라우저를 사용하는 "
},
{ {
"type": 1, "type": 1,
"value": "os" "value": "os"
@ -1822,13 +1786,29 @@
}, },
{ {
"type": 0, "type": 0,
"value": " 방문자" "value": "에서 "
},
{
"type": 1,
"value": "browser"
},
{
"type": 0,
"value": "을(를) 사용하는 "
},
{
"type": 1,
"value": "country"
},
{
"type": 0,
"value": "의 방문자"
} }
], ],
"message.visitors-dropped-off": [ "message.visitors-dropped-off": [
{ {
"type": 0, "type": 0,
"value": "방문자가 이탈했습니다" "value": "방문자 이탈함"
} }
] ]
} }

View File

@ -58,13 +58,13 @@ export function RetentionTable({ days = DAYS }) {
if (totalDays - rowIndex < day) { if (totalDays - rowIndex < day) {
return null; return null;
} }
const percentage = records[day]?.percentage; const percentage = records.filter(a => a.day === day)[0]?.percentage;
return ( return (
<div <div
key={day} key={day}
className={classNames(styles.cell, { [styles.empty]: !percentage })} className={classNames(styles.cell, { [styles.empty]: !percentage })}
> >
{percentage ? `${percentage.toFixed(2)}%` : ''} {percentage ? `${Number(percentage).toFixed(2)}%` : ''}
</div> </div>
); );
})} })}

View File

@ -47,7 +47,7 @@ export default function WebsiteChartList({
</Button> </Button>
</Link> </Link>
</WebsiteHeader> </WebsiteHeader>
<WebsiteMetricsBar websiteId={id} /> <WebsiteMetricsBar websiteId={id} showChange={true} />
{showCharts && <WebsiteChart websiteId={id} />} {showCharts && <WebsiteChart websiteId={id} />}
</div> </div>
) : null; ) : null;

View File

@ -13,7 +13,7 @@ export default function EventsDataTable({
const queryResult = useWebsiteEvents(websiteId); const queryResult = useWebsiteEvents(websiteId);
return ( return (
<DataTable queryResult={queryResult} allowSearch={true}> <DataTable queryResult={queryResult} allowSearch={true} autoFocus={false}>
{({ data }) => <EventsTable data={data} />} {({ data }) => <EventsTable data={data} />}
</DataTable> </DataTable>
); );

View File

@ -1,9 +1,8 @@
import { useMemo } from 'react';
import { useTheme } from 'components/hooks';
import Chart, { ChartProps } from 'components/charts/Chart';
import { renderNumberLabels } from 'lib/charts';
import { useState } from 'react';
import BarChartTooltip from 'components/charts/BarChartTooltip'; import BarChartTooltip from 'components/charts/BarChartTooltip';
import Chart, { ChartProps } from 'components/charts/Chart';
import { useTheme } from 'components/hooks';
import { renderNumberLabels } from 'lib/charts';
import { useMemo, useState } from 'react';
export interface BarChartProps extends ChartProps { export interface BarChartProps extends ChartProps {
unit: string; unit: string;
@ -36,7 +35,7 @@ export function BarChart(props: BarChartProps) {
x: { x: {
type: XAxisType, type: XAxisType,
stacked: true, stacked: true,
min: minDate, min: minDate && new Date(minDate).getSeconds() === 0 ? minDate : '',
max: maxDate, max: maxDate,
time: { time: {
unit, unit,

View File

@ -15,6 +15,7 @@ export interface DataTableProps {
searchDelay?: number; searchDelay?: number;
allowSearch?: boolean; allowSearch?: boolean;
allowPaging?: boolean; allowPaging?: boolean;
autoFocus?: boolean;
renderEmpty?: () => ReactNode; renderEmpty?: () => ReactNode;
children: ReactNode | ((data: any) => ReactNode); children: ReactNode | ((data: any) => ReactNode);
} }
@ -24,6 +25,7 @@ export function DataTable({
searchDelay = 600, searchDelay = 600,
allowSearch = true, allowSearch = true,
allowPaging = true, allowPaging = true,
autoFocus = true,
renderEmpty, renderEmpty,
children, children,
}: DataTableProps) { }: DataTableProps) {
@ -57,7 +59,7 @@ export function DataTable({
value={query} value={query}
onSearch={handleSearch} onSearch={handleSearch}
delay={searchDelay || DEFAULT_SEARCH_DELAY} delay={searchDelay || DEFAULT_SEARCH_DELAY}
autoFocus={true} autoFocus={autoFocus}
placeholder={formatMessage(labels.search)} placeholder={formatMessage(labels.search)}
/> />
)} )}

View File

@ -47,6 +47,8 @@ export function EventsChart({ websiteId, className }: EventsChartProps) {
return ( return (
<BarChart <BarChart
minDate={startDate.toISOString()}
maxDate={endDate.toISOString()}
className={className} className={className}
data={chartData} data={chartData}
unit={unit} unit={unit}

View File

@ -184,7 +184,7 @@
"label.tablet": "Tauleta", "label.tablet": "Tauleta",
"label.team": "Equip", "label.team": "Equip",
"label.team-id": "ID del equip", "label.team-id": "ID del equip",
"label.team-manager": "Responsable d'Equip", "label.team-manager": "Responsable d'equip",
"label.team-member": "Membre de l'equip", "label.team-member": "Membre de l'equip",
"label.team-name": "Nom de l'equip", "label.team-name": "Nom de l'equip",
"label.team-owner": "Propietari de l'equip", "label.team-owner": "Propietari de l'equip",

View File

@ -66,9 +66,9 @@
"label.edit-member": "Mitglied bearbeiten", "label.edit-member": "Mitglied bearbeiten",
"label.enable-share-url": "Freigabe-URL aktivieren", "label.enable-share-url": "Freigabe-URL aktivieren",
"label.end-step": "Schlussschritt", "label.end-step": "Schlussschritt",
"label.entry": "Eintrags-URL", "label.entry": "Eingangs-URL",
"label.event": "Event", "label.event": "Ereigniss",
"label.event-data": "Eventdaten", "label.event-data": "Ereignissdaten",
"label.events": "Ereignisse", "label.events": "Ereignisse",
"label.exit": "Ausgangs-URL", "label.exit": "Ausgangs-URL",
"label.false": "Falsch", "label.false": "Falsch",
@ -78,9 +78,9 @@
"label.filter-combined": "Kombiniert", "label.filter-combined": "Kombiniert",
"label.filter-raw": "Rohdaten", "label.filter-raw": "Rohdaten",
"label.filters": "Filter", "label.filters": "Filter",
"label.first-seen": "First seen", "label.first-seen": "Erstmalig gesehen",
"label.funnel": "Funnel", "label.funnel": "Trichter",
"label.funnel-description": "Verstehe die Konversions- und Abbruchrate der Nutzer.", "label.funnel-description": "Verstehen Sie die Konversions- und Absprungrate Ihrer Nutzer.",
"label.goal": "Ziel", "label.goal": "Ziel",
"label.goals": "Ziele", "label.goals": "Ziele",
"label.goals-description": "Verfolgen Sie Ihre Ziele für Seitenaufrufe und Ereignisse.", "label.goals-description": "Verfolgen Sie Ihre Ziele für Seitenaufrufe und Ereignisse.",
@ -89,7 +89,7 @@
"label.host": "Host", "label.host": "Host",
"label.hosts": "Hosts", "label.hosts": "Hosts",
"label.insights": "Einblicke", "label.insights": "Einblicke",
"label.insights-description": "Vertiefen Sie Ihre Daten mit Hilfe von Segmenten und Filtern.", "label.insights-description": "Vertiefen Sie sich mit Hilfe von Segmenten und Filtern in Ihre Daten.",
"label.is": "Ist", "label.is": "Ist",
"label.is-not": "Ist nicht", "label.is-not": "Ist nicht",
"label.is-not-set": "Ist nicht gesetzt", "label.is-not-set": "Ist nicht gesetzt",
@ -97,14 +97,14 @@
"label.join": "Beitreten", "label.join": "Beitreten",
"label.join-team": "Team beitreten", "label.join-team": "Team beitreten",
"label.journey": "Reise", "label.journey": "Reise",
"label.journey-description": "Verstehe, wie Nutzer auf der Webseite navigieren", "label.journey-description": "Verstehen Sie, wie Nutzer auf Ihrer Website navigieren.",
"label.language": "Sprache", "label.language": "Sprache",
"label.languages": "Sprachen", "label.languages": "Sprachen",
"label.laptop": "Laptop", "label.laptop": "Laptop",
"label.last-days": "Letzten {x} Tage", "label.last-days": "Letzten {x} Tage",
"label.last-hours": "Letzten {x} Stunden", "label.last-hours": "Letzten {x} Stunden",
"label.last-months": "Letzten {x} Monate", "label.last-months": "Letzten {x} Monate",
"label.last-seen": "Last seen", "label.last-seen": "Zuletzt gesehen",
"label.leave": "Verlassen", "label.leave": "Verlassen",
"label.leave-team": "Team verlassen", "label.leave-team": "Team verlassen",
"label.less-than": "Kleiner als", "label.less-than": "Kleiner als",
@ -120,7 +120,7 @@
"label.mobile": "Handy", "label.mobile": "Handy",
"label.more": "Mehr", "label.more": "Mehr",
"label.my-account": "Mein Account", "label.my-account": "Mein Account",
"label.my-websites": "Meine Webseiten", "label.my-websites": "Meine Websites",
"label.name": "Name", "label.name": "Name",
"label.new-password": "Neues Passwort", "label.new-password": "Neues Passwort",
"label.none": "Keine", "label.none": "Keine",
@ -134,21 +134,21 @@
"label.pageTitle": "Seitentitel", "label.pageTitle": "Seitentitel",
"label.pages": "Seiten", "label.pages": "Seiten",
"label.password": "Passwort", "label.password": "Passwort",
"label.path": "Path", "label.path": "Pfad",
"label.paths": "Paths", "label.paths": "Pfade",
"label.powered-by": "Betrieben durch {name}", "label.powered-by": "Betrieben durch {name}",
"label.previous": "Vorheriges", "label.previous": "Vorherig",
"label.previous-period": "Vorherige Periode", "label.previous-period": "Vorherige Periode",
"label.previous-year": "Vorheriges Jahr", "label.previous-year": "Vorheriges Jahr",
"label.profile": "Profil", "label.profile": "Profil",
"label.properties": "Properties", "label.properties": "Eigenschaften",
"label.property": "Eigentum", "label.property": "Eigentum",
"label.queries": "Abfragen", "label.queries": "Abfragen",
"label.query": "Abfrage", "label.query": "Abfrage",
"label.query-parameters": "Abfrageparameter", "label.query-parameters": "Abfrageparameter",
"label.realtime": "Echtzeit", "label.realtime": "Echtzeit",
"label.referrer": "Referrer", "label.referrer": "Übermittler",
"label.referrers": "Referrer", "label.referrers": "Übermittler",
"label.refresh": "Aktualisieren", "label.refresh": "Aktualisieren",
"label.regenerate": "Erneuern", "label.regenerate": "Erneuern",
"label.region": "Region", "label.region": "Region",
@ -159,11 +159,11 @@
"label.required": "Erforderlich", "label.required": "Erforderlich",
"label.reset": "Zurücksetzen", "label.reset": "Zurücksetzen",
"label.reset-website": "Statistik zurücksetzen", "label.reset-website": "Statistik zurücksetzen",
"label.retention": "Bewahrung", "label.retention": "Erhalt",
"label.retention-description": "Messen Sie die Verweildauer auf Ihrer Website, indem Sie verfolgen, wie oft die Nutzer zurückkehren.", "label.retention-description": "Messen Sie die Verweildauer auf Ihrer Website, indem Sie verfolgen, wie oft die Nutzer zurückkehren.",
"label.revenue": "Revenue", "label.revenue": "Umsatz",
"label.revenue-description": "Look into your revenue across time.", "label.revenue-description": "Haben Sie einen Blick auf Ihre Umsätze im Laufe der Zeit.",
"label.revenue-property": "Revenue Property", "label.revenue-property": "Umsatzeigenschaften",
"label.role": "Rolle", "label.role": "Rolle",
"label.run-query": "Abfrage starten", "label.run-query": "Abfrage starten",
"label.save": "Speichern", "label.save": "Speichern",
@ -172,8 +172,8 @@
"label.select": "Auswählen", "label.select": "Auswählen",
"label.select-date": "Datum auswählen", "label.select-date": "Datum auswählen",
"label.select-role": "Rolle auswählen", "label.select-role": "Rolle auswählen",
"label.select-website": "Webseite auswählen", "label.select-website": "Website auswählen",
"label.session": "Session", "label.session": "Sitzung",
"label.sessions": "Sitzungen", "label.sessions": "Sitzungen",
"label.settings": "Einstellungen", "label.settings": "Einstellungen",
"label.share-url": "Freigabe-URL", "label.share-url": "Freigabe-URL",
@ -188,7 +188,7 @@
"label.team-member": "Team-Mitglied", "label.team-member": "Team-Mitglied",
"label.team-name": "Name des Teams", "label.team-name": "Name des Teams",
"label.team-owner": "Team-Eigentümer", "label.team-owner": "Team-Eigentümer",
"label.team-view-only": "Nur für Team sichtbar", "label.team-view-only": "Nur für Team-Mitglieder sichtbar",
"label.team-websites": "Team-Websites", "label.team-websites": "Team-Websites",
"label.teams": "Teams", "label.teams": "Teams",
"label.theme": "Thema", "label.theme": "Thema",
@ -202,25 +202,25 @@
"label.total": "Gesamt", "label.total": "Gesamt",
"label.total-records": "Datensätze insgesamt", "label.total-records": "Datensätze insgesamt",
"label.tracking-code": "Tracking Code", "label.tracking-code": "Tracking Code",
"label.transactions": "Transactions", "label.transactions": "Transaktionen",
"label.transfer": "Übertragung", "label.transfer": "Übertragung",
"label.transfer-website": "Website übertragen", "label.transfer-website": "Website übertragen",
"label.true": "Wahr", "label.true": "Wahr",
"label.type": "Typ", "label.type": "Typ",
"label.unique": "Eindeutig", "label.unique": "Einzigartig",
"label.unique-visitors": "Eindeutige Besucher", "label.unique-visitors": "Einzigartige Besucher",
"label.uniqueCustomers": "Unique Customers", "label.uniqueCustomers": "Einzigartige Kunden",
"label.unknown": "Unbekannt", "label.unknown": "Unbekannt",
"label.untitled": "Unbenannt", "label.untitled": "Unbenannt",
"label.update": "Update", "label.update": "Update",
"label.url": "URL", "label.url": "URL",
"label.urls": "URLs", "label.urls": "URLs",
"label.user": "Benutzer", "label.user": "Benutzer",
"label.user-property": "User Property", "label.user-property": "Benutzereigenschaften",
"label.username": "Benutzername", "label.username": "Benutzername",
"label.users": "Benutzer", "label.users": "Benutzer",
"label.utm": "UTM", "label.utm": "UTM",
"label.utm-description": "Tracke deine Kampagnen mit UTM parameterns.", "label.utm-description": "Tracken Sie Ihre Kampagnen mit UTM Parametern.",
"label.value": "Wert", "label.value": "Wert",
"label.view": "Anzeigen", "label.view": "Anzeigen",
"label.view-details": "Details anzeigen", "label.view-details": "Details anzeigen",
@ -230,9 +230,9 @@
"label.visit-duration": "Durchschn. Besuchszeit", "label.visit-duration": "Durchschn. Besuchszeit",
"label.visitors": "Besucher", "label.visitors": "Besucher",
"label.visits": "Besuche", "label.visits": "Besuche",
"label.website": "Webseite", "label.website": "Website",
"label.website-id": "Webseiten-ID", "label.website-id": "Website-ID",
"label.websites": "Webseiten", "label.websites": "Websites",
"label.window": "Fenster", "label.window": "Fenster",
"label.yesterday": "Gestern", "label.yesterday": "Gestern",
"message.action-confirmation": "Schreibe {confirmation} in die Box zur bestätigung.", "message.action-confirmation": "Schreibe {confirmation} in die Box zur bestätigung.",
@ -242,7 +242,7 @@
"message.confirm-leave": "Sind Sie sicher, dass die {target} verlassen möchten?", "message.confirm-leave": "Sind Sie sicher, dass die {target} verlassen möchten?",
"message.confirm-remove": "Sind Sie sicher, {target} zu entfernen?", "message.confirm-remove": "Sind Sie sicher, {target} zu entfernen?",
"message.confirm-reset": "Sind Sie sicher, dass Sie die Statistiken von {target} zurücksetzen wollen?", "message.confirm-reset": "Sind Sie sicher, dass Sie die Statistiken von {target} zurücksetzen wollen?",
"message.delete-team-warning": "Ein Team zu löschen, wird auch alle Team-Webseiten löschen.", "message.delete-team-warning": "Ein Team zu löschen, wird auch alle Team-Websites löschen.",
"message.delete-website-warning": "Alle zugehörigen Daten werden ebenfalls gelöscht.", "message.delete-website-warning": "Alle zugehörigen Daten werden ebenfalls gelöscht.",
"message.error": "Es ist ein Fehler aufgetreten.", "message.error": "Es ist ein Fehler aufgetreten.",
"message.event-log": "{event} auf {url}", "message.event-log": "{event} auf {url}",
@ -268,12 +268,12 @@
"message.team-not-found": "Team nicht gefunden.", "message.team-not-found": "Team nicht gefunden.",
"message.team-websites-info": "Websites können von jedem im Team eingesehen werden.", "message.team-websites-info": "Websites können von jedem im Team eingesehen werden.",
"message.tracking-code": "Tracking Code", "message.tracking-code": "Tracking Code",
"message.transfer-team-website-to-user": "Diese Webseite zu deinem Account transferieren?", "message.transfer-team-website-to-user": "Diese Website zu Ihrem Account transferieren?",
"message.transfer-user-website-to-team": "Wähle ein Team aus, zu dem die Webseite transferiert werden soll.", "message.transfer-user-website-to-team": "Wählen Sie ein Team aus, zu dem die Website transferiert werden soll.",
"message.transfer-website": "Übertrage die Eigentümerrechte zu deinem Account oder einem anderen Team.", "message.transfer-website": "Übertragen Sie die Eigentümerrechte zu Ihrem Account oder einem anderen Team.",
"message.triggered-event": "Ausgelöstes Event", "message.triggered-event": "Ausgelöstes Ereigniss",
"message.user-deleted": "Benutzer gelöscht.", "message.user-deleted": "Benutzer gelöscht.",
"message.viewed-page": "Besuchte Seite", "message.viewed-page": "Seite besucht",
"message.visitor-log": "Besucher aus {country} benutzt {browser} auf {os} {device}", "message.visitor-log": "Besucher aus {country} benutzt {browser} auf {os} {device}",
"message.visitors-dropped-off": "Besucherverlust" "message.visitors-dropped-off": "Besucherverlust"
} }

View File

@ -1,7 +1,7 @@
{ {
"label.access-code": "액세스 코드", "label.access-code": "액세스 코드",
"label.actions": "액션", "label.actions": "동작",
"label.activity": "활동 기록", "label.activity": "활동",
"label.add": "추가", "label.add": "추가",
"label.add-description": "설명 추가", "label.add-description": "설명 추가",
"label.add-member": "멤버 추가", "label.add-member": "멤버 추가",
@ -20,7 +20,7 @@
"label.browser": "브라우저", "label.browser": "브라우저",
"label.browsers": "브라우저", "label.browsers": "브라우저",
"label.cancel": "취소", "label.cancel": "취소",
"label.change-password": "비밀번호 변경하기", "label.change-password": "비밀번호 변경",
"label.cities": "도시", "label.cities": "도시",
"label.city": "도시", "label.city": "도시",
"label.clear-all": "모두 지우기", "label.clear-all": "모두 지우기",
@ -32,10 +32,10 @@
"label.count": "수", "label.count": "수",
"label.countries": "국가", "label.countries": "국가",
"label.country": "국가", "label.country": "국가",
"label.create": "생성", "label.create": "만들기",
"label.create-report": "리포트 생성", "label.create-report": "보고서 만들기",
"label.create-team": "팀 생성", "label.create-team": "팀 만들기",
"label.create-user": "사용자 생성", "label.create-user": "사용자 만들기",
"label.created": "생성됨", "label.created": "생성됨",
"label.created-by": "작성자", "label.created-by": "작성자",
"label.current": "현재", "label.current": "현재",
@ -48,13 +48,13 @@
"label.day": "일", "label.day": "일",
"label.default-date-range": "기본 날짜 범위", "label.default-date-range": "기본 날짜 범위",
"label.delete": "삭제", "label.delete": "삭제",
"label.delete-report": "리포트 삭제", "label.delete-report": "보고서 삭제",
"label.delete-team": "팀 삭제", "label.delete-team": "팀 삭제",
"label.delete-user": "사용자 삭제", "label.delete-user": "사용자 삭제",
"label.delete-website": "웹사이트 삭제", "label.delete-website": "웹사이트 삭제",
"label.description": "설명", "label.description": "설명",
"label.desktop": "데스크", "label.desktop": "데스크",
"label.details": "세부 사항", "label.details": "세부 정보",
"label.device": "기기", "label.device": "기기",
"label.devices": "기기", "label.devices": "기기",
"label.dismiss": "무시하기", "label.dismiss": "무시하기",
@ -63,9 +63,9 @@
"label.dropoff": "이탈", "label.dropoff": "이탈",
"label.edit": "편집", "label.edit": "편집",
"label.edit-dashboard": "대시보드 편집", "label.edit-dashboard": "대시보드 편집",
"label.edit-member": "회원 편집", "label.edit-member": "멤버 편집",
"label.enable-share-url": "URL 공유 활성화", "label.enable-share-url": "URL 공유 활성화",
"label.end-step": "종료 단계", "label.end-step": "마지막 단계",
"label.entry": "입장 URL", "label.entry": "입장 URL",
"label.event": "이벤트", "label.event": "이벤트",
"label.event-data": "이벤트 데이터", "label.event-data": "이벤트 데이터",
@ -75,15 +75,15 @@
"label.field": "필드", "label.field": "필드",
"label.fields": "필드", "label.fields": "필드",
"label.filter": "필터", "label.filter": "필터",
"label.filter-combined": "합쳐 보기", "label.filter-combined": "합쳐 보기",
"label.filter-raw": "전체 보기", "label.filter-raw": "전체 보기",
"label.filters": "필터", "label.filters": "필터",
"label.first-seen": "First seen", "label.first-seen": "첫 접속",
"label.funnel": "퍼널", "label.funnel": "퍼널",
"label.funnel-description": "사용자 전환율 및 이탈률을 살펴보세요.", "label.funnel-description": "사용자 전환율 및 이탈률을 살펴보세요.",
"label.goal": "목표", "label.goal": "목표",
"label.goals": "목표", "label.goals": "목표",
"label.goals-description": "페이지 및 이벤트 목표를 추적합니다.", "label.goals-description": "페이지 조회 및 이벤트 목표를 추적합니다.",
"label.greater-than": "이상", "label.greater-than": "이상",
"label.greater-than-equals": "이상", "label.greater-than-equals": "이상",
"label.host": "호스트", "label.host": "호스트",
@ -94,17 +94,17 @@
"label.is-not": "해당하지 않음", "label.is-not": "해당하지 않음",
"label.is-not-set": "설정되지 않음", "label.is-not-set": "설정되지 않음",
"label.is-set": "설정됨", "label.is-set": "설정됨",
"label.join": "가입", "label.join": "가입하기",
"label.join-team": "팀 가입", "label.join-team": "팀 가입하기",
"label.journey": "여정", "label.journey": "여정",
"label.journey-description": "사용자가 웹사이트를 탐색하는 경로를 살펴보세요.", "label.journey-description": "사용자가 웹사이트를 탐색하는 경로를 살펴보세요.",
"label.language": "언어", "label.language": "언어",
"label.languages": "언어", "label.languages": "언어",
"label.laptop": "노트북", "label.laptop": "노트북",
"label.last-days": "최근 {x} 일", "label.last-days": "지난 {x}일",
"label.last-hours": "최근 {x} 시간", "label.last-hours": "지난 {x}시간",
"label.last-months": "최근 {x} 개월", "label.last-months": "지난 {x}개월",
"label.last-seen": "Last seen", "label.last-seen": "마지막 접속",
"label.leave": "떠나기", "label.leave": "떠나기",
"label.leave-team": "팀 떠나기", "label.leave-team": "팀 떠나기",
"label.less-than": "미만", "label.less-than": "미만",
@ -124,24 +124,24 @@
"label.name": "이름", "label.name": "이름",
"label.new-password": "새 비밀번호", "label.new-password": "새 비밀번호",
"label.none": "없음", "label.none": "없음",
"label.number-of-records": "{x} {x, plural, one {record} other {레코드}}", "label.number-of-records": "{x}개 레코드",
"label.ok": "확인", "label.ok": "확인",
"label.os": "운영 체제", "label.os": "운영 체제",
"label.overview": "개요", "label.overview": "개요",
"label.owner": "소유자", "label.owner": "소유자",
"label.page-of": "{total} 중 {current} 페이지", "label.page-of": "페이지 {current}/{total}",
"label.page-views": "페이지 ", "label.page-views": "페이지 조회",
"label.pageTitle": "페이지 제목", "label.pageTitle": "페이지 제목",
"label.pages": "페이지", "label.pages": "페이지",
"label.password": "비밀번호", "label.password": "비밀번호",
"label.path": "Path", "label.path": "패스",
"label.paths": "Paths", "label.paths": "패스",
"label.powered-by": "이 시스템은 {name}에서 구동되고 있습니다.", "label.powered-by": "Powered by {name}",
"label.previous": "이전", "label.previous": "이전",
"label.previous-period": "이전 기간", "label.previous-period": "이전 기간",
"label.previous-year": "이전 연도", "label.previous-year": "이전 연도",
"label.profile": "프로필", "label.profile": "프로필",
"label.properties": "Properties", "label.properties": "속성",
"label.property": "속성", "label.property": "속성",
"label.queries": "쿼리", "label.queries": "쿼리",
"label.query": "쿼리", "label.query": "쿼리",
@ -155,25 +155,25 @@
"label.regions": "지역", "label.regions": "지역",
"label.remove": "제거", "label.remove": "제거",
"label.remove-member": "멤버 제거", "label.remove-member": "멤버 제거",
"label.reports": "리포트", "label.reports": "보고서",
"label.required": "필수", "label.required": "필수",
"label.reset": "리셋", "label.reset": "초기화",
"label.reset-website": "웹사이트 초기화", "label.reset-website": "웹사이트 초기화",
"label.retention": "리텐션", "label.retention": "리텐션",
"label.retention-description": "사용자가 얼마나 자주 돌아오는지를 추적하여 웹사이트의 리텐션을 측정하십시오.", "label.retention-description": "사용자가 얼마나 자주 돌아오는지를 추적하여 웹사이트의 리텐션을 측정하십시오.",
"label.revenue": "Revenue", "label.revenue": "수익",
"label.revenue-description": "Look into your revenue across time.", "label.revenue-description": "시간대별 수익을 살펴보세요.",
"label.revenue-property": "Revenue Property", "label.revenue-property": "수익 속성",
"label.role": "역할", "label.role": "역할",
"label.run-query": "쿼리 실행", "label.run-query": "쿼리 실행",
"label.save": "저장", "label.save": "저장",
"label.screens": "스크린", "label.screens": "화면",
"label.search": "검색", "label.search": "검색",
"label.select": "선택", "label.select": "선택",
"label.select-date": "날짜 선택", "label.select-date": "날짜 선택",
"label.select-role": "역할 선택", "label.select-role": "역할 선택",
"label.select-website": "웹사이트 선택", "label.select-website": "웹사이트 선택",
"label.session": "Session", "label.session": "세션",
"label.sessions": "세션", "label.sessions": "세션",
"label.settings": "설정", "label.settings": "설정",
"label.share-url": "공유 URL", "label.share-url": "공유 URL",
@ -200,43 +200,43 @@
"label.today": "오늘", "label.today": "오늘",
"label.toggle-charts": "차트 전환", "label.toggle-charts": "차트 전환",
"label.total": "합계", "label.total": "합계",
"label.total-records": " 레코드", "label.total-records": "전체 레코드",
"label.tracking-code": "추적 코드", "label.tracking-code": "추적 코드",
"label.transactions": "Transactions", "label.transactions": "거래",
"label.transfer": "전송", "label.transfer": "전송",
"label.transfer-website": "웹사이트 전송", "label.transfer-website": "웹사이트 전송",
"label.true": "참", "label.true": "참",
"label.type": "유형", "label.type": "유형",
"label.unique": "고유", "label.unique": "고유",
"label.unique-visitors": "순방문자(UV)", "label.unique-visitors": "고유 방문자",
"label.uniqueCustomers": "Unique Customers", "label.uniqueCustomers": "고유 고객",
"label.unknown": "알 수 없음", "label.unknown": "알 수 없음",
"label.untitled": "제목 없음", "label.untitled": "제목 없음",
"label.update": "업데이트", "label.update": "업데이트",
"label.url": "URL", "label.url": "URL",
"label.urls": "URL", "label.urls": "URL",
"label.user": "사용자", "label.user": "사용자",
"label.user-property": "User Property", "label.user-property": "사용자 속성",
"label.username": "사용자", "label.username": "사용자 이름",
"label.users": "사용자", "label.users": "사용자",
"label.utm": "UTM", "label.utm": "UTM",
"label.utm-description": "UTM 매개변수를 통해 캠페인을 추적합니다.", "label.utm-description": "UTM 매개변수를 통해 캠페인을 추적합니다.",
"label.value": "값", "label.value": "값",
"label.view": "보기", "label.view": "보기",
"label.view-details": "상세보기", "label.view-details": "자세히 보기",
"label.view-only": "보기 전용", "label.view-only": "보기 전용",
"label.views": "조회", "label.views": "조회",
"label.views-per-visit": "방문당 조회", "label.views-per-visit": "방문당 조회",
"label.visit-duration": "평균 방문 시간", "label.visit-duration": "평균 방문 시간",
"label.visitors": "방문", "label.visitors": "방문",
"label.visits": "방문", "label.visits": "방문",
"label.website": "웹사이트", "label.website": "웹사이트",
"label.website-id": "웹사이트 ID", "label.website-id": "웹사이트 ID",
"label.websites": "웹사이트", "label.websites": "웹사이트",
"label.window": "창", "label.window": "창",
"label.yesterday": "어제", "label.yesterday": "어제",
"message.action-confirmation": "확인을 위해 아래 상자에 {confirmation}을(를) 입력하십시오.", "message.action-confirmation": "확인을 위해 아래 상자에 {confirmation}을(를) 입력하세요.",
"message.active-users": "{x}명의 사용자가 보는 중입니다.", "message.active-users": "현재 방문자 {x}명",
"message.collected-data": "수집된 데이터", "message.collected-data": "수집된 데이터",
"message.confirm-delete": "{target}을(를) 삭제하시겠습니까?", "message.confirm-delete": "{target}을(를) 삭제하시겠습니까?",
"message.confirm-leave": "{target}을(를) 떠나시겠습니까?", "message.confirm-leave": "{target}을(를) 떠나시겠습니까?",
@ -244,36 +244,36 @@
"message.confirm-reset": "{target}을(를) 초기화하시겠습니까?", "message.confirm-reset": "{target}을(를) 초기화하시겠습니까?",
"message.delete-team-warning": "팀을 삭제하면 팀에 등록된 모든 웹사이트도 삭제됩니다.", "message.delete-team-warning": "팀을 삭제하면 팀에 등록된 모든 웹사이트도 삭제됩니다.",
"message.delete-website-warning": "관련된 모든 데이터가 삭제됩니다.", "message.delete-website-warning": "관련된 모든 데이터가 삭제됩니다.",
"message.error": "오류가 발생하였습니다.", "message.error": "오류가 발생습니다.",
"message.event-log": "{event} - {url}", "message.event-log": "{event} - {url}",
"message.go-to-settings": "설정으로 이동", "message.go-to-settings": "설정으로 이동",
"message.incorrect-username-password": "사용자 이름/비밀번호가 잘못되었습니다.", "message.incorrect-username-password": "사용자 이름 또는 비밀번호를 잘못 입력했습니다.",
"message.invalid-domain": "잘못된 도메인", "message.invalid-domain": "잘못된 도메인입니다. http/https를 포함하지 마세요.",
"message.min-password-length": "최소 길이는 {n}자입니다", "message.min-password-length": "최소 {n}자여야 합니다",
"message.new-version-available": "새 버전이 사용 가능합니다! - Umami {version}", "message.new-version-available": "Umami의 새 버전 {version}을(를) 사용할 수 있습니다!",
"message.no-data-available": "사용 가능한 데이터가 없습니다.", "message.no-data-available": "사용할 수 있는 데이터가 없습니다.",
"message.no-event-data": "사용 가능한 이벤트 데이터가 없습니다.", "message.no-event-data": "사용할 수 있는 이벤트 데이터가 없습니다.",
"message.no-match-password": "비밀번호가 일치하지 않", "message.no-match-password": "비밀번호가 일치하지 않습니다.",
"message.no-results-found": "결과를 찾을 수 없습니다.", "message.no-results-found": "결과를 찾을 수 없습니다.",
"message.no-team-websites": "팀에 웹사이트가 없습니다.", "message.no-team-websites": "팀에 웹사이트가 없습니다.",
"message.no-teams": "생성된 팀이 없습니다.", "message.no-teams": "만든 팀이 없습니다.",
"message.no-users": "사용자가 없습니다.", "message.no-users": "사용자가 없습니다.",
"message.no-websites-configured": "설정된 웹사이트가 없습니다.", "message.no-websites-configured": "설정된 웹사이트가 없습니다.",
"message.page-not-found": "페이지를 찾을 수 없습니다.", "message.page-not-found": "페이지를 찾을 수 없",
"message.reset-website": "이 웹사이트를 초기화하려면, 아래 상자에 {confirmation}을(를) 입력하십시오.", "message.reset-website": "이 웹사이트를 초기화하려면 아래 상자에 {confirmation}을(를) 입력하세요.",
"message.reset-website-warning": "이 웹사이트의 모든 통계가 삭제되지만 설정은 그대로 유지됩니다.", "message.reset-website-warning": "이 웹사이트의 모든 통계가 삭제되지만 설정은 그대로 유지됩니다.",
"message.saved": "성공적으로 저장되었습니다.", "message.saved": "저장했습니다.",
"message.share-url": "아래 링크를 통해 웹사이트의 통계를 누구나 볼 수 있습니다.", "message.share-url": "아래 링크를 통해 웹사이트의 통계를 누구나 볼 수 있습니다.",
"message.team-already-member": "이미 팀의 회원입니다.", "message.team-already-member": "이미 팀 멤버입니다.",
"message.team-not-found": "팀을 찾을 수 없습니다.", "message.team-not-found": "팀을 찾을 수 없습니다.",
"message.team-websites-info": "웹사이트는 팀 누구나 볼 수 있습니다.", "message.team-websites-info": "웹사이트는 팀 멤버 누구나 볼 수 있습니다.",
"message.tracking-code": "이 웹사이트의 통계를 추적하려면, 다음 코드를 HTML의 <head>...</head> 섹션에 추가하십시오.", "message.tracking-code": "이 웹사이트의 통계를 추적하려면 다음 코드를 HTML의 <head>...</head> 부분에 추가하세요.",
"message.transfer-team-website-to-user": "이 웹사이트를 당신의 계정으로 전송하시겠습니까?", "message.transfer-team-website-to-user": "이 웹사이트를 당신의 계정으로 전송하시겠습니까?",
"message.transfer-user-website-to-team": "이 웹사이트를 전송받을 팀을 선택하십시오.", "message.transfer-user-website-to-team": "이 웹사이트를 전송받을 팀을 선택하세요.",
"message.transfer-website": "웹사이트 소유권을 계정이나 다른 팀으로 전송합니다.", "message.transfer-website": "웹사이트 소유권을 계정이나 다른 팀으로 전송합니다.",
"message.triggered-event": "트리거된 이벤트", "message.triggered-event": "트리거된 이벤트",
"message.user-deleted": "사용자가 삭제되었습니다.", "message.user-deleted": "사용자를 삭제했습니다.",
"message.viewed-page": "페이지 조회", "message.viewed-page": "조회한 페이지",
"message.visitor-log": "{country}의 {browser} 브라우저를 사용하는 {os} {device} 방문자", "message.visitor-log": "{os} {device}에서 {browser}을(를) 사용하는 {country}의 방문자",
"message.visitors-dropped-off": "방문자가 이탈했습니다" "message.visitors-dropped-off": "방문자 이탈함"
} }

View File

@ -63,9 +63,9 @@ function getDateStringSQL(data: any, unit: string = 'utc', timezone?: string) {
function getDateSQL(field: string, unit: string, timezone?: string) { function getDateSQL(field: string, unit: string, timezone?: string) {
if (timezone) { if (timezone) {
return `date_trunc('${unit}', ${field}, '${timezone}')`; return `toDateTime(date_trunc('${unit}', ${field}, '${timezone}'), '${timezone}')`;
} }
return `date_trunc('${unit}', ${field})`; return `toDateTime(date_trunc('${unit}', ${field}))`;
} }
function mapFilter(column: string, operator: string, name: string, type: string = 'String') { function mapFilter(column: string, operator: string, name: string, type: string = 'String') {

View File

@ -14,17 +14,17 @@ const log = debug('umami:prisma');
const MYSQL_DATE_FORMATS = { const MYSQL_DATE_FORMATS = {
minute: '%Y-%m-%dT%H:%i:00', minute: '%Y-%m-%dT%H:%i:00',
hour: '%Y-%m-%d %H:00:00', hour: '%Y-%m-%d %H:00:00',
day: '%Y-%m-%d', day: '%Y-%m-%d 00:00:00',
month: '%Y-%m-01', month: '%Y-%m-01 00:00:00',
year: '%Y-01-01', year: '%Y-01-01 00:00:00',
}; };
const POSTGRESQL_DATE_FORMATS = { const POSTGRESQL_DATE_FORMATS = {
minute: 'YYYY-MM-DD HH24:MI:00', minute: 'YYYY-MM-DD HH24:MI:00',
hour: 'YYYY-MM-DD HH24:00:00', hour: 'YYYY-MM-DD HH24:00:00',
day: 'YYYY-MM-DD', day: 'YYYY-MM-DD HH24:00:00',
month: 'YYYY-MM-01', month: 'YYYY-MM-01 HH24:00:00',
year: 'YYYY-01-01', year: 'YYYY-01-01 HH24:00:00',
}; };
function getAddIntervalQuery(field: string, interval: string): string { function getAddIntervalQuery(field: string, interval: string): string {

View File

@ -41,8 +41,8 @@ async function clickhouseQuery(
websiteId: string, websiteId: string,
filters: QueryFilters, filters: QueryFilters,
): Promise<{ x: string; y: number }[]> { ): Promise<{ x: string; y: number }[]> {
const { unit = 'day' } = filters; const { timezone = 'utc', unit = 'day' } = filters;
const { parseFilters, rawQuery } = clickhouse; const { parseFilters, rawQuery, getDateSQL } = clickhouse;
const { filterQuery, params } = await parseFilters(websiteId, { const { filterQuery, params } = await parseFilters(websiteId, {
...filters, ...filters,
eventType: EVENT_TYPE.pageView, eventType: EVENT_TYPE.pageView,
@ -57,7 +57,7 @@ async function clickhouseQuery(
g.y as y g.y as y
from ( from (
select select
date_trunc('${unit}', created_at) as t, ${getDateSQL('website_event.created_at', unit, timezone)} as t,
count(*) as y count(*) as y
from website_event from website_event
where website_id = {websiteId:UUID} where website_id = {websiteId:UUID}
@ -75,7 +75,7 @@ async function clickhouseQuery(
g.y as y g.y as y
from ( from (
select select
date_trunc('${unit}', created_at) as t, ${getDateSQL('website_event.created_at', unit, timezone)} as t,
sum(views)as y sum(views)as y
from website_event_stats_hourly website_event from website_event_stats_hourly website_event
where website_id = {websiteId:UUID} where website_id = {websiteId:UUID}

View File

@ -110,7 +110,7 @@ async function clickhouseQuery(
}[] }[]
> { > {
const { startDate, endDate, timezone = 'UTC' } = filters; const { startDate, endDate, timezone = 'UTC' } = filters;
const { getDateSQL, getDateStringSQL, rawQuery } = clickhouse; const { getDateSQL, rawQuery } = clickhouse;
const unit = 'day'; const unit = 'day';
return rawQuery( return rawQuery(
@ -152,7 +152,7 @@ async function clickhouseQuery(
group by 1, 2 group by 1, 2
) )
select select
${getDateStringSQL('c.cohort_date', unit)} as date, c.cohort_date as date,
c.day_number as day, c.day_number as day,
s.visitors as visitors, s.visitors as visitors,
c.visitors returnVisitors, c.visitors returnVisitors,

View File

@ -41,8 +41,8 @@ async function clickhouseQuery(
websiteId: string, websiteId: string,
filters: QueryFilters, filters: QueryFilters,
): Promise<{ x: string; y: number }[]> { ): Promise<{ x: string; y: number }[]> {
const { unit = 'day' } = filters; const { timezone = 'utc', unit = 'day' } = filters;
const { parseFilters, rawQuery } = clickhouse; const { parseFilters, rawQuery, getDateSQL } = clickhouse;
const { filterQuery, params } = await parseFilters(websiteId, { const { filterQuery, params } = await parseFilters(websiteId, {
...filters, ...filters,
eventType: EVENT_TYPE.pageView, eventType: EVENT_TYPE.pageView,
@ -57,7 +57,7 @@ async function clickhouseQuery(
g.y as y g.y as y
from ( from (
select select
date_trunc('${unit}', created_at) as t, ${getDateSQL('website_event.created_at', unit, timezone)} as t,
count(distinct session_id) as y count(distinct session_id) as y
from website_event from website_event
where website_id = {websiteId:UUID} where website_id = {websiteId:UUID}
@ -75,7 +75,7 @@ async function clickhouseQuery(
g.y as y g.y as y
from ( from (
select select
date_trunc('${unit}', created_at) as t, ${getDateSQL('website_event.created_at', unit, timezone)} as t,
uniq(session_id) as y uniq(session_id) as y
from website_event_stats_hourly website_event from website_event_stats_hourly website_event
where website_id = {websiteId:UUID} where website_id = {websiteId:UUID}

View File

@ -222,6 +222,16 @@
} }
}; };
const init = () => {
if (!initialized) {
track();
handlePathChanges();
handleTitleChanges();
handleClicks();
initialized = true;
}
};
const track = (obj, data) => { const track = (obj, data) => {
if (typeof obj === 'string') { if (typeof obj === 'string') {
return send({ return send({
@ -255,19 +265,10 @@
let initialized; let initialized;
if (autoTrack && !trackingDisabled()) { if (autoTrack && !trackingDisabled()) {
handlePathChanges(); if (document.readyState === 'complete') {
handleTitleChanges();
handleClicks();
const init = () => {
if (document.readyState === 'complete' && !initialized) {
track();
initialized = true;
}
};
document.addEventListener('readystatechange', init, true);
init(); init();
} else {
document.addEventListener('readystatechange', init, true);
}
} }
})(window); })(window);