Skip to content

Commit 012dcb8

Browse files
committed
✨ feat(i18n): translate stub locales (ar, ja, ko, ru, uk, vi)
These six locales were scaffolded with English placeholders and never received a translation pass. All 13 existing files now contain real translations and the missing notificationOutboxView.json has been added to each, bringing them to full key parity with the English source. Conventions: - Brand/proper nouns kept in Latin (Drydock, Docker, Slack, Discord, etc.) - Acronyms kept in English (API, URL, HTTP, JSON, YAML, TLS, etc.) - DevOps terminology uses each language's established conventions - All interpolation placeholders ({name}, {count}) and ICU plurals preserved
1 parent ae8c6a6 commit 012dcb8

84 files changed

Lines changed: 5655 additions & 5067 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ui/src/locales/ar/agentsView.json

Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,89 @@
11
{
22
"agentsView": {
33
"list": {
4-
"loading": "Loading agents...",
5-
"filterPlaceholder": "Filter by name...",
6-
"clearFilter": "Clear",
7-
"emptyFiltered": "No agents match your filters",
8-
"toggleColumns": "Toggle columns",
9-
"columnPickerHeading": "Columns",
10-
"loadError": "Failed to load agents",
4+
"loading": "جارٍ تحميل الوكلاء...",
5+
"filterPlaceholder": "تصفية حسب الاسم...",
6+
"clearFilter": "مسح",
7+
"emptyFiltered": "لا يوجد وكلاء يطابقون عوامل التصفية",
8+
"toggleColumns": "تبديل الأعمدة",
9+
"columnPickerHeading": "الأعمدة",
10+
"loadError": "فشل تحميل الوكلاء",
1111
"status": {
12-
"connected": "Connected",
13-
"disconnected": "Disconnected"
12+
"connected": "متصل",
13+
"disconnected": "غير متصل"
1414
},
1515
"columns": {
16-
"name": "Agent",
17-
"status": "Status",
18-
"containers": "Containers",
16+
"name": "الوكيل",
17+
"status": "الحالة",
18+
"containers": "الحاويات",
1919
"docker": "Docker",
2020
"os": "OS",
21-
"version": "Version",
22-
"lastSeen": "Last Seen"
21+
"version": "الإصدار",
22+
"lastSeen": "آخر ظهور"
2323
},
2424
"card": {
25-
"running": "running",
26-
"stopped": "stopped"
25+
"running": "تعمل",
26+
"stopped": "متوقفة"
2727
}
2828
},
2929
"detail": {
3030
"tabs": {
31-
"overview": "Overview",
32-
"logs": "Logs",
33-
"config": "Config"
31+
"overview": "نظرة عامة",
32+
"logs": "السجلات",
33+
"config": "الإعداد"
3434
},
3535
"overview": {
36-
"resources": "Resources",
37-
"system": "System",
38-
"containers": "Containers",
39-
"containerTotal": "Total",
40-
"containerRunning": "Running",
41-
"containerStopped": "Stopped",
42-
"viewContainers": "View containers",
43-
"automation": "Automation",
44-
"watchers": "Watchers",
45-
"triggers": "Triggers",
46-
"none": "None"
36+
"resources": "الموارد",
37+
"system": "النظام",
38+
"containers": "الحاويات",
39+
"containerTotal": "الإجمالي",
40+
"containerRunning": "تعمل",
41+
"containerStopped": "متوقفة",
42+
"viewContainers": "عرض الحاويات",
43+
"automation": "الأتمتة",
44+
"watchers": "المراقبون",
45+
"triggers": "المشغّلات",
46+
"none": "لا شيء"
4747
},
4848
"logs": {
49-
"allLevels": "All Levels",
50-
"levelDebug": "Debug",
51-
"levelInfo": "Info",
52-
"levelWarn": "Warn",
53-
"levelError": "Error",
54-
"tail50": "Tail 50",
55-
"tail100": "Tail 100",
56-
"tail500": "Tail 500",
57-
"tail1000": "Tail 1000",
58-
"componentPlaceholder": "Filter by component...",
59-
"apply": "Apply",
60-
"reset": "Reset",
61-
"refresh": "Refresh",
62-
"emptyMessage": "No log entries found for current filters.",
63-
"lastFetched": "Last fetched: {time}",
64-
"entries": "{count} entries",
65-
"statusLive": "Live",
66-
"statusOffline": "Offline"
49+
"allLevels": "جميع المستويات",
50+
"levelDebug": "تصحيح",
51+
"levelInfo": "معلومات",
52+
"levelWarn": "تحذير",
53+
"levelError": "خطأ",
54+
"tail50": "آخر 50",
55+
"tail100": "آخر 100",
56+
"tail500": "آخر 500",
57+
"tail1000": "آخر 1000",
58+
"componentPlaceholder": "تصفية حسب المكوّن...",
59+
"apply": "تطبيق",
60+
"reset": "إعادة ضبط",
61+
"refresh": "تحديث",
62+
"emptyMessage": "لا توجد إدخالات سجل للفلاتر الحالية.",
63+
"lastFetched": "آخر جلب: {time}",
64+
"entries": "{count} إدخال",
65+
"statusLive": "مباشر",
66+
"statusOffline": "غير متصل"
6767
},
6868
"fields": {
69-
"cpus": "CPUs",
70-
"memory": "Memory",
71-
"images": "Images",
72-
"uptime": "Uptime",
69+
"cpus": "المعالجات",
70+
"memory": "الذاكرة",
71+
"images": "الصور",
72+
"uptime": "وقت التشغيل",
7373
"docker": "Docker",
7474
"os": "OS",
75-
"architecture": "Architecture",
76-
"agent": "Agent",
77-
"host": "Host",
78-
"agentVersion": "Agent Version",
79-
"logLevel": "Log Level",
80-
"pollInterval": "Poll Interval",
81-
"dockerSocket": "Docker Socket",
82-
"lastSeen": "Last Seen",
83-
"never": "never"
75+
"architecture": "المعمارية",
76+
"agent": "الوكيل",
77+
"host": "المضيف",
78+
"agentVersion": "إصدار الوكيل",
79+
"logLevel": "مستوى السجل",
80+
"pollInterval": "فترة الاستطلاع",
81+
"dockerSocket": "مقبس Docker",
82+
"lastSeen": "آخر ظهور",
83+
"never": "أبداً"
8484
},
8585
"listView": {
86-
"details": "Details"
86+
"details": "التفاصيل"
8787
}
8888
}
8989
}

ui/src/locales/ar/appShell.json

Lines changed: 91 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,133 +1,133 @@
11
{
22
"appShell": {
33
"toast": {
4-
"dismiss": "Dismiss"
4+
"dismiss": "إغلاق"
55
},
66
"logViewer": {
77
"toolbar": {
8-
"resume": "Resume",
9-
"pause": "Pause",
10-
"unpinAutoScroll": "Unpin auto-scroll",
11-
"pinAutoScroll": "Pin auto-scroll",
12-
"newestFirst": "Newest first",
13-
"oldestFirst": "Oldest first",
8+
"resume": "استئناف",
9+
"pause": "إيقاف مؤقت",
10+
"unpinAutoScroll": "إلغاء تثبيت التمرير التلقائي",
11+
"pinAutoScroll": "تثبيت التمرير التلقائي",
12+
"newestFirst": "الأحدث أولاً",
13+
"oldestFirst": "الأقدم أولاً",
1414
"regexToggle": ".* Regex",
15-
"showMatchesOnly": "Show matches only",
16-
"showingMatchesOnly": "Showing matches only",
17-
"prev": "Prev",
18-
"next": "Next"
15+
"showMatchesOnly": "إظهار المطابقات فقط",
16+
"showingMatchesOnly": "عرض المطابقات فقط",
17+
"prev": "السابق",
18+
"next": "التالي"
1919
},
2020
"search": {
21-
"placeholder": "Search logs",
22-
"copied": "Copied!",
23-
"copyLogs": "Copy logs"
21+
"placeholder": "البحث في السجلات",
22+
"copied": "تم النسخ!",
23+
"copyLogs": "نسخ السجلات"
2424
},
2525
"empty": {
26-
"noMatchingEntries": "No matching entries",
27-
"defaultMessage": "No log entries yet"
26+
"noMatchingEntries": "لا توجد إدخالات مطابقة",
27+
"defaultMessage": "لا توجد إدخالات سجل بعد"
2828
},
2929
"footer": {
30-
"lines": "lines",
31-
"defaultStatusLabel": "Offline"
30+
"lines": "سطر",
31+
"defaultStatusLabel": "غير متصل"
3232
}
3333
},
3434
"notificationBell": {
35-
"buttonLabel": "Notifications",
36-
"tooltip": "Notifications",
37-
"header": "Notifications",
38-
"clear": "Clear",
39-
"loading": "Loading...",
40-
"empty": "No notifications yet",
41-
"markAllRead": "Mark all as read",
42-
"openAuditLog": "Open audit log",
43-
"dismiss": "Dismiss notification"
35+
"buttonLabel": "الإشعارات",
36+
"tooltip": "الإشعارات",
37+
"header": "الإشعارات",
38+
"clear": "مسح",
39+
"loading": "جارٍ التحميل...",
40+
"empty": "لا توجد إشعارات بعد",
41+
"markAllRead": "تعليم الكل كمقروء",
42+
"openAuditLog": "فتح سجل التدقيق",
43+
"dismiss": "إغلاق الإشعار"
4444
},
4545
"themeToggle": {
46-
"mobileLabel": "Theme: {id} (tap to cycle)",
47-
"switchTo": "Switch to {id} theme",
46+
"mobileLabel": "السمة: {id} (اضغط للتبديل)",
47+
"switchTo": "التبديل إلى سمة {id}",
4848
"variantLabel": "{label}"
4949
},
5050
"layout": {
5151
"nav": {
52-
"dashboard": "Dashboard",
53-
"containers": "Containers",
54-
"security": "Security",
55-
"audit": "Audit",
56-
"systemLogs": "System Logs",
57-
"manageGroup": "Manage",
58-
"hosts": "Hosts",
59-
"registries": "Registries",
60-
"watchers": "Watchers",
61-
"settingsGroup": "Settings",
62-
"general": "General",
63-
"notifications": "Notifications",
64-
"outbox": "Outbox",
65-
"triggers": "Triggers",
66-
"auth": "Auth",
67-
"agents": "Agents"
52+
"dashboard": "لوحة التحكم",
53+
"containers": "الحاويات",
54+
"security": "الأمان",
55+
"audit": "التدقيق",
56+
"systemLogs": "سجلات النظام",
57+
"manageGroup": "إدارة",
58+
"hosts": "المضيفون",
59+
"registries": "السجلات",
60+
"watchers": "المراقبون",
61+
"settingsGroup": "الإعدادات",
62+
"general": "عام",
63+
"notifications": "الإشعارات",
64+
"outbox": "صندوق الصادر",
65+
"triggers": "المشغّلات",
66+
"auth": "المصادقة",
67+
"agents": "الوكلاء"
6868
},
6969
"sidebar": {
70-
"closeMobileMenu": "Close menu",
71-
"searchButton": "Search",
72-
"searchAriaLabel": "Search",
73-
"aboutTooltip": "About Drydock",
74-
"aboutAriaLabel": "About Drydock",
75-
"expandSidebar": "Expand sidebar",
76-
"collapseSidebar": "Collapse sidebar"
70+
"closeMobileMenu": "إغلاق القائمة",
71+
"searchButton": "بحث",
72+
"searchAriaLabel": "بحث",
73+
"aboutTooltip": "حول Drydock",
74+
"aboutAriaLabel": "حول Drydock",
75+
"expandSidebar": "توسيع الشريط الجانبي",
76+
"collapseSidebar": "طي الشريط الجانبي"
7777
},
7878
"topbar": {
79-
"openMenu": "Open menu",
80-
"closeMenu": "Close menu",
81-
"userMenu": "User menu",
82-
"profile": "Profile",
83-
"signOut": "Sign out"
79+
"openMenu": "فتح القائمة",
80+
"closeMenu": "إغلاق القائمة",
81+
"userMenu": "قائمة المستخدم",
82+
"profile": "الملف الشخصي",
83+
"signOut": "تسجيل الخروج"
8484
},
8585
"about": {
8686
"title": "Drydock",
87-
"subtitle": "Docker Container Update Manager",
88-
"documentation": "Documentation",
87+
"subtitle": "مدير تحديثات حاويات Docker",
88+
"documentation": "التوثيق",
8989
"github": "GitHub",
90-
"changelog": "Changelog",
91-
"close": "Close"
90+
"changelog": "سجل التغييرات",
91+
"close": "إغلاق"
9292
},
9393
"search": {
94-
"ariaLabel": "Search",
95-
"placeholder": "Jump to pages, containers, agents, triggers...",
96-
"shown": "{count} shown",
97-
"refreshing": "Refreshing search index...",
98-
"noMatches": "No matches for \"{query}\".",
99-
"hint": "Type to search pages, containers, agents, triggers, watchers, and settings.",
100-
"prefixScopeHint": "Prefix scope active; use ",
101-
"typeHint": "Type",
102-
"useTab": " to change scope",
103-
"moveHint": "move",
104-
"openHint": "open"
94+
"ariaLabel": "بحث",
95+
"placeholder": "الانتقال إلى الصفحات، الحاويات، الوكلاء، المشغّلات...",
96+
"shown": "{count} معروض",
97+
"refreshing": "جارٍ تحديث فهرس البحث...",
98+
"noMatches": "لا نتائج لـ \"{query}\".",
99+
"hint": "اكتب للبحث في الصفحات، الحاويات، الوكلاء، المشغّلات، المراقبين، والإعدادات.",
100+
"prefixScopeHint": "النطاق ببادئة نشط؛ استخدم ",
101+
"typeHint": "اكتب",
102+
"useTab": " لتغيير النطاق",
103+
"moveHint": "تنقل",
104+
"openHint": "فتح"
105105
},
106106
"connection": {
107-
"lostTitle": "Connection Lost",
108-
"applyingUpdateTitle": "Applying Update",
109-
"lostMessage": "The server is unreachable. Waiting for it to come back online...",
110-
"restartingMessage": "Drydock is restarting after a self-update{opId}. Reconnecting when the service is back...",
111-
"reconnecting": "Reconnecting",
112-
"restartingService": "Restarting service"
107+
"lostTitle": "انقطع الاتصال",
108+
"applyingUpdateTitle": "جارٍ تطبيق التحديث",
109+
"lostMessage": "الخادم غير قابل للوصول. في انتظار عودته...",
110+
"restartingMessage": "Drydock يُعيد تشغيله بعد تحديث ذاتي{opId}. جارٍ إعادة الاتصال عند عودة الخدمة...",
111+
"reconnecting": "جارٍ إعادة الاتصال",
112+
"restartingService": "جارٍ إعادة تشغيل الخدمة"
113113
}
114114
},
115115
"announcementBanner": {
116-
"defaultDismiss": "Dismiss",
117-
"defaultLinkLabel": "View migration guide"
116+
"defaultDismiss": "إغلاق",
117+
"defaultLinkLabel": "عرض دليل الترحيل"
118118
},
119119
"banners": {
120-
"legacyConfigTitleSingular": "{total} legacy configuration alias detected",
121-
"legacyConfigTitlePlural": "{total} legacy configuration aliases detected",
122-
"legacyApiPathTitle": "{total} legacy API paths detected",
123-
"dontShowAgain": "Don't show again",
124-
"oidcHttpTitle": "HTTP OIDC discovery detected",
125-
"legacyHashTitle": "Legacy password hash detected",
126-
"curlHealthcheckTitle": "Custom curl healthcheck override detected",
127-
"envKeysLabel": "Env keys ({count}): {keys}",
128-
"labelKeysLabel": "Label keys ({count}): {keys}",
129-
"apiPathsLabel": "API paths ({count}): {keys}",
130-
"healthcheckCommandLabel": "Healthcheck command: {command}"
120+
"legacyConfigTitleSingular": "تم اكتشاف {total} اسم مستعار قديم للإعداد",
121+
"legacyConfigTitlePlural": "تم اكتشاف {total} اسم مستعار قديم للإعداد",
122+
"legacyApiPathTitle": "تم اكتشاف {total} مسار API قديم",
123+
"dontShowAgain": "لا تُظهر مجدداً",
124+
"oidcHttpTitle": "تم اكتشاف اكتشاف OIDC عبر HTTP",
125+
"legacyHashTitle": "تم اكتشاف تجزئة كلمة مرور قديمة",
126+
"curlHealthcheckTitle": "تم اكتشاف تجاوز مخصص لفحص صحة curl",
127+
"envKeysLabel": "مفاتيح البيئة ({count}): {keys}",
128+
"labelKeysLabel": "مفاتيح التسمية ({count}): {keys}",
129+
"apiPathsLabel": "مسارات API ({count}): {keys}",
130+
"healthcheckCommandLabel": "أمر فحص الصحة: {command}"
131131
}
132132
}
133133
}

0 commit comments

Comments
 (0)