mirror of
https://github.com/kremalicious/umami.git
synced 2024-11-15 17:55:08 +01:00
commit
8c869da7e2
@ -175,6 +175,7 @@ export default function BarChart({
|
|||||||
options.scales.xAxes[0].ticks.callback = renderXLabel;
|
options.scales.xAxes[0].ticks.callback = renderXLabel;
|
||||||
options.scales.xAxes[0].ticks.fontColor = colors.text;
|
options.scales.xAxes[0].ticks.fontColor = colors.text;
|
||||||
options.scales.yAxes[0].ticks.fontColor = colors.text;
|
options.scales.yAxes[0].ticks.fontColor = colors.text;
|
||||||
|
options.scales.yAxes[0].ticks.precision = 0;
|
||||||
options.scales.yAxes[0].gridLines.color = colors.line;
|
options.scales.yAxes[0].gridLines.color = colors.line;
|
||||||
options.scales.yAxes[0].gridLines.zeroLineColor = colors.zeroLine;
|
options.scales.yAxes[0].gridLines.zeroLineColor = colors.zeroLine;
|
||||||
options.animation.duration = animationDuration;
|
options.animation.duration = animationDuration;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.body {
|
.body {
|
||||||
|
@ -41,6 +41,7 @@ export default function MetricsBar({ websiteId, className }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { pageviews, uniques, bounces, totaltime } = data || {};
|
const { pageviews, uniques, bounces, totaltime } = data || {};
|
||||||
|
const num = Math.min(uniques, bounces);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={classNames(styles.bar, className)} onClick={handleSetFormat}>
|
<div className={classNames(styles.bar, className)} onClick={handleSetFormat}>
|
||||||
@ -60,7 +61,7 @@ export default function MetricsBar({ websiteId, className }) {
|
|||||||
/>
|
/>
|
||||||
<MetricCard
|
<MetricCard
|
||||||
label={<FormattedMessage id="metrics.bounce-rate" defaultMessage="Bounce rate" />}
|
label={<FormattedMessage id="metrics.bounce-rate" defaultMessage="Bounce rate" />}
|
||||||
value={uniques ? (bounces / uniques) * 100 : 0}
|
value={uniques ? (num / uniques) * 100 : 0}
|
||||||
format={n => Number(n).toFixed(0) + '%'}
|
format={n => Number(n).toFixed(0) + '%'}
|
||||||
/>
|
/>
|
||||||
<MetricCard
|
<MetricCard
|
||||||
|
@ -13,7 +13,10 @@ export default function RealtimeViews({ websiteId, data, websites }) {
|
|||||||
const [filter, setFilter] = useState(FILTER_REFERRERS);
|
const [filter, setFilter] = useState(FILTER_REFERRERS);
|
||||||
const domains = useMemo(() => websites.map(({ domain }) => domain), [websites]);
|
const domains = useMemo(() => websites.map(({ domain }) => domain), [websites]);
|
||||||
const getDomain = useCallback(
|
const getDomain = useCallback(
|
||||||
id => websites.find(({ website_id }) => website_id === id)?.domain,
|
id =>
|
||||||
|
websites.length === 1
|
||||||
|
? websites[0]?.domain
|
||||||
|
: websites.find(({ website_id }) => website_id === id)?.domain,
|
||||||
[websites],
|
[websites],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
99
lang/ta-IN.json
Normal file
99
lang/ta-IN.json
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
"label.accounts": "கணக்குகள்",
|
||||||
|
"label.add-account": "கணக்கு சேர்க்க",
|
||||||
|
"label.add-website": "வலைத்தளத்தைச் சேர்க்க",
|
||||||
|
"label.administrator": "நிர்வாகியைச் சேர்க்க",
|
||||||
|
"label.all": "எல்லாம்",
|
||||||
|
"label.all-websites": "அனைத்து வலைத்தளங்களும்",
|
||||||
|
"label.back": "பின்னால்",
|
||||||
|
"label.cancel": "ரத்துசெய்",
|
||||||
|
"label.change-password": "கடவுச்சொல்லை மாற்று",
|
||||||
|
"label.confirm-password": "கடவுச்சொல்லை உறுதிப்படுத்தவும்",
|
||||||
|
"label.copy-to-clipboard": "கிளிப்போர்டுக்கு நகலெடுக்கவும்",
|
||||||
|
"label.current-password": "தற்போதைய கடவுச்சொல்",
|
||||||
|
"label.custom-range": "தனிப்பயன் வேறுபாட்டெல்லை",
|
||||||
|
"label.dashboard": "முகப்பு",
|
||||||
|
"label.date-range": "தேதி வரம்பு",
|
||||||
|
"label.default-date-range": "இயல்புநிலை தேதி வரம்பு",
|
||||||
|
"label.delete": "அழி",
|
||||||
|
"label.delete-account": "கணக்கை நீக்குக",
|
||||||
|
"label.delete-website": "வலைத்தளத்தை நீக்கு",
|
||||||
|
"label.dismiss": "நீக்கு",
|
||||||
|
"label.domain": "கள முகவரி",
|
||||||
|
"label.edit": "திருத்துதல்",
|
||||||
|
"label.edit-account": "கணக்கைத் திருத்து",
|
||||||
|
"label.edit-website": "வலைத்தளத்தைத் திருத்து",
|
||||||
|
"label.enable-share-url": "கள முகவரியை பகிரலாம்",
|
||||||
|
"label.invalid": "தவறானது",
|
||||||
|
"label.invalid-domain": "தவறான கள முகவரி",
|
||||||
|
"label.last-days": "முந்தைய {x} நாட்கள்",
|
||||||
|
"label.last-hours": "முந்தைய {x} மணி",
|
||||||
|
"label.logged-in-as": "{username} உள்நுழைந்துள்ளீர்",
|
||||||
|
"label.login": "உள்நுழைய",
|
||||||
|
"label.logout": "வெளியேறு",
|
||||||
|
"label.more": "மேலும்",
|
||||||
|
"label.name": "பெயர்",
|
||||||
|
"label.new-password": "புதிய கடவுச்சொல்",
|
||||||
|
"label.password": "கடவுச்சொல்",
|
||||||
|
"label.passwords-dont-match": "இருக்கடவுச்சொல் பொருந்தவில்லை",
|
||||||
|
"label.profile": "சுயவிவரம்",
|
||||||
|
"label.realtime": "தற்போதைய",
|
||||||
|
"label.realtime-logs": "தற்போதைய பதிவுகள்",
|
||||||
|
"label.refresh": "புதுப்பிப்பு",
|
||||||
|
"label.required": "தேவையானவை",
|
||||||
|
"label.reset": "மீட்டமை",
|
||||||
|
"label.save": "சேமி",
|
||||||
|
"label.settings": "அமைப்புகள்",
|
||||||
|
"label.share-url": "வலைத்தள களத்தைப் பகிரவும்",
|
||||||
|
"label.single-day": "ஒரு நாள்",
|
||||||
|
"label.this-month": "இந்த மாதம்",
|
||||||
|
"label.this-week": "இந்த வாரம்",
|
||||||
|
"label.this-year": "இந்த வருடம்",
|
||||||
|
"label.timezone": "நேர மண்டலம்",
|
||||||
|
"label.today": "இன்று",
|
||||||
|
"label.tracking-code": "கண்காணிப்பு குறியீடு",
|
||||||
|
"label.unknown": "தெரியாத",
|
||||||
|
"label.username": "பயனர்பெயர்",
|
||||||
|
"label.view-details": "விபரங்களை பார்",
|
||||||
|
"label.websites": "வலைத்தளங்கள்",
|
||||||
|
"message.active-users": "{x} தற்போதைய {x, plural, one {ஒன்று} other {மற்ற}}",
|
||||||
|
"message.confirm-delete": "நீங்கள் நிச்சயமாக {target} நீக்க விரும்புகிறீர்களா?",
|
||||||
|
"message.copied": "நகலெடுக்கப்பட்டது!",
|
||||||
|
"message.delete-warning": "தொடர்புடைய எல்லா தரவும் நீக்கப்படும்.",
|
||||||
|
"message.failure": "ஏதோ தவறு நடந்துவிட்டது.",
|
||||||
|
"message.get-share-url": "கள முகவரியை ஐப் பெறுக",
|
||||||
|
"message.get-tracking-code": "கண்காணிப்பு குறியீட்டைப் பெறுக",
|
||||||
|
"message.go-to-settings": "அமைப்புகளுக்குச் செல்லவும்",
|
||||||
|
"message.incorrect-username-password": "தவறான பயனர்பெயர் / கடவுச்சொல்.",
|
||||||
|
"message.log.visitor": "{country}வில் இருந்து பார்வையாளர் {browser} ஐ {os} {device}லில் பயன்படுத்துகிறார்",
|
||||||
|
"message.new-version-available": "umami {version} இன் புதிய பதிப்பு கிடைக்கும்!",
|
||||||
|
"message.no-data-available": "தரவு எதுவும் கிடைக்கவில்லை.",
|
||||||
|
"message.no-websites-configured": "உங்களிடம் எந்த வலைத்தளங்களும் கட்டமைக்கப்படவில்லை.",
|
||||||
|
"message.page-not-found": "பக்கம் கிடைக்கவில்லை.",
|
||||||
|
"message.powered-by": "{name} ஆல் இயக்கப்படுகிறது",
|
||||||
|
"message.save-success": "வெற்றிகரமாக சேமிக்கப்பட்டது.",
|
||||||
|
"message.share-url": "{target} இது பொதுவில் பகிரும் வலைத்தள முகவரி.",
|
||||||
|
"message.track-stats": "{target}க்கான புள்ளிவிவரங்களைக் கண்காணிக்க, {head}ல் பின்வரும் குறியீட்டை வைக்கவும்.",
|
||||||
|
"message.type-delete": "உறுதிப்படுத்த கீழே உள்ள பெட்டியில் {delete} என தட்டச்சு செய்க.",
|
||||||
|
"metrics.actions": "செயல்கள்",
|
||||||
|
"metrics.average-visit-time": "சராசரி வருகை நேரம்",
|
||||||
|
"metrics.bounce-rate": "துள்ளல் விகிதம்",
|
||||||
|
"metrics.browsers": "உலாவிகள்",
|
||||||
|
"metrics.countries": "நாடுகள்",
|
||||||
|
"metrics.device.desktop": "மேசை கணினி",
|
||||||
|
"metrics.device.laptop": "மடிக்கணினி",
|
||||||
|
"metrics.device.mobile": "கைபேசி",
|
||||||
|
"metrics.device.tablet": "கையடக்க கணினி",
|
||||||
|
"metrics.devices": "சாதனங்கள்",
|
||||||
|
"metrics.events": "நிகழ்வுகள்",
|
||||||
|
"metrics.filter.combined": "ஒருங்கிணைந்த",
|
||||||
|
"metrics.filter.domain-only": "கள முகவரி மட்டும்",
|
||||||
|
"metrics.filter.raw": "மூல",
|
||||||
|
"metrics.operating-systems": "இயக்க முறைமைகள்",
|
||||||
|
"metrics.page-views": "பக்க காட்சிகள்",
|
||||||
|
"metrics.pages": "பக்கங்கள்",
|
||||||
|
"metrics.referrers": "குறிப்பிடுவோர்",
|
||||||
|
"metrics.unique-visitors": "தனிப்பட்ட பார்வையாளர்கள்",
|
||||||
|
"metrics.views": "பார்வைகள்",
|
||||||
|
"metrics.visitors": "பார்வையாளர்கள்"
|
||||||
|
}
|
@ -17,6 +17,7 @@ import {
|
|||||||
ro,
|
ro,
|
||||||
ru,
|
ru,
|
||||||
sv,
|
sv,
|
||||||
|
ta,
|
||||||
tr,
|
tr,
|
||||||
uk,
|
uk,
|
||||||
zhCN,
|
zhCN,
|
||||||
@ -45,6 +46,7 @@ import ukMessages from 'lang-compiled/uk-UA.json';
|
|||||||
import fiMessages from 'lang-compiled/fi-FI.json';
|
import fiMessages from 'lang-compiled/fi-FI.json';
|
||||||
import csMessages from 'lang-compiled/cs-CZ.json';
|
import csMessages from 'lang-compiled/cs-CZ.json';
|
||||||
import plMessages from 'lang-compiled/pl-PL.json';
|
import plMessages from 'lang-compiled/pl-PL.json';
|
||||||
|
import taMessages from 'lang-compiled/ta-IN.json';
|
||||||
|
|
||||||
export const messages = {
|
export const messages = {
|
||||||
'en-US': enMessages,
|
'en-US': enMessages,
|
||||||
@ -70,6 +72,7 @@ export const messages = {
|
|||||||
'fi-FI': fiMessages,
|
'fi-FI': fiMessages,
|
||||||
'cs-CZ': csMessages,
|
'cs-CZ': csMessages,
|
||||||
'pl-PL': plMessages,
|
'pl-PL': plMessages,
|
||||||
|
'ta-IN': taMessages,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const dateLocales = {
|
export const dateLocales = {
|
||||||
@ -96,6 +99,7 @@ export const dateLocales = {
|
|||||||
'fi-FI': fi,
|
'fi-FI': fi,
|
||||||
'cs-CZ': cs,
|
'cs-CZ': cs,
|
||||||
'pl-PL': pl,
|
'pl-PL': pl,
|
||||||
|
'ta-In': ta,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const menuOptions = [
|
export const menuOptions = [
|
||||||
@ -120,6 +124,7 @@ export const menuOptions = [
|
|||||||
{ label: 'Română', value: 'ro-RO', display: 'ro' },
|
{ label: 'Română', value: 'ro-RO', display: 'ro' },
|
||||||
{ label: 'Suomi', value: 'fi-FI', display: 'fi' },
|
{ label: 'Suomi', value: 'fi-FI', display: 'fi' },
|
||||||
{ label: 'Svenska', value: 'sv-SE', display: 'sv' },
|
{ label: 'Svenska', value: 'sv-SE', display: 'sv' },
|
||||||
|
{ label: 'தமிழ்', value: 'ta-IN', display: 'ta' },
|
||||||
{ label: 'Türkçe', value: 'tr-TR', display: 'tr' },
|
{ label: 'Türkçe', value: 'tr-TR', display: 'tr' },
|
||||||
{ label: 'українська', value: 'uk-UA', display: 'uk' },
|
{ label: 'українська', value: 'uk-UA', display: 'uk' },
|
||||||
];
|
];
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "umami",
|
"name": "umami",
|
||||||
"version": "1.6.0",
|
"version": "1.7.0",
|
||||||
"description": "A simple, fast, website analytics alternative to Google Analytics. ",
|
"description": "A simple, fast, website analytics alternative to Google Analytics. ",
|
||||||
"author": "Mike Cao <mike@mikecao.com>",
|
"author": "Mike Cao <mike@mikecao.com>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -9,7 +9,7 @@ export default async (req, res) => {
|
|||||||
const { user_id: auth_user_id, is_admin } = req.auth;
|
const { user_id: auth_user_id, is_admin } = req.auth;
|
||||||
const { user_id, current_password, new_password } = req.body;
|
const { user_id, current_password, new_password } = req.body;
|
||||||
|
|
||||||
if (!is_admin || user_id !== auth_user_id) {
|
if (!is_admin && user_id !== auth_user_id) {
|
||||||
return unauthorized(res);
|
return unauthorized(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
public/country/ta-IN.json
Normal file
1
public/country/ta-IN.json
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user