mirror of
https://github.com/umami-software/umami.git
synced 2026-02-12 08:37:13 +01:00
Translate all 51 locale files, reducing untranslated keys from 6,017 to 862.
Some checks are pending
Node.js CI / build (push) Waiting to run
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>
This commit is contained in:
parent
a954824f65
commit
e1ee5eba27
63 changed files with 11747 additions and 5180 deletions
341
scripts/translate-11-urdu.cjs
Normal file
341
scripts/translate-11-urdu.cjs
Normal file
|
|
@ -0,0 +1,341 @@
|
|||
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 = {
|
||||
'ur-PK': {
|
||||
label: {
|
||||
// A
|
||||
'access-code': 'رسائی کوڈ',
|
||||
'account': 'اکاؤنٹ',
|
||||
'action': 'عمل',
|
||||
'add': 'شامل کریں',
|
||||
'add-board': 'بورڈ شامل کریں',
|
||||
'add-description': 'تفصیل شامل کریں',
|
||||
'add-link': 'لنک شامل کریں',
|
||||
'add-member': 'رکن شامل کریں',
|
||||
'add-pixel': 'پکسل شامل کریں',
|
||||
'add-step': 'مرحلہ شامل کریں',
|
||||
'affiliate': 'ملحقہ',
|
||||
'after': 'بعد',
|
||||
'analysis': 'تجزیہ',
|
||||
'analytics': 'تجزیات',
|
||||
'application': 'ایپلیکیشن',
|
||||
'apply': 'لاگو کریں',
|
||||
'attribution': 'انتساب',
|
||||
'attribution-description': 'دیکھیں کہ صارفین آپ کی مارکیٹنگ کے ساتھ کیسے جڑتے ہیں اور تبدیلیوں کی وجہ کیا ہے۔',
|
||||
'audience': 'سامعین',
|
||||
'average': 'اوسط',
|
||||
// B
|
||||
'before': 'پہلے',
|
||||
'boards': 'بورڈز',
|
||||
'breakdown': 'تفصیلی تجزیہ',
|
||||
'browser': 'براؤزر',
|
||||
// C
|
||||
'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': 'موجودہ',
|
||||
// D
|
||||
'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': 'ڈراپ آف',
|
||||
// E
|
||||
'edit-dashboard': 'ڈیش بورڈ میں ترمیم',
|
||||
'edit-member': 'رکن میں ترمیم',
|
||||
'email': 'ای میل',
|
||||
'end-step': 'آخری مرحلہ',
|
||||
'environment': 'ماحول',
|
||||
'event': 'واقعہ',
|
||||
'event-data': 'واقعہ ڈیٹا',
|
||||
'event-name': 'واقعہ کا نام',
|
||||
'exclude-bounce': 'اچھال خارج کریں',
|
||||
'exists': 'موجود ہے',
|
||||
// F
|
||||
'false': 'غلط',
|
||||
'field': 'فیلڈ',
|
||||
'fields': 'فیلڈز',
|
||||
'filter': 'فلٹر',
|
||||
'filters': 'فلٹرز',
|
||||
'first-click': 'پہلا کلک',
|
||||
'first-seen': 'پہلی بار دیکھا گیا',
|
||||
'funnel': 'فنل',
|
||||
'funnel-description': 'صارفین کی تبدیلی اور ڈراپ آف شرح کو سمجھیں۔',
|
||||
'funnels': 'فنلز',
|
||||
// G
|
||||
'goal': 'ہدف',
|
||||
'goals': 'اہداف',
|
||||
'goals-description': 'صفحہ کے نظاروں اور واقعات کے لیے اپنے اہداف کی نگرانی کریں۔',
|
||||
'greater-than': 'سے زیادہ',
|
||||
'greater-than-equals': 'سے زیادہ یا مساوی',
|
||||
'grouped': 'گروپ شدہ',
|
||||
'growth': 'نمو',
|
||||
// H
|
||||
'hostname': 'ہوسٹ نام',
|
||||
'hour': 'گھنٹہ',
|
||||
// I
|
||||
'includes': 'مشتمل ہے',
|
||||
'insight': 'بصیرت',
|
||||
'insights': 'بصیرتیں',
|
||||
'insights-description': 'سیگمنٹس اور فلٹرز استعمال کرکے اپنے ڈیٹا میں گہرائی سے جائیں۔',
|
||||
'invalid-url': 'غلط URL',
|
||||
'is': 'ہے',
|
||||
'is-false': 'غلط ہے',
|
||||
'is-not': 'نہیں ہے',
|
||||
'is-not-set': 'سیٹ نہیں ہے',
|
||||
'is-set': 'سیٹ ہے',
|
||||
'is-true': 'درست ہے',
|
||||
// J
|
||||
'join': 'شامل ہوں',
|
||||
'join-team': 'ٹیم میں شامل ہوں',
|
||||
'journey': 'سفر',
|
||||
'journey-description': 'سمجھیں کہ صارفین آپ کی ویب سائٹ پر کیسے تشریف لے جاتے ہیں۔',
|
||||
'journeys': 'سفر',
|
||||
// L
|
||||
'language': 'زبان',
|
||||
'last-click': 'آخری کلک',
|
||||
'last-months': 'پچھلے {x} مہینے',
|
||||
'last-seen': 'آخری بار دیکھا گیا',
|
||||
'leave': 'چھوڑیں',
|
||||
'leave-team': 'ٹیم چھوڑیں',
|
||||
'less-than': 'سے کم',
|
||||
'less-than-equals': 'سے کم یا مساوی',
|
||||
'link': 'لنک',
|
||||
'links': 'لنکس',
|
||||
'location': 'مقام',
|
||||
// M
|
||||
'manage': 'انتظام کریں',
|
||||
'manager': 'منتظم',
|
||||
'max': 'زیادہ سے زیادہ',
|
||||
'medium': 'میڈیم',
|
||||
'member': 'رکن',
|
||||
'members': 'اراکین',
|
||||
'min': 'کم سے کم',
|
||||
'minute': 'منٹ',
|
||||
'model': 'ماڈل',
|
||||
'month': 'مہینہ',
|
||||
'my-account': 'میرا اکاؤنٹ',
|
||||
'my-websites': 'میری ویب سائٹس',
|
||||
// N
|
||||
'none': 'کوئی نہیں',
|
||||
'number-of-records': '{x} {x, plural, one {ریکارڈ} other {ریکارڈز}}',
|
||||
'online': 'آن لائن',
|
||||
'organic-search': 'نامیاتی تلاش',
|
||||
'organic-shopping': 'نامیاتی خریداری',
|
||||
'organic-social': 'نامیاتی سوشل',
|
||||
'organic-video': 'نامیاتی ویڈیو',
|
||||
// O
|
||||
'other': 'دیگر',
|
||||
'overview': 'جائزہ',
|
||||
// P
|
||||
'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': 'خصوصیت',
|
||||
// Q
|
||||
'queries': 'استفسارات',
|
||||
'query': 'استفسار',
|
||||
'query-parameters': 'استفسار پیرامیٹرز',
|
||||
// R
|
||||
'referral': 'حوالہ',
|
||||
'referrer': 'حوالہ دہندہ',
|
||||
'regenerate': 'دوبارہ بنائیں',
|
||||
'region': 'علاقہ',
|
||||
'regions': 'علاقے',
|
||||
'remaining': 'باقی',
|
||||
'remove': 'ہٹائیں',
|
||||
'remove-member': 'رکن ہٹائیں',
|
||||
'reports': 'رپورٹیں',
|
||||
'retention': 'برقراری',
|
||||
'retention-description': 'یہ جانچیں کہ صارفین کتنی بار واپس آتے ہیں اور آپ کی ویب سائٹ کتنی پرکشش ہے۔',
|
||||
'revenue': 'آمدنی',
|
||||
'role': 'کردار',
|
||||
'run-query': 'استفسار چلائیں',
|
||||
// S
|
||||
'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': 'اکاؤنٹ تبدیل کریں',
|
||||
// T
|
||||
'table': 'ٹیبل',
|
||||
'tag': 'ٹیگ',
|
||||
'tags': 'ٹیگز',
|
||||
'team': 'ٹیم',
|
||||
'team-manager': 'ٹیم منتظم',
|
||||
'team-member': 'ٹیم رکن',
|
||||
'team-name': 'ٹیم کا نام',
|
||||
'team-owner': 'ٹیم مالک',
|
||||
'team-settings': 'ٹیم ترتیبات',
|
||||
'team-view-only': 'ٹیم صرف دیکھنے کے لیے',
|
||||
'team-websites': 'ٹیم ویب سائٹس',
|
||||
'teams': 'ٹیمیں',
|
||||
'term': 'اصطلاح',
|
||||
'terms': 'شرائط',
|
||||
'theme': 'تھیم',
|
||||
'title': 'عنوان',
|
||||
'total': 'کل',
|
||||
'total-records': 'کل ریکارڈز',
|
||||
'traffic': 'ٹریفک',
|
||||
'transactions': 'لین دین',
|
||||
'transfer': 'منتقلی',
|
||||
'transfer-website': 'ویب سائٹ منتقل کریں',
|
||||
'true': 'درست',
|
||||
'type': 'قسم',
|
||||
// U
|
||||
'unique': 'منفرد',
|
||||
'unique-events': 'منفرد واقعات',
|
||||
'uniqueCustomers': 'منفرد گاہک',
|
||||
'untitled': 'بے عنوان',
|
||||
'update': 'اپ ڈیٹ',
|
||||
'user': 'صارف',
|
||||
'users': 'صارفین',
|
||||
'utm-description': 'UTM پیرامیٹرز کے ذریعے اپنی مہمات کی نگرانی کریں۔',
|
||||
// V
|
||||
'value': 'قدر',
|
||||
'version': 'ورژن',
|
||||
'view': 'دیکھیں',
|
||||
'view-only': 'صرف دیکھیں',
|
||||
'views-per-visit': 'فی وزٹ نظارے',
|
||||
'visits': 'وزٹس',
|
||||
'website': 'ویب سائٹ',
|
||||
// W
|
||||
'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': '<a>{url}</a> پر <b>{event}</b>',
|
||||
'forbidden': 'ممنوع',
|
||||
'min-password-length': 'کم از کم {n} حروف کی لمبائی',
|
||||
'new-version-available': 'Umami کا نیا ورژن {version} دستیاب ہے!',
|
||||
'no-event-data': 'واقعہ کا کوئی ڈیٹا دستیاب نہیں ہے۔',
|
||||
'no-team-websites': 'اس ٹیم کے پاس کوئی ویب سائٹ نہیں ہے۔',
|
||||
'no-teams': 'آپ نے ابھی تک کوئی ٹیم نہیں بنائی۔',
|
||||
'no-users': 'کوئی صارف نہیں ہے۔',
|
||||
'not-found': 'نہیں ملا',
|
||||
'nothing-selected': 'کچھ بھی منتخب نہیں کیا گیا۔',
|
||||
'reset-website': 'اس ویب سائٹ کو دوبارہ ترتیب دینے کے لیے تصدیق کے خانے میں {confirmation} ٹائپ کریں۔',
|
||||
'sever-error': 'سرور کی خرابی',
|
||||
'team-already-member': 'آپ پہلے سے اس ٹیم کے رکن ہیں۔',
|
||||
'team-not-found': 'ٹیم نہیں ملی۔',
|
||||
'team-websites-info': 'ویب سائٹس ٹیم کا کوئی بھی رکن دیکھ سکتا ہے۔',
|
||||
'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');
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue