Skip to content

Commit f30b599

Browse files
Copilothotlong
andcommitted
feat(i18n): add console locale keys to all 11 languages (de, fr, es, ja, ko, pt, ru, ar)
Fix i18n test that validates all locales have matching top-level keys. Update KeyboardShortcuts test to mock i18n hook. Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent fedf53b commit f30b599

9 files changed

Lines changed: 406 additions & 0 deletions

File tree

apps/console/src/__tests__/KeyboardShortcuts.test.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,34 @@ vi.mock('@object-ui/components', () => ({
1515
DialogDescription: ({ children }: any) => <p>{children}</p>,
1616
}));
1717

18+
// Mock i18n — return the key's last segment as display text
19+
vi.mock('@object-ui/i18n', () => ({
20+
useObjectTranslation: () => ({
21+
t: (key: string) => {
22+
const translations: Record<string, string> = {
23+
'console.shortcuts.title': 'Keyboard Shortcuts',
24+
'console.shortcuts.description': 'Quick reference for all available keyboard shortcuts.',
25+
'console.shortcuts.groups.general': 'General',
26+
'console.shortcuts.groups.navigation': 'Navigation',
27+
'console.shortcuts.groups.dataViews': 'Data Views',
28+
'console.shortcuts.groups.preferences': 'Preferences',
29+
'console.shortcuts.openCommandPalette': 'Open command palette',
30+
'console.shortcuts.showShortcuts': 'Show keyboard shortcuts',
31+
'console.shortcuts.closeDialog': 'Close dialog / panel',
32+
'console.shortcuts.toggleSidebar': 'Toggle sidebar',
33+
'console.shortcuts.focusSearch': 'Focus search',
34+
'console.shortcuts.createRecord': 'Create new record',
35+
'console.shortcuts.refreshData': 'Refresh data',
36+
'console.shortcuts.editRecord': 'Edit selected record',
37+
'console.shortcuts.toggleDarkMode': 'Toggle dark mode',
38+
};
39+
return translations[key] ?? key;
40+
},
41+
language: 'en',
42+
direction: 'ltr',
43+
}),
44+
}));
45+
1846
describe('KeyboardShortcutsDialog', () => {
1947
it('renders without errors', () => {
2048
const { container } = render(<KeyboardShortcutsDialog />);

packages/i18n/src/locales/ar.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,52 @@ const ar = {
9999
saveLayout: 'حفظ التخطيط',
100100
resetLayout: 'إعادة تعيين التخطيط',
101101
},
102+
console: {
103+
title: 'وحدة تحكم ObjectStack',
104+
initializing: 'جاري تهيئة التطبيق...',
105+
loadingSteps: {
106+
connecting: 'جاري الاتصال بمصدر البيانات',
107+
loadingConfig: 'جاري تحميل الإعدادات',
108+
preparingWorkspace: 'جاري تجهيز مساحة العمل',
109+
},
110+
shortcuts: {
111+
title: 'اختصارات لوحة المفاتيح',
112+
description: 'مرجع سريع لجميع اختصارات لوحة المفاتيح المتاحة.',
113+
groups: { general: 'عام', navigation: 'التنقل', dataViews: 'عروض البيانات', preferences: 'التفضيلات' },
114+
openCommandPalette: 'فتح لوحة الأوامر',
115+
showShortcuts: 'عرض اختصارات لوحة المفاتيح',
116+
closeDialog: 'إغلاق النافذة / اللوحة',
117+
toggleSidebar: 'تبديل الشريط الجانبي',
118+
focusSearch: 'التركيز على البحث',
119+
createRecord: 'إنشاء سجل جديد',
120+
refreshData: 'تحديث البيانات',
121+
editRecord: 'تعديل السجل المحدد',
122+
toggleDarkMode: 'تبديل الوضع الداكن',
123+
},
124+
commandPalette: {
125+
placeholder: 'اكتب أمراً أو ابحث...',
126+
noResults: 'لم يتم العثور على نتائج.',
127+
objects: 'الكائنات',
128+
dashboards: 'لوحات المعلومات',
129+
pages: 'الصفحات',
130+
reports: 'التقارير',
131+
switchApp: 'تبديل التطبيق',
132+
current: 'الحالي',
133+
preferences: 'التفضيلات',
134+
lightTheme: 'المظهر الفاتح',
135+
darkTheme: 'المظهر الداكن',
136+
systemTheme: 'مظهر النظام',
137+
actions: 'الإجراءات',
138+
openFullSearch: 'فتح صفحة البحث الكاملة',
139+
},
140+
errors: {
141+
somethingWentWrong: 'حدث خطأ ما',
142+
unexpectedError: 'حدث خطأ غير متوقع أثناء عرض هذا المحتوى.',
143+
tryAgain: 'إعادة المحاولة',
144+
goHome: 'العودة للرئيسية',
145+
errorDetails: 'تفاصيل الخطأ (وضع التطوير فقط)',
146+
},
147+
},
102148
errors: {
103149
networkError: 'خطأ في الشبكة. يرجى التحقق من اتصالك.',
104150
serverError: 'خطأ في الخادم. يرجى المحاولة مرة أخرى لاحقاً.',

packages/i18n/src/locales/de.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,57 @@ const de = {
9898
saveLayout: 'Layout speichern',
9999
resetLayout: 'Layout zurücksetzen',
100100
},
101+
console: {
102+
title: 'ObjectStack Konsole',
103+
initializing: 'Anwendung wird initialisiert...',
104+
loadingSteps: {
105+
connecting: 'Verbindung zur Datenquelle herstellen',
106+
loadingConfig: 'Konfiguration laden',
107+
preparingWorkspace: 'Arbeitsbereich vorbereiten',
108+
},
109+
shortcuts: {
110+
title: 'Tastenkürzel',
111+
description: 'Kurzreferenz für alle verfügbaren Tastenkürzel.',
112+
groups: {
113+
general: 'Allgemein',
114+
navigation: 'Navigation',
115+
dataViews: 'Datenansichten',
116+
preferences: 'Einstellungen',
117+
},
118+
openCommandPalette: 'Befehlspalette öffnen',
119+
showShortcuts: 'Tastenkürzel anzeigen',
120+
closeDialog: 'Dialog / Panel schließen',
121+
toggleSidebar: 'Seitenleiste umschalten',
122+
focusSearch: 'Suche fokussieren',
123+
createRecord: 'Neuen Datensatz erstellen',
124+
refreshData: 'Daten aktualisieren',
125+
editRecord: 'Ausgewählten Datensatz bearbeiten',
126+
toggleDarkMode: 'Dunkelmodus umschalten',
127+
},
128+
commandPalette: {
129+
placeholder: 'Befehl eingeben oder suchen...',
130+
noResults: 'Keine Ergebnisse gefunden.',
131+
objects: 'Objekte',
132+
dashboards: 'Dashboards',
133+
pages: 'Seiten',
134+
reports: 'Berichte',
135+
switchApp: 'App wechseln',
136+
current: 'Aktuell',
137+
preferences: 'Einstellungen',
138+
lightTheme: 'Helles Design',
139+
darkTheme: 'Dunkles Design',
140+
systemTheme: 'Systemdesign',
141+
actions: 'Aktionen',
142+
openFullSearch: 'Vollständige Suchseite öffnen',
143+
},
144+
errors: {
145+
somethingWentWrong: 'Etwas ist schiefgelaufen',
146+
unexpectedError: 'Beim Rendern dieser Ansicht ist ein unerwarteter Fehler aufgetreten.',
147+
tryAgain: 'Erneut versuchen',
148+
goHome: 'Zur Startseite',
149+
errorDetails: 'Fehlerdetails (nur Entwicklung)',
150+
},
151+
},
101152
errors: {
102153
networkError: 'Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.',
103154
serverError: 'Serverfehler. Bitte versuchen Sie es später erneut.',

packages/i18n/src/locales/es.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,52 @@ const es = {
9898
saveLayout: 'Guardar diseño',
9999
resetLayout: 'Restablecer diseño',
100100
},
101+
console: {
102+
title: 'Consola ObjectStack',
103+
initializing: 'Inicializando aplicación...',
104+
loadingSteps: {
105+
connecting: 'Conectando a la fuente de datos',
106+
loadingConfig: 'Cargando configuración',
107+
preparingWorkspace: 'Preparando espacio de trabajo',
108+
},
109+
shortcuts: {
110+
title: 'Atajos de teclado',
111+
description: 'Referencia rápida de todos los atajos de teclado disponibles.',
112+
groups: { general: 'General', navigation: 'Navegación', dataViews: 'Vistas de datos', preferences: 'Preferencias' },
113+
openCommandPalette: 'Abrir paleta de comandos',
114+
showShortcuts: 'Mostrar atajos de teclado',
115+
closeDialog: 'Cerrar diálogo / panel',
116+
toggleSidebar: 'Alternar barra lateral',
117+
focusSearch: 'Enfocar búsqueda',
118+
createRecord: 'Crear nuevo registro',
119+
refreshData: 'Actualizar datos',
120+
editRecord: 'Editar registro seleccionado',
121+
toggleDarkMode: 'Alternar modo oscuro',
122+
},
123+
commandPalette: {
124+
placeholder: 'Escriba un comando o busque...',
125+
noResults: 'No se encontraron resultados.',
126+
objects: 'Objetos',
127+
dashboards: 'Paneles',
128+
pages: 'Páginas',
129+
reports: 'Informes',
130+
switchApp: 'Cambiar aplicación',
131+
current: 'Actual',
132+
preferences: 'Preferencias',
133+
lightTheme: 'Tema claro',
134+
darkTheme: 'Tema oscuro',
135+
systemTheme: 'Tema del sistema',
136+
actions: 'Acciones',
137+
openFullSearch: 'Abrir página de búsqueda completa',
138+
},
139+
errors: {
140+
somethingWentWrong: 'Algo salió mal',
141+
unexpectedError: 'Ocurrió un error inesperado al renderizar esta vista.',
142+
tryAgain: 'Intentar de nuevo',
143+
goHome: 'Ir al inicio',
144+
errorDetails: 'Detalles del error (solo desarrollo)',
145+
},
146+
},
101147
errors: {
102148
networkError: 'Error de red. Por favor, compruebe su conexión.',
103149
serverError: 'Error del servidor. Por favor, inténtelo de nuevo más tarde.',

packages/i18n/src/locales/fr.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,57 @@ const fr = {
9898
saveLayout: 'Enregistrer la mise en page',
9999
resetLayout: 'Réinitialiser la mise en page',
100100
},
101+
console: {
102+
title: 'Console ObjectStack',
103+
initializing: "Initialisation de l'application...",
104+
loadingSteps: {
105+
connecting: 'Connexion à la source de données',
106+
loadingConfig: 'Chargement de la configuration',
107+
preparingWorkspace: "Préparation de l'espace de travail",
108+
},
109+
shortcuts: {
110+
title: 'Raccourcis clavier',
111+
description: 'Référence rapide de tous les raccourcis clavier disponibles.',
112+
groups: {
113+
general: 'Général',
114+
navigation: 'Navigation',
115+
dataViews: 'Vues de données',
116+
preferences: 'Préférences',
117+
},
118+
openCommandPalette: 'Ouvrir la palette de commandes',
119+
showShortcuts: 'Afficher les raccourcis clavier',
120+
closeDialog: 'Fermer le dialogue / panneau',
121+
toggleSidebar: 'Basculer la barre latérale',
122+
focusSearch: 'Focus sur la recherche',
123+
createRecord: 'Créer un nouvel enregistrement',
124+
refreshData: 'Actualiser les données',
125+
editRecord: "Modifier l'enregistrement sélectionné",
126+
toggleDarkMode: 'Basculer le mode sombre',
127+
},
128+
commandPalette: {
129+
placeholder: 'Tapez une commande ou recherchez...',
130+
noResults: 'Aucun résultat trouvé.',
131+
objects: 'Objets',
132+
dashboards: 'Tableaux de bord',
133+
pages: 'Pages',
134+
reports: 'Rapports',
135+
switchApp: "Changer d'application",
136+
current: 'Actuel',
137+
preferences: 'Préférences',
138+
lightTheme: 'Thème clair',
139+
darkTheme: 'Thème sombre',
140+
systemTheme: 'Thème système',
141+
actions: 'Actions',
142+
openFullSearch: 'Ouvrir la page de recherche complète',
143+
},
144+
errors: {
145+
somethingWentWrong: "Quelque chose s'est mal passé",
146+
unexpectedError: 'Une erreur inattendue est survenue lors du rendu de cette vue.',
147+
tryAgain: 'Réessayer',
148+
goHome: "Retour à l'accueil",
149+
errorDetails: 'Détails de l\'erreur (développement uniquement)',
150+
},
151+
},
101152
errors: {
102153
networkError: 'Erreur réseau. Veuillez vérifier votre connexion.',
103154
serverError: 'Erreur serveur. Veuillez réessayer plus tard.',

packages/i18n/src/locales/ja.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,52 @@ const ja = {
9898
saveLayout: 'レイアウトを保存',
9999
resetLayout: 'レイアウトをリセット',
100100
},
101+
console: {
102+
title: 'ObjectStack コンソール',
103+
initializing: 'アプリケーションを初期化中...',
104+
loadingSteps: {
105+
connecting: 'データソースに接続中',
106+
loadingConfig: '設定を読み込み中',
107+
preparingWorkspace: 'ワークスペースを準備中',
108+
},
109+
shortcuts: {
110+
title: 'キーボードショートカット',
111+
description: '利用可能なすべてのキーボードショートカットのクイックリファレンス。',
112+
groups: { general: '一般', navigation: 'ナビゲーション', dataViews: 'データビュー', preferences: '設定' },
113+
openCommandPalette: 'コマンドパレットを開く',
114+
showShortcuts: 'キーボードショートカットを表示',
115+
closeDialog: 'ダイアログ / パネルを閉じる',
116+
toggleSidebar: 'サイドバーを切り替え',
117+
focusSearch: '検索にフォーカス',
118+
createRecord: '新しいレコードを作成',
119+
refreshData: 'データを更新',
120+
editRecord: '選択したレコードを編集',
121+
toggleDarkMode: 'ダークモードを切り替え',
122+
},
123+
commandPalette: {
124+
placeholder: 'コマンドを入力または検索...',
125+
noResults: '結果が見つかりません。',
126+
objects: 'オブジェクト',
127+
dashboards: 'ダッシュボード',
128+
pages: 'ページ',
129+
reports: 'レポート',
130+
switchApp: 'アプリを切り替え',
131+
current: '現在',
132+
preferences: '設定',
133+
lightTheme: 'ライトテーマ',
134+
darkTheme: 'ダークテーマ',
135+
systemTheme: 'システムテーマ',
136+
actions: 'アクション',
137+
openFullSearch: '完全な検索ページを開く',
138+
},
139+
errors: {
140+
somethingWentWrong: '問題が発生しました',
141+
unexpectedError: 'このビューのレンダリング中に予期しないエラーが発生しました。',
142+
tryAgain: '再試行',
143+
goHome: 'ホームに戻る',
144+
errorDetails: 'エラー詳細(開発モードのみ)',
145+
},
146+
},
101147
errors: {
102148
networkError: 'ネットワークエラーです。接続を確認してください。',
103149
serverError: 'サーバーエラーです。後でもう一度お試しください。',

packages/i18n/src/locales/ko.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,52 @@ const ko = {
9898
saveLayout: '레이아웃 저장',
9999
resetLayout: '레이아웃 초기화',
100100
},
101+
console: {
102+
title: 'ObjectStack 콘솔',
103+
initializing: '애플리케이션 초기화 중...',
104+
loadingSteps: {
105+
connecting: '데이터 소스에 연결 중',
106+
loadingConfig: '설정 로드 중',
107+
preparingWorkspace: '워크스페이스 준비 중',
108+
},
109+
shortcuts: {
110+
title: '키보드 단축키',
111+
description: '사용 가능한 모든 키보드 단축키 빠른 참조.',
112+
groups: { general: '일반', navigation: '탐색', dataViews: '데이터 뷰', preferences: '환경설정' },
113+
openCommandPalette: '명령 팔레트 열기',
114+
showShortcuts: '키보드 단축키 표시',
115+
closeDialog: '대화상자 / 패널 닫기',
116+
toggleSidebar: '사이드바 전환',
117+
focusSearch: '검색에 포커스',
118+
createRecord: '새 레코드 생성',
119+
refreshData: '데이터 새로고침',
120+
editRecord: '선택한 레코드 편집',
121+
toggleDarkMode: '다크 모드 전환',
122+
},
123+
commandPalette: {
124+
placeholder: '명령어를 입력하거나 검색...',
125+
noResults: '결과를 찾을 수 없습니다.',
126+
objects: '객체',
127+
dashboards: '대시보드',
128+
pages: '페이지',
129+
reports: '보고서',
130+
switchApp: '앱 전환',
131+
current: '현재',
132+
preferences: '환경설정',
133+
lightTheme: '라이트 테마',
134+
darkTheme: '다크 테마',
135+
systemTheme: '시스템 테마',
136+
actions: '작업',
137+
openFullSearch: '전체 검색 페이지 열기',
138+
},
139+
errors: {
140+
somethingWentWrong: '문제가 발생했습니다',
141+
unexpectedError: '이 뷰를 렌더링하는 중 예기치 않은 오류가 발생했습니다.',
142+
tryAgain: '다시 시도',
143+
goHome: '홈으로 이동',
144+
errorDetails: '오류 상세정보 (개발 모드 전용)',
145+
},
146+
},
101147
errors: {
102148
networkError: '네트워크 오류입니다. 연결을 확인해주세요.',
103149
serverError: '서버 오류입니다. 나중에 다시 시도해주세요.',

0 commit comments

Comments
 (0)