internationalization.service.ts 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. import { Injectable } from '@angular/core';
  2. import { ResourcesService } from '../resources.service';
  3. @Injectable({
  4. providedIn: 'root',
  5. })
  6. export class InternationalizationService {
  7. public words: Map<string, string>;
  8. private arrAvailableLanguages: Array<string>;
  9. private arrLanguageWords: Array<any>;
  10. constructor(public resourcesService: ResourcesService) {
  11. this.arrAvailableLanguages = ['ES', 'IN'];
  12. this.words = new Map<string, string>();
  13. this.arrLanguageWords = [
  14. {
  15. S002V01M03GEPR: 'Gestión de los procesos',
  16. S002V01S01GFTR: 'Gestión de los flujos de trabajo',
  17. S002V01S02GETA: 'Gestión de las tareas',
  18. S002V01S03SFTR: 'Solicitud de flujos de trabajo',
  19. cambiar_idioma: 'Cambiar idioma',
  20. espanol: 'Español',
  21. ingles: 'Inglés',
  22. regresar: 'Regresar',
  23. S002V01F01GFTR: 'Gestión de los flujos de trabajo',
  24. S002V01F02BUMU: 'Búsquedas multicriterio',
  25. S002V01F01GETA: 'Gestión de tareas',
  26. S002V01F01GSFT: 'Gestión de solicitudes de flujos de trabajo',
  27. titulo_selecciona_funcion: 'Seleccione una función',
  28. cerrar: 'Cerrar',
  29. guardar: 'Guardar',
  30. cancelar: 'Cancelar',
  31. aceptar: 'Aceptar',
  32. editar: 'Editar',
  33. eliminar: 'Eliminar',
  34. ver_tareas: 'Ver tareas',
  35. ver_flujo: 'Ver flujo de trabajo',
  36. cargando_menu: 'Cargando menú de gestión de procesos',
  37. nuevo: 'Nuevo',
  38. actualizar_datos: 'Actualizar Datos',
  39. buscador: 'Buscador',
  40. ingrese_palabra_buscar: 'Ingrese la palabra a buscar',
  41. eliminar_filtro: 'Eliminar filtro',
  42. items_per_page_label: 'Datos por página',
  43. next_page_label: 'Siguiente página',
  44. previous_page_label: 'Anterior página',
  45. first_page_label: 'Primera página',
  46. last_page_label: 'Última página',
  47. _de_: ' de ',
  48. cargando_informacion_flujos:
  49. 'Cargando información de los flujos de trabajo',
  50. cargando_informacion_formulario:
  51. 'Cargando la información del formulario',
  52. cargando_informacion_tareas: 'Cargando la información de las tareas',
  53. cargando_informacion_solicitudes:
  54. 'Cargando la información de las solicitudes',
  55. cargando_informacion_notificaciones:
  56. 'Cargando la información de las notificaciones',
  57. descripcion: 'Descripción',
  58. es_automatico: '¿Es automático?',
  59. fue_automatico: '¿Fue automático?',
  60. es_predefinido: '¿Es predefinido?',
  61. usuario_modificacion: 'Usuario modificación',
  62. fecha_actualizacion: 'Fecha de actualización',
  63. estado: 'Estado',
  64. acciones: 'Acciones',
  65. registro_exitoso: '¡Registro exitoso!',
  66. modificacion_exitoso: '¡Modificación Existosa!',
  67. opcion_no_disponible: 'Opción no disponible',
  68. clic_desplegar: 'Clic para desplegar',
  69. confirmacion: 'Confirmación',
  70. register_description_alert:
  71. '¿Está seguro de registrar el flujo de trabajo?',
  72. update_description_alert:
  73. '¿Está seguro de modificar el flujo de trabajo?',
  74. delete_description_alert:
  75. '¿Está seguro de eliminar el flujo de trabajo?',
  76. update_request_alert:
  77. '¿Está seguro de modificar el estado de la solicitud?',
  78. register_task_alert: '¿Está seguro de registrar la tarea?',
  79. update_task_alert: '¿Está seguro de modificar la tarea?',
  80. registro_flujo_trabajo: 'Registro de flujo de trabajo',
  81. modificacion_flujo_trabajo: 'Modificación de flujo de trabajo',
  82. nombre_flujo_trabajo: 'Nombre del flujo de trabajo',
  83. placeholder_nombre_flujo_trabajo:
  84. 'Ingrese el nombre del flujo de trabajo...',
  85. el_campo: 'El campo',
  86. es_requerido: 'es requerido',
  87. placeholder_descripcion:
  88. 'Ingrese la descripción del flujo de trabajo...',
  89. no_tarea: 'No. Tarea',
  90. no_flujo: 'No. Flujo',
  91. nombre_tarea: 'Nombre tarea',
  92. secuencia: 'Secuencia',
  93. registro_tarea: 'Registro de tareas',
  94. modificacion_tarea: 'Modificación de tareas',
  95. flujo_trabajo: 'Flujo de trabajo',
  96. procesos_flujo_trabajo: 'Procesos de flujo de trabajo',
  97. nombre_de_la_tarea: 'Nombre de la tarea',
  98. placeholder_nombre_de_la_tarea: 'Ingrese el nombre de la tarea...',
  99. placeholder_descripcion_tarea: 'Ingrese la descripción de la tarea...',
  100. reglas_validacion: 'Reglas de validación',
  101. usuario_para_validacion: 'Usuario para validar la tarea',
  102. usuario_solo_notificar: 'Usuarios para solo notificar',
  103. cambio_flujo_trabajo: 'Cambio de flujo de trabajo',
  104. cambiar_usuario: 'Cambiar al usuario',
  105. siempre_esperar_validacion_usuario:
  106. 'Siempre esperar validación del usuario',
  107. cambiar_otro_usuario: 'Cambiar al siguiente usuario',
  108. ejecutar_otro_flujo_trabajo: 'Ejecutar otro flujo de trabajo',
  109. tarea: 'Tarea',
  110. cambio_estado_solicitud: 'Cambio de estado de la solicitud',
  111. proceso: 'Proceso',
  112. ver_informacion_flujo_trabajo: 'Ver información del flujo de trabajo',
  113. ver_informacion: 'Ver información',
  114. numero_ejecucion: 'No. Ejecución',
  115. no_ejecucion_tarea: 'No. Ejecución Tarea',
  116. nombre_responsable: 'Nombre del responsable',
  117. ver_ejecucion_tareas: 'Ver ejecución de tareas',
  118. solicitud_ejecuciones_tareas: 'Solicitud de ejecuciones de tareas',
  119. mensaje_rechazo: 'Mensaje de rechazo',
  120. progreso: 'Progreso',
  121. historial_validaciones: 'Historial de validaciones',
  122. usuario: 'Usuario',
  123. no_notificacion: 'No. Notificación',
  124. tipo_notificacion: 'Tipo de notificación',
  125. cargando_informacion: 'Cargando información',
  126. buscar: 'Buscar',
  127. busqueda_solicitudes: 'Búsquedas de solicitudes',
  128. busqueda_notificaciones: 'Búsquedas de notificaciones',
  129. numero_ejecucion_flujo_trabajo:
  130. 'Número de ejecución del flujo de trabajo',
  131. estado_ejecucion_flujo_trabajo:
  132. 'Estado de ejecución del flujo de trabajo',
  133. numero_ejecucion_tarea: 'Número de ejecución de la tarea',
  134. estado_ejecucion_tarea: 'Estado de ejecución de la tarea',
  135. nombre_proceso: 'Nombre del proceso',
  136. rango_fecha: 'Rango de fechas',
  137. fecha_inicial: 'Fecha inicial',
  138. fecha_final: 'Fecha final',
  139. usuario_notificado: 'Usuario notificado',
  140. numero_notificacion: 'Número de notificación',
  141. estado_notifiación: 'Estado de la notificación',
  142. fecha_inicio_no_valida: 'Fecha de inicio no válida',
  143. fecha_finalizacion_no_valida: 'Fecha de finalización no válida',
  144. ejecucion_flujo_trabajo: 'Ejecución del flujo de trabajo',
  145. ejecucion_tarea: 'Ejecución de la tarea',
  146. ver_detalles_solicitud: 'Ver detalles de la solicitud',
  147. detalles_solicitud: 'Detalles de la solicitud',
  148. descripcion_flujo_trabajo: 'Descripción del flujo de trabajo',
  149. descripcion_tarea: 'Descripción de la tarea',
  150. ver_informacion_solicitud: 'Ver información de la solicitud',
  151. no_es_valido: 'no es válido',
  152. detalles_notificacion: 'Detalles de la notificación',
  153. numero_secuencia: 'Número de secuencia',
  154. reset_configuration: 'Restaurar configuración',
  155. reset_description_alert:
  156. '¿Está seguro de restablecer la configuración por defecto de todos los flujos de trabajo?',
  157. register_task: 'Registrar tarea',
  158. update_task: 'Actualizar tarea',
  159. module: 'Módulo relacionado',
  160. task_users_settings: 'Configuración de usuarios',
  161. next_status: 'Siguiente estado',
  162. automatic_task: 'Tarea automática',
  163. configure_users: 'Configurar usuarios',
  164. the_maximum_length: 'La longitud máxima del campo',
  165. the_minimum_length: 'La longitud mínima del campo',
  166. is_of: 'es de',
  167. characters: 'caracteres',
  168. requiere_validacion: 'Requiere validación',
  169. regla_validacion: 'Regla de validación',
  170. registrar_workflow: 'Registrar Workflow',
  171. nombre_workflow: 'Nombre del Workflow',
  172. campo_requerido: 'Este campo es requerido',
  173. registrar: 'Registrar',
  174. sin_datos: 'Sin datos',
  175. confirmar: 'Confirmar',
  176. esta_seguro_eliminar_tarea: '¿Está seguro de eliminar la tarea?',
  177. eliminacion_exitosa: '¡Eliminación Exitosa!',
  178. ingrese_nombre_tarea: 'Ingrese el nombre de la tarea',
  179. ingrese_descripcion_tarea: 'Ingrese la descripción de la tarea',
  180. usuario_validador: 'Usuarios elegibles para validar',
  181. usuarios_notificar: 'Usuarios a Notificar',
  182. esperar: 'Esperar',
  183. ejecutar: 'Ejecutar',
  184. workflow_ejecutar: 'Workflow a Ejecutar',
  185. funcion_relacionada_tarea: 'Función relacionada que ejecuta la tarea',
  186. modulo: 'Módulo',
  187. submodulo: 'Submódulo',
  188. funcion: 'Función',
  189. registro_exitoso_tarea: '¡Registro exitoso!',
  190. modificacion_exitosa_tarea: '¡Modificación exitosa!',
  191. detalles_tarea: 'Detalles de la Tarea',
  192. id: 'ID',
  193. nombre: 'Nombre',
  194. si: 'Sí',
  195. no: 'No',
  196. na: 'N/A',
  197. usuario_registro: 'Usuario Registro',
  198. fecha_registro: 'Fecha Registro',
  199. fecha_modifica: 'Fecha Modifica',
  200. hoy: 'Hoy',
  201. hace_1_dia: 'Hace 1 día',
  202. hace_dias: 'Hace {0} días',
  203. modulos: 'Módulos',
  204. predeterminado: 'Predeterminado',
  205. version: 'Versión',
  206. historial: 'Historial',
  207. ver_historial_cambios: 'Ver historial de cambios',
  208. ver_detalles: 'Ver detalles',
  209. registrar_tareas: 'Registrar tareas',
  210. activar: 'Activar',
  211. desactivar: 'Desactivar',
  212. cambio_estado_exitoso: '¡Cambio de estado exitoso!',
  213. no_puede_activar_workflow:
  214. 'No se puede activar el workflow. Debe tener al menos una tarea registrada.',
  215. error_verificar_tareas: 'Error al verificar tareas: {0}',
  216. no_pudo_encontrar_informacion:
  217. 'No se pudo encontrar información para editar.',
  218. comentario_cambio: 'Comentario del cambio',
  219. explique_motivo_cambio: 'Explique el motivo del cambio...',
  220. detalles_workflow: 'Detalles del Workflow',
  221. usuario_modifica: 'Usuario modifica',
  222. cambiar_estado: 'Cambiar Estado',
  223. esta_seguro_cambiar_estado: '¿Está seguro de cambiar el estado a {0}?',
  224. explique_motivo_cambio_estado:
  225. 'Explique el motivo del cambio de estado...',
  226. intervalo: 'Intervalo',
  227. ingrese_intervalo: 'Ingrese el intervalo',
  228. unidad_tiempo: 'Unidad de tiempo',
  229. segundos: 'Segundos',
  230. minutos: 'Minutos',
  231. horas: 'Horas',
  232. },
  233. {
  234. S002V01M03GEPR: 'Process management',
  235. S002V01S01GFTR: 'Workflow management',
  236. S002V01S02GETA: 'Task management',
  237. S002V01S03SFTR: 'Request workflows',
  238. cambiar_idioma: 'Change language',
  239. espanol: 'Spanish',
  240. ingles: 'English',
  241. regresar: 'Go back',
  242. S002V01F01GFTR: 'Workflow management',
  243. S002V01F02BUMU: 'Multi-criteria searches',
  244. S002V01F01GETA: 'Task management',
  245. S002V01F01GSFT: 'Workflow request management',
  246. titulo_selecciona_funcion: 'Select a function',
  247. cerrar: 'Close',
  248. guardar: 'Save',
  249. cancelar: 'Cancel',
  250. aceptar: 'Accept',
  251. editar: 'Edit',
  252. eliminar: 'Delete',
  253. ver_tareas: 'View tasks',
  254. ver_flujo: 'View workflow',
  255. cargando_menu: 'Loading process management menu',
  256. nuevo: 'New',
  257. actualizar_datos: 'Update data',
  258. buscador: 'Search',
  259. ingrese_palabra_buscar: 'Enter the word to search',
  260. eliminar_filtro: 'Remove filter',
  261. items_per_page_label: 'Items per page',
  262. next_page_label: 'Next page',
  263. previous_page_label: 'Previous page',
  264. first_page_label: 'First page',
  265. last_page_label: 'Last page',
  266. _de_: ' of ',
  267. cargando_informacion_flujos: 'Loading workflow information',
  268. cargando_informacion_formulario: 'Loading form information',
  269. cargando_informacion_tareas: 'Loading task information',
  270. cargando_informacion_solicitudes: 'Loading application information',
  271. cargando_informacion_notificaciones: 'Loading notification information',
  272. descripcion: 'Description',
  273. es_automatico: 'It is automatic?',
  274. fue_automatico: 'Was it automatic?',
  275. es_predefinido: 'Is it predefined?',
  276. usuario_modificacion: 'User modification',
  277. fecha_actualizacion: 'Update date',
  278. estado: 'State',
  279. acciones: 'Actions',
  280. registro_exitoso: 'Successful registration!',
  281. modificacion_exitoso: 'Successful Modification!',
  282. opcion_no_disponible: 'Option not available',
  283. clic_desplegar: 'Click to display',
  284. confirmacion: 'Confirmation',
  285. register_description_alert: 'Are you sure to record the workflow?',
  286. update_description_alert: 'Are you sure about modifying the workflow?',
  287. delete_description_alert: 'Are you sure to delete the workflow?',
  288. update_request_alert:
  289. 'Are you sure to change the status of the request?',
  290. register_task_alert: 'Are you sure to register the task?',
  291. update_task_alert: 'Are you sure about modifying the task?.',
  292. registro_flujo_trabajo: 'Workflow registration',
  293. modificacion_flujo_trabajo: 'Workflow Modification',
  294. nombre_flujo_trabajo: 'Workflow name',
  295. placeholder_nombre_flujo_trabajo: 'Enter the name of the workflow...',
  296. el_campo: 'The field',
  297. es_requerido: 'is required',
  298. placeholder_descripcion: 'Enter the workflow description...',
  299. no_tarea: 'No. Task',
  300. no_flujo: 'No. Workflow',
  301. nombre_tarea: 'Task name',
  302. secuencia: 'Sequence',
  303. registro_tarea: 'Task registration',
  304. modificacion_tarea: 'Task modification',
  305. flujo_trabajo: 'Workflow',
  306. procesos_flujo_trabajo: 'Workflow processes',
  307. nombre_de_la_tarea: 'Task name',
  308. placeholder_nombre_de_la_tarea: 'Enter the name of the task...',
  309. placeholder_descripcion_tarea: 'Enter the task description...',
  310. reglas_validacion: 'Validation rules',
  311. usuario_para_validacion: 'User to validate the task',
  312. usuario_solo_notificar: 'Notify-only users',
  313. cambio_flujo_trabajo: 'Workflow change',
  314. cambiar_usuario: 'Change user',
  315. siempre_esperar_validacion_usuario: 'Always wait for user validation',
  316. cambiar_otro_usuario: 'Switch to next user',
  317. ejecutar_otro_flujo_trabajo: 'Run another workflow',
  318. tarea: 'Task',
  319. cambio_estado_solicitud: 'Request status change',
  320. proceso: 'Process',
  321. ver_informacion_flujo_trabajo: 'View workflow information',
  322. ver_informacion: 'View information',
  323. numero_ejecucion: 'No. Execution',
  324. no_ejecucion_tarea: 'No. Task Execution',
  325. nombre_responsable: 'Name of person responsible',
  326. ver_ejecucion_tareas: 'View task execution',
  327. solicitud_ejecuciones_tareas: 'Request task executions',
  328. mensaje_rechazo: 'Rejection message',
  329. progreso: 'Progress',
  330. historial_validaciones: 'Validation history',
  331. usuario: 'User',
  332. no_notificacion: 'No. Notification',
  333. tipo_notificacion: 'Notification type',
  334. cargando_informacion: 'Loading information',
  335. buscar: 'Search',
  336. busqueda_solicitudes: 'Request searches',
  337. busqueda_notificaciones: 'Notification searches',
  338. numero_ejecucion_flujo_trabajo: 'Workflow Execution Number',
  339. estado_ejecucion_flujo_trabajo: 'Workflow Execution Status',
  340. numero_ejecucion_tarea: 'Task execution number',
  341. estado_ejecucion_tarea: 'Task execution status',
  342. nombre_proceso: 'Name of process',
  343. rango_fecha: 'Date range',
  344. fecha_inicial: 'Start date',
  345. fecha_final: 'End date',
  346. usuario_notificado: 'Notified user',
  347. numero_notificacion: 'Notification number',
  348. estado_notifiación: 'Notification status',
  349. fecha_inicio_no_valida: 'Invalid start date',
  350. fecha_finalizacion_no_valida: 'Invalid end date',
  351. ejecucion_flujo_trabajo: 'Workflow execution',
  352. ejecucion_tarea: 'Task execution',
  353. ver_detalles_solicitud: 'View request details',
  354. detalles_solicitud: 'Request details',
  355. descripcion_flujo_trabajo: 'Workflow description',
  356. descripcion_tarea: 'Task description',
  357. ver_informacion_solicitud: 'View request information',
  358. no_es_valido: 'it is not valid',
  359. detalles_notificacion: 'Notification details',
  360. numero_secuencia: 'Sequence number',
  361. reset_configuration: 'Restore settings',
  362. reset_description_alert:
  363. 'Are you sure you want to reset all workflows to default settings?',
  364. register_task: 'Add task',
  365. update_task: 'Update task',
  366. module: 'Related module',
  367. task_users_settings: 'User configuration',
  368. next_status: 'Next status',
  369. automatic_task: 'Automatic task',
  370. configure_users: 'Configure users',
  371. the_maximum_length: 'The maximum length of the',
  372. the_minimum_length: 'The minimum length of the',
  373. is_of: 'field is',
  374. characters: 'characters',
  375. requiere_validacion: 'Requires validation',
  376. regla_validacion: 'Validation rule',
  377. registrar_workflow: 'Register Workflow',
  378. nombre_workflow: 'Workflow Name',
  379. campo_requerido: 'This field is required',
  380. registrar: 'Register',
  381. sin_datos: 'No data',
  382. confirmar: 'Confirm',
  383. esta_seguro_eliminar_tarea: 'Are you sure you want to delete the task?',
  384. eliminacion_exitosa: 'Successful Deletion!',
  385. ingrese_nombre_tarea: 'Enter the task name',
  386. ingrese_descripcion_tarea: 'Enter the task description',
  387. usuario_validador: 'users eligible to validate',
  388. usuarios_notificar: 'Users to Notify',
  389. esperar: 'Wait',
  390. ejecutar: 'Execute',
  391. workflow_ejecutar: 'Workflow to Execute',
  392. funcion_relacionada_tarea: 'Related function that executes the task',
  393. modulo: 'Module',
  394. submodulo: 'Submodule',
  395. funcion: 'Function',
  396. registro_exitoso_tarea: 'Successful registration!',
  397. modificacion_exitosa_tarea: 'Successful modification!',
  398. detalles_tarea: 'Task Details',
  399. id: 'ID',
  400. nombre: 'Name',
  401. si: 'Yes',
  402. no: 'No',
  403. na: 'N/A',
  404. usuario_registro: 'Registration User',
  405. fecha_registro: 'Registration Date',
  406. fecha_modifica: 'Modification Date',
  407. hoy: 'Today',
  408. hace_1_dia: '1 day ago',
  409. hace_dias: '{0} days ago',
  410. modulos: 'Modules',
  411. predeterminado: 'Default',
  412. version: 'Version',
  413. historial: 'History',
  414. ver_historial_cambios: 'View change history',
  415. ver_detalles: 'View details',
  416. registrar_tareas: 'Register tasks',
  417. activar: 'Activate',
  418. desactivar: 'Deactivate',
  419. cambio_estado_exitoso: 'Status change successful!',
  420. no_puede_activar_workflow:
  421. 'Cannot activate workflow. Must have at least one registered task.',
  422. error_verificar_tareas: 'Error verifying tasks: {0}',
  423. no_pudo_encontrar_informacion: 'Could not find information to edit.',
  424. comentario_cambio: 'Change comment',
  425. explique_motivo_cambio: 'Explain the reason for the change...',
  426. detalles_workflow: 'Workflow Details',
  427. usuario_modifica: 'User modifies',
  428. cambiar_estado: 'Change Status',
  429. esta_seguro_cambiar_estado:
  430. 'Are you sure you want to change the status to {0}?',
  431. explique_motivo_cambio_estado:
  432. 'Explain the reason for the status change...',
  433. intervalo: 'Interval',
  434. ingrese_intervalo: 'Enter the interval',
  435. unidad_tiempo: 'Time unit',
  436. segundos: 'Seconds',
  437. minutos: 'Minutes',
  438. horas: 'Hours',
  439. },
  440. ];
  441. this.checkLanguage();
  442. }
  443. private checkLanguage() {
  444. let language: string | null = localStorage.getItem('language');
  445. if (language === null) {
  446. localStorage.setItem('language', 'ES');
  447. language = 'ES';
  448. }
  449. if (!this.arrAvailableLanguages.includes(language)) {
  450. this.resourcesService.openSnackBar(
  451. 'El idioma seleccionado no está disponible.'
  452. );
  453. language = 'ES';
  454. }
  455. this.generateObjectLanguage(language);
  456. }
  457. public generateObjectLanguage(language: string) {
  458. const indexLanguage = this.arrAvailableLanguages.findIndex(
  459. (aviable: string) => aviable === language
  460. );
  461. const elementLenguage = this.arrLanguageWords[indexLanguage];
  462. const arrKeys: Array<string> = Object.keys(elementLenguage);
  463. const propertyValues: Array<string> = Object.values(elementLenguage);
  464. this.words = new Map<string, string>();
  465. arrKeys.forEach((element, index) => {
  466. this.words.set(element, propertyValues[index]);
  467. });
  468. }
  469. public get(word: string) {
  470. let result: string | undefined = this.words.get(word);
  471. if (result === undefined) {
  472. result = '...';
  473. }
  474. return result;
  475. }
  476. }