mirror of
https://github.com/umami-software/umami.git
synced 2026-02-09 07:07:17 +01:00
Some checks are pending
Node.js CI / build (push) Waiting to run
12 batch translation scripts covering all language families: East Asian, Romance, Germanic, Nordic, Slavic, Other European, South/Southeast Asian, Tamil, Sinhala, Urdu, and Burmese. Remaining untranslated keys are intentional loanwords (URL, UTM, SMS, etc.) and en-GB which is intentionally identical to en-US. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
332 lines
21 KiB
JavaScript
332 lines
21 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const dir = path.join(__dirname, '..', 'public', 'intl', 'messages');
|
|
const enUS = JSON.parse(fs.readFileSync(path.join(dir, 'en-US.json'), 'utf8'));
|
|
|
|
const translations = {
|
|
'ta-IN': {
|
|
label: {
|
|
// Keys where ta-IN value === en-US value (untranslated)
|
|
'access-code': 'அணுகல் குறியீடு',
|
|
'account': 'கணக்கு',
|
|
'action': 'செயல்',
|
|
'activity': 'செயல்பாடு',
|
|
'add': 'சேர்',
|
|
'add-board': 'பலகையைச் சேர்',
|
|
'add-description': 'விளக்கத்தைச் சேர்',
|
|
'add-link': 'இணைப்பைச் சேர்',
|
|
'add-member': 'உறுப்பினரைச் சேர்',
|
|
'add-pixel': 'பிக்சலைச் சேர்',
|
|
'add-step': 'படியைச் சேர்',
|
|
'affiliate': 'இணைத்திட்டம்',
|
|
'after': 'பிறகு',
|
|
'all-time': 'எல்லா நேரமும்',
|
|
'analysis': 'பகுப்பாய்வு',
|
|
'analytics': 'பகுப்பாய்வு',
|
|
'application': 'பயன்பாடு',
|
|
'apply': 'பயன்படுத்து',
|
|
'attribution': 'காரணிப்பு',
|
|
'attribution-description': 'பயனர்கள் உங்கள் சந்தைப்படுத்தலுடன் எவ்வாறு ஈடுபடுகிறார்கள் மற்றும் மாற்றங்களை எது ஊக்குவிக்கிறது என்பதைப் பாருங்கள்.',
|
|
'audience': 'பார்வையாளர்',
|
|
'average': 'சராசரி',
|
|
'before': 'முன்',
|
|
'boards': 'பலகைகள்',
|
|
'breakdown': 'விரிவாக்கம்',
|
|
'browser': 'உலாவி',
|
|
'campaign': 'பிரச்சாரம்',
|
|
'campaigns': 'பிரச்சாரங்கள்',
|
|
'channel': 'சேனல்',
|
|
'channels': 'சேனல்கள்',
|
|
'chart': 'வரைபடம்',
|
|
'cities': 'நகரங்கள்',
|
|
'city': 'நகரம்',
|
|
'clear-all': 'அனைத்தையும் அழி',
|
|
'cohort': 'குழு',
|
|
'cohorts': 'குழுக்கள்',
|
|
'compare': 'ஒப்பிடு',
|
|
'compare-dates': 'தேதிகளை ஒப்பிடு',
|
|
'confirm': 'உறுதிப்படுத்து',
|
|
'contains': 'உள்ளடக்கியது',
|
|
'content': 'உள்ளடக்கம்',
|
|
'continue': 'தொடர்',
|
|
'conversion': 'மாற்றம்',
|
|
'conversion-rate': 'மாற்ற விகிதம்',
|
|
'conversion-step': 'மாற்றப் படி',
|
|
'count': 'எண்ணிக்கை',
|
|
'country': 'நாடு',
|
|
'create': 'உருவாக்கு',
|
|
'create-report': 'அறிக்கையை உருவாக்கு',
|
|
'create-team': 'குழுவை உருவாக்கு',
|
|
'create-user': 'பயனரை உருவாக்கு',
|
|
'created': 'உருவாக்கப்பட்டது',
|
|
'created-by': 'உருவாக்கியவர்',
|
|
'criteria': 'அளவுகோல்',
|
|
'currency': 'நாணயம்',
|
|
'current': 'தற்போதைய',
|
|
'data': 'தரவு',
|
|
'date': 'தேதி',
|
|
'day': 'நாள்',
|
|
'delete-report': 'அறிக்கையை நீக்கு',
|
|
'delete-team': 'குழுவை நீக்கு',
|
|
'delete-user': 'பயனரை நீக்கு',
|
|
'description': 'விளக்கம்',
|
|
'destination-url': 'இலக்கு URL',
|
|
'details': 'விவரங்கள்',
|
|
'device': 'சாதனம்',
|
|
'direct': 'நேரடி',
|
|
'distinct-id': 'தனித்துவ ID',
|
|
'documentation': 'ஆவணங்கள்',
|
|
'does-not-contain': 'உள்ளடக்கவில்லை',
|
|
'does-not-include': 'சேர்க்கவில்லை',
|
|
'doest-not-exist': 'இல்லை',
|
|
'download': 'பதிவிறக்கு',
|
|
'dropoff': 'விலகல்',
|
|
'edit-dashboard': 'முகப்பைத் திருத்து',
|
|
'edit-member': 'உறுப்பினரைத் திருத்து',
|
|
'email': 'மின்னஞ்சல்',
|
|
'end-step': 'இறுதிப் படி',
|
|
'environment': 'சூழல்',
|
|
'event': 'நிகழ்வு',
|
|
'event-data': 'நிகழ்வுத் தரவு',
|
|
'event-name': 'நிகழ்வு பெயர்',
|
|
'exclude-bounce': 'துள்ளலை விலக்கு',
|
|
'exists': 'உள்ளது',
|
|
'false': 'தவறு',
|
|
'field': 'புலம்',
|
|
'fields': 'புலங்கள்',
|
|
'filter': 'வடிகட்டி',
|
|
'filters': 'வடிகட்டிகள்',
|
|
'first-click': 'முதல் கிளிக்',
|
|
'first-seen': 'முதலில் பார்த்தது',
|
|
'funnel': 'புனல்',
|
|
'funnel-description': 'பயனர்களின் மாற்ற மற்றும் விலகல் விகிதத்தைப் புரிந்துகொள்ளுங்கள்.',
|
|
'funnels': 'புனல்கள்',
|
|
'goal': 'இலக்கு',
|
|
'goals': 'இலக்குகள்',
|
|
'goals-description': 'பக்க காட்சிகள் மற்றும் நிகழ்வுகளுக்கான உங்கள் இலக்குகளைக் கண்காணிக்கவும்.',
|
|
'greater-than': 'பெரியது',
|
|
'greater-than-equals': 'பெரியது அல்லது சமம்',
|
|
'grouped': 'தொகுக்கப்பட்டது',
|
|
'growth': 'வளர்ச்சி',
|
|
'hostname': 'புரவலன் பெயர்',
|
|
'hour': 'மணி',
|
|
'includes': 'சேர்க்கிறது',
|
|
'insight': 'நுண்ணறிவு',
|
|
'insights': 'நுண்ணறிவுகள்',
|
|
'insights-description': 'பிரிவுகள் மற்றும் வடிகட்டிகளைப் பயன்படுத்தி உங்கள் தரவில் ஆழமாக முழுகுங்கள்.',
|
|
'invalid-url': 'தவறான URL',
|
|
'is': 'ஆகும்',
|
|
'is-false': 'தவறு',
|
|
'is-not': 'அல்ல',
|
|
'is-not-set': 'அமைக்கப்படவில்லை',
|
|
'is-set': 'அமைக்கப்பட்டுள்ளது',
|
|
'is-true': 'உண்மை',
|
|
'join': 'சேர்',
|
|
'join-team': 'குழுவில் சேர்',
|
|
'journey': 'பயணம்',
|
|
'journey-description': 'பயனர்கள் உங்கள் வலைத்தளத்தில் எவ்வாறு வழிசெல்கிறார்கள் என்பதைப் புரிந்துகொள்ளுங்கள்.',
|
|
'journeys': 'பயணங்கள்',
|
|
'language': 'மொழி',
|
|
'languages': 'மொழிகள்',
|
|
'last-click': 'கடைசி கிளிக்',
|
|
'last-months': 'முந்தைய {x} மாதங்கள்',
|
|
'last-seen': 'கடைசியாகப் பார்த்தது',
|
|
'leave': 'வெளியேறு',
|
|
'leave-team': 'குழுவை விட்டு வெளியேறு',
|
|
'less-than': 'சிறியது',
|
|
'less-than-equals': 'சிறியது அல்லது சமம்',
|
|
'link': 'இணைப்பு',
|
|
'links': 'இணைப்புகள்',
|
|
'location': 'இடம்',
|
|
'manage': 'நிர்வகி',
|
|
'manager': 'மேலாளர்',
|
|
'max': 'அதிகபட்சம்',
|
|
'medium': 'ஊடகம்',
|
|
'member': 'உறுப்பினர்',
|
|
'members': 'உறுப்பினர்கள்',
|
|
'min': 'குறைந்தபட்சம்',
|
|
'minute': 'நிமிடம்',
|
|
'model': 'மாதிரி',
|
|
'month': 'மாதம்',
|
|
'my-account': 'எனது கணக்கு',
|
|
'my-websites': 'எனது வலைத்தளங்கள்',
|
|
'none': 'எதுவுமில்லை',
|
|
'number-of-records': '{x} {x, plural, one {பதிவு} other {பதிவுகள்}}',
|
|
'online': 'நிகழ்நிலை',
|
|
'organic-search': 'இயற்கையான தேடல்',
|
|
'organic-shopping': 'இயற்கையான ஷாப்பிங்',
|
|
'organic-social': 'இயற்கையான சமூக ஊடகம்',
|
|
'organic-video': 'இயற்கையான வீடியோ',
|
|
'other': 'பிற',
|
|
'overview': 'மேலோட்டம்',
|
|
'owner': 'உரிமையாளர்',
|
|
'page': 'பக்கம்',
|
|
'page-of': 'பக்கம் {current} / {total}',
|
|
'pageTitle': 'பக்கத் தலைப்பு',
|
|
'paid-ads': 'கட்டண விளம்பரங்கள்',
|
|
'paid-search': 'கட்டணத் தேடல்',
|
|
'paid-shopping': 'கட்டண ஷாப்பிங்',
|
|
'paid-social': 'கட்டண சமூக ஊடகம்',
|
|
'paid-video': 'கட்டண வீடியோ',
|
|
'path': 'பாதை',
|
|
'paths': 'பாதைகள்',
|
|
'pixel': 'பிக்சல்',
|
|
'pixels': 'பிக்சல்கள்',
|
|
'preferences': 'விருப்பத்தேர்வுகள்',
|
|
'previous': 'முந்தைய',
|
|
'previous-period': 'முந்தைய காலம்',
|
|
'previous-year': 'முந்தைய ஆண்டு',
|
|
'profiles': 'சுயவிவரங்கள்',
|
|
'properties': 'பண்புகள்',
|
|
'property': 'பண்பு',
|
|
'queries': 'வினவல்கள்',
|
|
'query': 'வினவல்',
|
|
'query-parameters': 'வினவல் அளவுருக்கள்',
|
|
'referral': 'பரிந்துரை',
|
|
'referrer': 'பரிந்துரையாளர்',
|
|
'regenerate': 'மீண்டும் உருவாக்கு',
|
|
'region': 'பிராந்தியம்',
|
|
'regions': 'பிராந்தியங்கள்',
|
|
'remaining': 'மீதம்',
|
|
'remove': 'நீக்கு',
|
|
'remove-member': 'உறுப்பினரை நீக்கு',
|
|
'reports': 'அறிக்கைகள்',
|
|
'retention': 'தக்கவைப்பு',
|
|
'retention-description': 'பயனர்கள் எவ்வளவு அடிக்கடி திரும்பி வருகிறார்கள் என்பதைக் கண்காணித்து உங்கள் வலைத்தளத்தின் ஒட்டுதலை அளவிடுங்கள்.',
|
|
'revenue': 'வருவாய்',
|
|
'revenue-description': 'உங்கள் வருவாய் தரவையும் பயனர்கள் எவ்வாறு செலவிடுகிறார்கள் என்பதையும் ஆராயுங்கள்.',
|
|
'role': 'பங்கு',
|
|
'run-query': 'வினவலை இயக்கு',
|
|
'save-cohort': 'குழுவைச் சேமி',
|
|
'save-segment': 'பிரிவைச் சேமி',
|
|
'screen': 'திரை',
|
|
'screens': 'திரைகள்',
|
|
'search': 'தேடு',
|
|
'segment': 'பிரிவு',
|
|
'segments': 'பிரிவுகள்',
|
|
'select': 'தேர்ந்தெடு',
|
|
'select-date': 'தேதியைத் தேர்ந்தெடு',
|
|
'select-filter': 'வடிகட்டியைத் தேர்ந்தெடு',
|
|
'select-role': 'பங்கைத் தேர்ந்தெடு',
|
|
'select-website': 'வலைத்தளத்தைத் தேர்ந்தெடு',
|
|
'session': 'அமர்வு',
|
|
'session-data': 'அமர்வுத் தரவு',
|
|
'sessions': 'அமர்வுகள்',
|
|
'share': 'பகிர்',
|
|
'source': 'மூலம்',
|
|
'sources': 'மூலங்கள்',
|
|
'start-step': 'தொடக்கப் படி',
|
|
'steps': 'படிகள்',
|
|
'sum': 'கூட்டுத்தொகை',
|
|
'support': 'ஆதரவு',
|
|
'switch-account': 'கணக்கை மாற்று',
|
|
'table': 'அட்டவணை',
|
|
'tag': 'குறிச்சொல்',
|
|
'tags': 'குறிச்சொற்கள்',
|
|
'team': 'குழு',
|
|
'team-id': 'குழு ID',
|
|
'team-manager': 'குழு மேலாளர்',
|
|
'team-member': 'குழு உறுப்பினர்',
|
|
'team-name': 'குழுவின் பெயர்',
|
|
'team-owner': 'குழு உரிமையாளர்',
|
|
'team-settings': 'குழு அமைப்புகள்',
|
|
'team-view-only': 'குழு பார்வை மட்டும்',
|
|
'team-websites': 'குழு வலைத்தளங்கள்',
|
|
'teams': 'குழுக்கள்',
|
|
'term': 'சொல்',
|
|
'terms': 'விதிமுறைகள்',
|
|
'theme': 'தீம்',
|
|
'title': 'தலைப்பு',
|
|
'toggle-charts': 'வரைபடங்களை மாற்று',
|
|
'total': 'மொத்தம்',
|
|
'total-records': 'மொத்தப் பதிவுகள்',
|
|
'traffic': 'பார்வையாளர் போக்குவரத்து',
|
|
'transactions': 'பரிவர்த்தனைகள்',
|
|
'transfer': 'மாற்றம்',
|
|
'transfer-website': 'வலைத்தளத்தை மாற்று',
|
|
'true': 'உண்மை',
|
|
'type': 'வகை',
|
|
'unique': 'தனித்துவ',
|
|
'unique-events': 'தனித்துவ நிகழ்வுகள்',
|
|
'uniqueCustomers': 'தனித்துவ வாடிக்கையாளர்கள்',
|
|
'untitled': 'தலைப்பில்லாத',
|
|
'update': 'புதுப்பி',
|
|
'user': 'பயனர்',
|
|
'users': 'பயனர்கள்',
|
|
'utm-description': 'UTM அளவுருக்கள் மூலம் உங்கள் பிரச்சாரங்களைக் கண்காணிக்கவும்.',
|
|
'value': 'மதிப்பு',
|
|
'version': 'பதிப்பு',
|
|
'view': 'பார்',
|
|
'view-only': 'பார்வை மட்டும்',
|
|
'views-per-visit': 'ஒரு வருகைக்கான பார்வைகள்',
|
|
'visits': 'வருகைகள்',
|
|
'website': 'வலைத்தளம்',
|
|
'website-id': 'வலைத்தள ID',
|
|
'window': 'சாளரம்',
|
|
'yesterday': 'நேற்று'
|
|
},
|
|
message: {
|
|
'action-confirmation': 'உறுதிப்படுத்த கீழே உள்ள பெட்டியில் {confirmation} என்று தட்டச்சு செய்யவும்.',
|
|
'bad-request': 'தவறான கோரிக்கை',
|
|
'collected-data': 'சேகரிக்கப்பட்ட தரவு',
|
|
'confirm-leave': '<b>{target}</b> விட்டு வெளியேற விரும்புகிறீர்களா?',
|
|
'confirm-remove': '<b>{target}</b> நீக்க விரும்புகிறீர்களா?',
|
|
'delete-team-warning': 'ஒரு குழுவை நீக்கினால் அனைத்து குழு வலைத்தளங்களும் நீக்கப்படும்.',
|
|
'event-log': '<b>{event}</b> <a>{url}</a> இல்',
|
|
'forbidden': 'தடைசெய்யப்பட்டது',
|
|
'min-password-length': 'குறைந்தபட்சம் {n} எழுத்துகள் தேவை',
|
|
'new-version-available': 'Umami {version} புதிய பதிப்பு கிடைக்கிறது!',
|
|
'no-event-data': 'நிகழ்வுத் தரவு எதுவும் கிடைக்கவில்லை.',
|
|
'no-results-found': 'முடிவுகள் எதுவும் கிடைக்கவில்லை.',
|
|
'no-team-websites': 'இந்தக் குழுவில் வலைத்தளங்கள் எதுவும் இல்லை.',
|
|
'no-teams': 'நீங்கள் எந்தக் குழுவையும் உருவாக்கவில்லை.',
|
|
'no-users': 'பயனர்கள் யாரும் இல்லை.',
|
|
'not-found': 'கிடைக்கவில்லை',
|
|
'nothing-selected': 'எதுவும் தேர்ந்தெடுக்கப்படவில்லை.',
|
|
'reset-website': 'இந்த வலைத்தளத்தை மீட்டமைக்க, கீழே உள்ள பெட்டியில் {confirmation} என்று தட்டச்சு செய்து உறுதிப்படுத்தவும்.',
|
|
'reset-website-warning': 'இந்த வலைத்தளத்தின் அனைத்து புள்ளிவிவரங்களும் நீக்கப்படும், ஆனால் உங்கள் அமைப்புகள் அப்படியே இருக்கும்.',
|
|
'sever-error': 'சேவையக பிழை',
|
|
'share-url': 'உங்கள் வலைத்தள புள்ளிவிவரங்கள் பின்வரும் URL இல் பொதுவாகக் கிடைக்கும்:',
|
|
'team-already-member': 'நீங்கள் ஏற்கனவே இந்தக் குழுவின் உறுப்பினர்.',
|
|
'team-not-found': 'குழு கிடைக்கவில்லை.',
|
|
'team-websites-info': 'குழுவில் உள்ள எவரும் வலைத்தளங்களைப் பார்க்கலாம்.',
|
|
'tracking-code': 'இந்த வலைத்தளத்தின் புள்ளிவிவரங்களைக் கண்காணிக்க, பின்வரும் குறியீட்டை உங்கள் HTML இன் <head>...</head> பகுதியில் வைக்கவும்.',
|
|
'transfer-team-website-to-user': 'இந்த வலைத்தளத்தை உங்கள் கணக்கிற்கு மாற்ற விரும்புகிறீர்களா?',
|
|
'transfer-user-website-to-team': 'இந்த வலைத்தளத்தை மாற்ற குழுவைத் தேர்ந்தெடுக்கவும்.',
|
|
'transfer-website': 'வலைத்தள உரிமையை உங்கள் கணக்கிற்கு அல்லது மற்றொரு குழுவிற்கு மாற்றவும்.',
|
|
'triggered-event': 'தூண்டப்பட்ட நிகழ்வு',
|
|
'unauthorized': 'அங்கீகரிக்கப்படவில்லை',
|
|
'user-deleted': 'பயனர் நீக்கப்பட்டார்.',
|
|
'viewed-page': 'பார்வையிட்ட பக்கம்'
|
|
}
|
|
}
|
|
};
|
|
|
|
for (const [locale, trans] of Object.entries(translations)) {
|
|
const filePath = path.join(dir, locale + '.json');
|
|
const data = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
let count = 0;
|
|
for (const [section, keys] of Object.entries(trans)) {
|
|
for (const [key, value] of Object.entries(keys)) {
|
|
if (data[section] && key in data[section]) {
|
|
data[section][key] = value;
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
const sorted = {};
|
|
for (const section of Object.keys(enUS)) {
|
|
if (data[section]) {
|
|
sorted[section] = {};
|
|
for (const key of Object.keys(enUS[section])) {
|
|
if (key in data[section]) sorted[section][key] = data[section][key];
|
|
}
|
|
for (const key of Object.keys(data[section])) {
|
|
if (!(key in sorted[section])) sorted[section][key] = data[section][key];
|
|
}
|
|
}
|
|
}
|
|
fs.writeFileSync(filePath, JSON.stringify(sorted, null, 2) + '\n', 'utf8');
|
|
console.log('Updated ' + locale + ': ' + count + ' keys');
|
|
}
|