Skip to content

Commit 7a31368

Browse files
authored
feat: polishing translations, tag translations and term improving (#168)
1 parent d7b7aef commit 7a31368

7 files changed

Lines changed: 238 additions & 75 deletions

File tree

apps/dashboard/src/components/admin/BookingEngineSettings.tsx

Lines changed: 47 additions & 45 deletions
Large diffs are not rendered by default.

apps/dashboard/src/components/ui/StatusBadge.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { useTranslation } from 'react-i18next';
2+
13
const STATUS_COLORS: Record<string, string> = {
24
// Reservation statuses
35
confirmed: 'bg-telivity-dark-teal text-white',
@@ -46,12 +48,23 @@ interface StatusBadgeProps {
4648
}
4749

4850
export default function StatusBadge({ status, label, className = '' }: StatusBadgeProps) {
51+
const { t } = useTranslation();
4952
const colors = STATUS_COLORS[status] ?? 'bg-telivity-mid-grey text-white';
53+
54+
const defaultLabel = formatLabel(status);
55+
const resolvedLabel = label ?? t([
56+
`dashboard.roomStatuses.${status}`,
57+
`housekeeping.statuses.${status}`,
58+
`reservations.statuses.${status}`,
59+
`channels.statuses.${status}`,
60+
`communications.statuses.${status}`,
61+
], { defaultValue: defaultLabel });
62+
5063
return (
5164
<span
5265
className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold ${colors} ${className}`}
5366
>
54-
{label ?? formatLabel(status)}
67+
{resolvedLabel}
5568
</span>
5669
);
5770
}

apps/dashboard/src/locales/en.json

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,57 @@
7474
"unsavedChanges": "Unsaved changes",
7575
"users": "Users"
7676
},
77+
"bookingEngine": {
78+
"active": "active",
79+
"autoConfirm": "Auto-confirm paid bookings",
80+
"branding": "Branding",
81+
"copied": "Copied",
82+
"copy": "Copy",
83+
"copyKeyWarning": "Copy this key now — you won't be able to see it again.",
84+
"created": "Created",
85+
"depositPolicy": "Deposit Policy",
86+
"depositTypes": {
87+
"first_night": "First night",
88+
"full": "Full amount",
89+
"none": "No deposit",
90+
"percentage": "Percentage"
91+
},
92+
"description": "Let guests book directly from your website, commission-free.",
93+
"disabled": "Disabled",
94+
"dismiss": "Dismiss",
95+
"displayName": "Display Name",
96+
"displayNamePlaceholder": "Shown to guests on the booking page",
97+
"enabled": "Enabled",
98+
"generateKey": "Generate key",
99+
"key": "Key",
100+
"label": "Label",
101+
"logo": "Logo",
102+
"noKeysYet": "No publishable keys yet",
103+
"noRatePlans": "No rate plans",
104+
"noRoomTypes": "No room types",
105+
"percentageLabel": "Percentage",
106+
"primaryColor": "Primary Color",
107+
"accentColor": "Accent Color",
108+
"promptLabel": "Label for this publishable key (e.g. \"Marketing site\")",
109+
"publishableKeys": "Publishable Keys",
110+
"ratePlans": "Rate Plans",
111+
"refundableDeposit": "Refundable deposit",
112+
"revoke": "Revoke",
113+
"revoked": "revoked",
114+
"roomTypes": "Room Types",
115+
"sellableInventory": "Sellable Inventory",
116+
"sellableInventoryDescription": "Only checked room types and rate plans are publicly bookable.",
117+
"title": "Direct Booking Engine",
118+
"toasts": {
119+
"keyGenerated": "Publishable key generated",
120+
"keyGenerationFailed": "Failed to generate key",
121+
"keyRevoked": "Key revoked",
122+
"keyRevocationFailed": "Failed to revoke key",
123+
"settingsSaved": "Booking engine settings saved",
124+
"settingsSaveFailed": "Failed to save settings"
125+
},
126+
"type": "Type"
127+
},
77128
"cashier": {
78129
"amount": "Amount",
79130
"cashier": "Cashier",
@@ -261,18 +312,39 @@
261312
"allStatus": "All Status",
262313
"amount": "Amount",
263314
"balance": "Balance",
315+
"chargeTypes": {
316+
"food_beverage": "F&B",
317+
"laundry": "Laundry",
318+
"minibar": "Minibar",
319+
"other": "Other",
320+
"parking": "Parking",
321+
"room": "Room"
322+
},
264323
"charges": "Charges",
265324
"closeFolio": "Close Folio",
266325
"closed": "Closed",
267326
"date": "Date",
268327
"description": "Description",
269328
"folioNumber": "Folio #",
270329
"guest": "Guest",
330+
"master": "Master",
271331
"method": "Method",
272332
"noCharges": "No charges",
273333
"noFoliosFound": "No folios found",
274334
"noPayments": "No payments",
275335
"open": "Open",
336+
"paymentMethods": {
337+
"bank_transfer": "Bank Transfer",
338+
"cash": "Cash",
339+
"credit_card": "Credit Card",
340+
"debit_card": "Debit Card"
341+
},
342+
"paymentStatuses": {
343+
"captured": "Captured",
344+
"failed": "Failed",
345+
"pending": "Pending",
346+
"refunded": "Refunded"
347+
},
276348
"payments": "Payments",
277349
"postCharge": "Post Charge",
278350
"record": "Record",
@@ -303,6 +375,7 @@
303375
"driversLicense": "Driver's License",
304376
"enterIdNumber": "Enter ID number",
305377
"express": "Express",
378+
"expressCheckoutConfirm": "Express checkout? This will auto-settle the folio.",
306379
"groupCheckIn": "Group Check-In ({{count}})",
307380
"guest": "Guest",
308381
"idDocumentType": "ID Document Type",
@@ -372,6 +445,7 @@
372445
},
373446
"guests": {
374447
"confirmDeletion": "Confirm Guest Deletion",
448+
"confirmDeletionPrompt": "Are you absolutely sure? This cannot be undone.",
375449
"createGuest": "Create Guest",
376450
"deleteGuest": "Delete Guest (GDPR)",
377451
"deletionDescription": "All personal data for {{name}} will be permanently deleted in accordance with the GDPR right to erasure.",

apps/dashboard/src/locales/pt-BR.json

Lines changed: 93 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,38 +42,89 @@
4242
"admin": {
4343
"actions": "Ações",
4444
"addUser": "Adicionar usuário",
45-
"couldNotCreateRole": "Não foi possível criar o perfil (a chave pode já estar em uso).",
45+
"couldNotCreateRole": "Não foi possível criar o cargo (a chave pode já estar em uso).",
4646
"couldNotCreateUser": "Não foi possível criar o usuário (o e-mail pode já estar em uso).",
47-
"createRole": "Criar perfil",
47+
"createRole": "Criar cargo",
4848
"createUser": "Criar usuário",
4949
"creating": "Criando…",
5050
"delete": "Excluir",
5151
"description": "Descrição",
5252
"disable": "Desativar",
5353
"disableUser": "Desativar usuário",
54-
"editRoles": "Editar perfis",
54+
"editRoles": "Editar cargos",
5555
"email": "E-mail",
5656
"keyLabel": "Chave * (minúsculas, sublinhados)",
5757
"keyPlaceholder": "gerente_spa",
5858
"name": "Nome",
5959
"namePlaceholder": "Gerente de Spa",
6060
"new": "Novo",
61-
"newRole": "Novo perfil",
61+
"newRole": "Novo cargo",
6262
"noUsersYet": "Nenhum usuário cadastrado",
6363
"permissionsCount": "{{count}} permissões",
6464
"required": "*",
65-
"roles": "Perfis",
66-
"rolesForUser": "Perfis — {{name}}",
65+
"roles": "Cargos",
66+
"rolesForUser": "Cargos — {{name}}",
6767
"savePermissions": "Salvar permissões",
68-
"saveRoles": "Salvar perfis",
68+
"saveRoles": "Salvar cargos",
6969
"saving": "Salvando…",
70-
"selectARole": "Selecione um perfil",
70+
"selectARole": "Selecione um cargo",
7171
"status": "Status",
7272
"system": "sistema",
73-
"systemRoleReadOnly": "perfil de sistema (somente leitura)",
73+
"systemRoleReadOnly": "cargo de sistema (somente leitura)",
7474
"unsavedChanges": "Alterações não salvas",
7575
"users": "Usuários"
7676
},
77+
"bookingEngine": {
78+
"active": "ativa",
79+
"autoConfirm": "Confirmar automaticamente reservas pagas",
80+
"branding": "Personalização",
81+
"copied": "Copiada",
82+
"copy": "Copiar",
83+
"copyKeyWarning": "Copie esta chave agora — você não poderá vê-la novamente.",
84+
"created": "Criada em",
85+
"depositPolicy": "Política de Depósito",
86+
"depositTypes": {
87+
"first_night": "Primeira noite",
88+
"full": "Valor integral",
89+
"none": "Sem depósito",
90+
"percentage": "Porcentagem"
91+
},
92+
"description": "Permita que os hóspedes reservem diretamente do seu site, sem comissões.",
93+
"disabled": "Desativado",
94+
"dismiss": "Ignorar",
95+
"displayName": "Nome de Exibição",
96+
"displayNamePlaceholder": "Mostrado aos hóspedes na página de reservas",
97+
"enabled": "Ativado",
98+
"generateKey": "Gerar chave",
99+
"key": "Chave",
100+
"label": "Rótulo",
101+
"logo": "Logotipo",
102+
"noKeysYet": "Nenhuma chave pública ainda",
103+
"noRatePlans": "Nenhum plano de tarifas",
104+
"noRoomTypes": "Nenhum tipo de quarto",
105+
"percentageLabel": "Porcentagem",
106+
"primaryColor": "Cor Principal",
107+
"accentColor": "Cor de Destaque",
108+
"promptLabel": "Rótulo para esta chave pública (ex: \"Site de marketing\")",
109+
"publishableKeys": "Chaves Públicas",
110+
"ratePlans": "Planos de Tarifas",
111+
"refundableDeposit": "Depósito reembolsável",
112+
"revoke": "Revogar",
113+
"revoked": "revogada",
114+
"roomTypes": "Tipos de Quarto",
115+
"sellableInventory": "Inventário Disponível",
116+
"sellableInventoryDescription": "Apenas os tipos de quarto e planos de tarifas marcados estarão disponíveis para reserva.",
117+
"title": "Reservas Diretas",
118+
"toasts": {
119+
"keyGenerated": "Chave pública gerada",
120+
"keyGenerationFailed": "Falha ao gerar chave",
121+
"keyRevoked": "Chave revogada",
122+
"keyRevocationFailed": "Falha ao revogar chave",
123+
"settingsSaved": "Configurações do sistema de reservas salvas",
124+
"settingsSaveFailed": "Falha ao salvar configurações"
125+
},
126+
"type": "Tipo"
127+
},
77128
"cashier": {
78129
"amount": "Valor",
79130
"cashier": "Operador de caixa",
@@ -245,7 +296,7 @@
245296
"roomStatus": "Status dos quartos",
246297
"roomStatuses": {
247298
"clean": "Limpo",
248-
"guest_ready": "Pronto para Hóspede",
299+
"guest_ready": "Pronto",
249300
"inspected": "Inspecionado",
250301
"occupied": "Ocupado",
251302
"out_of_order": "Em manutenção",
@@ -261,18 +312,39 @@
261312
"allStatus": "Todos os status",
262313
"amount": "Valor",
263314
"balance": "Saldo",
315+
"chargeTypes": {
316+
"food_beverage": "A&B",
317+
"laundry": "Lavanderia",
318+
"minibar": "Frigobar",
319+
"other": "Outros",
320+
"parking": "Estacionamento",
321+
"room": "Quarto"
322+
},
264323
"charges": "Lançamentos",
265324
"closeFolio": "Fechar conta",
266325
"closed": "Fechada",
267326
"date": "Data",
268327
"description": "Descrição",
269328
"folioNumber": "Nº da conta",
270329
"guest": "Hóspede",
330+
"master": "Mestre",
271331
"method": "Método",
272332
"noCharges": "Nenhum lançamento",
273333
"noFoliosFound": "Nenhuma conta encontrada",
274334
"noPayments": "Nenhum pagamento",
275335
"open": "Aberta",
336+
"paymentMethods": {
337+
"bank_transfer": "Transferência Bancária",
338+
"cash": "Dinheiro",
339+
"credit_card": "Cartão de Crédito",
340+
"debit_card": "Cartão de Débito"
341+
},
342+
"paymentStatuses": {
343+
"captured": "Recebido",
344+
"failed": "Falhou",
345+
"pending": "Pendente",
346+
"refunded": "Reembolsado"
347+
},
276348
"payments": "Pagamentos",
277349
"postCharge": "Lançar cobrança",
278350
"record": "Registrar",
@@ -303,6 +375,7 @@
303375
"driversLicense": "Carteira de motorista",
304376
"enterIdNumber": "Informe o número do documento",
305377
"express": "Expresso",
378+
"expressCheckoutConfirm": "Fazer check-out expresso? Isso quitará automaticamente a conta.",
306379
"groupCheckIn": "Check-in em grupo ({{count}})",
307380
"guest": "Hóspede",
308381
"idDocumentType": "Tipo de documento",
@@ -372,6 +445,7 @@
372445
},
373446
"guests": {
374447
"confirmDeletion": "Confirmar exclusão do hóspede",
448+
"confirmDeletionPrompt": "Você tem certeza absoluta? Essa ação não pode ser desfeita.",
375449
"createGuest": "Criar hóspede",
376450
"deleteGuest": "Excluir hóspede (LGPD)",
377451
"deletionDescription": "Todos os dados pessoais de {{name}} serão excluídos permanentemente de acordo com o direito de eliminação previsto na LGPD.",
@@ -567,7 +641,7 @@
567641
"settings": "Configurações",
568642
"tagline": "Plataforma de IA Hoteleira",
569643
"tax": "Configurações Fiscais",
570-
"usersRoles": "Usuários e Perfis"
644+
"usersRoles": "Usuários e Cargos"
571645
},
572646
"nightAudit": {
573647
"anomalyDetection": "Detecção de anomalias por IA",
@@ -618,14 +692,14 @@
618692
},
619693
"admin": {
620694
"roles": {
621-
"manage": "Gerenciar perfis e permissões"
695+
"manage": "Gerenciar cargos e permissões"
622696
},
623697
"users": {
624698
"manage": "Gerenciar usuários"
625699
}
626700
},
627701
"bookingengine": {
628-
"manage": "Gerenciar o motor de reservas direto"
702+
"manage": "Gerenciar o sistema de reservas diretas"
629703
},
630704
"cashier": {
631705
"access": "Operações de caixa"
@@ -693,7 +767,7 @@
693767
"manage": "Gerenciar configurações da propriedade"
694768
},
695769
"tax": {
696-
"manage": "Perfis e regras fiscais"
770+
"manage": "Cargos e regras fiscais"
697771
}
698772
}
699773
},
@@ -792,8 +866,8 @@
792866
"status": "Status",
793867
"statuses": {
794868
"cancelled": "Cancelada",
795-
"checked_in": "Check-in realizado",
796-
"checked_out": "Check-out realizado",
869+
"checked_in": "Hospedado",
870+
"checked_out": "Finalizado",
797871
"confirmed": "Confirmada",
798872
"no_show": "Não compareceu",
799873
"pending": "Pendente"
@@ -985,12 +1059,12 @@
9851059
"saving": "Salvando...",
9861060
"selectProperty": "Selecione uma propriedade",
9871061
"staffDashboardBranding": "Identidade visual do painel da equipe",
988-
"staffDashboardBrandingDescription": "Separada da identidade visual do motor de reservas para hóspedes. Aplicada apenas à interface da equipe.",
1062+
"staffDashboardBrandingDescription": "Separada da identidade visual do sistema de reservas para hóspedes. Aplicada apenas à interface da equipe.",
9891063
"subscriber": "Assinante",
9901064
"tabs": {
991-
"bookingEngine": "Motor de reservas",
1065+
"bookingEngine": "Sistema de reservas",
9921066
"property": "Propriedade",
993-
"roles": "Perfis",
1067+
"roles": "Cargos",
9941068
"users": "Usuários",
9951069
"webhooks": "Webhooks"
9961070
},

0 commit comments

Comments
 (0)