feat: Add i18n with 7 languages (DE, EN, ES, FR, AR, RU, PL)
- Added vue-i18n with language switcher in header - Flag icons with language codes dropdown - RTL support for Arabic - Translated all navigation, auth, and module labels - Language preference saved to localStorage
This commit is contained in:
91
src/components/LanguageSwitcher.vue
Normal file
91
src/components/LanguageSwitcher.vue
Normal file
@@ -0,0 +1,91 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, computed } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { SUPPORTED_LOCALES, setLocale, type LocaleCode } from '@/i18n'
|
||||
|
||||
const { locale } = useI18n()
|
||||
const isOpen = ref(false)
|
||||
|
||||
const currentLocale = computed(() => {
|
||||
return SUPPORTED_LOCALES.find(l => l.code === locale.value) || SUPPORTED_LOCALES[0]
|
||||
})
|
||||
|
||||
function selectLocale(code: LocaleCode) {
|
||||
setLocale(code)
|
||||
isOpen.value = false
|
||||
}
|
||||
|
||||
// Close dropdown when clicking outside
|
||||
function handleClickOutside(event: MouseEvent) {
|
||||
const target = event.target as HTMLElement
|
||||
if (!target.closest('.language-switcher')) {
|
||||
isOpen.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// Add click listener
|
||||
if (typeof window !== 'undefined') {
|
||||
document.addEventListener('click', handleClickOutside)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="language-switcher relative">
|
||||
<button
|
||||
class="flex items-center gap-1.5 px-2 py-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"
|
||||
@click.stop="isOpen = !isOpen"
|
||||
:title="$t('settings.language')"
|
||||
>
|
||||
<span class="text-lg">{{ currentLocale.flag }}</span>
|
||||
<span class="text-xs font-medium text-gray-600 dark:text-gray-300 uppercase">
|
||||
{{ currentLocale.code }}
|
||||
</span>
|
||||
<svg
|
||||
class="w-3 h-3 text-gray-500 transition-transform"
|
||||
:class="{ 'rotate-180': isOpen }"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<!-- Dropdown -->
|
||||
<Transition
|
||||
enter-active-class="transition ease-out duration-100"
|
||||
enter-from-class="transform opacity-0 scale-95"
|
||||
enter-to-class="transform opacity-100 scale-100"
|
||||
leave-active-class="transition ease-in duration-75"
|
||||
leave-from-class="transform opacity-100 scale-100"
|
||||
leave-to-class="transform opacity-0 scale-95"
|
||||
>
|
||||
<div
|
||||
v-if="isOpen"
|
||||
class="absolute right-0 mt-2 w-44 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 py-1 z-50"
|
||||
>
|
||||
<button
|
||||
v-for="loc in SUPPORTED_LOCALES"
|
||||
:key="loc.code"
|
||||
class="w-full flex items-center gap-3 px-3 py-2 text-sm hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"
|
||||
:class="{
|
||||
'bg-primary-50 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400': loc.code === locale,
|
||||
'text-gray-700 dark:text-gray-200': loc.code !== locale
|
||||
}"
|
||||
@click="selectLocale(loc.code)"
|
||||
>
|
||||
<span class="text-lg">{{ loc.flag }}</span>
|
||||
<span class="flex-1 text-left">{{ loc.name }}</span>
|
||||
<svg
|
||||
v-if="loc.code === locale"
|
||||
class="w-4 h-4 text-primary-600 dark:text-primary-400"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</Transition>
|
||||
</div>
|
||||
</template>
|
||||
@@ -1,12 +1,15 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
import LanguageSwitcher from '@/components/LanguageSwitcher.vue'
|
||||
|
||||
defineEmits<{
|
||||
'toggle-sidebar': []
|
||||
'logout': []
|
||||
}>()
|
||||
|
||||
const { t } = useI18n()
|
||||
const authStore = useAuthStore()
|
||||
const darkMode = ref(localStorage.getItem('darkMode') === 'true')
|
||||
const dropdownOpen = ref(false)
|
||||
@@ -36,16 +39,20 @@ if (darkMode.value) {
|
||||
<!-- Page title placeholder -->
|
||||
<div class="flex-1 lg:ml-0">
|
||||
<h1 class="text-lg font-semibold text-gray-900 dark:text-white hidden lg:block">
|
||||
Mitarbeiterverwaltung
|
||||
{{ t('app.title') }}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<!-- Right side actions -->
|
||||
<div class="flex items-center gap-2">
|
||||
<!-- Language Switcher -->
|
||||
<LanguageSwitcher />
|
||||
|
||||
<!-- Dark mode toggle -->
|
||||
<button
|
||||
class="p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700"
|
||||
@click="toggleDarkMode"
|
||||
:title="darkMode ? t('settings.lightMode') : t('settings.darkMode')"
|
||||
>
|
||||
<span class="text-xl">{{ darkMode ? '☀️' : '🌙' }}</span>
|
||||
</button>
|
||||
@@ -76,14 +83,14 @@ if (darkMode.value) {
|
||||
to="/settings"
|
||||
class="block px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700"
|
||||
>
|
||||
⚙️ Einstellungen
|
||||
⚙️ {{ t('nav.settings') }}
|
||||
</router-link>
|
||||
<hr class="my-1 border-gray-200 dark:border-gray-700">
|
||||
<button
|
||||
class="w-full text-left px-4 py-2 text-sm text-red-600 hover:bg-red-50 dark:hover:bg-red-900/20"
|
||||
@click="$emit('logout')"
|
||||
>
|
||||
🚪 Abmelden
|
||||
🚪 {{ t('auth.logout') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
|
||||
defineProps<{
|
||||
@@ -12,48 +13,49 @@ defineEmits<{
|
||||
}>()
|
||||
|
||||
const route = useRoute()
|
||||
const { t } = useI18n()
|
||||
const authStore = useAuthStore()
|
||||
|
||||
const navigation = computed(() => {
|
||||
const items = [
|
||||
{ name: 'Dashboard', href: '/', icon: '📊' },
|
||||
{ name: 'Aufträge', href: '/orders', icon: '📋' },
|
||||
{ name: t('nav.dashboard'), href: '/', icon: '📊' },
|
||||
{ name: t('nav.orders'), href: '/orders', icon: '📋' },
|
||||
]
|
||||
|
||||
if (authStore.canManageUsers) {
|
||||
items.push(
|
||||
{ name: 'Mitarbeiter', href: '/users', icon: '👥' },
|
||||
{ name: 'Schichtplanung', href: '/shifts', icon: '📅' }
|
||||
{ name: t('nav.users'), href: '/users', icon: '👥' },
|
||||
{ name: t('nav.shifts'), href: '/shifts', icon: '📅' }
|
||||
)
|
||||
}
|
||||
|
||||
items.push(
|
||||
{ name: 'Verfügbarkeit', href: '/availability', icon: '🗓️' },
|
||||
{ name: 'Stundenzettel', href: '/timesheets', icon: '⏱️' },
|
||||
{ name: 'Qualifikationen', href: '/qualifications', icon: '🎓' },
|
||||
{ name: 'Objekte', href: '/objects', icon: '🏢' },
|
||||
{ name: 'Rundgänge', href: '/patrols', icon: '📍' },
|
||||
{ name: 'Vorfälle', href: '/incidents', icon: '🚨' },
|
||||
{ name: 'Dokumente', href: '/documents', icon: '📁' },
|
||||
{ name: t('nav.availability'), href: '/availability', icon: '🗓️' },
|
||||
{ name: t('nav.timesheets'), href: '/timesheets', icon: '⏱️' },
|
||||
{ name: t('nav.qualifications'), href: '/qualifications', icon: '🎓' },
|
||||
{ name: t('nav.objects'), href: '/objects', icon: '🏢' },
|
||||
{ name: t('nav.patrols'), href: '/patrols', icon: '📍' },
|
||||
{ name: t('nav.incidents'), href: '/incidents', icon: '🚨' },
|
||||
{ name: t('nav.documents'), href: '/documents', icon: '📁' },
|
||||
)
|
||||
|
||||
if (authStore.canManageUsers) {
|
||||
items.push(
|
||||
{ name: 'Fahrzeuge', href: '/vehicles', icon: '🚗' },
|
||||
{ name: 'Kunden', href: '/customers', icon: '🤝' }
|
||||
{ name: t('nav.vehicles'), href: '/vehicles', icon: '🚗' },
|
||||
{ name: t('nav.customers'), href: '/customers', icon: '🤝' }
|
||||
)
|
||||
}
|
||||
|
||||
if (authStore.isChef) {
|
||||
items.push(
|
||||
{ name: 'Abrechnung', href: '/billing', icon: '💰' },
|
||||
{ name: 'Module', href: '/modules', icon: '⚙️' }
|
||||
{ name: t('nav.billing'), href: '/billing', icon: '💰' },
|
||||
{ name: t('nav.modules'), href: '/modules', icon: '⚙️' }
|
||||
)
|
||||
}
|
||||
|
||||
items.push(
|
||||
{ name: 'Einstellungen', href: '/settings', icon: '🔧' },
|
||||
{ name: 'Hilfe', href: '/help', icon: '📚' }
|
||||
{ name: t('nav.settings'), href: '/settings', icon: '🔧' },
|
||||
{ name: t('nav.help'), href: '/help', icon: '📚' }
|
||||
)
|
||||
|
||||
return items
|
||||
|
||||
72
src/i18n.ts
Normal file
72
src/i18n.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import de from './locales/de'
|
||||
import en from './locales/en'
|
||||
import es from './locales/es'
|
||||
import fr from './locales/fr'
|
||||
import ar from './locales/ar'
|
||||
import ru from './locales/ru'
|
||||
import pl from './locales/pl'
|
||||
|
||||
export const SUPPORTED_LOCALES = [
|
||||
{ code: 'de', name: 'Deutsch', flag: '🇩🇪' },
|
||||
{ code: 'es', name: 'Español', flag: '🇪🇸' },
|
||||
{ code: 'en', name: 'English', flag: '🇬🇧' },
|
||||
{ code: 'ar', name: 'العربية', flag: '🇸🇦', rtl: true },
|
||||
{ code: 'ru', name: 'Русский', flag: '🇷🇺' },
|
||||
{ code: 'fr', name: 'Français', flag: '🇫🇷' },
|
||||
{ code: 'pl', name: 'Polski', flag: '🇵🇱' },
|
||||
] as const
|
||||
|
||||
export type LocaleCode = typeof SUPPORTED_LOCALES[number]['code']
|
||||
|
||||
// Get saved locale or browser default
|
||||
function getDefaultLocale(): LocaleCode {
|
||||
const saved = localStorage.getItem('locale') as LocaleCode
|
||||
if (saved && SUPPORTED_LOCALES.some(l => l.code === saved)) {
|
||||
return saved
|
||||
}
|
||||
|
||||
// Try browser language
|
||||
const browserLang = navigator.language.split('-')[0]
|
||||
const match = SUPPORTED_LOCALES.find(l => l.code === browserLang)
|
||||
if (match) {
|
||||
return match.code
|
||||
}
|
||||
|
||||
return 'de' // Default to German
|
||||
}
|
||||
|
||||
const i18n = createI18n({
|
||||
legacy: false,
|
||||
locale: getDefaultLocale(),
|
||||
fallbackLocale: 'de',
|
||||
messages: {
|
||||
de,
|
||||
en,
|
||||
es,
|
||||
fr,
|
||||
ar,
|
||||
ru,
|
||||
pl,
|
||||
},
|
||||
})
|
||||
|
||||
// Update document direction for RTL languages
|
||||
export function setLocale(locale: LocaleCode) {
|
||||
const localeInfo = SUPPORTED_LOCALES.find(l => l.code === locale)
|
||||
if (localeInfo) {
|
||||
i18n.global.locale.value = locale
|
||||
localStorage.setItem('locale', locale)
|
||||
document.documentElement.dir = localeInfo.rtl ? 'rtl' : 'ltr'
|
||||
document.documentElement.lang = locale
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize direction on load
|
||||
const currentLocale = SUPPORTED_LOCALES.find(l => l.code === getDefaultLocale())
|
||||
if (currentLocale?.rtl) {
|
||||
document.documentElement.dir = 'rtl'
|
||||
}
|
||||
document.documentElement.lang = getDefaultLocale()
|
||||
|
||||
export default i18n
|
||||
434
src/locales/ar.ts
Normal file
434
src/locales/ar.ts
Normal file
@@ -0,0 +1,434 @@
|
||||
export default {
|
||||
// General
|
||||
app: {
|
||||
name: 'SeCu',
|
||||
title: 'إدارة الموظفين',
|
||||
loading: 'جاري التحميل...',
|
||||
save: 'حفظ',
|
||||
cancel: 'إلغاء',
|
||||
delete: 'حذف',
|
||||
edit: 'تعديل',
|
||||
add: 'إضافة',
|
||||
search: 'بحث',
|
||||
filter: 'تصفية',
|
||||
actions: 'إجراءات',
|
||||
close: 'إغلاق',
|
||||
confirm: 'تأكيد',
|
||||
yes: 'نعم',
|
||||
no: 'لا',
|
||||
back: 'رجوع',
|
||||
next: 'التالي',
|
||||
submit: 'إرسال',
|
||||
reset: 'إعادة تعيين',
|
||||
export: 'تصدير',
|
||||
import: 'استيراد',
|
||||
download: 'تحميل',
|
||||
upload: 'رفع',
|
||||
all: 'الكل',
|
||||
none: 'لا شيء',
|
||||
status: 'الحالة',
|
||||
date: 'التاريخ',
|
||||
time: 'الوقت',
|
||||
from: 'من',
|
||||
to: 'إلى',
|
||||
total: 'المجموع',
|
||||
details: 'التفاصيل',
|
||||
description: 'الوصف',
|
||||
notes: 'ملاحظات',
|
||||
created: 'تم الإنشاء',
|
||||
updated: 'تم التحديث',
|
||||
},
|
||||
|
||||
// Auth
|
||||
auth: {
|
||||
login: 'تسجيل الدخول',
|
||||
logout: 'تسجيل الخروج',
|
||||
register: 'التسجيل',
|
||||
email: 'البريد الإلكتروني',
|
||||
password: 'كلمة المرور',
|
||||
confirmPassword: 'تأكيد كلمة المرور',
|
||||
forgotPassword: 'نسيت كلمة المرور؟',
|
||||
rememberMe: 'تذكرني',
|
||||
welcomeBack: 'مرحباً بعودتك',
|
||||
loginToContinue: 'سجل الدخول للمتابعة',
|
||||
noAccount: 'ليس لديك حساب؟',
|
||||
hasAccount: 'لديك حساب بالفعل؟',
|
||||
createOrg: 'إنشاء منظمة',
|
||||
orgName: 'اسم الشركة',
|
||||
firstName: 'الاسم الأول',
|
||||
lastName: 'اسم العائلة',
|
||||
},
|
||||
|
||||
// Navigation
|
||||
nav: {
|
||||
dashboard: 'لوحة التحكم',
|
||||
orders: 'الطلبات',
|
||||
users: 'الموظفون',
|
||||
shifts: 'جدولة المناوبات',
|
||||
availability: 'التوفر',
|
||||
timesheets: 'جداول الدوام',
|
||||
qualifications: 'المؤهلات',
|
||||
objects: 'المواقع',
|
||||
patrols: 'الدوريات',
|
||||
incidents: 'الحوادث',
|
||||
documents: 'المستندات',
|
||||
vehicles: 'المركبات',
|
||||
customers: 'العملاء',
|
||||
billing: 'الفواتير',
|
||||
modules: 'الوحدات',
|
||||
settings: 'الإعدادات',
|
||||
help: 'المساعدة',
|
||||
partnerships: 'الشراكات',
|
||||
},
|
||||
|
||||
// Dashboard
|
||||
dashboard: {
|
||||
welcome: 'مرحباً',
|
||||
overview: 'نظرة عامة',
|
||||
todayOrders: 'طلبات اليوم',
|
||||
activeEmployees: 'الموظفون النشطون',
|
||||
openIncidents: 'الحوادث المفتوحة',
|
||||
pendingTimesheets: 'جداول الدوام المعلقة',
|
||||
recentActivity: 'النشاط الأخير',
|
||||
upcomingShifts: 'المناوبات القادمة',
|
||||
expiringQualifications: 'المؤهلات المنتهية قريباً',
|
||||
quickActions: 'إجراءات سريعة',
|
||||
},
|
||||
|
||||
// Orders
|
||||
orders: {
|
||||
title: 'الطلبات',
|
||||
new: 'طلب جديد',
|
||||
orderNumber: 'رقم الطلب',
|
||||
client: 'العميل',
|
||||
location: 'الموقع',
|
||||
startDate: 'تاريخ البدء',
|
||||
endDate: 'تاريخ الانتهاء',
|
||||
assignedTo: 'مُعين إلى',
|
||||
priority: 'الأولوية',
|
||||
priorities: {
|
||||
low: 'منخفضة',
|
||||
medium: 'متوسطة',
|
||||
high: 'عالية',
|
||||
urgent: 'عاجلة',
|
||||
},
|
||||
statuses: {
|
||||
draft: 'مسودة',
|
||||
scheduled: 'مجدول',
|
||||
active: 'نشط',
|
||||
completed: 'مكتمل',
|
||||
cancelled: 'ملغي',
|
||||
},
|
||||
},
|
||||
|
||||
// Users
|
||||
users: {
|
||||
title: 'الموظفون',
|
||||
new: 'موظف جديد',
|
||||
employee: 'موظف',
|
||||
employees: 'الموظفون',
|
||||
role: 'الدور',
|
||||
roles: {
|
||||
chef: 'مدير',
|
||||
disponent: 'منسق',
|
||||
mitarbeiter: 'موظف',
|
||||
},
|
||||
phone: 'الهاتف',
|
||||
address: 'العنوان',
|
||||
hireDate: 'تاريخ التوظيف',
|
||||
active: 'نشط',
|
||||
inactive: 'غير نشط',
|
||||
},
|
||||
|
||||
// Shifts
|
||||
shifts: {
|
||||
title: 'جدولة المناوبات',
|
||||
new: 'مناوبة جديدة',
|
||||
shift: 'مناوبة',
|
||||
shiftPlan: 'خطة المناوبات',
|
||||
morning: 'مناوبة صباحية',
|
||||
afternoon: 'مناوبة مسائية',
|
||||
night: 'مناوبة ليلية',
|
||||
startTime: 'وقت البدء',
|
||||
endTime: 'وقت الانتهاء',
|
||||
break: 'استراحة',
|
||||
assigned: 'مُعين',
|
||||
unassigned: 'غير مُعين',
|
||||
swapRequest: 'طلب تبديل',
|
||||
approve: 'موافقة',
|
||||
reject: 'رفض',
|
||||
},
|
||||
|
||||
// Availability
|
||||
availability: {
|
||||
title: 'التوفر',
|
||||
available: 'متاح',
|
||||
unavailable: 'غير متاح',
|
||||
partiallyAvailable: 'متاح جزئياً',
|
||||
setAvailability: 'تحديد التوفر',
|
||||
reason: 'السبب',
|
||||
vacation: 'إجازة',
|
||||
sick: 'مرض',
|
||||
training: 'تدريب',
|
||||
other: 'أخرى',
|
||||
},
|
||||
|
||||
// Timesheets
|
||||
timesheets: {
|
||||
title: 'جداول الدوام',
|
||||
new: 'إدخال جديد',
|
||||
hours: 'ساعات',
|
||||
totalHours: 'إجمالي الساعات',
|
||||
workDate: 'يوم العمل',
|
||||
checkIn: 'تسجيل الحضور',
|
||||
checkOut: 'تسجيل الانصراف',
|
||||
breakTime: 'وقت الاستراحة',
|
||||
overtime: 'ساعات إضافية',
|
||||
upload: 'رفع جدول الدوام',
|
||||
statuses: {
|
||||
pending: 'معلق',
|
||||
approved: 'مُوافق عليه',
|
||||
rejected: 'مرفوض',
|
||||
},
|
||||
},
|
||||
|
||||
// Qualifications
|
||||
qualifications: {
|
||||
title: 'المؤهلات',
|
||||
new: 'مؤهل جديد',
|
||||
type: 'النوع',
|
||||
types: {
|
||||
'34a': 'شهادة الأمن §34a',
|
||||
'first_aid': 'دورة الإسعافات الأولية',
|
||||
'fire_safety': 'السلامة من الحريق',
|
||||
'security_check': 'التصريح الأمني',
|
||||
'drivers_license': 'رخصة القيادة',
|
||||
'other': 'أخرى',
|
||||
},
|
||||
issueDate: 'تاريخ الإصدار',
|
||||
expiryDate: 'تاريخ الانتهاء',
|
||||
issuedBy: 'صادر من',
|
||||
valid: 'صالح',
|
||||
expired: 'منتهي',
|
||||
expiringSoon: 'ينتهي قريباً',
|
||||
daysUntilExpiry: 'أيام حتى الانتهاء',
|
||||
reminder: 'تذكير',
|
||||
},
|
||||
|
||||
// Objects
|
||||
objects: {
|
||||
title: 'المواقع',
|
||||
new: 'موقع جديد',
|
||||
object: 'موقع',
|
||||
name: 'الاسم',
|
||||
address: 'العنوان',
|
||||
contact: 'جهة الاتصال',
|
||||
phone: 'الهاتف',
|
||||
instructions: 'التعليمات',
|
||||
documents: 'المستندات',
|
||||
accessInfo: 'معلومات الدخول',
|
||||
},
|
||||
|
||||
// Patrols
|
||||
patrols: {
|
||||
title: 'الدوريات',
|
||||
new: 'دورية جديدة',
|
||||
checkpoint: 'نقطة تفتيش',
|
||||
checkpoints: 'نقاط التفتيش',
|
||||
route: 'المسار',
|
||||
routes: 'المسارات',
|
||||
log: 'سجل',
|
||||
logs: 'السجلات',
|
||||
scanned: 'تم المسح',
|
||||
missed: 'فائت',
|
||||
scanTime: 'وقت المسح',
|
||||
expectedTime: 'الوقت المتوقع',
|
||||
deviation: 'الانحراف',
|
||||
},
|
||||
|
||||
// Incidents
|
||||
incidents: {
|
||||
title: 'الحوادث',
|
||||
new: 'حادثة جديدة',
|
||||
incident: 'حادثة',
|
||||
category: 'الفئة',
|
||||
categories: {
|
||||
theft: 'سرقة',
|
||||
vandalism: 'تخريب',
|
||||
trespassing: 'تعدي',
|
||||
fire: 'حريق',
|
||||
medical: 'طوارئ طبية',
|
||||
technical: 'مشكلة تقنية',
|
||||
other: 'أخرى',
|
||||
},
|
||||
severity: 'الشدة',
|
||||
severities: {
|
||||
low: 'منخفضة',
|
||||
medium: 'متوسطة',
|
||||
high: 'عالية',
|
||||
critical: 'حرجة',
|
||||
},
|
||||
reporter: 'أبلغ عنها',
|
||||
location: 'الموقع',
|
||||
witnesses: 'الشهود',
|
||||
attachments: 'المرفقات',
|
||||
resolved: 'محلولة',
|
||||
unresolved: 'غير محلولة',
|
||||
},
|
||||
|
||||
// Documents
|
||||
documents: {
|
||||
title: 'المستندات',
|
||||
new: 'مستند جديد',
|
||||
document: 'مستند',
|
||||
category: 'الفئة',
|
||||
categories: {
|
||||
contract: 'عقد',
|
||||
certificate: 'شهادة',
|
||||
policy: 'سياسة',
|
||||
manual: 'دليل',
|
||||
form: 'نموذج',
|
||||
other: 'أخرى',
|
||||
},
|
||||
uploadDate: 'تاريخ الرفع',
|
||||
fileType: 'نوع الملف',
|
||||
fileSize: 'حجم الملف',
|
||||
mandatory: 'إلزامي',
|
||||
acknowledged: 'تم الإقرار',
|
||||
acknowledgement: 'إقرار',
|
||||
},
|
||||
|
||||
// Vehicles
|
||||
vehicles: {
|
||||
title: 'المركبات',
|
||||
new: 'مركبة جديدة',
|
||||
vehicle: 'مركبة',
|
||||
licensePlate: 'لوحة الترخيص',
|
||||
make: 'الشركة المصنعة',
|
||||
model: 'الطراز',
|
||||
year: 'السنة',
|
||||
mileage: 'عداد المسافات',
|
||||
fuelLevel: 'مستوى الوقود',
|
||||
status: 'الحالة',
|
||||
statuses: {
|
||||
available: 'متاحة',
|
||||
inUse: 'قيد الاستخدام',
|
||||
maintenance: 'صيانة',
|
||||
outOfService: 'خارج الخدمة',
|
||||
},
|
||||
booking: 'حجز',
|
||||
bookings: 'الحجوزات',
|
||||
maintenance: 'الصيانة',
|
||||
nextService: 'الخدمة التالية',
|
||||
},
|
||||
|
||||
// Customers
|
||||
customers: {
|
||||
title: 'العملاء',
|
||||
new: 'عميل جديد',
|
||||
customer: 'عميل',
|
||||
company: 'الشركة',
|
||||
contact: 'جهة الاتصال',
|
||||
email: 'البريد الإلكتروني',
|
||||
phone: 'الهاتف',
|
||||
address: 'العنوان',
|
||||
contracts: 'العقود',
|
||||
communication: 'التواصل',
|
||||
notes: 'ملاحظات',
|
||||
},
|
||||
|
||||
// Billing
|
||||
billing: {
|
||||
title: 'الفواتير',
|
||||
invoices: 'الفواتير',
|
||||
newInvoice: 'فاتورة جديدة',
|
||||
invoice: 'فاتورة',
|
||||
invoiceNumber: 'رقم الفاتورة',
|
||||
amount: 'المبلغ',
|
||||
tax: 'الضريبة',
|
||||
subtotal: 'المجموع الفرعي',
|
||||
total: 'المجموع',
|
||||
dueDate: 'تاريخ الاستحقاق',
|
||||
paidDate: 'تاريخ الدفع',
|
||||
statuses: {
|
||||
draft: 'مسودة',
|
||||
sent: 'مُرسلة',
|
||||
paid: 'مدفوعة',
|
||||
overdue: 'متأخرة',
|
||||
cancelled: 'ملغاة',
|
||||
},
|
||||
hourlyRates: 'أسعار الساعة',
|
||||
rate: 'السعر',
|
||||
reminders: 'التذكيرات',
|
||||
},
|
||||
|
||||
// Modules
|
||||
modules: {
|
||||
title: 'الوحدات',
|
||||
enabled: 'مُفعّل',
|
||||
disabled: 'معطّل',
|
||||
enable: 'تفعيل',
|
||||
disable: 'تعطيل',
|
||||
configure: 'تكوين',
|
||||
},
|
||||
|
||||
// Settings
|
||||
settings: {
|
||||
title: 'الإعدادات',
|
||||
profile: 'الملف الشخصي',
|
||||
account: 'الحساب',
|
||||
notifications: 'الإشعارات',
|
||||
security: 'الأمان',
|
||||
language: 'اللغة',
|
||||
theme: 'المظهر',
|
||||
darkMode: 'الوضع الداكن',
|
||||
lightMode: 'الوضع الفاتح',
|
||||
changePassword: 'تغيير كلمة المرور',
|
||||
twoFactor: 'المصادقة الثنائية',
|
||||
lockScreen: 'قفل الشاشة',
|
||||
lockMethod: 'طريقة القفل',
|
||||
pin: 'رمز PIN',
|
||||
pattern: 'نمط',
|
||||
},
|
||||
|
||||
// Help
|
||||
help: {
|
||||
title: 'المساعدة والدعم',
|
||||
faq: 'الأسئلة الشائعة',
|
||||
contact: 'اتصل بنا',
|
||||
documentation: 'التوثيق',
|
||||
tutorials: 'الدروس',
|
||||
feedback: 'ملاحظات',
|
||||
},
|
||||
|
||||
// Messages
|
||||
messages: {
|
||||
success: 'نجاح',
|
||||
error: 'خطأ',
|
||||
warning: 'تحذير',
|
||||
info: 'معلومات',
|
||||
saved: 'تم الحفظ',
|
||||
deleted: 'تم الحذف',
|
||||
updated: 'تم التحديث',
|
||||
created: 'تم الإنشاء',
|
||||
confirmDelete: 'هل أنت متأكد من أنك تريد حذف هذا؟',
|
||||
noData: 'لا توجد بيانات متاحة',
|
||||
loading: 'جاري التحميل...',
|
||||
required: 'حقل مطلوب',
|
||||
invalid: 'إدخال غير صالح',
|
||||
},
|
||||
|
||||
// Time
|
||||
time: {
|
||||
today: 'اليوم',
|
||||
yesterday: 'أمس',
|
||||
tomorrow: 'غداً',
|
||||
thisWeek: 'هذا الأسبوع',
|
||||
lastWeek: 'الأسبوع الماضي',
|
||||
thisMonth: 'هذا الشهر',
|
||||
lastMonth: 'الشهر الماضي',
|
||||
days: 'أيام',
|
||||
hours: 'ساعات',
|
||||
minutes: 'دقائق',
|
||||
},
|
||||
}
|
||||
434
src/locales/de.ts
Normal file
434
src/locales/de.ts
Normal file
@@ -0,0 +1,434 @@
|
||||
export default {
|
||||
// General
|
||||
app: {
|
||||
name: 'SeCu',
|
||||
title: 'Mitarbeiterverwaltung',
|
||||
loading: 'Laden...',
|
||||
save: 'Speichern',
|
||||
cancel: 'Abbrechen',
|
||||
delete: 'Löschen',
|
||||
edit: 'Bearbeiten',
|
||||
add: 'Hinzufügen',
|
||||
search: 'Suchen',
|
||||
filter: 'Filtern',
|
||||
actions: 'Aktionen',
|
||||
close: 'Schließen',
|
||||
confirm: 'Bestätigen',
|
||||
yes: 'Ja',
|
||||
no: 'Nein',
|
||||
back: 'Zurück',
|
||||
next: 'Weiter',
|
||||
submit: 'Absenden',
|
||||
reset: 'Zurücksetzen',
|
||||
export: 'Exportieren',
|
||||
import: 'Importieren',
|
||||
download: 'Herunterladen',
|
||||
upload: 'Hochladen',
|
||||
all: 'Alle',
|
||||
none: 'Keine',
|
||||
status: 'Status',
|
||||
date: 'Datum',
|
||||
time: 'Zeit',
|
||||
from: 'Von',
|
||||
to: 'Bis',
|
||||
total: 'Gesamt',
|
||||
details: 'Details',
|
||||
description: 'Beschreibung',
|
||||
notes: 'Notizen',
|
||||
created: 'Erstellt',
|
||||
updated: 'Aktualisiert',
|
||||
},
|
||||
|
||||
// Auth
|
||||
auth: {
|
||||
login: 'Anmelden',
|
||||
logout: 'Abmelden',
|
||||
register: 'Registrieren',
|
||||
email: 'E-Mail',
|
||||
password: 'Passwort',
|
||||
confirmPassword: 'Passwort bestätigen',
|
||||
forgotPassword: 'Passwort vergessen?',
|
||||
rememberMe: 'Angemeldet bleiben',
|
||||
welcomeBack: 'Willkommen zurück',
|
||||
loginToContinue: 'Melden Sie sich an, um fortzufahren',
|
||||
noAccount: 'Noch kein Konto?',
|
||||
hasAccount: 'Bereits ein Konto?',
|
||||
createOrg: 'Organisation erstellen',
|
||||
orgName: 'Firmenname',
|
||||
firstName: 'Vorname',
|
||||
lastName: 'Nachname',
|
||||
},
|
||||
|
||||
// Navigation
|
||||
nav: {
|
||||
dashboard: 'Dashboard',
|
||||
orders: 'Aufträge',
|
||||
users: 'Mitarbeiter',
|
||||
shifts: 'Schichtplanung',
|
||||
availability: 'Verfügbarkeit',
|
||||
timesheets: 'Stundenzettel',
|
||||
qualifications: 'Qualifikationen',
|
||||
objects: 'Objekte',
|
||||
patrols: 'Rundgänge',
|
||||
incidents: 'Vorfälle',
|
||||
documents: 'Dokumente',
|
||||
vehicles: 'Fahrzeuge',
|
||||
customers: 'Kunden',
|
||||
billing: 'Abrechnung',
|
||||
modules: 'Module',
|
||||
settings: 'Einstellungen',
|
||||
help: 'Hilfe',
|
||||
partnerships: 'Partnerschaften',
|
||||
},
|
||||
|
||||
// Dashboard
|
||||
dashboard: {
|
||||
welcome: 'Willkommen',
|
||||
overview: 'Übersicht',
|
||||
todayOrders: 'Heutige Aufträge',
|
||||
activeEmployees: 'Aktive Mitarbeiter',
|
||||
openIncidents: 'Offene Vorfälle',
|
||||
pendingTimesheets: 'Ausstehende Stundenzettel',
|
||||
recentActivity: 'Letzte Aktivitäten',
|
||||
upcomingShifts: 'Kommende Schichten',
|
||||
expiringQualifications: 'Ablaufende Qualifikationen',
|
||||
quickActions: 'Schnellaktionen',
|
||||
},
|
||||
|
||||
// Orders
|
||||
orders: {
|
||||
title: 'Aufträge',
|
||||
new: 'Neuer Auftrag',
|
||||
orderNumber: 'Auftragsnummer',
|
||||
client: 'Kunde',
|
||||
location: 'Einsatzort',
|
||||
startDate: 'Startdatum',
|
||||
endDate: 'Enddatum',
|
||||
assignedTo: 'Zugewiesen an',
|
||||
priority: 'Priorität',
|
||||
priorities: {
|
||||
low: 'Niedrig',
|
||||
medium: 'Mittel',
|
||||
high: 'Hoch',
|
||||
urgent: 'Dringend',
|
||||
},
|
||||
statuses: {
|
||||
draft: 'Entwurf',
|
||||
scheduled: 'Geplant',
|
||||
active: 'Aktiv',
|
||||
completed: 'Abgeschlossen',
|
||||
cancelled: 'Storniert',
|
||||
},
|
||||
},
|
||||
|
||||
// Users
|
||||
users: {
|
||||
title: 'Mitarbeiter',
|
||||
new: 'Neuer Mitarbeiter',
|
||||
employee: 'Mitarbeiter',
|
||||
employees: 'Mitarbeiter',
|
||||
role: 'Rolle',
|
||||
roles: {
|
||||
chef: 'Chef',
|
||||
disponent: 'Disponent',
|
||||
mitarbeiter: 'Mitarbeiter',
|
||||
},
|
||||
phone: 'Telefon',
|
||||
address: 'Adresse',
|
||||
hireDate: 'Einstellungsdatum',
|
||||
active: 'Aktiv',
|
||||
inactive: 'Inaktiv',
|
||||
},
|
||||
|
||||
// Shifts
|
||||
shifts: {
|
||||
title: 'Schichtplanung',
|
||||
new: 'Neue Schicht',
|
||||
shift: 'Schicht',
|
||||
shiftPlan: 'Schichtplan',
|
||||
morning: 'Frühschicht',
|
||||
afternoon: 'Spätschicht',
|
||||
night: 'Nachtschicht',
|
||||
startTime: 'Startzeit',
|
||||
endTime: 'Endzeit',
|
||||
break: 'Pause',
|
||||
assigned: 'Zugewiesen',
|
||||
unassigned: 'Nicht zugewiesen',
|
||||
swapRequest: 'Tausch anfragen',
|
||||
approve: 'Genehmigen',
|
||||
reject: 'Ablehnen',
|
||||
},
|
||||
|
||||
// Availability
|
||||
availability: {
|
||||
title: 'Verfügbarkeit',
|
||||
available: 'Verfügbar',
|
||||
unavailable: 'Nicht verfügbar',
|
||||
partiallyAvailable: 'Teilweise verfügbar',
|
||||
setAvailability: 'Verfügbarkeit eintragen',
|
||||
reason: 'Grund',
|
||||
vacation: 'Urlaub',
|
||||
sick: 'Krank',
|
||||
training: 'Fortbildung',
|
||||
other: 'Sonstiges',
|
||||
},
|
||||
|
||||
// Timesheets
|
||||
timesheets: {
|
||||
title: 'Stundenzettel',
|
||||
new: 'Neuer Eintrag',
|
||||
hours: 'Stunden',
|
||||
totalHours: 'Gesamtstunden',
|
||||
workDate: 'Arbeitstag',
|
||||
checkIn: 'Einstempeln',
|
||||
checkOut: 'Ausstempeln',
|
||||
breakTime: 'Pausenzeit',
|
||||
overtime: 'Überstunden',
|
||||
upload: 'Stundenzettel hochladen',
|
||||
statuses: {
|
||||
pending: 'Ausstehend',
|
||||
approved: 'Genehmigt',
|
||||
rejected: 'Abgelehnt',
|
||||
},
|
||||
},
|
||||
|
||||
// Qualifications
|
||||
qualifications: {
|
||||
title: 'Qualifikationen',
|
||||
new: 'Neue Qualifikation',
|
||||
type: 'Art',
|
||||
types: {
|
||||
'34a': '§34a Sachkundeprüfung',
|
||||
'first_aid': 'Erste-Hilfe-Kurs',
|
||||
'fire_safety': 'Brandschutzhelfer',
|
||||
'security_check': 'Sicherheitsüberprüfung',
|
||||
'drivers_license': 'Führerschein',
|
||||
'other': 'Sonstige',
|
||||
},
|
||||
issueDate: 'Ausstellungsdatum',
|
||||
expiryDate: 'Ablaufdatum',
|
||||
issuedBy: 'Ausgestellt von',
|
||||
valid: 'Gültig',
|
||||
expired: 'Abgelaufen',
|
||||
expiringSoon: 'Läuft bald ab',
|
||||
daysUntilExpiry: 'Tage bis Ablauf',
|
||||
reminder: 'Erinnerung',
|
||||
},
|
||||
|
||||
// Objects
|
||||
objects: {
|
||||
title: 'Objekte',
|
||||
new: 'Neues Objekt',
|
||||
object: 'Objekt',
|
||||
name: 'Name',
|
||||
address: 'Adresse',
|
||||
contact: 'Ansprechpartner',
|
||||
phone: 'Telefon',
|
||||
instructions: 'Dienstanweisungen',
|
||||
documents: 'Dokumente',
|
||||
accessInfo: 'Zugangsinformationen',
|
||||
},
|
||||
|
||||
// Patrols
|
||||
patrols: {
|
||||
title: 'Rundgänge',
|
||||
new: 'Neuer Rundgang',
|
||||
checkpoint: 'Checkpoint',
|
||||
checkpoints: 'Checkpoints',
|
||||
route: 'Route',
|
||||
routes: 'Routen',
|
||||
log: 'Protokoll',
|
||||
logs: 'Protokolle',
|
||||
scanned: 'Gescannt',
|
||||
missed: 'Verpasst',
|
||||
scanTime: 'Scan-Zeit',
|
||||
expectedTime: 'Erwartete Zeit',
|
||||
deviation: 'Abweichung',
|
||||
},
|
||||
|
||||
// Incidents
|
||||
incidents: {
|
||||
title: 'Vorfälle',
|
||||
new: 'Neuer Vorfall',
|
||||
incident: 'Vorfall',
|
||||
category: 'Kategorie',
|
||||
categories: {
|
||||
theft: 'Diebstahl',
|
||||
vandalism: 'Vandalismus',
|
||||
trespassing: 'Hausfriedensbruch',
|
||||
fire: 'Brand',
|
||||
medical: 'Medizinischer Notfall',
|
||||
technical: 'Technisches Problem',
|
||||
other: 'Sonstiges',
|
||||
},
|
||||
severity: 'Schweregrad',
|
||||
severities: {
|
||||
low: 'Niedrig',
|
||||
medium: 'Mittel',
|
||||
high: 'Hoch',
|
||||
critical: 'Kritisch',
|
||||
},
|
||||
reporter: 'Gemeldet von',
|
||||
location: 'Ort',
|
||||
witnesses: 'Zeugen',
|
||||
attachments: 'Anhänge',
|
||||
resolved: 'Gelöst',
|
||||
unresolved: 'Ungelöst',
|
||||
},
|
||||
|
||||
// Documents
|
||||
documents: {
|
||||
title: 'Dokumente',
|
||||
new: 'Neues Dokument',
|
||||
document: 'Dokument',
|
||||
category: 'Kategorie',
|
||||
categories: {
|
||||
contract: 'Vertrag',
|
||||
certificate: 'Zertifikat',
|
||||
policy: 'Richtlinie',
|
||||
manual: 'Handbuch',
|
||||
form: 'Formular',
|
||||
other: 'Sonstiges',
|
||||
},
|
||||
uploadDate: 'Hochgeladen am',
|
||||
fileType: 'Dateityp',
|
||||
fileSize: 'Dateigröße',
|
||||
mandatory: 'Pflichtdokument',
|
||||
acknowledged: 'Bestätigt',
|
||||
acknowledgement: 'Kenntnisnahme',
|
||||
},
|
||||
|
||||
// Vehicles
|
||||
vehicles: {
|
||||
title: 'Fahrzeuge',
|
||||
new: 'Neues Fahrzeug',
|
||||
vehicle: 'Fahrzeug',
|
||||
licensePlate: 'Kennzeichen',
|
||||
make: 'Marke',
|
||||
model: 'Modell',
|
||||
year: 'Baujahr',
|
||||
mileage: 'Kilometerstand',
|
||||
fuelLevel: 'Tankstand',
|
||||
status: 'Status',
|
||||
statuses: {
|
||||
available: 'Verfügbar',
|
||||
inUse: 'In Benutzung',
|
||||
maintenance: 'Wartung',
|
||||
outOfService: 'Außer Betrieb',
|
||||
},
|
||||
booking: 'Buchung',
|
||||
bookings: 'Buchungen',
|
||||
maintenance: 'Wartung',
|
||||
nextService: 'Nächste Wartung',
|
||||
},
|
||||
|
||||
// Customers
|
||||
customers: {
|
||||
title: 'Kunden',
|
||||
new: 'Neuer Kunde',
|
||||
customer: 'Kunde',
|
||||
company: 'Firma',
|
||||
contact: 'Ansprechpartner',
|
||||
email: 'E-Mail',
|
||||
phone: 'Telefon',
|
||||
address: 'Adresse',
|
||||
contracts: 'Verträge',
|
||||
communication: 'Kommunikation',
|
||||
notes: 'Notizen',
|
||||
},
|
||||
|
||||
// Billing
|
||||
billing: {
|
||||
title: 'Abrechnung',
|
||||
invoices: 'Rechnungen',
|
||||
newInvoice: 'Neue Rechnung',
|
||||
invoice: 'Rechnung',
|
||||
invoiceNumber: 'Rechnungsnummer',
|
||||
amount: 'Betrag',
|
||||
tax: 'MwSt.',
|
||||
subtotal: 'Zwischensumme',
|
||||
total: 'Gesamt',
|
||||
dueDate: 'Fälligkeitsdatum',
|
||||
paidDate: 'Bezahlt am',
|
||||
statuses: {
|
||||
draft: 'Entwurf',
|
||||
sent: 'Versendet',
|
||||
paid: 'Bezahlt',
|
||||
overdue: 'Überfällig',
|
||||
cancelled: 'Storniert',
|
||||
},
|
||||
hourlyRates: 'Stundensätze',
|
||||
rate: 'Satz',
|
||||
reminders: 'Mahnungen',
|
||||
},
|
||||
|
||||
// Modules
|
||||
modules: {
|
||||
title: 'Module',
|
||||
enabled: 'Aktiviert',
|
||||
disabled: 'Deaktiviert',
|
||||
enable: 'Aktivieren',
|
||||
disable: 'Deaktivieren',
|
||||
configure: 'Konfigurieren',
|
||||
},
|
||||
|
||||
// Settings
|
||||
settings: {
|
||||
title: 'Einstellungen',
|
||||
profile: 'Profil',
|
||||
account: 'Konto',
|
||||
notifications: 'Benachrichtigungen',
|
||||
security: 'Sicherheit',
|
||||
language: 'Sprache',
|
||||
theme: 'Design',
|
||||
darkMode: 'Dunkelmodus',
|
||||
lightMode: 'Hellmodus',
|
||||
changePassword: 'Passwort ändern',
|
||||
twoFactor: 'Zwei-Faktor-Authentifizierung',
|
||||
lockScreen: 'Bildschirmsperre',
|
||||
lockMethod: 'Sperrmethode',
|
||||
pin: 'PIN',
|
||||
pattern: 'Muster',
|
||||
},
|
||||
|
||||
// Help
|
||||
help: {
|
||||
title: 'Hilfe & Support',
|
||||
faq: 'Häufige Fragen',
|
||||
contact: 'Kontakt',
|
||||
documentation: 'Dokumentation',
|
||||
tutorials: 'Tutorials',
|
||||
feedback: 'Feedback',
|
||||
},
|
||||
|
||||
// Messages
|
||||
messages: {
|
||||
success: 'Erfolgreich',
|
||||
error: 'Fehler',
|
||||
warning: 'Warnung',
|
||||
info: 'Information',
|
||||
saved: 'Gespeichert',
|
||||
deleted: 'Gelöscht',
|
||||
updated: 'Aktualisiert',
|
||||
created: 'Erstellt',
|
||||
confirmDelete: 'Sind Sie sicher, dass Sie dies löschen möchten?',
|
||||
noData: 'Keine Daten vorhanden',
|
||||
loading: 'Wird geladen...',
|
||||
required: 'Pflichtfeld',
|
||||
invalid: 'Ungültige Eingabe',
|
||||
},
|
||||
|
||||
// Time
|
||||
time: {
|
||||
today: 'Heute',
|
||||
yesterday: 'Gestern',
|
||||
tomorrow: 'Morgen',
|
||||
thisWeek: 'Diese Woche',
|
||||
lastWeek: 'Letzte Woche',
|
||||
thisMonth: 'Dieser Monat',
|
||||
lastMonth: 'Letzter Monat',
|
||||
days: 'Tage',
|
||||
hours: 'Stunden',
|
||||
minutes: 'Minuten',
|
||||
},
|
||||
}
|
||||
434
src/locales/en.ts
Normal file
434
src/locales/en.ts
Normal file
@@ -0,0 +1,434 @@
|
||||
export default {
|
||||
// General
|
||||
app: {
|
||||
name: 'SeCu',
|
||||
title: 'Employee Management',
|
||||
loading: 'Loading...',
|
||||
save: 'Save',
|
||||
cancel: 'Cancel',
|
||||
delete: 'Delete',
|
||||
edit: 'Edit',
|
||||
add: 'Add',
|
||||
search: 'Search',
|
||||
filter: 'Filter',
|
||||
actions: 'Actions',
|
||||
close: 'Close',
|
||||
confirm: 'Confirm',
|
||||
yes: 'Yes',
|
||||
no: 'No',
|
||||
back: 'Back',
|
||||
next: 'Next',
|
||||
submit: 'Submit',
|
||||
reset: 'Reset',
|
||||
export: 'Export',
|
||||
import: 'Import',
|
||||
download: 'Download',
|
||||
upload: 'Upload',
|
||||
all: 'All',
|
||||
none: 'None',
|
||||
status: 'Status',
|
||||
date: 'Date',
|
||||
time: 'Time',
|
||||
from: 'From',
|
||||
to: 'To',
|
||||
total: 'Total',
|
||||
details: 'Details',
|
||||
description: 'Description',
|
||||
notes: 'Notes',
|
||||
created: 'Created',
|
||||
updated: 'Updated',
|
||||
},
|
||||
|
||||
// Auth
|
||||
auth: {
|
||||
login: 'Login',
|
||||
logout: 'Logout',
|
||||
register: 'Register',
|
||||
email: 'Email',
|
||||
password: 'Password',
|
||||
confirmPassword: 'Confirm Password',
|
||||
forgotPassword: 'Forgot Password?',
|
||||
rememberMe: 'Remember me',
|
||||
welcomeBack: 'Welcome back',
|
||||
loginToContinue: 'Sign in to continue',
|
||||
noAccount: 'No account yet?',
|
||||
hasAccount: 'Already have an account?',
|
||||
createOrg: 'Create Organization',
|
||||
orgName: 'Company Name',
|
||||
firstName: 'First Name',
|
||||
lastName: 'Last Name',
|
||||
},
|
||||
|
||||
// Navigation
|
||||
nav: {
|
||||
dashboard: 'Dashboard',
|
||||
orders: 'Orders',
|
||||
users: 'Employees',
|
||||
shifts: 'Shift Planning',
|
||||
availability: 'Availability',
|
||||
timesheets: 'Timesheets',
|
||||
qualifications: 'Qualifications',
|
||||
objects: 'Objects',
|
||||
patrols: 'Patrols',
|
||||
incidents: 'Incidents',
|
||||
documents: 'Documents',
|
||||
vehicles: 'Vehicles',
|
||||
customers: 'Customers',
|
||||
billing: 'Billing',
|
||||
modules: 'Modules',
|
||||
settings: 'Settings',
|
||||
help: 'Help',
|
||||
partnerships: 'Partnerships',
|
||||
},
|
||||
|
||||
// Dashboard
|
||||
dashboard: {
|
||||
welcome: 'Welcome',
|
||||
overview: 'Overview',
|
||||
todayOrders: "Today's Orders",
|
||||
activeEmployees: 'Active Employees',
|
||||
openIncidents: 'Open Incidents',
|
||||
pendingTimesheets: 'Pending Timesheets',
|
||||
recentActivity: 'Recent Activity',
|
||||
upcomingShifts: 'Upcoming Shifts',
|
||||
expiringQualifications: 'Expiring Qualifications',
|
||||
quickActions: 'Quick Actions',
|
||||
},
|
||||
|
||||
// Orders
|
||||
orders: {
|
||||
title: 'Orders',
|
||||
new: 'New Order',
|
||||
orderNumber: 'Order Number',
|
||||
client: 'Client',
|
||||
location: 'Location',
|
||||
startDate: 'Start Date',
|
||||
endDate: 'End Date',
|
||||
assignedTo: 'Assigned To',
|
||||
priority: 'Priority',
|
||||
priorities: {
|
||||
low: 'Low',
|
||||
medium: 'Medium',
|
||||
high: 'High',
|
||||
urgent: 'Urgent',
|
||||
},
|
||||
statuses: {
|
||||
draft: 'Draft',
|
||||
scheduled: 'Scheduled',
|
||||
active: 'Active',
|
||||
completed: 'Completed',
|
||||
cancelled: 'Cancelled',
|
||||
},
|
||||
},
|
||||
|
||||
// Users
|
||||
users: {
|
||||
title: 'Employees',
|
||||
new: 'New Employee',
|
||||
employee: 'Employee',
|
||||
employees: 'Employees',
|
||||
role: 'Role',
|
||||
roles: {
|
||||
chef: 'Manager',
|
||||
disponent: 'Dispatcher',
|
||||
mitarbeiter: 'Employee',
|
||||
},
|
||||
phone: 'Phone',
|
||||
address: 'Address',
|
||||
hireDate: 'Hire Date',
|
||||
active: 'Active',
|
||||
inactive: 'Inactive',
|
||||
},
|
||||
|
||||
// Shifts
|
||||
shifts: {
|
||||
title: 'Shift Planning',
|
||||
new: 'New Shift',
|
||||
shift: 'Shift',
|
||||
shiftPlan: 'Shift Plan',
|
||||
morning: 'Morning Shift',
|
||||
afternoon: 'Afternoon Shift',
|
||||
night: 'Night Shift',
|
||||
startTime: 'Start Time',
|
||||
endTime: 'End Time',
|
||||
break: 'Break',
|
||||
assigned: 'Assigned',
|
||||
unassigned: 'Unassigned',
|
||||
swapRequest: 'Request Swap',
|
||||
approve: 'Approve',
|
||||
reject: 'Reject',
|
||||
},
|
||||
|
||||
// Availability
|
||||
availability: {
|
||||
title: 'Availability',
|
||||
available: 'Available',
|
||||
unavailable: 'Unavailable',
|
||||
partiallyAvailable: 'Partially Available',
|
||||
setAvailability: 'Set Availability',
|
||||
reason: 'Reason',
|
||||
vacation: 'Vacation',
|
||||
sick: 'Sick',
|
||||
training: 'Training',
|
||||
other: 'Other',
|
||||
},
|
||||
|
||||
// Timesheets
|
||||
timesheets: {
|
||||
title: 'Timesheets',
|
||||
new: 'New Entry',
|
||||
hours: 'Hours',
|
||||
totalHours: 'Total Hours',
|
||||
workDate: 'Work Date',
|
||||
checkIn: 'Check In',
|
||||
checkOut: 'Check Out',
|
||||
breakTime: 'Break Time',
|
||||
overtime: 'Overtime',
|
||||
upload: 'Upload Timesheet',
|
||||
statuses: {
|
||||
pending: 'Pending',
|
||||
approved: 'Approved',
|
||||
rejected: 'Rejected',
|
||||
},
|
||||
},
|
||||
|
||||
// Qualifications
|
||||
qualifications: {
|
||||
title: 'Qualifications',
|
||||
new: 'New Qualification',
|
||||
type: 'Type',
|
||||
types: {
|
||||
'34a': '§34a Security Certificate',
|
||||
'first_aid': 'First Aid Course',
|
||||
'fire_safety': 'Fire Safety',
|
||||
'security_check': 'Security Clearance',
|
||||
'drivers_license': "Driver's License",
|
||||
'other': 'Other',
|
||||
},
|
||||
issueDate: 'Issue Date',
|
||||
expiryDate: 'Expiry Date',
|
||||
issuedBy: 'Issued By',
|
||||
valid: 'Valid',
|
||||
expired: 'Expired',
|
||||
expiringSoon: 'Expiring Soon',
|
||||
daysUntilExpiry: 'Days Until Expiry',
|
||||
reminder: 'Reminder',
|
||||
},
|
||||
|
||||
// Objects
|
||||
objects: {
|
||||
title: 'Objects',
|
||||
new: 'New Object',
|
||||
object: 'Object',
|
||||
name: 'Name',
|
||||
address: 'Address',
|
||||
contact: 'Contact Person',
|
||||
phone: 'Phone',
|
||||
instructions: 'Instructions',
|
||||
documents: 'Documents',
|
||||
accessInfo: 'Access Information',
|
||||
},
|
||||
|
||||
// Patrols
|
||||
patrols: {
|
||||
title: 'Patrols',
|
||||
new: 'New Patrol',
|
||||
checkpoint: 'Checkpoint',
|
||||
checkpoints: 'Checkpoints',
|
||||
route: 'Route',
|
||||
routes: 'Routes',
|
||||
log: 'Log',
|
||||
logs: 'Logs',
|
||||
scanned: 'Scanned',
|
||||
missed: 'Missed',
|
||||
scanTime: 'Scan Time',
|
||||
expectedTime: 'Expected Time',
|
||||
deviation: 'Deviation',
|
||||
},
|
||||
|
||||
// Incidents
|
||||
incidents: {
|
||||
title: 'Incidents',
|
||||
new: 'New Incident',
|
||||
incident: 'Incident',
|
||||
category: 'Category',
|
||||
categories: {
|
||||
theft: 'Theft',
|
||||
vandalism: 'Vandalism',
|
||||
trespassing: 'Trespassing',
|
||||
fire: 'Fire',
|
||||
medical: 'Medical Emergency',
|
||||
technical: 'Technical Issue',
|
||||
other: 'Other',
|
||||
},
|
||||
severity: 'Severity',
|
||||
severities: {
|
||||
low: 'Low',
|
||||
medium: 'Medium',
|
||||
high: 'High',
|
||||
critical: 'Critical',
|
||||
},
|
||||
reporter: 'Reported By',
|
||||
location: 'Location',
|
||||
witnesses: 'Witnesses',
|
||||
attachments: 'Attachments',
|
||||
resolved: 'Resolved',
|
||||
unresolved: 'Unresolved',
|
||||
},
|
||||
|
||||
// Documents
|
||||
documents: {
|
||||
title: 'Documents',
|
||||
new: 'New Document',
|
||||
document: 'Document',
|
||||
category: 'Category',
|
||||
categories: {
|
||||
contract: 'Contract',
|
||||
certificate: 'Certificate',
|
||||
policy: 'Policy',
|
||||
manual: 'Manual',
|
||||
form: 'Form',
|
||||
other: 'Other',
|
||||
},
|
||||
uploadDate: 'Upload Date',
|
||||
fileType: 'File Type',
|
||||
fileSize: 'File Size',
|
||||
mandatory: 'Mandatory',
|
||||
acknowledged: 'Acknowledged',
|
||||
acknowledgement: 'Acknowledgement',
|
||||
},
|
||||
|
||||
// Vehicles
|
||||
vehicles: {
|
||||
title: 'Vehicles',
|
||||
new: 'New Vehicle',
|
||||
vehicle: 'Vehicle',
|
||||
licensePlate: 'License Plate',
|
||||
make: 'Make',
|
||||
model: 'Model',
|
||||
year: 'Year',
|
||||
mileage: 'Mileage',
|
||||
fuelLevel: 'Fuel Level',
|
||||
status: 'Status',
|
||||
statuses: {
|
||||
available: 'Available',
|
||||
inUse: 'In Use',
|
||||
maintenance: 'Maintenance',
|
||||
outOfService: 'Out of Service',
|
||||
},
|
||||
booking: 'Booking',
|
||||
bookings: 'Bookings',
|
||||
maintenance: 'Maintenance',
|
||||
nextService: 'Next Service',
|
||||
},
|
||||
|
||||
// Customers
|
||||
customers: {
|
||||
title: 'Customers',
|
||||
new: 'New Customer',
|
||||
customer: 'Customer',
|
||||
company: 'Company',
|
||||
contact: 'Contact Person',
|
||||
email: 'Email',
|
||||
phone: 'Phone',
|
||||
address: 'Address',
|
||||
contracts: 'Contracts',
|
||||
communication: 'Communication',
|
||||
notes: 'Notes',
|
||||
},
|
||||
|
||||
// Billing
|
||||
billing: {
|
||||
title: 'Billing',
|
||||
invoices: 'Invoices',
|
||||
newInvoice: 'New Invoice',
|
||||
invoice: 'Invoice',
|
||||
invoiceNumber: 'Invoice Number',
|
||||
amount: 'Amount',
|
||||
tax: 'Tax',
|
||||
subtotal: 'Subtotal',
|
||||
total: 'Total',
|
||||
dueDate: 'Due Date',
|
||||
paidDate: 'Paid Date',
|
||||
statuses: {
|
||||
draft: 'Draft',
|
||||
sent: 'Sent',
|
||||
paid: 'Paid',
|
||||
overdue: 'Overdue',
|
||||
cancelled: 'Cancelled',
|
||||
},
|
||||
hourlyRates: 'Hourly Rates',
|
||||
rate: 'Rate',
|
||||
reminders: 'Reminders',
|
||||
},
|
||||
|
||||
// Modules
|
||||
modules: {
|
||||
title: 'Modules',
|
||||
enabled: 'Enabled',
|
||||
disabled: 'Disabled',
|
||||
enable: 'Enable',
|
||||
disable: 'Disable',
|
||||
configure: 'Configure',
|
||||
},
|
||||
|
||||
// Settings
|
||||
settings: {
|
||||
title: 'Settings',
|
||||
profile: 'Profile',
|
||||
account: 'Account',
|
||||
notifications: 'Notifications',
|
||||
security: 'Security',
|
||||
language: 'Language',
|
||||
theme: 'Theme',
|
||||
darkMode: 'Dark Mode',
|
||||
lightMode: 'Light Mode',
|
||||
changePassword: 'Change Password',
|
||||
twoFactor: 'Two-Factor Authentication',
|
||||
lockScreen: 'Lock Screen',
|
||||
lockMethod: 'Lock Method',
|
||||
pin: 'PIN',
|
||||
pattern: 'Pattern',
|
||||
},
|
||||
|
||||
// Help
|
||||
help: {
|
||||
title: 'Help & Support',
|
||||
faq: 'FAQ',
|
||||
contact: 'Contact',
|
||||
documentation: 'Documentation',
|
||||
tutorials: 'Tutorials',
|
||||
feedback: 'Feedback',
|
||||
},
|
||||
|
||||
// Messages
|
||||
messages: {
|
||||
success: 'Success',
|
||||
error: 'Error',
|
||||
warning: 'Warning',
|
||||
info: 'Information',
|
||||
saved: 'Saved',
|
||||
deleted: 'Deleted',
|
||||
updated: 'Updated',
|
||||
created: 'Created',
|
||||
confirmDelete: 'Are you sure you want to delete this?',
|
||||
noData: 'No data available',
|
||||
loading: 'Loading...',
|
||||
required: 'Required field',
|
||||
invalid: 'Invalid input',
|
||||
},
|
||||
|
||||
// Time
|
||||
time: {
|
||||
today: 'Today',
|
||||
yesterday: 'Yesterday',
|
||||
tomorrow: 'Tomorrow',
|
||||
thisWeek: 'This Week',
|
||||
lastWeek: 'Last Week',
|
||||
thisMonth: 'This Month',
|
||||
lastMonth: 'Last Month',
|
||||
days: 'days',
|
||||
hours: 'hours',
|
||||
minutes: 'minutes',
|
||||
},
|
||||
}
|
||||
434
src/locales/es.ts
Normal file
434
src/locales/es.ts
Normal file
@@ -0,0 +1,434 @@
|
||||
export default {
|
||||
// General
|
||||
app: {
|
||||
name: 'SeCu',
|
||||
title: 'Gestión de Empleados',
|
||||
loading: 'Cargando...',
|
||||
save: 'Guardar',
|
||||
cancel: 'Cancelar',
|
||||
delete: 'Eliminar',
|
||||
edit: 'Editar',
|
||||
add: 'Añadir',
|
||||
search: 'Buscar',
|
||||
filter: 'Filtrar',
|
||||
actions: 'Acciones',
|
||||
close: 'Cerrar',
|
||||
confirm: 'Confirmar',
|
||||
yes: 'Sí',
|
||||
no: 'No',
|
||||
back: 'Atrás',
|
||||
next: 'Siguiente',
|
||||
submit: 'Enviar',
|
||||
reset: 'Restablecer',
|
||||
export: 'Exportar',
|
||||
import: 'Importar',
|
||||
download: 'Descargar',
|
||||
upload: 'Subir',
|
||||
all: 'Todos',
|
||||
none: 'Ninguno',
|
||||
status: 'Estado',
|
||||
date: 'Fecha',
|
||||
time: 'Hora',
|
||||
from: 'Desde',
|
||||
to: 'Hasta',
|
||||
total: 'Total',
|
||||
details: 'Detalles',
|
||||
description: 'Descripción',
|
||||
notes: 'Notas',
|
||||
created: 'Creado',
|
||||
updated: 'Actualizado',
|
||||
},
|
||||
|
||||
// Auth
|
||||
auth: {
|
||||
login: 'Iniciar sesión',
|
||||
logout: 'Cerrar sesión',
|
||||
register: 'Registrarse',
|
||||
email: 'Correo electrónico',
|
||||
password: 'Contraseña',
|
||||
confirmPassword: 'Confirmar contraseña',
|
||||
forgotPassword: '¿Olvidaste tu contraseña?',
|
||||
rememberMe: 'Recordarme',
|
||||
welcomeBack: 'Bienvenido de nuevo',
|
||||
loginToContinue: 'Inicia sesión para continuar',
|
||||
noAccount: '¿No tienes cuenta?',
|
||||
hasAccount: '¿Ya tienes una cuenta?',
|
||||
createOrg: 'Crear organización',
|
||||
orgName: 'Nombre de la empresa',
|
||||
firstName: 'Nombre',
|
||||
lastName: 'Apellido',
|
||||
},
|
||||
|
||||
// Navigation
|
||||
nav: {
|
||||
dashboard: 'Panel',
|
||||
orders: 'Pedidos',
|
||||
users: 'Empleados',
|
||||
shifts: 'Planificación de turnos',
|
||||
availability: 'Disponibilidad',
|
||||
timesheets: 'Hojas de horas',
|
||||
qualifications: 'Cualificaciones',
|
||||
objects: 'Objetos',
|
||||
patrols: 'Rondas',
|
||||
incidents: 'Incidentes',
|
||||
documents: 'Documentos',
|
||||
vehicles: 'Vehículos',
|
||||
customers: 'Clientes',
|
||||
billing: 'Facturación',
|
||||
modules: 'Módulos',
|
||||
settings: 'Configuración',
|
||||
help: 'Ayuda',
|
||||
partnerships: 'Asociaciones',
|
||||
},
|
||||
|
||||
// Dashboard
|
||||
dashboard: {
|
||||
welcome: 'Bienvenido',
|
||||
overview: 'Resumen',
|
||||
todayOrders: 'Pedidos de hoy',
|
||||
activeEmployees: 'Empleados activos',
|
||||
openIncidents: 'Incidentes abiertos',
|
||||
pendingTimesheets: 'Hojas de horas pendientes',
|
||||
recentActivity: 'Actividad reciente',
|
||||
upcomingShifts: 'Próximos turnos',
|
||||
expiringQualifications: 'Cualificaciones por vencer',
|
||||
quickActions: 'Acciones rápidas',
|
||||
},
|
||||
|
||||
// Orders
|
||||
orders: {
|
||||
title: 'Pedidos',
|
||||
new: 'Nuevo pedido',
|
||||
orderNumber: 'Número de pedido',
|
||||
client: 'Cliente',
|
||||
location: 'Ubicación',
|
||||
startDate: 'Fecha de inicio',
|
||||
endDate: 'Fecha de fin',
|
||||
assignedTo: 'Asignado a',
|
||||
priority: 'Prioridad',
|
||||
priorities: {
|
||||
low: 'Baja',
|
||||
medium: 'Media',
|
||||
high: 'Alta',
|
||||
urgent: 'Urgente',
|
||||
},
|
||||
statuses: {
|
||||
draft: 'Borrador',
|
||||
scheduled: 'Programado',
|
||||
active: 'Activo',
|
||||
completed: 'Completado',
|
||||
cancelled: 'Cancelado',
|
||||
},
|
||||
},
|
||||
|
||||
// Users
|
||||
users: {
|
||||
title: 'Empleados',
|
||||
new: 'Nuevo empleado',
|
||||
employee: 'Empleado',
|
||||
employees: 'Empleados',
|
||||
role: 'Rol',
|
||||
roles: {
|
||||
chef: 'Gerente',
|
||||
disponent: 'Despachador',
|
||||
mitarbeiter: 'Empleado',
|
||||
},
|
||||
phone: 'Teléfono',
|
||||
address: 'Dirección',
|
||||
hireDate: 'Fecha de contratación',
|
||||
active: 'Activo',
|
||||
inactive: 'Inactivo',
|
||||
},
|
||||
|
||||
// Shifts
|
||||
shifts: {
|
||||
title: 'Planificación de turnos',
|
||||
new: 'Nuevo turno',
|
||||
shift: 'Turno',
|
||||
shiftPlan: 'Plan de turnos',
|
||||
morning: 'Turno de mañana',
|
||||
afternoon: 'Turno de tarde',
|
||||
night: 'Turno de noche',
|
||||
startTime: 'Hora de inicio',
|
||||
endTime: 'Hora de fin',
|
||||
break: 'Descanso',
|
||||
assigned: 'Asignado',
|
||||
unassigned: 'Sin asignar',
|
||||
swapRequest: 'Solicitar cambio',
|
||||
approve: 'Aprobar',
|
||||
reject: 'Rechazar',
|
||||
},
|
||||
|
||||
// Availability
|
||||
availability: {
|
||||
title: 'Disponibilidad',
|
||||
available: 'Disponible',
|
||||
unavailable: 'No disponible',
|
||||
partiallyAvailable: 'Parcialmente disponible',
|
||||
setAvailability: 'Establecer disponibilidad',
|
||||
reason: 'Motivo',
|
||||
vacation: 'Vacaciones',
|
||||
sick: 'Enfermedad',
|
||||
training: 'Formación',
|
||||
other: 'Otro',
|
||||
},
|
||||
|
||||
// Timesheets
|
||||
timesheets: {
|
||||
title: 'Hojas de horas',
|
||||
new: 'Nueva entrada',
|
||||
hours: 'Horas',
|
||||
totalHours: 'Horas totales',
|
||||
workDate: 'Día de trabajo',
|
||||
checkIn: 'Entrada',
|
||||
checkOut: 'Salida',
|
||||
breakTime: 'Tiempo de descanso',
|
||||
overtime: 'Horas extra',
|
||||
upload: 'Subir hoja de horas',
|
||||
statuses: {
|
||||
pending: 'Pendiente',
|
||||
approved: 'Aprobado',
|
||||
rejected: 'Rechazado',
|
||||
},
|
||||
},
|
||||
|
||||
// Qualifications
|
||||
qualifications: {
|
||||
title: 'Cualificaciones',
|
||||
new: 'Nueva cualificación',
|
||||
type: 'Tipo',
|
||||
types: {
|
||||
'34a': 'Certificado de seguridad §34a',
|
||||
'first_aid': 'Curso de primeros auxilios',
|
||||
'fire_safety': 'Seguridad contra incendios',
|
||||
'security_check': 'Verificación de seguridad',
|
||||
'drivers_license': 'Licencia de conducir',
|
||||
'other': 'Otro',
|
||||
},
|
||||
issueDate: 'Fecha de emisión',
|
||||
expiryDate: 'Fecha de vencimiento',
|
||||
issuedBy: 'Emitido por',
|
||||
valid: 'Válido',
|
||||
expired: 'Vencido',
|
||||
expiringSoon: 'Próximo a vencer',
|
||||
daysUntilExpiry: 'Días hasta el vencimiento',
|
||||
reminder: 'Recordatorio',
|
||||
},
|
||||
|
||||
// Objects
|
||||
objects: {
|
||||
title: 'Objetos',
|
||||
new: 'Nuevo objeto',
|
||||
object: 'Objeto',
|
||||
name: 'Nombre',
|
||||
address: 'Dirección',
|
||||
contact: 'Persona de contacto',
|
||||
phone: 'Teléfono',
|
||||
instructions: 'Instrucciones',
|
||||
documents: 'Documentos',
|
||||
accessInfo: 'Información de acceso',
|
||||
},
|
||||
|
||||
// Patrols
|
||||
patrols: {
|
||||
title: 'Rondas',
|
||||
new: 'Nueva ronda',
|
||||
checkpoint: 'Punto de control',
|
||||
checkpoints: 'Puntos de control',
|
||||
route: 'Ruta',
|
||||
routes: 'Rutas',
|
||||
log: 'Registro',
|
||||
logs: 'Registros',
|
||||
scanned: 'Escaneado',
|
||||
missed: 'Perdido',
|
||||
scanTime: 'Hora de escaneo',
|
||||
expectedTime: 'Hora esperada',
|
||||
deviation: 'Desviación',
|
||||
},
|
||||
|
||||
// Incidents
|
||||
incidents: {
|
||||
title: 'Incidentes',
|
||||
new: 'Nuevo incidente',
|
||||
incident: 'Incidente',
|
||||
category: 'Categoría',
|
||||
categories: {
|
||||
theft: 'Robo',
|
||||
vandalism: 'Vandalismo',
|
||||
trespassing: 'Allanamiento',
|
||||
fire: 'Incendio',
|
||||
medical: 'Emergencia médica',
|
||||
technical: 'Problema técnico',
|
||||
other: 'Otro',
|
||||
},
|
||||
severity: 'Gravedad',
|
||||
severities: {
|
||||
low: 'Baja',
|
||||
medium: 'Media',
|
||||
high: 'Alta',
|
||||
critical: 'Crítica',
|
||||
},
|
||||
reporter: 'Reportado por',
|
||||
location: 'Ubicación',
|
||||
witnesses: 'Testigos',
|
||||
attachments: 'Adjuntos',
|
||||
resolved: 'Resuelto',
|
||||
unresolved: 'Sin resolver',
|
||||
},
|
||||
|
||||
// Documents
|
||||
documents: {
|
||||
title: 'Documentos',
|
||||
new: 'Nuevo documento',
|
||||
document: 'Documento',
|
||||
category: 'Categoría',
|
||||
categories: {
|
||||
contract: 'Contrato',
|
||||
certificate: 'Certificado',
|
||||
policy: 'Política',
|
||||
manual: 'Manual',
|
||||
form: 'Formulario',
|
||||
other: 'Otro',
|
||||
},
|
||||
uploadDate: 'Fecha de subida',
|
||||
fileType: 'Tipo de archivo',
|
||||
fileSize: 'Tamaño de archivo',
|
||||
mandatory: 'Obligatorio',
|
||||
acknowledged: 'Reconocido',
|
||||
acknowledgement: 'Reconocimiento',
|
||||
},
|
||||
|
||||
// Vehicles
|
||||
vehicles: {
|
||||
title: 'Vehículos',
|
||||
new: 'Nuevo vehículo',
|
||||
vehicle: 'Vehículo',
|
||||
licensePlate: 'Matrícula',
|
||||
make: 'Marca',
|
||||
model: 'Modelo',
|
||||
year: 'Año',
|
||||
mileage: 'Kilometraje',
|
||||
fuelLevel: 'Nivel de combustible',
|
||||
status: 'Estado',
|
||||
statuses: {
|
||||
available: 'Disponible',
|
||||
inUse: 'En uso',
|
||||
maintenance: 'Mantenimiento',
|
||||
outOfService: 'Fuera de servicio',
|
||||
},
|
||||
booking: 'Reserva',
|
||||
bookings: 'Reservas',
|
||||
maintenance: 'Mantenimiento',
|
||||
nextService: 'Próximo servicio',
|
||||
},
|
||||
|
||||
// Customers
|
||||
customers: {
|
||||
title: 'Clientes',
|
||||
new: 'Nuevo cliente',
|
||||
customer: 'Cliente',
|
||||
company: 'Empresa',
|
||||
contact: 'Persona de contacto',
|
||||
email: 'Correo electrónico',
|
||||
phone: 'Teléfono',
|
||||
address: 'Dirección',
|
||||
contracts: 'Contratos',
|
||||
communication: 'Comunicación',
|
||||
notes: 'Notas',
|
||||
},
|
||||
|
||||
// Billing
|
||||
billing: {
|
||||
title: 'Facturación',
|
||||
invoices: 'Facturas',
|
||||
newInvoice: 'Nueva factura',
|
||||
invoice: 'Factura',
|
||||
invoiceNumber: 'Número de factura',
|
||||
amount: 'Importe',
|
||||
tax: 'IVA',
|
||||
subtotal: 'Subtotal',
|
||||
total: 'Total',
|
||||
dueDate: 'Fecha de vencimiento',
|
||||
paidDate: 'Fecha de pago',
|
||||
statuses: {
|
||||
draft: 'Borrador',
|
||||
sent: 'Enviado',
|
||||
paid: 'Pagado',
|
||||
overdue: 'Vencido',
|
||||
cancelled: 'Cancelado',
|
||||
},
|
||||
hourlyRates: 'Tarifas por hora',
|
||||
rate: 'Tarifa',
|
||||
reminders: 'Recordatorios',
|
||||
},
|
||||
|
||||
// Modules
|
||||
modules: {
|
||||
title: 'Módulos',
|
||||
enabled: 'Activado',
|
||||
disabled: 'Desactivado',
|
||||
enable: 'Activar',
|
||||
disable: 'Desactivar',
|
||||
configure: 'Configurar',
|
||||
},
|
||||
|
||||
// Settings
|
||||
settings: {
|
||||
title: 'Configuración',
|
||||
profile: 'Perfil',
|
||||
account: 'Cuenta',
|
||||
notifications: 'Notificaciones',
|
||||
security: 'Seguridad',
|
||||
language: 'Idioma',
|
||||
theme: 'Tema',
|
||||
darkMode: 'Modo oscuro',
|
||||
lightMode: 'Modo claro',
|
||||
changePassword: 'Cambiar contraseña',
|
||||
twoFactor: 'Autenticación de dos factores',
|
||||
lockScreen: 'Pantalla de bloqueo',
|
||||
lockMethod: 'Método de bloqueo',
|
||||
pin: 'PIN',
|
||||
pattern: 'Patrón',
|
||||
},
|
||||
|
||||
// Help
|
||||
help: {
|
||||
title: 'Ayuda y soporte',
|
||||
faq: 'Preguntas frecuentes',
|
||||
contact: 'Contacto',
|
||||
documentation: 'Documentación',
|
||||
tutorials: 'Tutoriales',
|
||||
feedback: 'Comentarios',
|
||||
},
|
||||
|
||||
// Messages
|
||||
messages: {
|
||||
success: 'Éxito',
|
||||
error: 'Error',
|
||||
warning: 'Advertencia',
|
||||
info: 'Información',
|
||||
saved: 'Guardado',
|
||||
deleted: 'Eliminado',
|
||||
updated: 'Actualizado',
|
||||
created: 'Creado',
|
||||
confirmDelete: '¿Estás seguro de que quieres eliminar esto?',
|
||||
noData: 'No hay datos disponibles',
|
||||
loading: 'Cargando...',
|
||||
required: 'Campo obligatorio',
|
||||
invalid: 'Entrada inválida',
|
||||
},
|
||||
|
||||
// Time
|
||||
time: {
|
||||
today: 'Hoy',
|
||||
yesterday: 'Ayer',
|
||||
tomorrow: 'Mañana',
|
||||
thisWeek: 'Esta semana',
|
||||
lastWeek: 'La semana pasada',
|
||||
thisMonth: 'Este mes',
|
||||
lastMonth: 'El mes pasado',
|
||||
days: 'días',
|
||||
hours: 'horas',
|
||||
minutes: 'minutos',
|
||||
},
|
||||
}
|
||||
434
src/locales/fr.ts
Normal file
434
src/locales/fr.ts
Normal file
@@ -0,0 +1,434 @@
|
||||
export default {
|
||||
// General
|
||||
app: {
|
||||
name: 'SeCu',
|
||||
title: 'Gestion des employés',
|
||||
loading: 'Chargement...',
|
||||
save: 'Enregistrer',
|
||||
cancel: 'Annuler',
|
||||
delete: 'Supprimer',
|
||||
edit: 'Modifier',
|
||||
add: 'Ajouter',
|
||||
search: 'Rechercher',
|
||||
filter: 'Filtrer',
|
||||
actions: 'Actions',
|
||||
close: 'Fermer',
|
||||
confirm: 'Confirmer',
|
||||
yes: 'Oui',
|
||||
no: 'Non',
|
||||
back: 'Retour',
|
||||
next: 'Suivant',
|
||||
submit: 'Soumettre',
|
||||
reset: 'Réinitialiser',
|
||||
export: 'Exporter',
|
||||
import: 'Importer',
|
||||
download: 'Télécharger',
|
||||
upload: 'Téléverser',
|
||||
all: 'Tous',
|
||||
none: 'Aucun',
|
||||
status: 'Statut',
|
||||
date: 'Date',
|
||||
time: 'Heure',
|
||||
from: 'De',
|
||||
to: 'À',
|
||||
total: 'Total',
|
||||
details: 'Détails',
|
||||
description: 'Description',
|
||||
notes: 'Notes',
|
||||
created: 'Créé',
|
||||
updated: 'Mis à jour',
|
||||
},
|
||||
|
||||
// Auth
|
||||
auth: {
|
||||
login: 'Connexion',
|
||||
logout: 'Déconnexion',
|
||||
register: "S'inscrire",
|
||||
email: 'E-mail',
|
||||
password: 'Mot de passe',
|
||||
confirmPassword: 'Confirmer le mot de passe',
|
||||
forgotPassword: 'Mot de passe oublié ?',
|
||||
rememberMe: 'Se souvenir de moi',
|
||||
welcomeBack: 'Bon retour',
|
||||
loginToContinue: 'Connectez-vous pour continuer',
|
||||
noAccount: "Pas encore de compte ?",
|
||||
hasAccount: 'Déjà un compte ?',
|
||||
createOrg: 'Créer une organisation',
|
||||
orgName: "Nom de l'entreprise",
|
||||
firstName: 'Prénom',
|
||||
lastName: 'Nom',
|
||||
},
|
||||
|
||||
// Navigation
|
||||
nav: {
|
||||
dashboard: 'Tableau de bord',
|
||||
orders: 'Commandes',
|
||||
users: 'Employés',
|
||||
shifts: 'Planification des équipes',
|
||||
availability: 'Disponibilité',
|
||||
timesheets: 'Feuilles de temps',
|
||||
qualifications: 'Qualifications',
|
||||
objects: 'Objets',
|
||||
patrols: 'Rondes',
|
||||
incidents: 'Incidents',
|
||||
documents: 'Documents',
|
||||
vehicles: 'Véhicules',
|
||||
customers: 'Clients',
|
||||
billing: 'Facturation',
|
||||
modules: 'Modules',
|
||||
settings: 'Paramètres',
|
||||
help: 'Aide',
|
||||
partnerships: 'Partenariats',
|
||||
},
|
||||
|
||||
// Dashboard
|
||||
dashboard: {
|
||||
welcome: 'Bienvenue',
|
||||
overview: 'Aperçu',
|
||||
todayOrders: "Commandes d'aujourd'hui",
|
||||
activeEmployees: 'Employés actifs',
|
||||
openIncidents: 'Incidents ouverts',
|
||||
pendingTimesheets: 'Feuilles de temps en attente',
|
||||
recentActivity: 'Activité récente',
|
||||
upcomingShifts: 'Équipes à venir',
|
||||
expiringQualifications: 'Qualifications expirant',
|
||||
quickActions: 'Actions rapides',
|
||||
},
|
||||
|
||||
// Orders
|
||||
orders: {
|
||||
title: 'Commandes',
|
||||
new: 'Nouvelle commande',
|
||||
orderNumber: 'Numéro de commande',
|
||||
client: 'Client',
|
||||
location: 'Lieu',
|
||||
startDate: 'Date de début',
|
||||
endDate: 'Date de fin',
|
||||
assignedTo: 'Assigné à',
|
||||
priority: 'Priorité',
|
||||
priorities: {
|
||||
low: 'Basse',
|
||||
medium: 'Moyenne',
|
||||
high: 'Haute',
|
||||
urgent: 'Urgente',
|
||||
},
|
||||
statuses: {
|
||||
draft: 'Brouillon',
|
||||
scheduled: 'Planifié',
|
||||
active: 'Actif',
|
||||
completed: 'Terminé',
|
||||
cancelled: 'Annulé',
|
||||
},
|
||||
},
|
||||
|
||||
// Users
|
||||
users: {
|
||||
title: 'Employés',
|
||||
new: 'Nouvel employé',
|
||||
employee: 'Employé',
|
||||
employees: 'Employés',
|
||||
role: 'Rôle',
|
||||
roles: {
|
||||
chef: 'Responsable',
|
||||
disponent: 'Répartiteur',
|
||||
mitarbeiter: 'Employé',
|
||||
},
|
||||
phone: 'Téléphone',
|
||||
address: 'Adresse',
|
||||
hireDate: "Date d'embauche",
|
||||
active: 'Actif',
|
||||
inactive: 'Inactif',
|
||||
},
|
||||
|
||||
// Shifts
|
||||
shifts: {
|
||||
title: 'Planification des équipes',
|
||||
new: 'Nouvelle équipe',
|
||||
shift: 'Équipe',
|
||||
shiftPlan: 'Plan des équipes',
|
||||
morning: 'Équipe du matin',
|
||||
afternoon: "Équipe de l'après-midi",
|
||||
night: 'Équipe de nuit',
|
||||
startTime: 'Heure de début',
|
||||
endTime: 'Heure de fin',
|
||||
break: 'Pause',
|
||||
assigned: 'Assigné',
|
||||
unassigned: 'Non assigné',
|
||||
swapRequest: 'Demander un échange',
|
||||
approve: 'Approuver',
|
||||
reject: 'Rejeter',
|
||||
},
|
||||
|
||||
// Availability
|
||||
availability: {
|
||||
title: 'Disponibilité',
|
||||
available: 'Disponible',
|
||||
unavailable: 'Non disponible',
|
||||
partiallyAvailable: 'Partiellement disponible',
|
||||
setAvailability: 'Définir la disponibilité',
|
||||
reason: 'Raison',
|
||||
vacation: 'Vacances',
|
||||
sick: 'Maladie',
|
||||
training: 'Formation',
|
||||
other: 'Autre',
|
||||
},
|
||||
|
||||
// Timesheets
|
||||
timesheets: {
|
||||
title: 'Feuilles de temps',
|
||||
new: 'Nouvelle entrée',
|
||||
hours: 'Heures',
|
||||
totalHours: 'Heures totales',
|
||||
workDate: 'Jour de travail',
|
||||
checkIn: 'Pointage entrée',
|
||||
checkOut: 'Pointage sortie',
|
||||
breakTime: 'Temps de pause',
|
||||
overtime: 'Heures supplémentaires',
|
||||
upload: 'Téléverser la feuille de temps',
|
||||
statuses: {
|
||||
pending: 'En attente',
|
||||
approved: 'Approuvé',
|
||||
rejected: 'Rejeté',
|
||||
},
|
||||
},
|
||||
|
||||
// Qualifications
|
||||
qualifications: {
|
||||
title: 'Qualifications',
|
||||
new: 'Nouvelle qualification',
|
||||
type: 'Type',
|
||||
types: {
|
||||
'34a': 'Certificat de sécurité §34a',
|
||||
'first_aid': 'Formation aux premiers secours',
|
||||
'fire_safety': 'Sécurité incendie',
|
||||
'security_check': 'Habilitation sécurité',
|
||||
'drivers_license': 'Permis de conduire',
|
||||
'other': 'Autre',
|
||||
},
|
||||
issueDate: 'Date de délivrance',
|
||||
expiryDate: "Date d'expiration",
|
||||
issuedBy: 'Délivré par',
|
||||
valid: 'Valide',
|
||||
expired: 'Expiré',
|
||||
expiringSoon: 'Expire bientôt',
|
||||
daysUntilExpiry: "Jours avant l'expiration",
|
||||
reminder: 'Rappel',
|
||||
},
|
||||
|
||||
// Objects
|
||||
objects: {
|
||||
title: 'Objets',
|
||||
new: 'Nouvel objet',
|
||||
object: 'Objet',
|
||||
name: 'Nom',
|
||||
address: 'Adresse',
|
||||
contact: 'Personne de contact',
|
||||
phone: 'Téléphone',
|
||||
instructions: 'Instructions',
|
||||
documents: 'Documents',
|
||||
accessInfo: "Informations d'accès",
|
||||
},
|
||||
|
||||
// Patrols
|
||||
patrols: {
|
||||
title: 'Rondes',
|
||||
new: 'Nouvelle ronde',
|
||||
checkpoint: 'Point de contrôle',
|
||||
checkpoints: 'Points de contrôle',
|
||||
route: 'Itinéraire',
|
||||
routes: 'Itinéraires',
|
||||
log: 'Journal',
|
||||
logs: 'Journaux',
|
||||
scanned: 'Scanné',
|
||||
missed: 'Manqué',
|
||||
scanTime: 'Heure du scan',
|
||||
expectedTime: 'Heure prévue',
|
||||
deviation: 'Écart',
|
||||
},
|
||||
|
||||
// Incidents
|
||||
incidents: {
|
||||
title: 'Incidents',
|
||||
new: 'Nouvel incident',
|
||||
incident: 'Incident',
|
||||
category: 'Catégorie',
|
||||
categories: {
|
||||
theft: 'Vol',
|
||||
vandalism: 'Vandalisme',
|
||||
trespassing: 'Intrusion',
|
||||
fire: 'Incendie',
|
||||
medical: 'Urgence médicale',
|
||||
technical: 'Problème technique',
|
||||
other: 'Autre',
|
||||
},
|
||||
severity: 'Gravité',
|
||||
severities: {
|
||||
low: 'Basse',
|
||||
medium: 'Moyenne',
|
||||
high: 'Haute',
|
||||
critical: 'Critique',
|
||||
},
|
||||
reporter: 'Signalé par',
|
||||
location: 'Lieu',
|
||||
witnesses: 'Témoins',
|
||||
attachments: 'Pièces jointes',
|
||||
resolved: 'Résolu',
|
||||
unresolved: 'Non résolu',
|
||||
},
|
||||
|
||||
// Documents
|
||||
documents: {
|
||||
title: 'Documents',
|
||||
new: 'Nouveau document',
|
||||
document: 'Document',
|
||||
category: 'Catégorie',
|
||||
categories: {
|
||||
contract: 'Contrat',
|
||||
certificate: 'Certificat',
|
||||
policy: 'Politique',
|
||||
manual: 'Manuel',
|
||||
form: 'Formulaire',
|
||||
other: 'Autre',
|
||||
},
|
||||
uploadDate: 'Date de téléversement',
|
||||
fileType: 'Type de fichier',
|
||||
fileSize: 'Taille du fichier',
|
||||
mandatory: 'Obligatoire',
|
||||
acknowledged: 'Accusé de réception',
|
||||
acknowledgement: 'Accusé',
|
||||
},
|
||||
|
||||
// Vehicles
|
||||
vehicles: {
|
||||
title: 'Véhicules',
|
||||
new: 'Nouveau véhicule',
|
||||
vehicle: 'Véhicule',
|
||||
licensePlate: "Plaque d'immatriculation",
|
||||
make: 'Marque',
|
||||
model: 'Modèle',
|
||||
year: 'Année',
|
||||
mileage: 'Kilométrage',
|
||||
fuelLevel: 'Niveau de carburant',
|
||||
status: 'Statut',
|
||||
statuses: {
|
||||
available: 'Disponible',
|
||||
inUse: 'En utilisation',
|
||||
maintenance: 'Maintenance',
|
||||
outOfService: 'Hors service',
|
||||
},
|
||||
booking: 'Réservation',
|
||||
bookings: 'Réservations',
|
||||
maintenance: 'Maintenance',
|
||||
nextService: 'Prochain entretien',
|
||||
},
|
||||
|
||||
// Customers
|
||||
customers: {
|
||||
title: 'Clients',
|
||||
new: 'Nouveau client',
|
||||
customer: 'Client',
|
||||
company: 'Entreprise',
|
||||
contact: 'Personne de contact',
|
||||
email: 'E-mail',
|
||||
phone: 'Téléphone',
|
||||
address: 'Adresse',
|
||||
contracts: 'Contrats',
|
||||
communication: 'Communication',
|
||||
notes: 'Notes',
|
||||
},
|
||||
|
||||
// Billing
|
||||
billing: {
|
||||
title: 'Facturation',
|
||||
invoices: 'Factures',
|
||||
newInvoice: 'Nouvelle facture',
|
||||
invoice: 'Facture',
|
||||
invoiceNumber: 'Numéro de facture',
|
||||
amount: 'Montant',
|
||||
tax: 'TVA',
|
||||
subtotal: 'Sous-total',
|
||||
total: 'Total',
|
||||
dueDate: "Date d'échéance",
|
||||
paidDate: 'Date de paiement',
|
||||
statuses: {
|
||||
draft: 'Brouillon',
|
||||
sent: 'Envoyé',
|
||||
paid: 'Payé',
|
||||
overdue: 'En retard',
|
||||
cancelled: 'Annulé',
|
||||
},
|
||||
hourlyRates: 'Tarifs horaires',
|
||||
rate: 'Tarif',
|
||||
reminders: 'Rappels',
|
||||
},
|
||||
|
||||
// Modules
|
||||
modules: {
|
||||
title: 'Modules',
|
||||
enabled: 'Activé',
|
||||
disabled: 'Désactivé',
|
||||
enable: 'Activer',
|
||||
disable: 'Désactiver',
|
||||
configure: 'Configurer',
|
||||
},
|
||||
|
||||
// Settings
|
||||
settings: {
|
||||
title: 'Paramètres',
|
||||
profile: 'Profil',
|
||||
account: 'Compte',
|
||||
notifications: 'Notifications',
|
||||
security: 'Sécurité',
|
||||
language: 'Langue',
|
||||
theme: 'Thème',
|
||||
darkMode: 'Mode sombre',
|
||||
lightMode: 'Mode clair',
|
||||
changePassword: 'Changer le mot de passe',
|
||||
twoFactor: 'Authentification à deux facteurs',
|
||||
lockScreen: 'Écran de verrouillage',
|
||||
lockMethod: 'Méthode de verrouillage',
|
||||
pin: 'PIN',
|
||||
pattern: 'Motif',
|
||||
},
|
||||
|
||||
// Help
|
||||
help: {
|
||||
title: 'Aide et support',
|
||||
faq: 'FAQ',
|
||||
contact: 'Contact',
|
||||
documentation: 'Documentation',
|
||||
tutorials: 'Tutoriels',
|
||||
feedback: 'Commentaires',
|
||||
},
|
||||
|
||||
// Messages
|
||||
messages: {
|
||||
success: 'Succès',
|
||||
error: 'Erreur',
|
||||
warning: 'Avertissement',
|
||||
info: 'Information',
|
||||
saved: 'Enregistré',
|
||||
deleted: 'Supprimé',
|
||||
updated: 'Mis à jour',
|
||||
created: 'Créé',
|
||||
confirmDelete: 'Êtes-vous sûr de vouloir supprimer ceci ?',
|
||||
noData: 'Aucune donnée disponible',
|
||||
loading: 'Chargement...',
|
||||
required: 'Champ obligatoire',
|
||||
invalid: 'Entrée invalide',
|
||||
},
|
||||
|
||||
// Time
|
||||
time: {
|
||||
today: "Aujourd'hui",
|
||||
yesterday: 'Hier',
|
||||
tomorrow: 'Demain',
|
||||
thisWeek: 'Cette semaine',
|
||||
lastWeek: 'La semaine dernière',
|
||||
thisMonth: 'Ce mois',
|
||||
lastMonth: 'Le mois dernier',
|
||||
days: 'jours',
|
||||
hours: 'heures',
|
||||
minutes: 'minutes',
|
||||
},
|
||||
}
|
||||
434
src/locales/pl.ts
Normal file
434
src/locales/pl.ts
Normal file
@@ -0,0 +1,434 @@
|
||||
export default {
|
||||
// General
|
||||
app: {
|
||||
name: 'SeCu',
|
||||
title: 'Zarządzanie pracownikami',
|
||||
loading: 'Ładowanie...',
|
||||
save: 'Zapisz',
|
||||
cancel: 'Anuluj',
|
||||
delete: 'Usuń',
|
||||
edit: 'Edytuj',
|
||||
add: 'Dodaj',
|
||||
search: 'Szukaj',
|
||||
filter: 'Filtruj',
|
||||
actions: 'Akcje',
|
||||
close: 'Zamknij',
|
||||
confirm: 'Potwierdź',
|
||||
yes: 'Tak',
|
||||
no: 'Nie',
|
||||
back: 'Wstecz',
|
||||
next: 'Dalej',
|
||||
submit: 'Wyślij',
|
||||
reset: 'Resetuj',
|
||||
export: 'Eksportuj',
|
||||
import: 'Importuj',
|
||||
download: 'Pobierz',
|
||||
upload: 'Prześlij',
|
||||
all: 'Wszystkie',
|
||||
none: 'Brak',
|
||||
status: 'Status',
|
||||
date: 'Data',
|
||||
time: 'Czas',
|
||||
from: 'Od',
|
||||
to: 'Do',
|
||||
total: 'Razem',
|
||||
details: 'Szczegóły',
|
||||
description: 'Opis',
|
||||
notes: 'Notatki',
|
||||
created: 'Utworzono',
|
||||
updated: 'Zaktualizowano',
|
||||
},
|
||||
|
||||
// Auth
|
||||
auth: {
|
||||
login: 'Zaloguj się',
|
||||
logout: 'Wyloguj się',
|
||||
register: 'Zarejestruj się',
|
||||
email: 'E-mail',
|
||||
password: 'Hasło',
|
||||
confirmPassword: 'Potwierdź hasło',
|
||||
forgotPassword: 'Zapomniałeś hasła?',
|
||||
rememberMe: 'Zapamiętaj mnie',
|
||||
welcomeBack: 'Witaj ponownie',
|
||||
loginToContinue: 'Zaloguj się, aby kontynuować',
|
||||
noAccount: 'Nie masz jeszcze konta?',
|
||||
hasAccount: 'Masz już konto?',
|
||||
createOrg: 'Utwórz organizację',
|
||||
orgName: 'Nazwa firmy',
|
||||
firstName: 'Imię',
|
||||
lastName: 'Nazwisko',
|
||||
},
|
||||
|
||||
// Navigation
|
||||
nav: {
|
||||
dashboard: 'Pulpit',
|
||||
orders: 'Zamówienia',
|
||||
users: 'Pracownicy',
|
||||
shifts: 'Planowanie zmian',
|
||||
availability: 'Dostępność',
|
||||
timesheets: 'Karty czasu pracy',
|
||||
qualifications: 'Kwalifikacje',
|
||||
objects: 'Obiekty',
|
||||
patrols: 'Patrole',
|
||||
incidents: 'Incydenty',
|
||||
documents: 'Dokumenty',
|
||||
vehicles: 'Pojazdy',
|
||||
customers: 'Klienci',
|
||||
billing: 'Rozliczenia',
|
||||
modules: 'Moduły',
|
||||
settings: 'Ustawienia',
|
||||
help: 'Pomoc',
|
||||
partnerships: 'Partnerstwa',
|
||||
},
|
||||
|
||||
// Dashboard
|
||||
dashboard: {
|
||||
welcome: 'Witaj',
|
||||
overview: 'Przegląd',
|
||||
todayOrders: 'Dzisiejsze zamówienia',
|
||||
activeEmployees: 'Aktywni pracownicy',
|
||||
openIncidents: 'Otwarte incydenty',
|
||||
pendingTimesheets: 'Oczekujące karty czasu',
|
||||
recentActivity: 'Ostatnia aktywność',
|
||||
upcomingShifts: 'Nadchodzące zmiany',
|
||||
expiringQualifications: 'Wygasające kwalifikacje',
|
||||
quickActions: 'Szybkie akcje',
|
||||
},
|
||||
|
||||
// Orders
|
||||
orders: {
|
||||
title: 'Zamówienia',
|
||||
new: 'Nowe zamówienie',
|
||||
orderNumber: 'Numer zamówienia',
|
||||
client: 'Klient',
|
||||
location: 'Lokalizacja',
|
||||
startDate: 'Data rozpoczęcia',
|
||||
endDate: 'Data zakończenia',
|
||||
assignedTo: 'Przypisano do',
|
||||
priority: 'Priorytet',
|
||||
priorities: {
|
||||
low: 'Niski',
|
||||
medium: 'Średni',
|
||||
high: 'Wysoki',
|
||||
urgent: 'Pilny',
|
||||
},
|
||||
statuses: {
|
||||
draft: 'Szkic',
|
||||
scheduled: 'Zaplanowane',
|
||||
active: 'Aktywne',
|
||||
completed: 'Zakończone',
|
||||
cancelled: 'Anulowane',
|
||||
},
|
||||
},
|
||||
|
||||
// Users
|
||||
users: {
|
||||
title: 'Pracownicy',
|
||||
new: 'Nowy pracownik',
|
||||
employee: 'Pracownik',
|
||||
employees: 'Pracownicy',
|
||||
role: 'Rola',
|
||||
roles: {
|
||||
chef: 'Kierownik',
|
||||
disponent: 'Dyspozytor',
|
||||
mitarbeiter: 'Pracownik',
|
||||
},
|
||||
phone: 'Telefon',
|
||||
address: 'Adres',
|
||||
hireDate: 'Data zatrudnienia',
|
||||
active: 'Aktywny',
|
||||
inactive: 'Nieaktywny',
|
||||
},
|
||||
|
||||
// Shifts
|
||||
shifts: {
|
||||
title: 'Planowanie zmian',
|
||||
new: 'Nowa zmiana',
|
||||
shift: 'Zmiana',
|
||||
shiftPlan: 'Plan zmian',
|
||||
morning: 'Zmiana poranna',
|
||||
afternoon: 'Zmiana popołudniowa',
|
||||
night: 'Zmiana nocna',
|
||||
startTime: 'Czas rozpoczęcia',
|
||||
endTime: 'Czas zakończenia',
|
||||
break: 'Przerwa',
|
||||
assigned: 'Przypisano',
|
||||
unassigned: 'Nieprzypisano',
|
||||
swapRequest: 'Prośba o zamianę',
|
||||
approve: 'Zatwierdź',
|
||||
reject: 'Odrzuć',
|
||||
},
|
||||
|
||||
// Availability
|
||||
availability: {
|
||||
title: 'Dostępność',
|
||||
available: 'Dostępny',
|
||||
unavailable: 'Niedostępny',
|
||||
partiallyAvailable: 'Częściowo dostępny',
|
||||
setAvailability: 'Ustaw dostępność',
|
||||
reason: 'Powód',
|
||||
vacation: 'Urlop',
|
||||
sick: 'Choroba',
|
||||
training: 'Szkolenie',
|
||||
other: 'Inne',
|
||||
},
|
||||
|
||||
// Timesheets
|
||||
timesheets: {
|
||||
title: 'Karty czasu pracy',
|
||||
new: 'Nowy wpis',
|
||||
hours: 'Godziny',
|
||||
totalHours: 'Suma godzin',
|
||||
workDate: 'Dzień pracy',
|
||||
checkIn: 'Wejście',
|
||||
checkOut: 'Wyjście',
|
||||
breakTime: 'Czas przerwy',
|
||||
overtime: 'Nadgodziny',
|
||||
upload: 'Prześlij kartę czasu',
|
||||
statuses: {
|
||||
pending: 'Oczekujące',
|
||||
approved: 'Zatwierdzone',
|
||||
rejected: 'Odrzucone',
|
||||
},
|
||||
},
|
||||
|
||||
// Qualifications
|
||||
qualifications: {
|
||||
title: 'Kwalifikacje',
|
||||
new: 'Nowa kwalifikacja',
|
||||
type: 'Typ',
|
||||
types: {
|
||||
'34a': 'Certyfikat ochrony §34a',
|
||||
'first_aid': 'Kurs pierwszej pomocy',
|
||||
'fire_safety': 'Bezpieczeństwo pożarowe',
|
||||
'security_check': 'Poświadczenie bezpieczeństwa',
|
||||
'drivers_license': 'Prawo jazdy',
|
||||
'other': 'Inne',
|
||||
},
|
||||
issueDate: 'Data wydania',
|
||||
expiryDate: 'Data ważności',
|
||||
issuedBy: 'Wydane przez',
|
||||
valid: 'Ważna',
|
||||
expired: 'Wygasła',
|
||||
expiringSoon: 'Wkrótce wygasa',
|
||||
daysUntilExpiry: 'Dni do wygaśnięcia',
|
||||
reminder: 'Przypomnienie',
|
||||
},
|
||||
|
||||
// Objects
|
||||
objects: {
|
||||
title: 'Obiekty',
|
||||
new: 'Nowy obiekt',
|
||||
object: 'Obiekt',
|
||||
name: 'Nazwa',
|
||||
address: 'Adres',
|
||||
contact: 'Osoba kontaktowa',
|
||||
phone: 'Telefon',
|
||||
instructions: 'Instrukcje',
|
||||
documents: 'Dokumenty',
|
||||
accessInfo: 'Informacje o dostępie',
|
||||
},
|
||||
|
||||
// Patrols
|
||||
patrols: {
|
||||
title: 'Patrole',
|
||||
new: 'Nowy patrol',
|
||||
checkpoint: 'Punkt kontrolny',
|
||||
checkpoints: 'Punkty kontrolne',
|
||||
route: 'Trasa',
|
||||
routes: 'Trasy',
|
||||
log: 'Dziennik',
|
||||
logs: 'Dzienniki',
|
||||
scanned: 'Zeskanowano',
|
||||
missed: 'Pominięto',
|
||||
scanTime: 'Czas skanowania',
|
||||
expectedTime: 'Oczekiwany czas',
|
||||
deviation: 'Odchylenie',
|
||||
},
|
||||
|
||||
// Incidents
|
||||
incidents: {
|
||||
title: 'Incydenty',
|
||||
new: 'Nowy incydent',
|
||||
incident: 'Incydent',
|
||||
category: 'Kategoria',
|
||||
categories: {
|
||||
theft: 'Kradzież',
|
||||
vandalism: 'Wandalizm',
|
||||
trespassing: 'Wtargnięcie',
|
||||
fire: 'Pożar',
|
||||
medical: 'Nagły przypadek medyczny',
|
||||
technical: 'Problem techniczny',
|
||||
other: 'Inne',
|
||||
},
|
||||
severity: 'Ważność',
|
||||
severities: {
|
||||
low: 'Niska',
|
||||
medium: 'Średnia',
|
||||
high: 'Wysoka',
|
||||
critical: 'Krytyczna',
|
||||
},
|
||||
reporter: 'Zgłosił',
|
||||
location: 'Lokalizacja',
|
||||
witnesses: 'Świadkowie',
|
||||
attachments: 'Załączniki',
|
||||
resolved: 'Rozwiązany',
|
||||
unresolved: 'Nierozwiązany',
|
||||
},
|
||||
|
||||
// Documents
|
||||
documents: {
|
||||
title: 'Dokumenty',
|
||||
new: 'Nowy dokument',
|
||||
document: 'Dokument',
|
||||
category: 'Kategoria',
|
||||
categories: {
|
||||
contract: 'Umowa',
|
||||
certificate: 'Certyfikat',
|
||||
policy: 'Polityka',
|
||||
manual: 'Instrukcja',
|
||||
form: 'Formularz',
|
||||
other: 'Inne',
|
||||
},
|
||||
uploadDate: 'Data przesłania',
|
||||
fileType: 'Typ pliku',
|
||||
fileSize: 'Rozmiar pliku',
|
||||
mandatory: 'Obowiązkowy',
|
||||
acknowledged: 'Potwierdzono',
|
||||
acknowledgement: 'Potwierdzenie',
|
||||
},
|
||||
|
||||
// Vehicles
|
||||
vehicles: {
|
||||
title: 'Pojazdy',
|
||||
new: 'Nowy pojazd',
|
||||
vehicle: 'Pojazd',
|
||||
licensePlate: 'Numer rejestracyjny',
|
||||
make: 'Marka',
|
||||
model: 'Model',
|
||||
year: 'Rok',
|
||||
mileage: 'Przebieg',
|
||||
fuelLevel: 'Poziom paliwa',
|
||||
status: 'Status',
|
||||
statuses: {
|
||||
available: 'Dostępny',
|
||||
inUse: 'W użyciu',
|
||||
maintenance: 'W serwisie',
|
||||
outOfService: 'Wyłączony z użytku',
|
||||
},
|
||||
booking: 'Rezerwacja',
|
||||
bookings: 'Rezerwacje',
|
||||
maintenance: 'Serwis',
|
||||
nextService: 'Następny przegląd',
|
||||
},
|
||||
|
||||
// Customers
|
||||
customers: {
|
||||
title: 'Klienci',
|
||||
new: 'Nowy klient',
|
||||
customer: 'Klient',
|
||||
company: 'Firma',
|
||||
contact: 'Osoba kontaktowa',
|
||||
email: 'E-mail',
|
||||
phone: 'Telefon',
|
||||
address: 'Adres',
|
||||
contracts: 'Umowy',
|
||||
communication: 'Komunikacja',
|
||||
notes: 'Notatki',
|
||||
},
|
||||
|
||||
// Billing
|
||||
billing: {
|
||||
title: 'Rozliczenia',
|
||||
invoices: 'Faktury',
|
||||
newInvoice: 'Nowa faktura',
|
||||
invoice: 'Faktura',
|
||||
invoiceNumber: 'Numer faktury',
|
||||
amount: 'Kwota',
|
||||
tax: 'VAT',
|
||||
subtotal: 'Suma częściowa',
|
||||
total: 'Razem',
|
||||
dueDate: 'Termin płatności',
|
||||
paidDate: 'Data płatności',
|
||||
statuses: {
|
||||
draft: 'Szkic',
|
||||
sent: 'Wysłana',
|
||||
paid: 'Opłacona',
|
||||
overdue: 'Przeterminowana',
|
||||
cancelled: 'Anulowana',
|
||||
},
|
||||
hourlyRates: 'Stawki godzinowe',
|
||||
rate: 'Stawka',
|
||||
reminders: 'Przypomnienia',
|
||||
},
|
||||
|
||||
// Modules
|
||||
modules: {
|
||||
title: 'Moduły',
|
||||
enabled: 'Włączony',
|
||||
disabled: 'Wyłączony',
|
||||
enable: 'Włącz',
|
||||
disable: 'Wyłącz',
|
||||
configure: 'Konfiguruj',
|
||||
},
|
||||
|
||||
// Settings
|
||||
settings: {
|
||||
title: 'Ustawienia',
|
||||
profile: 'Profil',
|
||||
account: 'Konto',
|
||||
notifications: 'Powiadomienia',
|
||||
security: 'Bezpieczeństwo',
|
||||
language: 'Język',
|
||||
theme: 'Motyw',
|
||||
darkMode: 'Tryb ciemny',
|
||||
lightMode: 'Tryb jasny',
|
||||
changePassword: 'Zmień hasło',
|
||||
twoFactor: 'Uwierzytelnianie dwuskładnikowe',
|
||||
lockScreen: 'Blokada ekranu',
|
||||
lockMethod: 'Metoda blokady',
|
||||
pin: 'PIN',
|
||||
pattern: 'Wzór',
|
||||
},
|
||||
|
||||
// Help
|
||||
help: {
|
||||
title: 'Pomoc i wsparcie',
|
||||
faq: 'FAQ',
|
||||
contact: 'Kontakt',
|
||||
documentation: 'Dokumentacja',
|
||||
tutorials: 'Samouczki',
|
||||
feedback: 'Opinie',
|
||||
},
|
||||
|
||||
// Messages
|
||||
messages: {
|
||||
success: 'Sukces',
|
||||
error: 'Błąd',
|
||||
warning: 'Ostrzeżenie',
|
||||
info: 'Informacja',
|
||||
saved: 'Zapisano',
|
||||
deleted: 'Usunięto',
|
||||
updated: 'Zaktualizowano',
|
||||
created: 'Utworzono',
|
||||
confirmDelete: 'Czy na pewno chcesz to usunąć?',
|
||||
noData: 'Brak danych',
|
||||
loading: 'Ładowanie...',
|
||||
required: 'Pole wymagane',
|
||||
invalid: 'Nieprawidłowe dane',
|
||||
},
|
||||
|
||||
// Time
|
||||
time: {
|
||||
today: 'Dzisiaj',
|
||||
yesterday: 'Wczoraj',
|
||||
tomorrow: 'Jutro',
|
||||
thisWeek: 'Ten tydzień',
|
||||
lastWeek: 'Ostatni tydzień',
|
||||
thisMonth: 'Ten miesiąc',
|
||||
lastMonth: 'Ostatni miesiąc',
|
||||
days: 'dni',
|
||||
hours: 'godzin',
|
||||
minutes: 'minut',
|
||||
},
|
||||
}
|
||||
434
src/locales/ru.ts
Normal file
434
src/locales/ru.ts
Normal file
@@ -0,0 +1,434 @@
|
||||
export default {
|
||||
// General
|
||||
app: {
|
||||
name: 'SeCu',
|
||||
title: 'Управление персоналом',
|
||||
loading: 'Загрузка...',
|
||||
save: 'Сохранить',
|
||||
cancel: 'Отмена',
|
||||
delete: 'Удалить',
|
||||
edit: 'Редактировать',
|
||||
add: 'Добавить',
|
||||
search: 'Поиск',
|
||||
filter: 'Фильтр',
|
||||
actions: 'Действия',
|
||||
close: 'Закрыть',
|
||||
confirm: 'Подтвердить',
|
||||
yes: 'Да',
|
||||
no: 'Нет',
|
||||
back: 'Назад',
|
||||
next: 'Далее',
|
||||
submit: 'Отправить',
|
||||
reset: 'Сбросить',
|
||||
export: 'Экспорт',
|
||||
import: 'Импорт',
|
||||
download: 'Скачать',
|
||||
upload: 'Загрузить',
|
||||
all: 'Все',
|
||||
none: 'Нет',
|
||||
status: 'Статус',
|
||||
date: 'Дата',
|
||||
time: 'Время',
|
||||
from: 'От',
|
||||
to: 'До',
|
||||
total: 'Итого',
|
||||
details: 'Подробности',
|
||||
description: 'Описание',
|
||||
notes: 'Заметки',
|
||||
created: 'Создано',
|
||||
updated: 'Обновлено',
|
||||
},
|
||||
|
||||
// Auth
|
||||
auth: {
|
||||
login: 'Войти',
|
||||
logout: 'Выйти',
|
||||
register: 'Регистрация',
|
||||
email: 'Эл. почта',
|
||||
password: 'Пароль',
|
||||
confirmPassword: 'Подтвердить пароль',
|
||||
forgotPassword: 'Забыли пароль?',
|
||||
rememberMe: 'Запомнить меня',
|
||||
welcomeBack: 'Добро пожаловать',
|
||||
loginToContinue: 'Войдите для продолжения',
|
||||
noAccount: 'Нет аккаунта?',
|
||||
hasAccount: 'Уже есть аккаунт?',
|
||||
createOrg: 'Создать организацию',
|
||||
orgName: 'Название компании',
|
||||
firstName: 'Имя',
|
||||
lastName: 'Фамилия',
|
||||
},
|
||||
|
||||
// Navigation
|
||||
nav: {
|
||||
dashboard: 'Панель управления',
|
||||
orders: 'Заказы',
|
||||
users: 'Сотрудники',
|
||||
shifts: 'Планирование смен',
|
||||
availability: 'Доступность',
|
||||
timesheets: 'Табели учёта',
|
||||
qualifications: 'Квалификации',
|
||||
objects: 'Объекты',
|
||||
patrols: 'Патрули',
|
||||
incidents: 'Инциденты',
|
||||
documents: 'Документы',
|
||||
vehicles: 'Транспорт',
|
||||
customers: 'Клиенты',
|
||||
billing: 'Выставление счетов',
|
||||
modules: 'Модули',
|
||||
settings: 'Настройки',
|
||||
help: 'Помощь',
|
||||
partnerships: 'Партнёрства',
|
||||
},
|
||||
|
||||
// Dashboard
|
||||
dashboard: {
|
||||
welcome: 'Добро пожаловать',
|
||||
overview: 'Обзор',
|
||||
todayOrders: 'Заказы на сегодня',
|
||||
activeEmployees: 'Активные сотрудники',
|
||||
openIncidents: 'Открытые инциденты',
|
||||
pendingTimesheets: 'Ожидающие табели',
|
||||
recentActivity: 'Последняя активность',
|
||||
upcomingShifts: 'Предстоящие смены',
|
||||
expiringQualifications: 'Истекающие квалификации',
|
||||
quickActions: 'Быстрые действия',
|
||||
},
|
||||
|
||||
// Orders
|
||||
orders: {
|
||||
title: 'Заказы',
|
||||
new: 'Новый заказ',
|
||||
orderNumber: 'Номер заказа',
|
||||
client: 'Клиент',
|
||||
location: 'Местоположение',
|
||||
startDate: 'Дата начала',
|
||||
endDate: 'Дата окончания',
|
||||
assignedTo: 'Назначен',
|
||||
priority: 'Приоритет',
|
||||
priorities: {
|
||||
low: 'Низкий',
|
||||
medium: 'Средний',
|
||||
high: 'Высокий',
|
||||
urgent: 'Срочный',
|
||||
},
|
||||
statuses: {
|
||||
draft: 'Черновик',
|
||||
scheduled: 'Запланировано',
|
||||
active: 'Активный',
|
||||
completed: 'Завершён',
|
||||
cancelled: 'Отменён',
|
||||
},
|
||||
},
|
||||
|
||||
// Users
|
||||
users: {
|
||||
title: 'Сотрудники',
|
||||
new: 'Новый сотрудник',
|
||||
employee: 'Сотрудник',
|
||||
employees: 'Сотрудники',
|
||||
role: 'Роль',
|
||||
roles: {
|
||||
chef: 'Руководитель',
|
||||
disponent: 'Диспетчер',
|
||||
mitarbeiter: 'Сотрудник',
|
||||
},
|
||||
phone: 'Телефон',
|
||||
address: 'Адрес',
|
||||
hireDate: 'Дата приёма',
|
||||
active: 'Активен',
|
||||
inactive: 'Неактивен',
|
||||
},
|
||||
|
||||
// Shifts
|
||||
shifts: {
|
||||
title: 'Планирование смен',
|
||||
new: 'Новая смена',
|
||||
shift: 'Смена',
|
||||
shiftPlan: 'План смен',
|
||||
morning: 'Утренняя смена',
|
||||
afternoon: 'Дневная смена',
|
||||
night: 'Ночная смена',
|
||||
startTime: 'Время начала',
|
||||
endTime: 'Время окончания',
|
||||
break: 'Перерыв',
|
||||
assigned: 'Назначено',
|
||||
unassigned: 'Не назначено',
|
||||
swapRequest: 'Запрос на обмен',
|
||||
approve: 'Одобрить',
|
||||
reject: 'Отклонить',
|
||||
},
|
||||
|
||||
// Availability
|
||||
availability: {
|
||||
title: 'Доступность',
|
||||
available: 'Доступен',
|
||||
unavailable: 'Недоступен',
|
||||
partiallyAvailable: 'Частично доступен',
|
||||
setAvailability: 'Указать доступность',
|
||||
reason: 'Причина',
|
||||
vacation: 'Отпуск',
|
||||
sick: 'Больничный',
|
||||
training: 'Обучение',
|
||||
other: 'Другое',
|
||||
},
|
||||
|
||||
// Timesheets
|
||||
timesheets: {
|
||||
title: 'Табели учёта',
|
||||
new: 'Новая запись',
|
||||
hours: 'Часы',
|
||||
totalHours: 'Всего часов',
|
||||
workDate: 'Рабочий день',
|
||||
checkIn: 'Приход',
|
||||
checkOut: 'Уход',
|
||||
breakTime: 'Время перерыва',
|
||||
overtime: 'Сверхурочные',
|
||||
upload: 'Загрузить табель',
|
||||
statuses: {
|
||||
pending: 'Ожидает',
|
||||
approved: 'Одобрено',
|
||||
rejected: 'Отклонено',
|
||||
},
|
||||
},
|
||||
|
||||
// Qualifications
|
||||
qualifications: {
|
||||
title: 'Квалификации',
|
||||
new: 'Новая квалификация',
|
||||
type: 'Тип',
|
||||
types: {
|
||||
'34a': 'Сертификат охраны §34a',
|
||||
'first_aid': 'Курс первой помощи',
|
||||
'fire_safety': 'Пожарная безопасность',
|
||||
'security_check': 'Проверка безопасности',
|
||||
'drivers_license': 'Водительские права',
|
||||
'other': 'Другое',
|
||||
},
|
||||
issueDate: 'Дата выдачи',
|
||||
expiryDate: 'Дата истечения',
|
||||
issuedBy: 'Выдано',
|
||||
valid: 'Действительна',
|
||||
expired: 'Истекла',
|
||||
expiringSoon: 'Скоро истекает',
|
||||
daysUntilExpiry: 'Дней до истечения',
|
||||
reminder: 'Напоминание',
|
||||
},
|
||||
|
||||
// Objects
|
||||
objects: {
|
||||
title: 'Объекты',
|
||||
new: 'Новый объект',
|
||||
object: 'Объект',
|
||||
name: 'Название',
|
||||
address: 'Адрес',
|
||||
contact: 'Контактное лицо',
|
||||
phone: 'Телефон',
|
||||
instructions: 'Инструкции',
|
||||
documents: 'Документы',
|
||||
accessInfo: 'Информация о доступе',
|
||||
},
|
||||
|
||||
// Patrols
|
||||
patrols: {
|
||||
title: 'Патрули',
|
||||
new: 'Новый патруль',
|
||||
checkpoint: 'Контрольная точка',
|
||||
checkpoints: 'Контрольные точки',
|
||||
route: 'Маршрут',
|
||||
routes: 'Маршруты',
|
||||
log: 'Журнал',
|
||||
logs: 'Журналы',
|
||||
scanned: 'Сканировано',
|
||||
missed: 'Пропущено',
|
||||
scanTime: 'Время сканирования',
|
||||
expectedTime: 'Ожидаемое время',
|
||||
deviation: 'Отклонение',
|
||||
},
|
||||
|
||||
// Incidents
|
||||
incidents: {
|
||||
title: 'Инциденты',
|
||||
new: 'Новый инцидент',
|
||||
incident: 'Инцидент',
|
||||
category: 'Категория',
|
||||
categories: {
|
||||
theft: 'Кража',
|
||||
vandalism: 'Вандализм',
|
||||
trespassing: 'Незаконное проникновение',
|
||||
fire: 'Пожар',
|
||||
medical: 'Медицинская помощь',
|
||||
technical: 'Техническая проблема',
|
||||
other: 'Другое',
|
||||
},
|
||||
severity: 'Серьёзность',
|
||||
severities: {
|
||||
low: 'Низкая',
|
||||
medium: 'Средняя',
|
||||
high: 'Высокая',
|
||||
critical: 'Критическая',
|
||||
},
|
||||
reporter: 'Сообщил',
|
||||
location: 'Место',
|
||||
witnesses: 'Свидетели',
|
||||
attachments: 'Вложения',
|
||||
resolved: 'Решено',
|
||||
unresolved: 'Не решено',
|
||||
},
|
||||
|
||||
// Documents
|
||||
documents: {
|
||||
title: 'Документы',
|
||||
new: 'Новый документ',
|
||||
document: 'Документ',
|
||||
category: 'Категория',
|
||||
categories: {
|
||||
contract: 'Контракт',
|
||||
certificate: 'Сертификат',
|
||||
policy: 'Политика',
|
||||
manual: 'Руководство',
|
||||
form: 'Форма',
|
||||
other: 'Другое',
|
||||
},
|
||||
uploadDate: 'Дата загрузки',
|
||||
fileType: 'Тип файла',
|
||||
fileSize: 'Размер файла',
|
||||
mandatory: 'Обязательный',
|
||||
acknowledged: 'Подтверждено',
|
||||
acknowledgement: 'Подтверждение',
|
||||
},
|
||||
|
||||
// Vehicles
|
||||
vehicles: {
|
||||
title: 'Транспорт',
|
||||
new: 'Новое транспортное средство',
|
||||
vehicle: 'Транспортное средство',
|
||||
licensePlate: 'Номерной знак',
|
||||
make: 'Марка',
|
||||
model: 'Модель',
|
||||
year: 'Год',
|
||||
mileage: 'Пробег',
|
||||
fuelLevel: 'Уровень топлива',
|
||||
status: 'Статус',
|
||||
statuses: {
|
||||
available: 'Доступно',
|
||||
inUse: 'Используется',
|
||||
maintenance: 'На обслуживании',
|
||||
outOfService: 'Не работает',
|
||||
},
|
||||
booking: 'Бронирование',
|
||||
bookings: 'Бронирования',
|
||||
maintenance: 'Обслуживание',
|
||||
nextService: 'Следующее ТО',
|
||||
},
|
||||
|
||||
// Customers
|
||||
customers: {
|
||||
title: 'Клиенты',
|
||||
new: 'Новый клиент',
|
||||
customer: 'Клиент',
|
||||
company: 'Компания',
|
||||
contact: 'Контактное лицо',
|
||||
email: 'Эл. почта',
|
||||
phone: 'Телефон',
|
||||
address: 'Адрес',
|
||||
contracts: 'Контракты',
|
||||
communication: 'Коммуникация',
|
||||
notes: 'Заметки',
|
||||
},
|
||||
|
||||
// Billing
|
||||
billing: {
|
||||
title: 'Выставление счетов',
|
||||
invoices: 'Счета',
|
||||
newInvoice: 'Новый счёт',
|
||||
invoice: 'Счёт',
|
||||
invoiceNumber: 'Номер счёта',
|
||||
amount: 'Сумма',
|
||||
tax: 'НДС',
|
||||
subtotal: 'Подытог',
|
||||
total: 'Итого',
|
||||
dueDate: 'Срок оплаты',
|
||||
paidDate: 'Дата оплаты',
|
||||
statuses: {
|
||||
draft: 'Черновик',
|
||||
sent: 'Отправлен',
|
||||
paid: 'Оплачен',
|
||||
overdue: 'Просрочен',
|
||||
cancelled: 'Отменён',
|
||||
},
|
||||
hourlyRates: 'Почасовые ставки',
|
||||
rate: 'Ставка',
|
||||
reminders: 'Напоминания',
|
||||
},
|
||||
|
||||
// Modules
|
||||
modules: {
|
||||
title: 'Модули',
|
||||
enabled: 'Включен',
|
||||
disabled: 'Отключен',
|
||||
enable: 'Включить',
|
||||
disable: 'Отключить',
|
||||
configure: 'Настроить',
|
||||
},
|
||||
|
||||
// Settings
|
||||
settings: {
|
||||
title: 'Настройки',
|
||||
profile: 'Профиль',
|
||||
account: 'Аккаунт',
|
||||
notifications: 'Уведомления',
|
||||
security: 'Безопасность',
|
||||
language: 'Язык',
|
||||
theme: 'Тема',
|
||||
darkMode: 'Тёмный режим',
|
||||
lightMode: 'Светлый режим',
|
||||
changePassword: 'Изменить пароль',
|
||||
twoFactor: 'Двухфакторная аутентификация',
|
||||
lockScreen: 'Экран блокировки',
|
||||
lockMethod: 'Способ блокировки',
|
||||
pin: 'PIN-код',
|
||||
pattern: 'Графический ключ',
|
||||
},
|
||||
|
||||
// Help
|
||||
help: {
|
||||
title: 'Помощь и поддержка',
|
||||
faq: 'Частые вопросы',
|
||||
contact: 'Контакты',
|
||||
documentation: 'Документация',
|
||||
tutorials: 'Обучение',
|
||||
feedback: 'Обратная связь',
|
||||
},
|
||||
|
||||
// Messages
|
||||
messages: {
|
||||
success: 'Успешно',
|
||||
error: 'Ошибка',
|
||||
warning: 'Предупреждение',
|
||||
info: 'Информация',
|
||||
saved: 'Сохранено',
|
||||
deleted: 'Удалено',
|
||||
updated: 'Обновлено',
|
||||
created: 'Создано',
|
||||
confirmDelete: 'Вы уверены, что хотите удалить это?',
|
||||
noData: 'Нет данных',
|
||||
loading: 'Загрузка...',
|
||||
required: 'Обязательное поле',
|
||||
invalid: 'Неверный ввод',
|
||||
},
|
||||
|
||||
// Time
|
||||
time: {
|
||||
today: 'Сегодня',
|
||||
yesterday: 'Вчера',
|
||||
tomorrow: 'Завтра',
|
||||
thisWeek: 'На этой неделе',
|
||||
lastWeek: 'На прошлой неделе',
|
||||
thisMonth: 'В этом месяце',
|
||||
lastMonth: 'В прошлом месяце',
|
||||
days: 'дней',
|
||||
hours: 'часов',
|
||||
minutes: 'минут',
|
||||
},
|
||||
}
|
||||
@@ -2,11 +2,13 @@ import { createApp } from 'vue'
|
||||
import { createPinia } from 'pinia'
|
||||
import App from './App.vue'
|
||||
import router from './router'
|
||||
import i18n from './i18n'
|
||||
import './assets/main.css'
|
||||
|
||||
const app = createApp(App)
|
||||
|
||||
app.use(createPinia())
|
||||
app.use(router)
|
||||
app.use(i18n)
|
||||
|
||||
app.mount('#app')
|
||||
|
||||
Reference in New Issue
Block a user