[Pkg-voip-commits] r1962 - destar/trunk/debian/patches

Alejandro Rios P. alerios-guest at costa.debian.org
Tue Jun 27 05:51:43 UTC 2006


Author: alerios-guest
Date: 2006-06-27 05:51:37 +0000 (Tue, 27 Jun 2006)
New Revision: 1962

Added:
   destar/trunk/debian/patches/30_pofiles.dpatch
   destar/trunk/debian/patches/40_zaptypo.dpatch
   destar/trunk/debian/patches/50_portbug.dpatch
Modified:
   destar/trunk/debian/patches/00list
Log:
*Applied patches from upstream svn.


Modified: destar/trunk/debian/patches/00list
===================================================================
--- destar/trunk/debian/patches/00list	2006-06-27 05:10:10 UTC (rev 1961)
+++ destar/trunk/debian/patches/00list	2006-06-27 05:51:37 UTC (rev 1962)
@@ -2,3 +2,6 @@
 10_notexecutables.dpatch
 20_fix_changelog.dpatch
 no_medusa.dpatch
+30_pofiles.dpatch
+40_zaptypo.dpatch
+50_portbug.dpatch

Added: destar/trunk/debian/patches/30_pofiles.dpatch
===================================================================
--- destar/trunk/debian/patches/30_pofiles.dpatch	2006-06-27 05:10:10 UTC (rev 1961)
+++ destar/trunk/debian/patches/30_pofiles.dpatch	2006-06-27 05:51:37 UTC (rev 1962)
@@ -0,0 +1,4237 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 30_pofiles.dpatch by  <root at localhost.localdomain>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad destar-0.2beta~/po/es.po destar-0.2beta/po/es.po
+--- destar-0.2beta~/po/es.po	2006-06-17 12:23:57.000000000 +0000
++++ destar-0.2beta/po/es.po	2006-06-27 05:31:28.000000000 +0000
+@@ -19,7 +19,7 @@
+ #: backend.py:63 ../backend.py:63
+ #, python-format
+ msgid "Warning: There is no %s or %s file yet."
+-msgstr "Advertencia: Aún no existe el archivo %s o %s."
++msgstr "Advertencia: Aún no existe el archivo %s o %s."
+ 
+ #: backend.py:366 ../backend.py:375
+ #, python-format
+@@ -46,7 +46,7 @@
+ #: ../page_owner_cdr.ptl:143 ../page_owner_cdr.ptl:283
+ #: ../page_stats_cdr.ptl:145 ../page_stats_cdr.ptl:285
+ msgid "Duration"
+-msgstr "Duracion"
++msgstr "Duración"
+ 
+ #: cdrutils.py:45 page_admin_cdr.ptl:76 page_admin_cdr.ptl:233
+ #: page_admin_cdr.ptl:235 page_admin_cdr.ptl:237 page_admin_cdr.ptl:239
+@@ -59,11 +59,11 @@
+ 
+ #: cfg_app_callfw.py:26 ../cfg_app_callfw.py:26
+ msgid "Call forwarding"
+-msgstr "Habilitar reenvío de llamadas"
++msgstr "Habilitar reenvío de llamadas"
+ 
+ #: cfg_app_callfw.py:27 ../cfg_app_callfw.py:27
+ msgid "Extensions to set/unset call forwarding."
+-msgstr "Extensión para programar/desprogramar la redirección de llamadas."
++msgstr "Extensión para programar/desprogramar la redirección de llamadas."
+ 
+ #: cfg_app_callfw.py:28 cfg_opt_music.py:28 cfg_opt_user.py:34
+ #: configlets.py:419 configlets.py:600 configlets.py:658 configlets.py:798
+@@ -77,11 +77,11 @@
+ 
+ #: cfg_app_callfw.py:28 ../cfg_app_callfw.py:33
+ msgid "Call Forwarding Unconditional"
+-msgstr "Reenvío de llamadas incondicional"
++msgstr "Reenvío de llamadas incondicional"
+ 
+ #: cfg_app_callfw.py:28 ../cfg_app_callfw.py:33
+ msgid "Call Forwarding if Busy/Unavailable"
+-msgstr "Redirigir llamadas si está ocupado o no disponible"
++msgstr "Redirigir llamadas si está ocupado o no disponible"
+ 
+ #: cfg_app_callfw.py:29 ../cfg_app_callfw.py:34
+ msgid "Setting preffix"
+@@ -119,12 +119,12 @@
+ #: ../configlets.py:576 ../configlets.py:880 ../configlets.py:1007
+ #: ../configlets.py:1028 ../page_stats_phone.ptl:65
+ msgid "Extension"
+-msgstr "Extensión"
++msgstr "Extensión"
+ 
+ #: cfg_app_conference.py:28 cfg_app_meetme.py:28 ../cfg_app_conference.py:33
+ #: ../cfg_app_meetme.py:32
+ msgid "Conference number"
+-msgstr "Número de Conferencia"
++msgstr "Número de Conferencia"
+ 
+ #: cfg_app_directory.py:26 cfg_opt_music.py:29 ../cfg_app_directory.py:26
+ #: ../cfg_opt_music.py:32
+@@ -133,7 +133,7 @@
+ 
+ #: cfg_app_directory.py:27 ../cfg_app_directory.py:28
+ msgid "This application allows you to dial by name."
+-msgstr "Esta aplicación le permite marcar deletreando el nombre."
++msgstr "Esta aplicación le permite marcar deletreando el nombre."
+ 
+ #: cfg_app_dnd.py:26 ../cfg_app_dnd.py:26
+ msgid "Set/Unset DND"
+@@ -141,16 +141,16 @@
+ 
+ #: cfg_app_dnd.py:27 ../cfg_app_dnd.py:28
+ msgid "Extensions to set/unset 'Do Not Disturb'."
+-msgstr "Extensión para programar/desprogramar 'No molestar'."
++msgstr "Extensión para programar/desprogramar 'No molestar'."
+ 
+ #: cfg_app_dnd.py:29 ../cfg_app_dnd.py:33
+ msgid "Setting extension"
+-msgstr "Extensión para programar"
++msgstr "Extensión para programar"
+ 
+ #: cfg_app_dnd.py:42 configlets.py:455 ../cfg_app_dnd.py:50
+ #: ../configlets.py:608
+ msgid "Extension already in use"
+-msgstr "La extensión ya está en uso"
++msgstr "La extensión ya está en uso"
+ 
+ #: cfg_app_echo.py:26 ../cfg_app_echo.py:26
+ msgid "Echo test"
+@@ -161,8 +161,8 @@
+ "The echo test immediately plays back what you speek. You can\n"
+ "\t\t\t   use this to find out how much echo you have."
+ msgstr ""
+-"La prueba de eco reproduce inmediatamente lo que usted está hablando. Puede "
+-"usarla para determinar la cantidad de eco que está experimentando."
++"La prueba de eco reproduce inmediatamente lo que usted está hablando. Puede "
++"usarla para determinar la cantidad de eco que está experimentando."
+ 
+ #: cfg_app_meetme.py:26 ../cfg_app_meetme.py:26
+ msgid "Meeting room"
+@@ -170,7 +170,7 @@
+ 
+ #: cfg_app_meetme.py:28 ../cfg_app_meetme.py:32
+ msgid "If empty, will be the same as the extension"
+-msgstr "Si se omite, será igual al número de la extensión"
++msgstr "Si se omite, será igual al número de la extensión"
+ 
+ #: cfg_app_meetme.py:29 ../cfg_app_meetme.py:33
+ msgid "PIN"
+@@ -186,14 +186,14 @@
+ #: ../cfg_trunk_zappbx.py:39 ../cfg_trunk_zappri.py:49 ../cfg_trunk_zap.py:38
+ #: ../page_admin_panel.ptl:27
+ msgid "Operator Panel"
+-msgstr "Pánel de Operadora"
++msgstr "Pánel de Operadora"
+ 
+ #: cfg_app_meetme.py:32 cfg_trunk_iax.py:48 cfg_trunk_sip.py:40
+ #: cfg_trunk_zappri.py:46 cfg_trunk_zap.py:36 ../cfg_app_meetme.py:36
+ #: ../cfg_trunk_iax.py:50 ../cfg_trunk_sip.py:45 ../cfg_trunk_zappbx.py:40
+ #: ../cfg_trunk_zappri.py:50 ../cfg_trunk_zap.py:39
+ msgid "Show this trunk in the panel"
+-msgstr "Mostrar esta troncal en el pánel de operadora"
++msgstr "Mostrar esta troncal en el pánel de operadora"
+ 
+ #: cfg_app_milliwatt.py:26 ../cfg_app_milliwatt.py:26
+ msgid "Milliwatt test"
+@@ -207,16 +207,16 @@
+ 
+ #: cfg_app_music.py:26 ../cfg_app_music.py:26
+ msgid "Listen to music-on-hold"
+-msgstr "Escuchar música en espera"
++msgstr "Escuchar música en espera"
+ 
+ #: cfg_app_music.py:27 ../cfg_app_music.py:28
+ msgid "Play Play Music On Hold until you hang up."
+-msgstr "Reproducir música en espera hasta que cuelge."
++msgstr "Reproducir música en espera hasta que cuelge."
+ 
+ #: cfg_app_music.py:29 cfg_ivr_autoatt.py:34 cfg_phone_queue.py:33
+ #: ../cfg_app_music.py:33 ../cfg_ivr_autoatt.py:46 ../cfg_phone_queue.py:53
+ msgid "Music-on-hold class"
+-msgstr "Tipo de Música en Espera"
++msgstr "Tipo de Música en Espera"
+ 
+ #: cfg_app_parking.py:26 ../cfg_app_parking.py:26
+ msgid "Park calls"
+@@ -224,7 +224,7 @@
+ 
+ #: cfg_app_parking.py:27 ../cfg_app_parking.py:28
+ msgid "Call Parking extension"
+-msgstr "Extensión para el parqueo de llamadas"
++msgstr "Extensión para el parqueo de llamadas"
+ 
+ #: cfg_app_parking.py:29 ../cfg_app_parking.py:33
+ msgid "Parking places"
+@@ -245,12 +245,12 @@
+ 
+ #: cfg_app_play.py:29 ../cfg_app_play.py:33
+ msgid "Don't specify an extension"
+-msgstr "Por favor no especifique una extensión"
++msgstr "Por favor no especifique una extensión"
+ 
+ #: cfg_app_play.py:37 cfg_app_record.py:49 cfg_opt_loadmodule.py:39
+ #: ../cfg_app_play.py:45 ../cfg_app_record.py:57 ../cfg_opt_loadmodule.py:40
+ msgid "Please don't specify an extension"
+-msgstr "Por favor no especifique una extensión"
++msgstr "Por favor no especifique una extensión"
+ 
+ #: cfg_app_record.py:26 ../cfg_app_record.py:26
+ msgid "Record sound"
+@@ -262,7 +262,7 @@
+ "\t\t\ta second or dial '#' to stop the recording."
+ msgstr ""
+ "Permite grabar un arhivo de sonido. Usted puede colgar, hacer silencio por "
+-"un segundo, o marcar # para detener la grabación."
++"un segundo, o marcar # para detener la grabación."
+ 
+ #: cfg_app_record.py:32 ../cfg_app_record.py:36
+ msgid "Sound format"
+@@ -270,7 +270,7 @@
+ 
+ #: cfg_app_record.py:33 ../cfg_app_record.py:37
+ msgid "GSM compression"
+-msgstr "Compresión GSM"
++msgstr "Compresión GSM"
+ 
+ #: cfg_app_record.py:34 ../cfg_app_record.py:38
+ msgid "PCM format 'ulaw'"
+@@ -290,7 +290,7 @@
+ 
+ #: cfg_app_record.py:38 ../cfg_app_record.py:42
+ msgid "WAV-File with GSM 6.10 compression, mono 8000 Hz"
+-msgstr "Archivo WAV con compresión GSM 6.10, mono 8000 Hz"
++msgstr "Archivo WAV con compresión GSM 6.10, mono 8000 Hz"
+ 
+ #: cfg_app_saytime.py:26 ../cfg_app_saytime.py:26 ../cfg_app_saytime.py:27
+ msgid "Say time"
+@@ -311,15 +311,15 @@
+ 
+ #: cfg_app_voicemail.py:26 ../cfg_app_voicemail.py:26
+ msgid "Voicemail dialog"
+-msgstr "Diálogo de correo de voz"
++msgstr "Diálogo de correo de voz"
+ 
+ #: cfg_app_voicemail.py:27 ../cfg_app_voicemail.py:28
+ msgid "Extension to enter the voicemail system."
+-msgstr "Extensión para entrar al sistema de correo de voz."
++msgstr "Extensión para entrar al sistema de correo de voz."
+ 
+ #: cfg_app_voicemail.py:29 ../cfg_app_voicemail.py:33
+ msgid "Ask for user mailbox?"
+-msgstr "¿Solicitar el buzón de mensajes del usuario?"
++msgstr "¿Solicitar el buzón de mensajes del usuario?"
+ 
+ #: cfg_dialout_normal.py:27 ../cfg_dialout_normal.py:27
+ msgid "Normal dialout entry"
+@@ -327,7 +327,7 @@
+ 
+ #: cfg_dialout_normal.py:28 ../cfg_dialout_normal.py:29
+ msgid "Used to route calls through trunks"
+-msgstr "Usado para enrutar las llamadas a través de las troncales"
++msgstr "Usado para enrutar las llamadas a través de las troncales"
+ 
+ #: cfg_dialout_normal.py:31 cfg_ivr_autoatt.py:32 cfg_ivr_raw.py:29
+ #: cfg_opt_manager.py:28 cfg_opt_music.py:27 cfg_opt_oppanel.py:32
+@@ -357,15 +357,15 @@
+ 
+ #: cfg_dialout_normal.py:32 ../cfg_dialout_normal.py:35
+ msgid "Pattern"
+-msgstr "Patrón"
++msgstr "Patrón"
+ 
+ #: cfg_dialout_normal.py:33 ../cfg_dialout_normal.py:38
+ msgid "Maximum call time in seconds"
+-msgstr "Tamaño máximo de las llamadas en segundos"
++msgstr "Tamaño máximo de las llamadas en segundos"
+ 
+ #: cfg_dialout_normal.py:34 ../cfg_dialout_normal.py:39
+ msgid "Ringing time in seconds"
+-msgstr "Duración del timbre en segundos"
++msgstr "Duración del timbre en segundos"
+ 
+ #: cfg_dialout_normal.py:36 ../cfg_dialout_normal.py:42
+ msgid "Trunks to use for routing this dialout entry"
+@@ -379,23 +379,23 @@
+ 
+ #: cfg_dialout_normal.py:53
+ msgid "Price for this pattern"
+-msgstr "Precio para este patrón"
++msgstr "Precio para este patrón"
+ 
+ #: cfg_ivr_autoatt.py:27 ../cfg_ivr_autoatt.py:27
+ msgid "Auto attendant"
+-msgstr "Operadora automática"
++msgstr "Operadora automática"
+ 
+ #: cfg_ivr_autoatt.py:28 ../cfg_ivr_autoatt.py:29
+ msgid "Basic auto-attendant."
+-msgstr "Operadora automática básica"
++msgstr "Operadora automática básica"
+ 
+ #: cfg_ivr_autoatt.py:33 ../cfg_ivr_autoatt.py:39
+ msgid "Max. time for incoming calls in seconds"
+-msgstr "Máximo tiempo para llamadas en segundo"
++msgstr "Máximo tiempo para llamadas en segundo"
+ 
+ #: cfg_ivr_autoatt.py:33 ../cfg_ivr_autoatt.py:40
+ msgid "(0 or empty means no time restriction)"
+-msgstr "(0 o vacío significa no restricción de tiempo)"
++msgstr "(0 o vacío significa no restricción de tiempo)"
+ 
+ #: cfg_ivr_autoatt.py:36 ../cfg_ivr_autoatt.py:52
+ msgid "File to play in the background"
+@@ -407,11 +407,11 @@
+ 
+ #: cfg_ivr_autoatt.py:38 ../cfg_ivr_autoatt.py:62
+ msgid "Pause between each playback"
+-msgstr "Pausa entre cada reproducción"
++msgstr "Pausa entre cada reproducción"
+ 
+ #: cfg_ivr_autoatt.py:39 ../cfg_ivr_autoatt.py:66
+ msgid "Extension to ring after file playing"
+-msgstr "Extensión a timbrar después de reproducir el archivo"
++msgstr "Extensión a timbrar después de reproducir el archivo"
+ 
+ #: cfg_ivr_autoatt.py:41 ../cfg_ivr_autoatt.py:76
+ msgid "IVR to jump on special dates"
+@@ -419,16 +419,16 @@
+ 
+ #: cfg_ivr_autoatt.py:43 ../cfg_ivr_autoatt.py:83
+ msgid "Times string"
+-msgstr "Patrón de horario"
++msgstr "Patrón de horario"
+ 
+ #: cfg_ivr_autoatt.py:43 ../cfg_ivr_autoatt.py:84
+ msgid "i.e. <hours>|<weekdays>|<monthdays>|<months> (comma separated)"
+ msgstr ""
+-"ej. <horas>|<días de las semana>|<días del mes>|<mes> (separados por comas)"
++"ej. <horas>|<días de las semana>|<días del mes>|<mes> (separados por comas)"
+ 
+ #: cfg_ivr_autoatt.py:44
+ msgid "Allow calling to all extensions?"
+-msgstr "¿Permitir llamar a todas las extensiones?"
++msgstr "¿Permitir llamar a todas las extensiones?"
+ 
+ #: cfg_ivr_autoatt.py:61 ../cfg_ivr_autoatt.py:122
+ msgid "File should be played at least one time"
+@@ -449,11 +449,11 @@
+ 
+ #: cfg_opt_did.py:26 ../cfg_opt_did.py:26
+ msgid "Direct inward dialing (DID) number"
+-msgstr "Número de DID (Direct Inward Dialing)"
++msgstr "Número de DID (Direct Inward Dialing)"
+ 
+ #: cfg_opt_did.py:28
+ msgid "Used to route a DID to an extension or Auto-Attendant."
+-msgstr "Usado para enrutar un DID a una extensión u operadora automática"
++msgstr "Usado para enrutar un DID a una extensión u operadora automática"
+ 
+ #: cfg_opt_did.py:31 ../cfg_opt_did.py:36
+ msgid "DID"
+@@ -475,7 +475,7 @@
+ #: ../cfg_trunk_iax.py:54 ../cfg_trunk_sip.py:49 ../cfg_trunk_zappbx.py:50
+ #: ../cfg_trunk_zappri.py:58 ../cfg_trunk_zap.py:47
+ msgid "Phone"
+-msgstr "Teléfono"
++msgstr "Teléfono"
+ 
+ #: cfg_opt_did.py:35 cfg_trunk_iax.py:52 cfg_trunk_sip.py:44
+ #: cfg_trunk_zappri.py:54 cfg_trunk_zap.py:44 ../cfg_opt_did.py:48
+@@ -488,7 +488,7 @@
+ #: cfg_trunk_iaxtel.py:43 ../cfg_opt_did.py:51 ../cfg_trunk_capimsn.py:35
+ #: ../cfg_trunk_fwdiax.py:50 ../cfg_trunk_iaxtel.py:49
+ msgid "Phone to ring"
+-msgstr "Teléfono a timbrar"
++msgstr "Teléfono a timbrar"
+ 
+ #: cfg_opt_did.py:38 cfg_trunk_iax.py:55 cfg_trunk_sip.py:47
+ #: cfg_trunk_zappri.py:57 cfg_trunk_zap.py:47 ../cfg_opt_did.py:57
+@@ -505,11 +505,11 @@
+ 
+ #: cfg_opt_did.py:64 ../cfg_opt_did.py:93
+ msgid "DID already in use for that trunk."
+-msgstr "DID ya está en uso para esta troncal"
++msgstr "DID ya está en uso para esta troncal"
+ 
+ #: cfg_opt_enum.py:26 ../cfg_opt_enum.py:26
+ msgid "ENUM search domain"
+-msgstr "Dominio de búsqueda de ENUM"
++msgstr "Dominio de búsqueda de ENUM"
+ 
+ #: cfg_opt_enum.py:27 ../cfg_opt_enum.py:30
+ msgid "Domain to search for ENUM entries"
+@@ -518,11 +518,11 @@
+ #: cfg_opt_loadmodule.py:26 ../cfg_opt_loadmodule.py:26
+ #: ../cfg_opt_loadmodule.py:27
+ msgid "Load module"
+-msgstr "Cargar Módulo"
++msgstr "Cargar Módulo"
+ 
+ #: cfg_opt_loadmodule.py:27 ../cfg_opt_loadmodule.py:28
+ msgid "Module to load"
+-msgstr "Módulo a cargar"
++msgstr "Módulo a cargar"
+ 
+ #: cfg_opt_logger.py:25 ../cfg_opt_logger.py:30
+ msgid "Errors"
+@@ -538,11 +538,11 @@
+ 
+ #: cfg_opt_logger.py:28 ../cfg_opt_logger.py:33
+ msgid "Verbose messages"
+-msgstr "Mensajes de información"
++msgstr "Mensajes de información"
+ 
+ #: cfg_opt_logger.py:29 ../cfg_opt_logger.py:34
+ msgid "Debug output"
+-msgstr "Salida de depuración"
++msgstr "Salida de depuración"
+ 
+ #: cfg_opt_logger.py:39 ../cfg_opt_logger.py:25 ../cfg_opt_logger.py:26
+ msgid "Logger options"
+@@ -554,7 +554,7 @@
+ "make it more (or less) verbose:"
+ msgstr ""
+ "Asterisk puede emitir muchos eventos a su consola o a un archivo de "
+-"registro, aquí usted puede manipular el nivel de detalle:"
++"registro, aquí usted puede manipular el nivel de detalle:"
+ 
+ #: cfg_opt_logger.py:42 ../cfg_opt_logger.py:44
+ msgid "Console output"
+@@ -566,7 +566,7 @@
+ 
+ #: cfg_opt_logger.py:54 ../cfg_opt_logger.py:56
+ msgid "Log to syslog via facility"
+-msgstr "Registrar en el archivo syslog a través del recurso"
++msgstr "Registrar en el archivo syslog a través del recurso"
+ 
+ #: cfg_opt_logger.py:59 ../cfg_opt_logger.py:61
+ msgid "What kind of messages to log"
+@@ -575,19 +575,19 @@
+ #: cfg_opt_manager.py:27 page_config.ptl:80 ../cfg_opt_manager.py:26
+ #: ../page_config.ptl:80
+ msgid "Management API access"
+-msgstr "Acceso del API de Gestión"
++msgstr "Acceso del API de Gestión"
+ 
+ #: cfg_opt_manager.py:29 ../cfg_opt_manager.py:32
+ msgid "Secret"
+-msgstr "Contraseña"
++msgstr "Contraseña"
+ 
+ #: cfg_opt_manager.py:30 ../cfg_opt_manager.py:33
+ msgid "IP disable mask"
+-msgstr "Deshabilitar máscara IP"
++msgstr "Deshabilitar máscara IP"
+ 
+ #: cfg_opt_manager.py:31 ../cfg_opt_manager.py:34
+ msgid "IP enable mask"
+-msgstr "Habilitar máscara IP"
++msgstr "Habilitar máscara IP"
+ 
+ #: cfg_opt_manager.py:32 ../cfg_opt_manager.py:35
+ msgid "Read"
+@@ -599,23 +599,23 @@
+ 
+ #: cfg_opt_music.py:26 ../cfg_opt_music.py:26
+ msgid "Background music directory"
+-msgstr "Directorio de música de fondo"
++msgstr "Directorio de música de fondo"
+ 
+ #: cfg_opt_oppanel.py:28 ../cfg_opt_oppanel.py:29
+ msgid "Configure Asternic Flash Operator Panel"
+-msgstr "Configurar el Pánel de Operadora Asternic"
++msgstr "Configurar el Pánel de Operadora Asternic"
+ 
+ #: cfg_opt_oppanel.py:33 ../cfg_opt_oppanel.py:35
+ msgid "FQDN/IP to access the panel via web"
+-msgstr "Nombre de domino para acceder al pánel via web"
++msgstr "Nombre de domino para acceder al pánel via web"
+ 
+ #: cfg_opt_oppanel.py:34 ../cfg_opt_oppanel.py:36
+ msgid "Security Code"
+-msgstr "Código de seguridad"
++msgstr "Código de seguridad"
+ 
+ #: cfg_opt_oppanel.py:35 ../cfg_opt_oppanel.py:37
+ msgid "Manager agent"
+-msgstr "Agente de gestión"
++msgstr "Agente de gestión"
+ 
+ #: cfg_opt_oppanel.py:37 ../cfg_opt_oppanel.py:39
+ msgid "Frequency in seconds to poll for sip and iax status"
+@@ -624,19 +624,19 @@
+ 
+ #: cfg_opt_pickup.py:27 ../cfg_opt_pickup.py:27 ../cfg_opt_pickup.py:28
+ msgid "Pickup Extension"
+-msgstr "Extensión para toma de llamadas"
++msgstr "Extensión para toma de llamadas"
+ 
+ #: cfg_opt_pickup.py:28 ../cfg_opt_pickup.py:29
+ msgid "Extension to dial to pick-up a call in the same group."
+-msgstr "Extensión a marcar para tomar una llamada del grupo"
++msgstr "Extensión a marcar para tomar una llamada del grupo"
+ 
+ #: cfg_opt_rawcfg.py:26 ../cfg_opt_rawcfg.py:26
+ msgid "Raw config file snippet"
+-msgstr "Archivo de configuración original fragmentado"
++msgstr "Archivo de configuración original fragmentado"
+ 
+ #: cfg_opt_rawcfg.py:30 ../cfg_opt_rawcfg.py:33
+ msgid "Section/Context"
+-msgstr "Sección/Contexto"
++msgstr "Sección/Contexto"
+ 
+ #: cfg_opt_rtp.py:26 ../cfg_opt_rtp.py:26 ../cfg_opt_rtp.py:27
+ msgid "RTP options"
+@@ -668,7 +668,7 @@
+ 
+ #: cfg_opt_settings.py:52 ../cfg_opt_settings.py:52
+ msgid "Belgium"
+-msgstr "Bélgica"
++msgstr "Bélgica"
+ 
+ #: cfg_opt_settings.py:64 ../cfg_opt_settings.py:64
+ msgid "Brazil"
+@@ -684,7 +684,7 @@
+ 
+ #: cfg_opt_settings.py:98 ../cfg_opt_settings.py:98
+ msgid "Spain"
+-msgstr "España"
++msgstr "España"
+ 
+ #: cfg_opt_settings.py:110 ../cfg_opt_settings.py:110
+ msgid "Finland"
+@@ -708,7 +708,7 @@
+ 
+ #: cfg_opt_settings.py:166 ../cfg_opt_settings.py:166
+ msgid "Japan"
+-msgstr "Japón"
++msgstr "Japón"
+ 
+ #: cfg_opt_settings.py:178 ../cfg_opt_settings.py:178
+ msgid "Netherlands"
+@@ -748,7 +748,7 @@
+ 
+ #: cfg_opt_settings.py:285 ../cfg_opt_settings.py:285
+ msgid "United States / North America"
+-msgstr "Estados Unidos / Norteamérica"
++msgstr "Estados Unidos / Norteamérica"
+ 
+ #: cfg_opt_settings.py:296 ../cfg_opt_settings.py:296
+ msgid "South Africa"
+@@ -761,13 +761,13 @@
+ 
+ #: cfg_opt_settings.py:317 ../cfg_opt_settings.py:320
+ msgid "Country"
+-msgstr "País"
++msgstr "País"
+ 
+ #: cfg_opt_settings.py:318 ../cfg_opt_settings.py:321
+ msgid "The country is used for generating dialtone, ringtone, busytone etc"
+ msgstr ""
+-"El País se utiliza para generar el tono de marcado, timbre, tono de "
+-"invitación a marcar, etc."
++"El País se utiliza para generar el tono de marcado, timbre, tono de "
++"invitación a marcar, etc."
+ 
+ #: cfg_opt_settings.py:322 ../cfg_opt_settings.py:325
+ msgid "language"
+@@ -775,7 +775,7 @@
+ 
+ #: cfg_opt_settings.py:323 ../cfg_opt_settings.py:326
+ msgid "The language is used for voice prompts"
+-msgstr "El lenguaje se usa para los diálogos de voz"
++msgstr "El lenguaje se usa para los diálogos de voz"
+ 
+ #: cfg_opt_sip_audio.py:27 ../cfg_opt_sip_audio.py:27
+ #: ../cfg_opt_sip_audio.py:28
+@@ -788,33 +788,33 @@
+ 
+ #: cfg_opt_sip_audio.py:30 ../cfg_opt_sip_audio.py:33
+ msgid "Allow alaw codec"
+-msgstr "Permitir códec Ley A"
++msgstr "Permitir códec Ley A"
+ 
+ #: cfg_opt_sip_audio.py:31 ../cfg_opt_sip_audio.py:34
+ msgid "Allow ulaw codec"
+-msgstr "Permitir códec Ley U"
++msgstr "Permitir códec Ley U"
+ 
+ #: cfg_opt_sip_audio.py:32 ../cfg_opt_sip_audio.py:35
+ msgid "Allow ilbc codec"
+-msgstr "Permitir códec ilbc"
++msgstr "Permitir códec ilbc"
+ 
+ #: cfg_opt_sip_audio.py:33 ../cfg_opt_sip_audio.py:36
+ msgid "Allow gsm codec"
+-msgstr "Permitir códec gsm"
++msgstr "Permitir códec gsm"
+ 
+ #: cfg_opt_sip_audio.py:34 ../cfg_opt_sip_audio.py:37
+ msgid "Allow g729 codec"
+-msgstr "Permitir códec g729"
++msgstr "Permitir códec g729"
+ 
+ #: cfg_opt_sip_audio.py:35 ../cfg_opt_sip_audio.py:38
+ msgid "g729 pass-thru unless license obtained"
+ msgstr ""
+-"Sólo reenvío y no trascodificación de g729 a menos que se obtenga una "
++"Sólo reenvío y no trascodificación de g729 a menos que se obtenga una "
+ "licencia"
+ 
+ #: cfg_opt_sip_audio.py:36 ../cfg_opt_sip_audio.py:39
+ msgid "Allow g723.1 codec"
+-msgstr "Permitir códec g723.1"
++msgstr "Permitir códec g723.1"
+ 
+ #: cfg_opt_sip_audio.py:37 ../cfg_opt_sip_audio.py:40
+ msgid "g723.1 pass-thru"
+@@ -822,7 +822,7 @@
+ 
+ #: cfg_opt_sip_audio.py:45 ../cfg_opt_sip_audio.py:48
+ msgid "You should choose at least one codec"
+-msgstr "Usted debe seleccionar al menos un códec"
++msgstr "Usted debe seleccionar al menos un códec"
+ 
+ #: cfg_opt_user.py:26 page_config.ptl:68 ../cfg_opt_user.py:25
+ #: ../page_config.ptl:68
+@@ -834,19 +834,19 @@
+ #: ../cfg_opt_user.py:32 ../cfg_phone_epygi.py:45 ../cfg_phone_iax.py:42
+ #: ../cfg_phone_mgcp.py:42 ../cfg_phone_sip.py:43 ../cfg_trunk_iax.py:43
+ msgid "Password"
+-msgstr "Contraseña"
++msgstr "Contraseña"
+ 
+ #: cfg_opt_user.py:31 ../cfg_opt_user.py:33
+ msgid "Associated IP address of PC"
+-msgstr "Dirección IP asociada al PC"
++msgstr "Dirección IP asociada al PC"
+ 
+ #: cfg_opt_user.py:31 ../cfg_opt_user.py:33
+ msgid "Trusted for auto-login"
+-msgstr "Confiable para inicio de sesión automático"
++msgstr "Confiable para inicio de sesión automático"
+ 
+ #: cfg_opt_user.py:32 ../cfg_opt_user.py:34
+ msgid "Associated phone"
+-msgstr "Teléfono Asociado"
++msgstr "Teléfono Asociado"
+ 
+ #: cfg_opt_user.py:35 page_user_info.ptl:49 page_user.ptl:46
+ #: ../cfg_opt_user.py:38 ../page_user_info.ptl:49 ../page_user.ptl:46
+@@ -874,11 +874,11 @@
+ #: ../cfg_opt_voicemail.py:27 ../cfg_phone_epygi.py:107 ../cfg_phone_iax.py:87
+ #: ../cfg_phone_mgcp.py:96 ../cfg_phone_sip.py:107 ../cfg_phone_zap.py:94
+ msgid "Voicemail settings"
+-msgstr "Configuración de correo de voz"
++msgstr "Configuración de correo de voz"
+ 
+ #: cfg_opt_voicemail.py:27 ../cfg_opt_voicemail.py:30
+ msgid "Recording settings"
+-msgstr "Configuración de grabación"
++msgstr "Configuración de grabación"
+ 
+ #: cfg_opt_voicemail.py:28 ../cfg_opt_voicemail.py:31
+ msgid "File format for voicemail messages"
+@@ -886,30 +886,30 @@
+ 
+ #: cfg_opt_voicemail.py:30 ../cfg_opt_voicemail.py:33
+ msgid "Maximal message length (in seconds)"
+-msgstr "Tamaño máximo de los mensajes (en segundos)"
++msgstr "Tamaño máximo de los mensajes (en segundos)"
+ 
+ #: cfg_opt_voicemail.py:31 ../cfg_opt_voicemail.py:34
+ msgid "Minimal message length (in seconds)"
+-msgstr "Tamaño mínimo de los mensajes (en segundos)"
++msgstr "Tamaño mínimo de los mensajes (en segundos)"
+ 
+ #: cfg_opt_voicemail.py:32 ../cfg_opt_voicemail.py:35
+ msgid "Seconds of silence to end the recording"
+-msgstr "Segundos de silencio para la grabación"
++msgstr "Segundos de silencio para la grabación"
+ 
+ #: cfg_opt_voicemail.py:33 ../cfg_opt_voicemail.py:36
+ msgid ""
+ "Silence threshold (what we consider silence, the lower, the more sensitive)"
+ msgstr ""
+-"Umbral de silencio (lo que consideramos silencio;entre más bajo, más "
++"Umbral de silencio (lo que consideramos silencio;entre más bajo, más "
+ "sensible)"
+ 
+ #: cfg_opt_voicemail.py:35 ../cfg_opt_voicemail.py:38
+ msgid "Playback settings"
+-msgstr "Configuración de Reproducción"
++msgstr "Configuración de Reproducción"
+ 
+ #: cfg_opt_voicemail.py:36 ../cfg_opt_voicemail.py:39
+ msgid "Max number of failed login attempts"
+-msgstr "Máximo número de intentos de inicio de sesión"
++msgstr "Máximo número de intentos de inicio de sesión"
+ 
+ #: cfg_opt_voicemail.py:37 ../cfg_opt_voicemail.py:40
+ msgid "Seconds to skip forward/backward"
+@@ -939,7 +939,7 @@
+ #: cfg_opt_zap_phone.py:26 ../cfg_opt_zap_phone.py:26
+ #: ../cfg_opt_zap_phone.py:27
+ msgid "Zaptel Phone Options"
+-msgstr "Opciones de teléfono Zaptel"
++msgstr "Opciones de teléfono Zaptel"
+ 
+ #: cfg_opt_zap_phone.py:28 ../cfg_opt_zap_phone.py:31
+ msgid "Use ADSI for menu phones"
+@@ -963,7 +963,7 @@
+ 
+ #: cfg_opt_zap_phone.py:33 ../cfg_opt_zap_phone.py:36
+ msgid "Allow call forwards"
+-msgstr "Habilitar reenvío de llamadas"
++msgstr "Habilitar reenvío de llamadas"
+ 
+ #: cfg_opt_zap_phone.py:34 ../cfg_opt_zap_phone.py:37
+ msgid "Read caller number with *69"
+@@ -971,7 +971,7 @@
+ 
+ #: cfg_opt_zappri.py:28 ../cfg_opt_zappri.py:28 ../cfg_opt_zappri.py:29
+ msgid "Zaptel configuration for PRI"
+-msgstr "Configuración de Zaptel para PRI"
++msgstr "Configuración de Zaptel para PRI"
+ 
+ #: cfg_opt_zappri.py:31 ../cfg_opt_zappri.py:33
+ msgid "Zaptel span"
+@@ -983,11 +983,11 @@
+ 
+ #: cfg_opt_zappri.py:32 ../cfg_opt_zappri.py:34
+ msgid "Zaptel timing parameter"
+-msgstr "Parámetro de temporización de Zaptel"
++msgstr "Parámetro de temporización de Zaptel"
+ 
+ #: cfg_opt_zappri.py:32 ../cfg_opt_zappri.py:34
+ msgid "Read zaptel documentation"
+-msgstr "Lea la documentación de zaptel"
++msgstr "Lea la documentación de zaptel"
+ 
+ #: cfg_opt_zappri.py:33 ../cfg_opt_zappri.py:35
+ msgid "Line Build Out (dB)"
+@@ -1053,7 +1053,7 @@
+ 
+ #: cfg_opt_zappri.py:46 ../cfg_opt_zappri.py:48
+ msgid "Coding"
+-msgstr "Codificación"
++msgstr "Codificación"
+ 
+ #: cfg_opt_zappri.py:47 ../cfg_opt_zappri.py:49
+ msgid "AMI (T1/E1)"
+@@ -1079,7 +1079,7 @@
+ 
+ #: cfg_opt_zappri.py:50 ../cfg_opt_zappri.py:52
+ msgid "Signaling channel"
+-msgstr "Canal de señalización"
++msgstr "Canal de señalización"
+ 
+ #: cfg_opt_zappri.py:50 ../cfg_opt_zappri.py:52
+ msgid "i.e. 16"
+@@ -1100,7 +1100,7 @@
+ 
+ #: cfg_phone_ext.py:27 ../cfg_phone_ext.py:28
+ msgid "Set an 'alias' extension to a phone"
+-msgstr "Establecer una extensión \"alias\" al teléfono"
++msgstr "Establecer una extensión \"alias\" al teléfono"
+ 
+ #: cfg_phone_ext.py:31 ../cfg_phone_ext.py:44
+ msgid "This can be used to set operator(o) or fax(fax) extensions."
+@@ -1109,25 +1109,25 @@
+ 
+ #: cfg_phone_ext.py:33 ../cfg_phone_ext.py:48
+ msgid "Calls to the extension"
+-msgstr "Llamadas a la extensión"
++msgstr "Llamadas a la extensión"
+ 
+ #: cfg_phone_ext.py:34 ../cfg_phone_ext.py:52
+ msgid "Real phone to ring"
+-msgstr "Teléfono a timbrar"
++msgstr "Teléfono a timbrar"
+ 
+ #: cfg_phone_iax.py:27 ../cfg_phone_iax.py:27
+ msgid "Normal IAX phone"
+-msgstr "Teléfono IAX estándar"
++msgstr "Teléfono IAX estándar"
+ 
+ #: cfg_phone_iax.py:31 cfg_phone_mgcp.py:29 cfg_phone_sip.py:32
+ #: ../cfg_phone_iax.py:47 ../cfg_phone_mgcp.py:47 ../cfg_phone_sip.py:48
+ msgid "IP address of phone"
+-msgstr "Direción IP del teléfono"
++msgstr "Direción IP del teléfono"
+ 
+ #: cfg_phone_iax.py:33 cfg_phone_mgcp.py:37 cfg_phone_zap.py:34
+ #: ../cfg_phone_iax.py:56 ../cfg_phone_mgcp.py:76 ../cfg_phone_zap.py:63
+ msgid "Allow direct dialling from outside?"
+-msgstr "¿Permitir llamadas directas desde el exterior?"
++msgstr "¿Permitir llamadas directas desde el exterior?"
+ 
+ #: cfg_phone_iax.py:35 cfg_phone_mgcp.py:39 cfg_phone_sip.py:40
+ #: cfg_phone_zap.py:36 ../cfg_phone_epygi.py:70 ../cfg_phone_iax.py:62
+@@ -1145,12 +1145,12 @@
+ #: cfg_phone_zap.py:38 ../cfg_phone_epygi.py:80 ../cfg_phone_iax.py:72
+ #: ../cfg_phone_mgcp.py:92 ../cfg_phone_sip.py:80 ../cfg_phone_zap.py:79
+ msgid "Call group number"
+-msgstr "Número del grupo de llamadas"
++msgstr "Número del grupo de llamadas"
+ 
+ #: cfg_phone_iax.py:40 cfg_phone_sip.py:49 ../cfg_phone_epygi.py:101
+ #: ../cfg_phone_iax.py:81 ../cfg_phone_sip.py:101
+ msgid "Show this extension in the panel"
+-msgstr "Mostrar esta extensión en el pánel"
++msgstr "Mostrar esta extensión en el pánel"
+ 
+ #: cfg_phone_iax.py:43 cfg_phone_mgcp.py:44 cfg_phone_sip.py:52
+ #: cfg_phone_zap.py:44 ../cfg_phone_epygi.py:112 ../cfg_phone_iax.py:91
+@@ -1162,7 +1162,7 @@
+ #: cfg_phone_zap.py:45 ../cfg_phone_epygi.py:117 ../cfg_phone_iax.py:96
+ #: ../cfg_phone_mgcp.py:106 ../cfg_phone_sip.py:117 ../cfg_phone_zap.py:104
+ msgid "Signal waiting mail"
+-msgstr "Correo de espera de señal"
++msgstr "Correo de espera de señal"
+ 
+ #: cfg_phone_iax.py:45 cfg_phone_mgcp.py:46 cfg_phone_sip.py:54
+ #: cfg_phone_zap.py:46 ../cfg_phone_epygi.py:122 ../cfg_phone_iax.py:101
+@@ -1178,7 +1178,7 @@
+ #: cfg_phone_zap.py:48 ../cfg_phone_epygi.py:132 ../cfg_phone_iax.py:110
+ #: ../cfg_phone_mgcp.py:116 ../cfg_phone_sip.py:132 ../cfg_phone_zap.py:114
+ msgid "Calls from the phone"
+-msgstr "Llamadas desde el teléfono"
++msgstr "Llamadas desde el teléfono"
+ 
+ #: cfg_phone_iax.py:49 cfg_phone_sip.py:57 cfg_phone_zap.py:49
+ #: ../cfg_phone_epygi.py:136 ../cfg_phone_iax.py:114 ../cfg_phone_sip.py:136
+@@ -1203,19 +1203,19 @@
+ #: cfg_phone_zap.py:52 ../cfg_phone_epygi.py:149 ../cfg_phone_iax.py:127
+ #: ../cfg_phone_mgcp.py:133 ../cfg_phone_sip.py:149 ../cfg_phone_zap.py:131
+ msgid "Enable time restriction?"
+-msgstr "¿Habilitar la restricción de tiempo?"
++msgstr "¿Habilitar la restricción de tiempo?"
+ 
+ #: cfg_phone_mgcp.py:26 ../cfg_phone_mgcp.py:26
+ msgid "Normal MGCP phone"
+-msgstr "Teléfono MGCP estándar"
++msgstr "Teléfono MGCP estándar"
+ 
+ #: cfg_phone_mgcp.py:27 ../cfg_phone_mgcp.py:40
+ msgid ""
+ "If you haven't configured a name for your phone please use the IP address "
+ "here."
+ msgstr ""
+-"Si usted no ha configurado un nombre para su teléfono, por favor use la "
+-"dirección IP aquí."
++"Si usted no ha configurado un nombre para su teléfono, por favor use la "
++"dirección IP aquí."
+ 
+ #: cfg_phone_mgcp.py:33 ../cfg_phone_mgcp.py:56
+ msgid "NAT"
+@@ -1223,7 +1223,7 @@
+ 
+ #: cfg_phone_mgcp.py:34 ../cfg_phone_mgcp.py:61
+ msgid "Three way calling"
+-msgstr "Llamada de tres vías"
++msgstr "Llamada de tres vías"
+ 
+ #: cfg_phone_mgcp.py:35 ../cfg_phone_mgcp.py:66
+ msgid "Enable Call transfer"
+@@ -1231,11 +1231,11 @@
+ 
+ #: cfg_phone_mgcp.py:36 ../cfg_phone_mgcp.py:71
+ msgid "Enable Call forward"
+-msgstr "Habilitar reenvío de llamadas"
++msgstr "Habilitar reenvío de llamadas"
+ 
+ #: cfg_phone_mgcp.py:49 ../cfg_phone_mgcp.py:120
+ msgid "Caller-Id-Number"
+-msgstr "Número del Identificador de Llamante"
++msgstr "Número del Identificador de Llamante"
+ 
+ #: cfg_phone_mgcp.py:50 ../cfg_phone_mgcp.py:124
+ msgid "Caller-Id-Name"
+@@ -1247,7 +1247,7 @@
+ 
+ #: cfg_phone_queue.py:32 ../cfg_phone_queue.py:48 ../cfg_phone_hunt.py:35
+ msgid "Timeout"
+-msgstr "Tiempo límite"
++msgstr "Tiempo límite"
+ 
+ #: cfg_phone_queue.py:35 ../cfg_phone_queue.py:59
+ msgid "Strategy:"
+@@ -1264,11 +1264,11 @@
+ #: cfg_phone_queue.py:38 ../cfg_phone_queue.py:63
+ msgid ""
+ "Least recent - ring interface which was least recently called by this queue"
+-msgstr "Timbrar a la extensión que lleve más tiempo sin contestar"
++msgstr "Timbrar a la extensión que lleve más tiempo sin contestar"
+ 
+ #: cfg_phone_queue.py:39 ../cfg_phone_queue.py:64
+ msgid "Fewest calls - ring the one with fewest completed calls from this queue"
+-msgstr "Timbrar a la extensión que menos llamadas haya contestado"
++msgstr "Timbrar a la extensión que menos llamadas haya contestado"
+ 
+ #: cfg_phone_queue.py:40 ../cfg_phone_queue.py:65
+ msgid "Random - ring random interface"
+@@ -1276,11 +1276,11 @@
+ 
+ #: cfg_phone_queue.py:41 ../cfg_phone_queue.py:66
+ msgid "Round robin with memory - remember where we left off last ring pass"
+-msgstr "Timbrar uno por uno, empezando donde se quedó en la última vuelta"
++msgstr "Timbrar uno por uno, empezando donde se quedó en la última vuelta"
+ 
+ #: cfg_phone_queue.py:44 ../cfg_phone_queue.py:70 ../cfg_phone_hunt.py:36
+ msgid "How long to wait before trying all the members again?"
+-msgstr "¿Cuanto tiempo esperar antes de intentar timbrar de nuevo?"
++msgstr "¿Cuanto tiempo esperar antes de intentar timbrar de nuevo?"
+ 
+ #: cfg_phone_queue.py:46
+ msgid "Anounces"
+@@ -1288,23 +1288,23 @@
+ 
+ #: cfg_phone_queue.py:47
+ msgid "Anounce queue position to caller?"
+-msgstr "¿Anunciar la posición en la cola al llamante?"
++msgstr "¿Anunciar la posición en la cola al llamante?"
+ 
+ #: cfg_phone_queue.py:48 ../cfg_phone_queue.py:84
+ msgid ""
+ "How often to announce queue position and/or estimated holdtime to caller"
+ msgstr ""
+-"Frecuencia de anuncio de la posición en la cola y el tiempo estimado de "
+-"contestación"
++"Frecuencia de anuncio de la posición en la cola y el tiempo estimado de "
++"contestación"
+ 
+ #: cfg_phone_queue.py:49 ../cfg_phone_queue.py:89
+ msgid "Include estimated hold time in position announcements?"
+ msgstr ""
+-"¿Incluir el tiempo estimado de contestación en los anuncios de posición?"
++"¿Incluir el tiempo estimado de contestación en los anuncios de posición?"
+ 
+ #: cfg_phone_queue.py:50 ../cfg_phone_queue.py:91
+ msgid "Yes"
+-msgstr "Sí"
++msgstr "Sí"
+ 
+ #: cfg_phone_queue.py:51 ../cfg_phone_queue.py:92
+ msgid "No"
+@@ -1312,7 +1312,7 @@
+ 
+ #: cfg_phone_queue.py:52 ../cfg_phone_queue.py:93
+ msgid "Only Once"
+-msgstr "Sólo una vez"
++msgstr "Sólo una vez"
+ 
+ #: cfg_phone_queue.py:56 ../cfg_phone_queue.py:97
+ msgid "Monitoring"
+@@ -1320,7 +1320,7 @@
+ 
+ #: cfg_phone_queue.py:57 ../cfg_phone_queue.py:102
+ msgid "Monitor answered calls?"
+-msgstr "¿Monitorear la llamadas contestadas?"
++msgstr "¿Monitorear la llamadas contestadas?"
+ 
+ #: cfg_phone_queue.py:58 ../cfg_phone_queue.py:106
+ msgid "Monitor file format"
+@@ -1344,11 +1344,11 @@
+ 
+ #: cfg_phone_queue.py:64 ../cfg_phone_queue.py:115
+ msgid "Otherwise it will use ${UNIQUEID}"
+-msgstr "De lo contrario, se usará ${UNIQUEID}"
++msgstr "De lo contrario, se usará ${UNIQUEID}"
+ 
+ #: cfg_phone_queue.py:67 ../cfg_phone_queue.py:129
+ msgid "Show this queue in the panel"
+-msgstr "Mostrar esta cola en el pánel"
++msgstr "Mostrar esta cola en el pánel"
+ 
+ #: cfg_phone_queue.py:84 ../cfg_phone_queue.py:149
+ msgid "You should select a frequency"
+@@ -1356,11 +1356,11 @@
+ 
+ #: cfg_phone_sip.py:28 ../cfg_phone_sip.py:27
+ msgid "Normal SIP phone"
+-msgstr "Teléfono SIP estándar"
++msgstr "Teléfono SIP estándar"
+ 
+ #: cfg_phone_sip.py:33 ../cfg_phone_epygi.py:54 ../cfg_phone_sip.py:53
+ msgid "Is the trunk behind NAT ?"
+-msgstr "¿Está la troncal tras un NAT?"
++msgstr "¿Está la troncal tras un NAT?"
+ 
+ #: cfg_phone_sip.py:35 ../cfg_phone_epygi.py:63 ../cfg_phone_sip.py:62
+ msgid "DTMF mode:"
+@@ -1372,7 +1372,7 @@
+ 
+ #: cfg_phone_sip.py:37 ../cfg_phone_epygi.py:66 ../cfg_phone_sip.py:66
+ msgid "In Band (only with ulaw/alaw)"
+-msgstr "En Banda (sólo con Ley U/Ley A)"
++msgstr "En Banda (sólo con Ley U/Ley A)"
+ 
+ #: cfg_phone_sip.py:38 ../cfg_phone_epygi.py:67 ../cfg_phone_sip.py:67
+ msgid "SIP INFO"
+@@ -1388,22 +1388,22 @@
+ 
+ #: cfg_phone_zap.py:27 ../cfg_phone_zap.py:27
+ msgid "Normal ZAP phone"
+-msgstr "Teléfono ZAP normal"
++msgstr "Teléfono ZAP normal"
+ 
+ #: cfg_phone_zap.py:30 cfg_trunk_zap.py:30 ../cfg_phone_zap.py:43
+ #: ../cfg_trunk_zappbx.py:34 ../cfg_trunk_zap.py:33
+ msgid "Zaptel channel number"
+-msgstr "Número del canal Zaptel"
++msgstr "Número del canal Zaptel"
+ 
+ #: cfg_phone_zap.py:31 cfg_trunk_zappri.py:31 cfg_trunk_zap.py:31
+ #: ../cfg_phone_zap.py:48 ../cfg_trunk_zappbx.py:35 ../cfg_trunk_zappri.py:35
+ #: ../cfg_trunk_zap.py:34
+ msgid "Signalling type"
+-msgstr "Tipo de señalización"
++msgstr "Tipo de señalización"
+ 
+ #: cfg_phone_zap.py:41 ../cfg_phone_zap.py:88
+ msgid "Show this phone in the panel"
+-msgstr "Mostrar esta extensión en el pánel"
++msgstr "Mostrar esta extensión en el pánel"
+ 
+ #: cfg_trunk_capimsn.py:26 ../cfg_trunk_capimsn.py:26
+ msgid "ISDN using CAPI, incoming"
+@@ -1417,7 +1417,7 @@
+ #: ../cfg_trunk_capimsn.py:34 ../cfg_trunk_capi.py:37
+ #: ../cfg_trunk_zaphfc.py:37
+ msgid "Subscriber number"
+-msgstr "Número de Suscriptor"
++msgstr "Número de Suscriptor"
+ 
+ #: cfg_trunk_capimsn.py:70 ../cfg_trunk_capimsn.py:68
+ msgid "MSN already assigned"
+@@ -1454,20 +1454,20 @@
+ "Usted puede registrarse gratuitamente en\n"
+ "\t\t\thttp://freeworlddialup.com y obtener un identificador de FWD a donde \n"
+ "\t\t\tlas otras personas lo pueden contactar. Estas llamadas son gratuitas "
+-"también.\n"
++"también.\n"
+ "\n"
+ "\t\t\tCuando usted tiene una cuenta, debe habilitar el soporte IAX para FWD "
+ "en \n"
+ "\t\t\thttp://www.freeworlddialup.com/advanced/iax para usar esta\n"
+-"\t\t\t'línea telefónica'."
++"\t\t\t'línea telefónica'."
+ 
+ #: cfg_trunk_fwdiax.py:38 ../cfg_trunk_fwdiax.py:41
+ msgid "FWD number"
+-msgstr "Número de FWD"
++msgstr "Número de FWD"
+ 
+ #: cfg_trunk_fwdiax.py:39 ../cfg_trunk_fwdiax.py:42
+ msgid "FWD password"
+-msgstr "Contraseña de FWD"
++msgstr "Contraseña de FWD"
+ 
+ #: cfg_trunk_fwdiax.py:41 ../cfg_trunk_fwdiax.py:44
+ msgid "Calls to FWD"
+@@ -1485,14 +1485,14 @@
+ 
+ #: cfg_trunk_iax.py:27 ../cfg_trunk_iax.py:27
+ msgid "Standard IAX Trunk"
+-msgstr "Troncal IAX estándar"
++msgstr "Troncal IAX estándar"
+ 
+ #: cfg_trunk_iax.py:29 ../cfg_trunk_iax.py:29
+ msgid ""
+ "Used to setup an IAX trunk to another Asterisk server or an IAX termination."
+ msgstr ""
+ "Se usa para configurar una troncal IAX a otro servidor Asterisk o a una "
+-"terminación IAX."
++"terminación IAX."
+ 
+ #: cfg_trunk_iax.py:33 ../cfg_trunk_iax.py:35
+ msgid "IAX host"
+@@ -1512,11 +1512,11 @@
+ 
+ #: cfg_trunk_iax.py:38 ../cfg_trunk_iax.py:40
+ msgid "Authentication"
+-msgstr "Autenticación"
++msgstr "Autenticación"
+ 
+ #: cfg_trunk_iax.py:39 ../cfg_trunk_iax.py:41
+ msgid "Authentication Method"
+-msgstr "Método de autenticación"
++msgstr "Método de autenticación"
+ 
+ #: cfg_trunk_iax.py:40 ../cfg_trunk_iax.py:42
+ msgid "Plain text"
+@@ -1532,16 +1532,16 @@
+ 
+ #: cfg_trunk_iax.py:41 ../cfg_trunk_iax.py:43
+ msgid "For 'Plain' or 'MD5' only"
+-msgstr "Sólo para \"Texto plano\" o \"RSA\""
++msgstr "Sólo para \"Texto plano\" o \"RSA\""
+ 
+ #: cfg_trunk_iax.py:42 ../cfg_trunk_iax.py:44
+ msgid "Public key from remote server"
+-msgstr "Llave pública del servidor remoto"
++msgstr "Llave pública del servidor remoto"
+ 
+ #: cfg_trunk_iax.py:42 cfg_trunk_iax.py:43 ../cfg_trunk_iax.py:44
+ #: ../cfg_trunk_iax.py:45
+ msgid "For 'RSA' only"
+-msgstr "Sólo para \"RSA\""
++msgstr "Sólo para \"RSA\""
+ 
+ #: cfg_trunk_iax.py:43 ../cfg_trunk_iax.py:45
+ msgid "Private local key"
+@@ -1549,7 +1549,7 @@
+ 
+ #: cfg_trunk_iax.py:45 ../cfg_trunk_iax.py:47
+ msgid "Enable trunking?"
+-msgstr "¿Habilitar trunking?"
++msgstr "¿Habilitar trunking?"
+ 
+ #: cfg_trunk_iax.py:50 ../cfg_trunk_iax.py:52
+ msgid "Calls from IAX trunk"
+@@ -1559,7 +1559,7 @@
+ #: cfg_trunk_zap.py:45 ../cfg_trunk_iax.py:55 ../cfg_trunk_sip.py:50
+ #: ../cfg_trunk_zappbx.py:51 ../cfg_trunk_zappri.py:59 ../cfg_trunk_zap.py:48
+ msgid "Extension to ring"
+-msgstr "Extensión a timbrar"
++msgstr "Extensión a timbrar"
+ 
+ #: cfg_trunk_iaxtel.py:26 ../cfg_trunk_iaxtel.py:26
+ msgid "VOIP-Provider Iaxtel"
+@@ -1572,17 +1572,17 @@
+ "\t\t\tpeople can call you. These calls are free of charge, too.'."
+ msgstr ""
+ "Usted puede registrarse gratuitamente en\n"
+-"\t\t\thttp://www.iaxtel.com y obtener un número IAX donde \n"
++"\t\t\thttp://www.iaxtel.com y obtener un número IAX donde \n"
+ "\t\t\tlas otras personas lo pueden contactar. Estas llamadas son gratuitas "
+-"también."
++"también."
+ 
+ #: cfg_trunk_iaxtel.py:34 ../cfg_trunk_iaxtel.py:40
+ msgid "IAXTEL number"
+-msgstr "Número IAXTEL"
++msgstr "Número IAXTEL"
+ 
+ #: cfg_trunk_iaxtel.py:35 ../cfg_trunk_iaxtel.py:41
+ msgid "IAXTEL password"
+-msgstr "Contraseña IAXTEL"
++msgstr "Contraseña IAXTEL"
+ 
+ #: cfg_trunk_iaxtel.py:37 ../cfg_trunk_iaxtel.py:43
+ msgid "Calls to IAXTEL"
+@@ -1594,7 +1594,7 @@
+ 
+ #: cfg_trunk_sip.py:27 ../cfg_trunk_sip.py:27
+ msgid "Standard SIP Trunk"
+-msgstr "Troncal SIP estándar"
++msgstr "Troncal SIP estándar"
+ 
+ #: cfg_trunk_sip.py:29 ../cfg_trunk_sip.py:30
+ msgid "Used to setup a SIP trunk to a SIP provider or a different SIP server."
+@@ -1608,7 +1608,7 @@
+ 
+ #: cfg_trunk_sip.py:34 ../cfg_trunk_sip.py:37
+ msgid "SIP password"
+-msgstr "Contraseña SIP"
++msgstr "Contraseña SIP"
+ 
+ #: cfg_trunk_sip.py:35 ../cfg_trunk_sip.py:38
+ msgid "SIP host"
+@@ -1616,11 +1616,11 @@
+ 
+ #: cfg_trunk_sip.py:36 ../cfg_trunk_sip.py:40
+ msgid "Enable forward address type?"
+-msgstr "¿Permitir reenvío de tipo de dirección?"
++msgstr "¿Permitir reenvío de tipo de dirección?"
+ 
+ #: cfg_trunk_sip.py:37 ../cfg_trunk_sip.py:41
+ msgid "Is the trunk behind NAT?"
+-msgstr "¿Está la troncal tras un NAT?"
++msgstr "¿Está la troncal tras un NAT?"
+ 
+ #: cfg_trunk_sip.py:42 cfg_trunk_zappri.py:52 cfg_trunk_zap.py:42
+ #: ../cfg_trunk_sip.py:47 ../cfg_trunk_zappbx.py:48
+@@ -1637,15 +1637,15 @@
+ 
+ #: cfg_trunk_zaphfc.py:31 ../cfg_trunk_zaphfc.py:34
+ msgid "Number of cards"
+-msgstr "Número de tarjetas"
++msgstr "Número de tarjetas"
+ 
+ #: cfg_trunk_zappri.py:28 ../cfg_trunk_zappri.py:28
+ msgid "Standard ZAP PRI trunk"
+-msgstr "Troncal ZAP PRI estándar"
++msgstr "Troncal ZAP PRI estándar"
+ 
+ #: cfg_trunk_zappri.py:32 ../cfg_trunk_zappri.py:36
+ msgid "PRI signalling, CPE side"
+-msgstr "Señalización del PRI, lado del consumidor"
++msgstr "Señalización del PRI, lado del consumidor"
+ 
+ #: cfg_trunk_zappri.py:32 ../cfg_trunk_zappri.py:36
+ msgid "PRI signalling, Network side"
+@@ -1684,18 +1684,18 @@
+ 
+ #: cfg_trunk_zappri.py:86 ../cfg_trunk_zappri.py:90
+ msgid "Group already in use"
+-msgstr "El grupo ya está en uso"
++msgstr "El grupo ya está en uso"
+ 
+ #: cfg_trunk_zap.py:27 ../cfg_trunk_zap.py:27
+ msgid "Standard ZAP trunk"
+-msgstr "Troncal ZAP estándar"
++msgstr "Troncal ZAP estándar"
+ 
+ #: configlets.py:428 configlets.py:665 configlets.py:805 ../configlets.py:581
+ #: ../configlets.py:873 ../configlets.py:874 ../configlets.py:999
+ #: ../configlets.py:1021 ../configlets.py:585 ../configlets.py:888
+ #: ../configlets.py:889 ../configlets.py:1013 ../configlets.py:1035
+ msgid "None"
+-msgstr "Ningúno(a)"
++msgstr "Ningúno(a)"
+ 
+ #: configlets.py:465 ../configlets.py:620 ../configlets.py:624
+ msgid "Name already in use"
+@@ -1704,7 +1704,7 @@
+ #: configlets.py:551 configlets.py:818 ../configlets.py:716
+ #: ../configlets.py:1034 ../configlets.py:720 ../configlets.py:1048
+ msgid "Info"
+-msgstr "Información"
++msgstr "Información"
+ 
+ #: configlets.py:600 ../configlets.py:800 ../configlets.py:804
+ msgid "Dial Command"
+@@ -1712,22 +1712,22 @@
+ 
+ #: configlets.py:628 ../configlets.py:828 ../configlets.py:832
+ msgid "You should select a phone to ring to"
+-msgstr "Usted debe seleccionar un teléfono para timbrar"
++msgstr "Usted debe seleccionar un teléfono para timbrar"
+ 
+ #: configlets.py:693 ../configlets.py:780 ../configlets.py:784
+ msgid "Password:"
+-msgstr "Contraseña:"
++msgstr "Contraseña:"
+ 
+ #: language.py:48 ../language.py:67
+ msgid "This menu will contain all sorts of administration stuff:"
+-msgstr "Este menú tendrá todo tipo de funciones administrativas:"
++msgstr "Este menú tendrá todo tipo de funciones administrativas:"
+ 
+ #: panelutils.py:74 ../panelutils.py:74
+ msgid ""
+ "0,No timeout|300,5 minutes|600,10 minutes|1200,20 minutes|2400,40 minutes|"
+ "3000,50 minutes"
+ msgstr ""
+-"0,Sin tiempo límite|300,5 minutos|600,10 minutos|1200,20 minutos|2400,40 "
++"0,Sin tiempo límite|300,5 minutos|600,10 minutos|1200,20 minutos|2400,40 "
+ "minutos|3000,50 minutos"
+ 
+ #: panelutils.py:98 ../panelutils.py:98
+@@ -1760,11 +1760,11 @@
+ 
+ #: ConfigHelper.ptl:93 ../ConfigHelper.ptl:95
+ msgid "Add more"
+-msgstr "Añadir más"
++msgstr "Añadir más"
+ 
+ #: ConfigHelper.ptl:112 UserPage.ptl:64 ../ConfigHelper.ptl:113
+ msgid "Invalid URL"
+-msgstr "URL inválida"
++msgstr "URL inválida"
+ 
+ #: ConfigHelper.ptl:118 page_config_edit.ptl:43 ../ConfigHelper.ptl:118
+ #: ../page_config_edit.ptl:43
+@@ -1807,22 +1807,22 @@
+ 
+ #: Missing.ptl:32
+ msgid "Admin"
+-msgstr "Administración"
++msgstr "Administración"
+ 
+ #: Missing.ptl:35 Options.ptl:30 page_config.ptl:26 page_config.ptl:68
+ #: page_config.ptl:80 page_config.ptl:86 page_config.ptl:92
+ #: ../page_config.ptl:26 ../page_config.ptl:68 ../page_config.ptl:80
+ #: ../page_config.ptl:86 ../page_config.ptl:92
+ msgid "Configuration"
+-msgstr "Configuración"
++msgstr "Configuración"
+ 
+ #: Missing.ptl:40
+ msgid "Page missing"
+-msgstr "Página no encontrada"
++msgstr "Página no encontrada"
+ 
+ #: Missing.ptl:41
+ msgid "This page is on my TODO list :-)"
+-msgstr "Está página está en desarrollo"
++msgstr "Está página está en desarrollo"
+ 
+ #: Options.ptl:30 page_config_options.ptl:26 page_config.ptl:68
+ #: page_config.ptl:80 ../page_config_options.ptl:26 ../page_config.ptl:68
+@@ -1933,7 +1933,7 @@
+ #: page_admin_cdr.ptl:108 ../page_owner_cdr.ptl:144 ../page_stats_cdr.ptl:146
+ #: ../page_owner_cdr.ptl:145 ../page_stats_cdr.ptl:147
+ msgid "Number of records to show:"
+-msgstr "Número de registros a mostrar:"
++msgstr "Número de registros a mostrar:"
+ 
+ #: page_admin_cdr.ptl:109
+ msgid "Order by:"
+@@ -1978,7 +1978,7 @@
+ 
+ #: page_admin_cdr.ptl:222
+ msgid "Duration_in_minutes"
+-msgstr "Duración_en_minutos"
++msgstr "Duración_en_minutos"
+ 
+ #: page_admin_cdr.ptl:225
+ msgid "Cost_of_call"
+@@ -1998,7 +1998,7 @@
+ 
+ #: page_admin_cdr.ptl:240 ../StatsHelper.ptl:163
+ msgid "Failed"
+-msgstr "Falló"
++msgstr "Falló"
+ 
+ #: page_admin_cdr.ptl:241
+ msgid "start"
+@@ -2017,11 +2017,11 @@
+ 
+ #: page_admin_panel.ptl:28 ../page_admin_panel.ptl:28
+ msgid "Asternic Flash Operator Panel"
+-msgstr "Pánel de Operadora Flash Asternic"
++msgstr "Pánel de Operadora Flash Asternic"
+ 
+ #: page_admin_panel.ptl:43 ../page_admin_panel.ptl:43
+ msgid "You don't have a panel configured yet"
+-msgstr "Usted no tiene un pánel configurado en este momento."
++msgstr "Usted no tiene un pánel configurado en este momento."
+ 
+ #: page_admin_panel.ptl:47 ../page_admin_panel.ptl:47
+ msgid "You have a panel configured "
+@@ -2029,7 +2029,7 @@
+ 
+ #: page_admin_panel.ptl:49 ../page_admin_panel.ptl:49
+ msgid "here"
+-msgstr "aquí"
++msgstr "aquí"
+ 
+ #: page_admin_pbxstate.ptl:26 UserPage.ptl:105 ../page_admin_pbxstate.ptl:26
+ msgid "PBX State"
+@@ -2045,7 +2045,7 @@
+ #: ../page_user_quickdiallist.ptl:76 ../page_user_settings.ptl:105
+ #: ../page_user_state.ptl:138
+ msgid "Asterisk is not running!"
+-msgstr "¡Asterisk no está corriendo!"
++msgstr "¡Asterisk no está corriendo!"
+ 
+ #: page_admin_pbxstate.ptl:85 page_config_reload.ptl:49
+ #: page_user_settings.ptl:110 page_user_state.ptl:143 UserUI.ptl:221
+@@ -2053,19 +2053,19 @@
+ #: ../page_user_quickdiallist.ptl:81 ../page_user_settings.ptl:110
+ #: ../page_user_state.ptl:143
+ msgid "The manager access is not working!"
+-msgstr "¡El acceso de gestión no está funcionando!"
++msgstr "¡El acceso de gestión no está funcionando!"
+ 
+ #: page_admin.ptl:25 ../page_admin.ptl:25
+ msgid "Administration"
+-msgstr "Administración"
++msgstr "Administración"
+ 
+ #: page_admin.ptl:26 ../page_owner.ptl:26
+ msgid "Perform administrative actions to PBX and extensions"
+-msgstr "Realizar acciones de adminstración a la PBX y extensiones"
++msgstr "Realizar acciones de adminstración a la PBX y extensiones"
+ 
+ #: page_config_add.ptl:26 ../page_config_add.ptl:26
+ msgid "Add a new configlet"
+-msgstr "Añadir un nuevo configlet"
++msgstr "Añadir un nuevo configlet"
+ 
+ #: page_config_applications.ptl:26 ../page_config_applications.ptl:26
+ msgid "Applications"
+@@ -2077,7 +2077,7 @@
+ 
+ #: page_config_backup.ptl:27 ../page_admin_backup.ptl:27
+ msgid "Backup a config file"
+-msgstr "Hacer copia de seguridad de un archivo de configuración"
++msgstr "Hacer copia de seguridad de un archivo de configuración"
+ 
+ #: page_config_backup.ptl:44 ../page_admin_backup.ptl:44
+ #, python-format
+@@ -2121,19 +2121,19 @@
+ #: page_config_phones.ptl:26 page_config.ptl:86 ../page_config_phones.ptl:26
+ #: ../page_config.ptl:86
+ msgid "Phones"
+-msgstr "Teléfonos"
++msgstr "Teléfonos"
+ 
+ #: page_config_phones.ptl:27 ../page_config_phones.ptl:27
+ msgid "Phones and their settings"
+-msgstr "Teléfonos y sus configuraciones"
++msgstr "Teléfonos y sus configuraciones"
+ 
+ #: page_config.ptl:27 ../page_config.ptl:27
+ msgid "Modify Asterisk configuration"
+-msgstr "Modificar la configuración de Asterisk"
++msgstr "Modificar la configuración de Asterisk"
+ 
+ #: page_config.ptl:42 ../page_config.ptl:42
+ msgid "Configuration tips"
+-msgstr "Pistas para la configuración"
++msgstr "Pistas para la configuración"
+ 
+ #: page_config.ptl:66 ../page_config.ptl:66
+ msgid ""
+@@ -2195,7 +2195,7 @@
+ 
+ #: page_config.ptl:116 ../page_config.ptl:116
+ msgid "Category"
+-msgstr "Categoría"
++msgstr "Categoría"
+ 
+ #: page_config.ptl:132 ../page_config.ptl:132
+ msgid "Other things you can configure:"
+@@ -2219,11 +2219,11 @@
+ 
+ #: page_config_trunks.ptl:27 ../page_config_trunks.ptl:27
+ msgid "Telephone company lines and VoIP-Trunks"
+-msgstr "Líneas de la compañía de teléfono y troncales VoIP"
++msgstr "Líneas de la compañía de teléfono y troncales VoIP"
+ 
+ #: page_config_trunks.ptl:46 ../page_config_trunks.ptl:46
+ msgid "You should add at least one phone to configure trunks"
+-msgstr "Usted debe añadir al menos un teléfono para configurar troncales"
++msgstr "Usted debe añadir al menos un teléfono para configurar troncales"
+ 
+ #: page_config_up.ptl:26 ../page_config_up.ptl:26
+ msgid "Moves a configlet one position up"
+@@ -2235,15 +2235,15 @@
+ 
+ #: page_config_users.ptl:27 ../page_config_users.ptl:27
+ msgid "Users and Mailboxes"
+-msgstr "Usuarios y Buzónes de mensajes"
++msgstr "Usuarios y Buzónes de mensajes"
+ 
+ #: page_config_viewconf.ptl:29 ../page_admin_viewconf.ptl:29
+ msgid "View Configuration"
+-msgstr "Mirar configuración"
++msgstr "Mirar configuración"
+ 
+ #: page_config_viewconf.ptl:30 ../page_admin_viewconf.ptl:30
+ msgid "Show Asterisk configuration files"
+-msgstr "Mostrar los archivos de configuración de Asterisk"
++msgstr "Mostrar los archivos de configuración de Asterisk"
+ 
+ #: page_config_viewconf.ptl:87 ../page_admin_viewconf.ptl:87
+ msgid "Show"
+@@ -2251,7 +2251,7 @@
+ 
+ #: page_config_viewconf.ptl:94 ../page_admin_viewconf.ptl:94
+ msgid "Asterisk configuration files"
+-msgstr "Archivos de configuración de Asterisk"
++msgstr "Archivos de configuración de Asterisk"
+ 
+ #: page_config_viewconf.ptl:101 ../page_admin_viewconf.ptl:101
+ msgid "Nothing to Show"
+@@ -2259,11 +2259,11 @@
+ 
+ #: page_config_viewconf.ptl:103 ../page_admin_viewconf.ptl:103
+ msgid "There is nothing configured yet."
+-msgstr "No existe configuración en el momento"
++msgstr "No existe configuración en el momento"
+ 
+ #: page_debug.ptl:25 ../page_debug.ptl:25
+ msgid "Debug"
+-msgstr "Depuración"
++msgstr "Depuración"
+ 
+ #: page_debug.ptl:26 ../page_debug.ptl:26
+ msgid "Various functions to debug DeStar, mostly useful for programmers"
+@@ -2279,28 +2279,28 @@
+ 
+ #: page_login.ptl:27 UserPage.ptl:111 ../page_login.ptl:26
+ msgid "Login"
+-msgstr "Inicio de Sesión"
++msgstr "Inicio de Sesión"
+ 
+ #: page_login.ptl:28 ../page_login.ptl:27
+ msgid "Login into DeStar"
+-msgstr "Iniciar sesión en DeStar"
++msgstr "Iniciar sesión en DeStar"
+ 
+ #: page_login.ptl:43 UserUI.ptl:154 ../page_login.ptl:42
+ msgid "User or phone name/number"
+-msgstr "Nombre/Número del teléfono o usuario"
++msgstr "Nombre/Número del teléfono o usuario"
+ 
+ #: page_login.ptl:44 UserUI.ptl:155 ../page_login.ptl:43
+ msgid "Password or PIN"
+-msgstr "Contraseña o PIN"
++msgstr "Contraseña o PIN"
+ 
+ #: page_login.ptl:56 UserUI.ptl:167 ../page_login.ptl:55
+ msgid "Invalid username or password"
+-msgstr "Nombre de usuario o Contraseña incorrectos"
++msgstr "Nombre de usuario o Contraseña incorrectos"
+ 
+ #: page_logout.ptl:25 Templates.ptl:227 ../page_logout.ptl:25
+ #: ../Templates.ptl:259 ../Templates.ptl:260
+ msgid "Logout"
+-msgstr "Cerrar Sesión"
++msgstr "Cerrar Sesión"
+ 
+ #: page_logout.ptl:26 ../page_logout.ptl:26
+ msgid "Logout and become a guest user"
+@@ -2312,7 +2312,7 @@
+ 
+ #: page_main.ptl:29 ../page_main.ptl:29
+ msgid "DeStar main page"
+-msgstr "Página Principal de Destar"
++msgstr "Página Principal de Destar"
+ 
+ #: page_main.ptl:137 ../page_main.ptl:137
+ msgid "Access Denied"
+@@ -2320,11 +2320,11 @@
+ 
+ #: page_main.ptl:139 ../page_main.ptl:139
+ msgid "You don't have access to this page."
+-msgstr "Usted no tiene acceso a esta ubicación."
++msgstr "Usted no tiene acceso a esta ubicación."
+ 
+ #: page_user_info.ptl:26 ../page_user_info.ptl:26
+ msgid "User Info"
+-msgstr "Información del Usuario"
++msgstr "Información del Usuario"
+ 
+ #: page_user_info.ptl:27 ../page_user_info.ptl:27
+ msgid "Your access rights in DeStar"
+@@ -2333,7 +2333,7 @@
+ #: page_user_info.ptl:43 page_user.ptl:40 UserUI.ptl:174
+ #: ../page_user_info.ptl:43 ../page_user.ptl:40
+ msgid "You are now logged in as user"
+-msgstr "Usted ha iniciado sesión como el usuario"
++msgstr "Usted ha iniciado sesión como el usuario"
+ 
+ #: page_user_info.ptl:48 page_user.ptl:45 ../page_user_info.ptl:48
+ #: ../page_user.ptl:45
+@@ -2353,7 +2353,7 @@
+ #: page_user_info.ptl:58 page_user.ptl:55 UserUI.ptl:181
+ #: ../page_user_info.ptl:58 ../page_user.ptl:55
+ msgid "You are not logged in."
+-msgstr "Usted no ha iniciado una sesión."
++msgstr "Usted no ha iniciado una sesión."
+ 
+ #: page_user_info.ptl:60 page_user.ptl:57 UserUI.ptl:183
+ #: ../page_user_info.ptl:60 ../page_user.ptl:57
+@@ -2362,15 +2362,15 @@
+ 
+ #: page_user_info.ptl:64 UserUI.ptl:187 ../page_user_info.ptl:64
+ msgid "access all public accessible info pages"
+-msgstr "Acceder a todas las páginas de información públicas"
++msgstr "Acceder a todas las páginas de información públicas"
+ 
+ #: page_user_info.ptl:68 UserUI.ptl:191 ../page_user_info.ptl:68
+ msgid "change your personal phone settings"
+-msgstr "Cambiar la configuración de su teléfono personal"
++msgstr "Cambiar la configuración de su teléfono personal"
+ 
+ #: page_user_info.ptl:72 UserUI.ptl:195 ../page_user_info.ptl:72
+ msgid "change phone settings of other people"
+-msgstr "Cambiar la configuración de teléfono de otros usuarios"
++msgstr "Cambiar la configuración de teléfono de otros usuarios"
+ 
+ #: page_user_info.ptl:76 UserUI.ptl:199 ../page_user_info.ptl:76
+ msgid "configure the PBX"
+@@ -2379,11 +2379,11 @@
+ #: page_user_info.ptl:80 UserUI.ptl:203 ../page_user_info.ptl:80
+ msgid "access debug pages to help program DeStar"
+ msgstr ""
+-"acceder a páginas de registro o log de DeStar para ayudar con su desarrollo"
++"acceder a páginas de registro o log de DeStar para ayudar con su desarrollo"
+ 
+ #: page_user_info.ptl:83 UserUI.ptl:206 ../page_user_info.ptl:83
+ msgid "Have fun!"
+-msgstr "¡Diviértase!"
++msgstr "¡Diviértase!"
+ 
+ #: page_user.ptl:26 ../page_user.ptl:26
+ msgid "Perform tasks allowed by users"
+@@ -2391,15 +2391,15 @@
+ 
+ #: page_user.ptl:61 ../page_user.ptl:61
+ msgid "Access all public accessible info pages"
+-msgstr "Acceder a todas las páginas de información públicas"
++msgstr "Acceder a todas las páginas de información públicas"
+ 
+ #: page_user.ptl:65 ../page_user.ptl:65
+ msgid "Change your personal phone settings"
+-msgstr "Cambiar la configuración de su teléfono personal"
++msgstr "Cambiar la configuración de su teléfono personal"
+ 
+ #: page_user.ptl:69 ../page_user.ptl:69
+ msgid "Change phone settings of other people"
+-msgstr "Cambiar la configuración de teléfono de otros usuarios"
++msgstr "Cambiar la configuración de teléfono de otros usuarios"
+ 
+ #: page_user.ptl:73 ../page_user.ptl:73
+ msgid "Configure the PBX"
+@@ -2408,15 +2408,15 @@
+ #: page_user.ptl:77 ../page_user.ptl:77
+ msgid "Access debug pages to help program DeStar"
+ msgstr ""
+-"Acceder a páginas de registro o log de DeStar para ayudar con su desarrollo"
++"Acceder a páginas de registro o log de DeStar para ayudar con su desarrollo"
+ 
+ #: page_user_settings.ptl:27 ../page_user_settings.ptl:27
+ msgid "Phone Settings"
+-msgstr "Configuración del teléfono"
++msgstr "Configuración del teléfono"
+ 
+ #: page_user_settings.ptl:28 ../page_user_settings.ptl:28
+ msgid "Set your phone settings"
+-msgstr "Cambiar la configuración de su teléfono personal"
++msgstr "Cambiar la configuración de su teléfono personal"
+ 
+ #: page_user_settings.ptl:56 UserUI.ptl:43 ../page_user_settings.ptl:56
+ msgid "Enable 'do not disturb'"
+@@ -2424,11 +2424,11 @@
+ 
+ #: page_user_settings.ptl:57 UserUI.ptl:44 ../page_user_settings.ptl:57
+ msgid "Immediate call forwarding to"
+-msgstr "Redirección inmediata de llamadas a"
++msgstr "Redirección inmediata de llamadas a"
+ 
+ #: page_user_settings.ptl:58 UserUI.ptl:46 ../page_user_settings.ptl:58
+ msgid "Forward call when busy/unavailable to"
+-msgstr "Si está ocupado/indisponible, redireccionar a"
++msgstr "Si está ocupado/indisponible, redireccionar a"
+ 
+ #: page_user_settings.ptl:59 ../page_user_settings.ptl:59
+ msgid "Seconds of incoming ring time"
+@@ -2440,21 +2440,21 @@
+ 
+ #: page_user_settings.ptl:64 ../page_user_settings.ptl:64
+ msgid "Extension Password"
+-msgstr "Contraseña de la extensión"
++msgstr "Contraseña de la extensión"
+ 
+ #: page_user_settings.ptl:95 ../page_user_settings.ptl:95
+ msgid "Could not create destar configuration file."
+-msgstr "No fue posible crear el archivo de configuración de destar"
++msgstr "No fue posible crear el archivo de configuración de destar"
+ 
+ #: page_user_settings.ptl:117 page_user_state.ptl:150
+ #: ../page_user_quickdiallist.ptl:88 ../page_user_settings.ptl:118
+ #: ../page_user_state.ptl:151
+ msgid "You don't have an associated phone"
+-msgstr "Usted no tiene un teléfono asociado"
++msgstr "Usted no tiene un teléfono asociado"
+ 
+ #: page_user_state.ptl:27 ../page_user_state.ptl:27
+ msgid "Phone State"
+-msgstr "Estado del Teléfono"
++msgstr "Estado del Teléfono"
+ 
+ #: page_user_state.ptl:28 ../page_user_state.ptl:28
+ msgid "Status of your phone"
+@@ -2466,7 +2466,7 @@
+ 
+ #: page_user_state.ptl:57 UserUI.ptl:84 ../page_user_state.ptl:57
+ msgid "Last updated"
+-msgstr "Última Actualización"
++msgstr "Última Actualización"
+ 
+ #: page_user_state.ptl:69 UserUI.ptl:96 ../page_user_state.ptl:69
+ msgid "Registration status"
+@@ -2474,11 +2474,11 @@
+ 
+ #: page_user_state.ptl:69 UserUI.ptl:96 ../page_user_state.ptl:69
+ msgid "PeerStatus"
+-msgstr "Estado del teléfono"
++msgstr "Estado del teléfono"
+ 
+ #: page_user_state.ptl:75 UserUI.ptl:102 ../page_user_state.ptl:75
+ msgid "Channel ID"
+-msgstr "Identificación del Canal"
++msgstr "Identificación del Canal"
+ 
+ #: page_user_state.ptl:75 UserUI.ptl:102 ../page_user_state.ptl:75
+ msgid "Channel"
+@@ -2486,12 +2486,12 @@
+ 
+ #: page_user_state.ptl:81 UserUI.ptl:108 ../page_user_state.ptl:81
+ msgid "Called extension"
+-msgstr "Extensión llamada"
++msgstr "Extensión llamada"
+ 
+ #: page_user_state.ptl:87 UserUI.ptl:114 ../page_user_state.ptl:87
+ #: ../cfg_opt_music.py:33
+ msgid "Application"
+-msgstr "Aplicación"
++msgstr "Aplicación"
+ 
+ #: page_user_state.ptl:100 UserUI.ptl:127 ../page_owner_cdr.ptl:140
+ #: ../page_stats_cdr.ptl:142 ../page_stats_phone.ptl:46
+@@ -2526,7 +2526,7 @@
+ 
+ #: Templates.ptl:256 ../Templates.ptl:288 ../Templates.ptl:289
+ msgid "You don't have access to this page"
+-msgstr "Usted no tiene acceso a esta ubicación"
++msgstr "Usted no tiene acceso a esta ubicación"
+ 
+ #: UserPage.ptl:30
+ msgid "Asterisk state"
+@@ -2534,19 +2534,19 @@
+ 
+ #: UserPage.ptl:33
+ msgid "User info"
+-msgstr "Información del Usuario"
++msgstr "Información del Usuario"
+ 
+ #: UserPage.ptl:38
+ msgid "Phone state"
+-msgstr "Estado del Teléfono"
++msgstr "Estado del Teléfono"
+ 
+ #: UserPage.ptl:40 UserPage.ptl:68
+ msgid "Phone settings"
+-msgstr "Configuración del teléfono"
++msgstr "Configuración del teléfono"
+ 
+ #: UserPage.ptl:74
+ msgid "Phone status"
+-msgstr "Estado del teléfono"
++msgstr "Estado del teléfono"
+ 
+ #: UserPage.ptl:83
+ msgid "User functions"
+@@ -2555,12 +2555,12 @@
+ #: UserPage.ptl:85
+ msgid "This menu will contain all sorts of phone user specific stuff:"
+ msgstr ""
+-"Este menú tendrá todo tipo de funciones para el usuario de teléfono:"
++"Este menú tendrá todo tipo de funciones para el usuario de teléfono:"
+ 
+ #: UserPage.ptl:88
+ msgid "Phone status (number of voicemails, call forwarding etc)"
+ msgstr ""
+-"Estado del teléfono (número de correos de voz, redirección de llamadas, "
++"Estado del teléfono (número de correos de voz, redirección de llamadas, "
+ "etc)"
+ 
+ #: UserPage.ptl:89
+@@ -2569,7 +2569,7 @@
+ 
+ #: UserPage.ptl:90
+ msgid "Set CFIM (call-forwarding)"
+-msgstr "Habilitar CFIM (redirección-de-llamadas)"
++msgstr "Habilitar CFIM (redirección-de-llamadas)"
+ 
+ #: UserPage.ptl:91
+ msgid "Set CFBS (call-forward if busy/unavailable)"
+@@ -2577,15 +2577,15 @@
+ 
+ #: UserPage.ptl:92
+ msgid "See last n calls made"
+-msgstr "Ver últimas n llamadas hechas"
++msgstr "Ver últimas n llamadas hechas"
+ 
+ #: UserPage.ptl:93
+ msgid "See last n calls received"
+-msgstr "Ver las últimas n llamadas recibidas"
++msgstr "Ver las últimas n llamadas recibidas"
+ 
+ #: UserPage.ptl:94
+ msgid "Maintain personal phone directory"
+-msgstr "Mantenimiento del directorio telefónico personal"
++msgstr "Mantenimiento del directorio telefónico personal"
+ 
+ #: UserPage.ptl:95
+ msgid "Initiate call from the web"
+@@ -2597,11 +2597,11 @@
+ 
+ #: UserPage.ptl:137
+ msgid "Logged in"
+-msgstr "Sesión iniciada"
++msgstr "Sesión iniciada"
+ 
+ #: UserPage.ptl:157
+ msgid "Wrong phone id"
+-msgstr "Identificador de teléfono incorrecto"
++msgstr "Identificador de teléfono incorrecto"
+ 
+ #: UserUI.ptl:45
+ msgid "Seconds of ring time"
+diff -urNad destar-0.2beta~/po/fr.po destar-0.2beta/po/fr.po
+--- destar-0.2beta~/po/fr.po	2006-06-17 12:23:57.000000000 +0000
++++ destar-0.2beta/po/fr.po	2006-06-27 05:31:28.000000000 +0000
+@@ -28,15 +28,15 @@
+ 
+ #: cfg_app_callfw.py:26 ../cfg_app_callfw.py:26
+ msgid "Call forwarding"
+-msgstr "Transfère d'appel"
++msgstr "Transfère d'appel"
+ 
+ #: cfg_app_callfw.py:27 ../cfg_app_callfw.py:27
+ msgid "Extensions to set/unset call forwarding."
+-msgstr "Extensions d'activation/désactivation de transfère d'appel"
++msgstr "Extensions d'activation/désactivation de transfère d'appel"
+ 
+ #: cfg_app_callfw.py:28 ../cfg_app_callfw.py:28
+ msgid "New extensions to set/unset call forwarding"
+-msgstr "Nouvelles extensions d'activation/désactivation de transfère d'appel"
++msgstr "Nouvelles extensions d'activation/désactivation de transfère d'appel"
+ 
+ #: cfg_app_callfw.py:31 cfg_opt_music.py:31 cfg_opt_user.py:36
+ #: configlets.py:589 configlets.py:817 configlets.py:874 configlets.py:995
+@@ -50,28 +50,28 @@
+ 
+ #: cfg_app_callfw.py:31 ../cfg_app_callfw.py:33
+ msgid "Call Forwarding Unconditional"
+-msgstr "Transfère d'appel inconditionnel"
++msgstr "Transfère d'appel inconditionnel"
+ 
+ #: cfg_app_callfw.py:31 ../cfg_app_callfw.py:33
+ msgid "Call Forwarding if Busy/Unavailable"
+-msgstr "Transfère d'appel si Occupé/Non disponible"
++msgstr "Transfère d'appel si Occupé/Non disponible"
+ 
+ #: cfg_app_callfw.py:32 ../cfg_app_callfw.py:34
+ msgid "Setting preffix"
+-msgstr "Préfix d'activation"
++msgstr "Préfix d'activation"
+ 
+ #: cfg_app_callfw.py:33 cfg_app_dnd.py:33 ../cfg_app_callfw.py:35
+ #: ../cfg_app_dnd.py:34
+ msgid "Unsetting extension"
+-msgstr "Extension de désactivation"
++msgstr "Extension de désactivation"
+ 
+ #: cfg_app_conference.py:26 ../cfg_app_conference.py:26
+ msgid "Conference room"
+-msgstr "Salle de conférence"
++msgstr "Salle de conférence"
+ 
+ #: cfg_app_conference.py:27 ../cfg_app_conference.py:27
+ msgid "New conference room"
+-msgstr "Nouvelle salle de conférence"
++msgstr "Nouvelle salle de conférence"
+ 
+ #: cfg_app_conference.py:30 cfg_app_directory.py:31 cfg_app_echo.py:32
+ #: cfg_app_meetme.py:30 cfg_app_milliwatt.py:32 cfg_app_music.py:31
+@@ -101,32 +101,32 @@
+ #: cfg_app_conference.py:31 cfg_app_meetme.py:31 ../cfg_app_conference.py:33
+ #: ../cfg_app_meetme.py:32
+ msgid "Conference number"
+-msgstr "Numéro de conférence"
++msgstr "Numéro de conférence"
+ 
+ #: cfg_app_directory.py:26 cfg_opt_music.py:32 ../cfg_app_directory.py:26
+ #: ../cfg_opt_music.py:32
+ msgid "Directory"
+-msgstr "Répertoire"
++msgstr "Répertoire"
+ 
+ #: cfg_app_directory.py:27 ../cfg_app_directory.py:27
+ msgid "New Directory"
+-msgstr "Nouveau répertoire"
++msgstr "Nouveau répertoire"
+ 
+ #: cfg_app_directory.py:28 ../cfg_app_directory.py:28
+ msgid "This application allows you to dial by name."
+-msgstr "Cette application vous autorise la numérotation par nom"
++msgstr "Cette application vous autorise la numérotation par nom"
+ 
+ #: cfg_app_dnd.py:26 ../cfg_app_dnd.py:26
+ msgid "Set/Unset DND"
+-msgstr "Active/Désactive 'Ne pas déranger'"
++msgstr "Active/Désactive 'Ne pas déranger'"
+ 
+ #: cfg_app_dnd.py:27 ../cfg_app_dnd.py:27
+ msgid "New extensions to Set/Unset Do not disturb"
+-msgstr "Nouvelle extensions pour activer/désactiver 'Ne pas déranger'"
++msgstr "Nouvelle extensions pour activer/désactiver 'Ne pas déranger'"
+ 
+ #: cfg_app_dnd.py:28 ../cfg_app_dnd.py:28
+ msgid "Extensions to set/unset 'Do Not Disturb'."
+-msgstr "Extensions pour activer/désactiver 'Ne pas déranger'"
++msgstr "Extensions pour activer/désactiver 'Ne pas déranger'"
+ 
+ #: cfg_app_dnd.py:32 ../cfg_app_dnd.py:33
+ msgid "Setting extension"
+@@ -135,11 +135,11 @@
+ #: cfg_app_dnd.py:45 configlets.py:625 ../cfg_app_dnd.py:50
+ #: ../configlets.py:608
+ msgid "Extension already in use"
+-msgstr "Extension déja utilisée"
++msgstr "Extension déja utilisée"
+ 
+ #: cfg_app_echo.py:26 ../cfg_app_echo.py:26
+ msgid "Echo test"
+-msgstr "Test d'écho"
++msgstr "Test d'écho"
+ 
+ #: cfg_app_echo.py:27 ../cfg_app_echo.py:27
+ msgid "New Echo test extension"
+@@ -150,20 +150,20 @@
+ "The echo test immediately plays back what you speek. You can\n"
+ "\t\t\t   use this to find out how much echo you have."
+ msgstr ""
+-"Le test d'écho joue immédiatement ce que vous dites. Vous pouvez\n"
+-"\t\t\t   utiliser celui-ci pour établir votre quantité d'écho."
++"Le test d'écho joue immédiatement ce que vous dites. Vous pouvez\n"
++"\t\t\t   utiliser celui-ci pour établir votre quantité d'écho."
+ 
+ #: cfg_app_meetme.py:26 ../cfg_app_meetme.py:26
+ msgid "Meeting room"
+-msgstr "Salle de réunion"
++msgstr "Salle de réunion"
+ 
+ #: cfg_app_meetme.py:27 ../cfg_app_meetme.py:27
+ msgid "New meeting room"
+-msgstr "Nouvelle salle de réunion"
++msgstr "Nouvelle salle de réunion"
+ 
+ #: cfg_app_meetme.py:31 ../cfg_app_meetme.py:32
+ msgid "If empty, will be the same as the extension"
+-msgstr "Si vide, sera le même que l'extension"
++msgstr "Si vide, sera le même que l'extension"
+ 
+ #: cfg_app_meetme.py:32 ../cfg_app_meetme.py:33
+ msgid "PIN"
+@@ -180,7 +180,7 @@
+ #: ../cfg_trunk_zappbx.py:39 ../cfg_trunk_zappri.py:49 ../cfg_trunk_zap.py:38
+ #: ../page_admin_panel.ptl:27
+ msgid "Operator Panel"
+-msgstr "Panneau de l'opérateur"
++msgstr "Panneau de l'opérateur"
+ 
+ #: cfg_app_meetme.py:34 cfg_trunk_iax.py:50 cfg_trunk_sip.py:45
+ #: cfg_trunk_zappbx.py:40 cfg_trunk_zappri.py:50 cfg_trunk_zap.py:39
+@@ -202,8 +202,8 @@
+ "Generate a Constant 1000Hz tone at 0dbm (mu-law). Used for\n"
+ "\t\t\tmeasuring."
+ msgstr ""
+-"Génère un son constant de 1000Hz à 0dbm (mu-law). Utilisé pour\n"
+-"\t\t\tl'évalutation."
++"Génère un son constant de 1000Hz à 0dbm (mu-law). Utilisé pour\n"
++"\t\t\tl'évalutation."
+ 
+ #: cfg_app_music.py:26 ../cfg_app_music.py:26
+ msgid "Listen to music-on-hold"
+@@ -254,16 +254,16 @@
+ 
+ #: cfg_app_play.py:32 ../cfg_app_play.py:33
+ msgid "Don't specify an extension"
+-msgstr "Ne spécifie pas une extention"
++msgstr "Ne spécifie pas une extention"
+ 
+ #: cfg_app_play.py:40 cfg_app_record.py:52 cfg_opt_loadmodule.py:40
+ #: ../cfg_app_play.py:45 ../cfg_app_record.py:57 ../cfg_opt_loadmodule.py:40
+ msgid "Please don't specify an extension"
+-msgstr "Svp ne spécifiez pas une extension"
++msgstr "Svp ne spécifiez pas une extension"
+ 
+ #: cfg_app_quickdial_global.py:26 ../cfg_app_quickdial_global.py:26
+ msgid "Global Quick Dial List"
+-msgstr "Numérotation rapide globale"
++msgstr "Numérotation rapide globale"
+ 
+ #: cfg_app_quickdial_global.py:27 ../cfg_app_quickdial_global.py:27
+ msgid ""
+@@ -273,17 +273,17 @@
+ "calling estension has been assigned a dialout with the quick dial lookup "
+ "option activated."
+ msgstr ""
+-"Extensions pour ajouter/supprimer de la liste de numérotation rapid. "
+-"L'extension ajoutée sera de la forme prefix+2_digits_key+*"
+-"+final_destination. L'extension supprimée sera de la forme prefix"
+-"+2_digits_key. La liste globale fonctionne seulement si l'extension appelée "
+-"a été assignée à un appel vers l'extérieur avec l'option recherche de "
+-"numérotation rapide activée"
++"Extensions pour ajouter/supprimer de la liste de numérotation rapid. "
++"L'extension ajoutée sera de la forme prefix+2_digits_key+*"
++"+final_destination. L'extension supprimée sera de la forme prefix"
++"+2_digits_key. La liste globale fonctionne seulement si l'extension appelée "
++"a été assignée à un appel vers l'extérieur avec l'option recherche de "
++"numérotation rapide activée"
+ 
+ #: cfg_app_quickdial_global.py:28 ../cfg_app_quickdial_global.py:28
+ msgid "New extensions to add/remove from global quick dial list"
+ msgstr ""
+-"Nouvelle extension à ajouter/supprimer de la liste de numérotation rapide"
++"Nouvelle extension à ajouter/supprimer de la liste de numérotation rapide"
+ 
+ #: cfg_app_quickdial_global.py:32 cfg_opt_user.py:32 cfg_phone_epygi.py:40
+ #: cfg_phone_iax.py:37 cfg_phone_mgcp.py:37 cfg_phone_sip.py:38
+@@ -301,17 +301,17 @@
+ #: cfg_app_quickdial_global.py:33 ../cfg_app_quickdial_global.py:34
+ msgid "don't use ** because it is for private quick dial list"
+ msgstr ""
+-"N'utilisez pas ** car c'est réservé pour la liste privée de numérota "
++"N'utilisez pas ** car c'est réservé pour la liste privée de numérota "
+ "rapide"
+ 
+ #: cfg_app_quickdial_global.py:34 cfg_app_quickdial_phone.py:33
+ #: ../cfg_app_quickdial_global.py:35 ../cfg_app_quickdial_phone.py:34
+ msgid "Unsetting prefix"
+-msgstr "Préfix de désactivation"
++msgstr "Préfix de désactivation"
+ 
+ #: cfg_app_quickdial_phone.py:26 ../cfg_app_quickdial_phone.py:26
+ msgid "Private Quick Dial List"
+-msgstr "Liste privée de numérotation rapide"
++msgstr "Liste privée de numérotation rapide"
+ 
+ #: cfg_app_quickdial_phone.py:27 ../cfg_app_quickdial_phone.py:27
+ msgid ""
+@@ -322,25 +322,26 @@
+ "extension has an assigned dialout entry which pattern matches the final "
+ "destination."
+ msgstr ""
+-"Extensions pour ajouter/supprimer de la liste de numérotation rapid. "
+-"L'extension ajoutée sera de la forme prefix+2_digits_key+*"
+-"+final_destination. L'extension supprimée sera de la forme prefix"
+-"+2_digits_key. La liste personnelle de numérotation rapide fonctionne pour "
+-"toutes les extensions, en numérotant **+2_digits_key et seulement si "
+-"l'extension est associée à une entrée d'appel vers l'extérieur dont le "
++"Extensions pour ajouter/supprimer de la liste de numérotation rapid. "
++"L'extension ajoutée sera de la forme prefix+2_digits_key+*"
++"+final_destination. L'extension supprimée sera de la forme prefix"
++"+2_digits_key. La liste personnelle de numérotation rapide fonctionne pour "
++"toutes les extensions, en numérotant **+2_digits_key et seulement si "
++"l'extension est associée à une entrée d'appel vers l'extérieur dont le "
+ "pattern matche la destination finale"
+ 
+ #: cfg_app_quickdial_phone.py:28 ../cfg_app_quickdial_phone.py:28
+ msgid "New extensions to add/remove from personal quick dial list"
+ msgstr ""
+ "Nouvelle extension pour ajouter/supprimer de la liste personnelle de "
+-"numérotation rapide"
++"numérotation rapide"
+ 
+ #: cfg_app_quickdial_phone.py:32 ../cfg_app_quickdial_phone.py:33
+ msgid "don't use ** because it is for accesing the quick dial list"
+ msgstr ""
+-"N'utilisez pas ** car c'est réservé à l'accès de la liste de "
+-"numérotation rapide"
++"N'utilisez pas ** car c'est réservé à l'accès de la liste de numérotation "
++"rapide"
++
+ 
+ #: cfg_app_record.py:26 ../cfg_app_record.py:26
+ msgid "Record sound"
+@@ -355,9 +356,9 @@
+ "Allows you to record a sound file. You can hang up, be silent for\n"
+ "\t\t\ta second or dial '#' to stop the recording."
+ msgstr ""
+-"Vous autorise à enregistre un fichier de son. Vous pouvez raccrocher, être "
++"Vous autorise à enregistre un fichier de son. Vous pouvez raccrocher, être "
+ "silentieux pour\n"
+-"\t\t\tune seconde ou composer '#' pour arrêter l'enregistrement"
++"\t\t\tune seconde ou composer '#' pour arrêter l'enregistrement"
+ 
+ #: cfg_app_record.py:35 ../cfg_app_record.py:36
+ msgid "Sound format"
+@@ -407,31 +408,31 @@
+ 
+ #: cfg_app_voicemail.py:26 ../cfg_app_voicemail.py:26
+ msgid "Voicemail dialog"
+-msgstr "Dialogue de boite à message"
++msgstr "Dialogue de boite à message"
+ 
+ #: cfg_app_voicemail.py:27 ../cfg_app_voicemail.py:27
+ msgid "New voicemail dialog"
+-msgstr "Nouveau dialogue de boite à message"
++msgstr "Nouveau dialogue de boite à message"
+ 
+ #: cfg_app_voicemail.py:28 ../cfg_app_voicemail.py:28
+ msgid "Extension to enter the voicemail system."
+-msgstr "Extension d'entrée de boite à message"
++msgstr "Extension d'entrée de boite à message"
+ 
+ #: cfg_app_voicemail.py:32 ../cfg_app_voicemail.py:33
+ msgid "Ask for user mailbox?"
+-msgstr "Demande la boite à message de l'utilisateur"
++msgstr "Demande la boite à message de l'utilisateur"
+ 
+ #: cfg_dialout_normal.py:27 ../cfg_dialout_normal.py:27
+ msgid "Normal dialout entry"
+-msgstr "Entrée normale d'appel vers l'extérieur"
++msgstr "Entrée normale d'appel vers l'extérieur"
+ 
+ #: cfg_dialout_normal.py:28 ../cfg_dialout_normal.py:28
+ msgid "New normal dialout entry"
+-msgstr "Nouvelle entrée normale d'appel vers l'extérieur"
++msgstr "Nouvelle entrée normale d'appel vers l'extérieur"
+ 
+ #: cfg_dialout_normal.py:29 ../cfg_dialout_normal.py:29
+ msgid "Used to route calls through trunks"
+-msgstr "Utilisé pour router les appels à travers les canaux"
++msgstr "Utilisé pour router les appels à travers les canaux"
+ 
+ #: cfg_dialout_normal.py:34 cfg_ivr_autoatt.py:35 cfg_ivr_raw.py:32
+ #: cfg_opt_manager.py:31 cfg_opt_music.py:30 cfg_opt_oppanel.py:34
+@@ -466,11 +467,11 @@
+ 
+ #: cfg_dialout_normal.py:36 ../cfg_dialout_normal.py:36
+ msgid "Remove Prefix of length"
+-msgstr "Supprime un préfixe de longueur"
++msgstr "Supprime un préfixe de longueur"
+ 
+ #: cfg_dialout_normal.py:37 ../cfg_dialout_normal.py:37
+ msgid "Add Prefix"
+-msgstr "Ajoute un préfixe"
++msgstr "Ajoute un préfixe"
+ 
+ #: cfg_dialout_normal.py:38 ../cfg_dialout_normal.py:38
+ msgid "Maximum call time in seconds"
+@@ -482,12 +483,12 @@
+ 
+ #: cfg_dialout_normal.py:40 ../cfg_dialout_normal.py:40
+ msgid "Search on quick dial list?"
+-msgstr "Recherche dans la liste de numérotation rapide?"
++msgstr "Recherche dans la liste de numérotation rapide?"
+ 
+ #: cfg_dialout_normal.py:42 ../cfg_dialout_normal.py:42
+ msgid "Trunks to use for routing this dialout entry"
+ msgstr ""
+-"Cannaux à utiliser pour le routage de cette entrée d'appel extérieur"
++"Cannaux à utiliser pour le routage de cette entrée d'appel extérieur"
+ 
+ #: cfg_dialout_normal.py:59 cfg_ivr_autoatt.py:96 cfg_ivr_autoatt.py:99
+ #: cfg_ivr_autoatt.py:102 cfg_opt_did.py:69 cfg_opt_did.py:72
+@@ -508,19 +509,19 @@
+ #: ../cfg_phone_zap.py:150 ../cfg_phone_zap.py:157 ../configlets.py:419
+ #: ../cfg_opt_user.py:50 ../cfg_opt_user.py:53 ../configlets.py:423
+ msgid "This is a Dependency"
+-msgstr "Ceci est une dépendance"
++msgstr "Ceci est une dépendance"
+ 
+ #: cfg_ivr_autoatt.py:27 ../cfg_ivr_autoatt.py:27
+ msgid "Auto attendant"
+-msgstr "Répondeur automatique"
++msgstr "Répondeur automatique"
+ 
+ #: cfg_ivr_autoatt.py:28 ../cfg_ivr_autoatt.py:28
+ msgid "New auto attendant"
+-msgstr "Nouveau répondeur automatique"
++msgstr "Nouveau répondeur automatique"
+ 
+ #: cfg_ivr_autoatt.py:29 ../cfg_ivr_autoatt.py:29
+ msgid "Basic auto-attendant."
+-msgstr "Répondeur automatique de base"
++msgstr "Répondeur automatique de base"
+ 
+ #: cfg_ivr_autoatt.py:39 ../cfg_ivr_autoatt.py:39
+ msgid "Max. time for incoming calls in seconds"
+@@ -532,11 +533,11 @@
+ 
+ #: cfg_ivr_autoatt.py:52 ../cfg_ivr_autoatt.py:52
+ msgid "File to play in the background"
+-msgstr "Fichier à jouer en fond"
++msgstr "Fichier à jouer en fond"
+ 
+ #: cfg_ivr_autoatt.py:56 ../cfg_ivr_autoatt.py:56
+ msgid "How many times should it be played?"
+-msgstr "Combien de fois devrait-it être joué ?"
++msgstr "Combien de fois devrait-it être joué ?"
+ 
+ #: cfg_ivr_autoatt.py:62 ../cfg_ivr_autoatt.py:62
+ msgid "Pause between each playback"
+@@ -544,24 +545,24 @@
+ 
+ #: cfg_ivr_autoatt.py:66 ../cfg_ivr_autoatt.py:66
+ msgid "Extension to ring after file playing"
+-msgstr "Extension à appeler après le jeu"
++msgstr "Extension à appeler après le jeu"
+ 
+ #: cfg_ivr_autoatt.py:71 ../cfg_ivr_autoatt.py:71
+ msgid "Digit to jump that extension directly"
+-msgstr "Chiffre pour sauter directement à cette extension"
++msgstr "Chiffre pour sauter directement à cette extension"
+ 
+ #: cfg_ivr_autoatt.py:76 ../cfg_ivr_autoatt.py:76
+ msgid "IVR to jump on special dates"
+-msgstr "IVR à activer à des dates spécifiques"
++msgstr "IVR à activer à des dates spécifiques"
+ 
+ #: cfg_ivr_autoatt.py:83 ../cfg_ivr_autoatt.py:83
+ msgid "Times string"
+-msgstr "Spécification de temps"
++msgstr "Spécification de temps"
+ 
+ #: cfg_ivr_autoatt.py:84 ../cfg_ivr_autoatt.py:84
+ msgid "i.e. <hours>|<weekdays>|<monthdays>|<months> (comma separated)"
+ msgstr ""
+-"par exemple, <heure>|<jour de la semaine>|jour du mois>|<mois> (séparé par "
++"par exemple, <heure>|<jour de la semaine>|jour du mois>|<mois> (séparé par "
+ "des virgule)"
+ 
+ #: cfg_ivr_autoatt.py:90
+@@ -570,11 +571,11 @@
+ 
+ #: cfg_ivr_autoatt.py:116 ../cfg_ivr_autoatt.py:122
+ msgid "File should be played at least one time"
+-msgstr "Les fichier devraient être joués au moins une fois"
++msgstr "Les fichier devraient être joués au moins une fois"
+ 
+ #: cfg_ivr_autoatt.py:118 ../cfg_ivr_autoatt.py:124
+ msgid "Please specify dates"
+-msgstr "Svp spécifiez des dates"
++msgstr "Svp spécifiez des dates"
+ 
+ #: cfg_ivr_raw.py:27 ../cfg_ivr_raw.py:27
+ msgid "Raw IVR"
+@@ -591,19 +592,19 @@
+ 
+ #: cfg_opt_did.py:26 ../cfg_opt_did.py:26
+ msgid "Direct inward dialing (DID) number"
+-msgstr "Numéro Direct inward dialing (DID)"
++msgstr "Numéro Direct inward dialing (DID)"
+ 
+ #: cfg_opt_did.py:27 ../cfg_opt_did.py:27
+ msgid "New direct inward dialing (DID) number"
+-msgstr "Nouveau numéro Direct inward dialing (DID)"
++msgstr "Nouveau numéro Direct inward dialing (DID)"
+ 
+ #: cfg_opt_did.py:28 ../cfg_opt_did.py:28
+ msgid ""
+ " Used to route a DID to an extension \n"
+ "\t\t\t\t\t\tor Auto-Attendant."
+ msgstr ""
+-" Utilisé pour router un DID vers une extension \n"
+-"\t\t\t\t\t\tou un répondeur automatique."
++" Utilisé pour router un DID vers une extension \n"
++"\t\t\t\t\t\tou un répondeur automatique."
+ 
+ #: cfg_opt_did.py:35 ../cfg_opt_did.py:36
+ msgid "DID"
+@@ -618,14 +619,14 @@
+ #: ../cfg_opt_did.py:45 ../cfg_trunk_iax.py:53 ../cfg_trunk_sip.py:48
+ #: ../cfg_trunk_zappbx.py:49 ../cfg_trunk_zappri.py:57 ../cfg_trunk_zap.py:46
+ msgid "Go to"
+-msgstr "Aller à "
++msgstr "Aller à"
+ 
+ #: cfg_opt_did.py:47 cfg_trunk_iax.py:54 cfg_trunk_sip.py:49
+ #: cfg_trunk_zappbx.py:50 cfg_trunk_zappri.py:58 cfg_trunk_zap.py:47
+ #: ../cfg_opt_did.py:48 ../cfg_trunk_iax.py:54 ../cfg_trunk_sip.py:49
+ #: ../cfg_trunk_zappbx.py:50 ../cfg_trunk_zappri.py:58 ../cfg_trunk_zap.py:47
+ msgid "Phone"
+-msgstr "Téléphone"
++msgstr "Téléphone"
+ 
+ #: cfg_opt_did.py:47 cfg_trunk_iax.py:54 cfg_trunk_sip.py:49
+ #: cfg_trunk_zappbx.py:50 cfg_trunk_zappri.py:58 cfg_trunk_zap.py:47
+@@ -638,14 +639,14 @@
+ #: cfg_trunk_iaxtel.py:49 ../cfg_opt_did.py:51 ../cfg_trunk_capimsn.py:35
+ #: ../cfg_trunk_fwdiax.py:50 ../cfg_trunk_iaxtel.py:49
+ msgid "Phone to ring"
+-msgstr "Téléphone à faire sonner"
++msgstr "Téléphone à faire sonner"
+ 
+ #: cfg_opt_did.py:56 cfg_trunk_iax.py:57 cfg_trunk_sip.py:52
+ #: cfg_trunk_zappbx.py:53 cfg_trunk_zappri.py:61 cfg_trunk_zap.py:50
+ #: ../cfg_opt_did.py:57 ../cfg_trunk_iax.py:57 ../cfg_trunk_sip.py:52
+ #: ../cfg_trunk_zappbx.py:53 ../cfg_trunk_zappri.py:61 ../cfg_trunk_zap.py:50
+ msgid "IVR to jump to"
+-msgstr "Faire aller l'IVR Ã "
++msgstr "Faire aller l'IVR à"
+ 
+ #: cfg_opt_did.py:62 cfg_trunk_iax.py:59 cfg_trunk_sip.py:54
+ #: cfg_trunk_zappbx.py:55 cfg_trunk_zappri.py:63 cfg_trunk_zap.py:52
+@@ -656,7 +657,7 @@
+ 
+ #: cfg_opt_did.py:92 ../cfg_opt_did.py:93
+ msgid "DID already in use for that trunk."
+-msgstr "DID est déja utilisé pour ce canal."
++msgstr "DID est déja utilisé pour ce canal."
+ 
+ #: cfg_opt_enum.py:26 ../cfg_opt_enum.py:26
+ msgid "ENUM search domain"
+@@ -668,7 +669,7 @@
+ 
+ #: cfg_opt_enum.py:30 ../cfg_opt_enum.py:30
+ msgid "Domain to search for ENUM entries"
+-msgstr "Domaine à recherche pour des entrées ENUM"
++msgstr "Domaine à recherche pour des entrées ENUM"
+ 
+ #: cfg_opt_loadmodule.py:26 cfg_opt_loadmodule.py:27
+ #: ../cfg_opt_loadmodule.py:26 ../cfg_opt_loadmodule.py:27
+@@ -677,7 +678,7 @@
+ 
+ #: cfg_opt_loadmodule.py:28 ../cfg_opt_loadmodule.py:28
+ msgid "Module to load"
+-msgstr "Module à charger"
++msgstr "Module à charger"
+ 
+ #: cfg_opt_logger.py:25 cfg_opt_logger.py:26 ../cfg_opt_logger.py:25
+ #: ../cfg_opt_logger.py:26
+@@ -689,7 +690,7 @@
+ "Asterisk can emit many events to it's console or a log file, Here you can "
+ "make it more (or less) verbose:"
+ msgstr ""
+-"Asterisk peut émettre beaucoups d'événements sur sa console ou un fichier "
++"Asterisk peut émettre beaucoups d'événements sur sa console ou un fichier "
+ "de log, ici vous pouvez le rendre plus ou moins verbeux :"
+ 
+ #: cfg_opt_logger.py:30 ../cfg_opt_logger.py:30
+@@ -710,7 +711,7 @@
+ 
+ #: cfg_opt_logger.py:34 ../cfg_opt_logger.py:34
+ msgid "Debug output"
+-msgstr "Affichage de débug"
++msgstr "Affichage de débug"
+ 
+ #: cfg_opt_logger.py:44 ../cfg_opt_logger.py:44
+ msgid "Console output"
+@@ -718,11 +719,11 @@
+ 
+ #: cfg_opt_logger.py:50 ../cfg_opt_logger.py:50
+ msgid "Output in /var/log/asterisk/messages"
+-msgstr "Tranférer dans /var/log/asterisk/messages"
++msgstr "Tranférer dans /var/log/asterisk/messages"
+ 
+ #: cfg_opt_logger.py:56 ../cfg_opt_logger.py:56
+ msgid "Log to syslog via facility"
+-msgstr "Logguer vers les syslogs via la facilité"
++msgstr "Logguer vers les syslogs via la facilité"
+ 
+ #: cfg_opt_logger.py:61 ../cfg_opt_logger.py:61
+ msgid "What kind of messages to log"
+@@ -731,11 +732,11 @@
+ #: cfg_opt_manager.py:26 page_config.ptl:80 ../cfg_opt_manager.py:26
+ #: ../page_config.ptl:80
+ msgid "Management API access"
+-msgstr "Accès à l'API de gestion"
++msgstr "Accès à l'API de gestion"
+ 
+ #: cfg_opt_manager.py:27 ../cfg_opt_manager.py:27
+ msgid "New management API access"
+-msgstr "Nouvel accès à l'API de gestion"
++msgstr "Nouvel accès à l'API de gestion"
+ 
+ #: cfg_opt_manager.py:32 ../cfg_opt_manager.py:32
+ msgid "Secret"
+@@ -743,7 +744,7 @@
+ 
+ #: cfg_opt_manager.py:33 ../cfg_opt_manager.py:33
+ msgid "IP disable mask"
+-msgstr "Désactive les masques IP"
++msgstr "Désactive les masques IP"
+ 
+ #: cfg_opt_manager.py:34 ../cfg_opt_manager.py:34
+ msgid "IP enable mask"
+@@ -759,11 +760,11 @@
+ 
+ #: cfg_opt_music.py:26 ../cfg_opt_music.py:26
+ msgid "Background music directory"
+-msgstr "Répertoire de la musique de fond"
++msgstr "Répertoire de la musique de fond"
+ 
+ #: cfg_opt_music.py:27 ../cfg_opt_music.py:27
+ msgid "New background music directory"
+-msgstr "Nouveau répertoire de la musique de fond"
++msgstr "Nouveau répertoire de la musique de fond"
+ 
+ #: cfg_opt_oppanel.py:29 ../cfg_opt_oppanel.py:29
+ msgid "Configure Asternic Flash Operator Panel"
+@@ -771,11 +772,11 @@
+ 
+ #: cfg_opt_oppanel.py:35 ../cfg_opt_oppanel.py:35
+ msgid "FQDN/IP to access the panel via web"
+-msgstr "FQDN/IP pour accéder au panneau via le web"
++msgstr "FQDN/IP pour accéder au panneau via le web"
+ 
+ #: cfg_opt_oppanel.py:36 ../cfg_opt_oppanel.py:36
+ msgid "Security Code"
+-msgstr "Code de sécurité"
++msgstr "Code de sécurité"
+ 
+ #: cfg_opt_oppanel.py:37 ../cfg_opt_oppanel.py:37
+ msgid "Manager agent"
+@@ -783,7 +784,7 @@
+ 
+ #: cfg_opt_oppanel.py:39 ../cfg_opt_oppanel.py:39
+ msgid "Frequency in seconds to poll for sip and iax status"
+-msgstr "Fréquence en seconde de verification de status de sip et de iax"
++msgstr "Fréquence en seconde de verification de status de sip et de iax"
+ 
+ #: cfg_opt_pickup.py:27 cfg_opt_pickup.py:28 ../cfg_opt_pickup.py:27
+ #: ../cfg_opt_pickup.py:28
+@@ -792,7 +793,7 @@
+ 
+ #: cfg_opt_pickup.py:29 ../cfg_opt_pickup.py:29
+ msgid "Extension to dial to pick-up a call in the same group."
+-msgstr "Extension à appeler pour prendre un appel dans le même groupe"
++msgstr "Extension à appeler pour prendre un appel dans le même groupe"
+ 
+ #: cfg_opt_rawcfg.py:26 ../cfg_opt_rawcfg.py:26
+ msgid "Raw config file snippet"
+@@ -813,7 +814,7 @@
+ 
+ #: cfg_opt_rtp.py:31 ../cfg_opt_rtp.py:31
+ msgid "Start of RTP port area"
+-msgstr "Début de l'interval de ports RTP"
++msgstr "Début de l'interval de ports RTP"
+ 
+ #: cfg_opt_rtp.py:32 ../cfg_opt_rtp.py:32
+ msgid "End of RTP port area"
+@@ -821,11 +822,11 @@
+ 
+ #: cfg_opt_rtp.py:33 ../cfg_opt_rtp.py:33
+ msgid "Check UDP checksums of RTP packets"
+-msgstr "Vérifier les sommes de contrôle des paquets RTP"
++msgstr "Vérifier les sommes de contrôle des paquets RTP"
+ 
+ #: cfg_opt_rtp.py:46 ../cfg_opt_rtp.py:46
+ msgid "must be higher than start value"
+-msgstr "doit être plus grand que la valeur de début"
++msgstr "doit être plus grand que la valeur de début"
+ 
+ #: cfg_opt_settings.py:25 ../cfg_opt_settings.py:25
+ msgid "Austria"
+@@ -841,7 +842,7 @@
+ 
+ #: cfg_opt_settings.py:64 ../cfg_opt_settings.py:64
+ msgid "Brazil"
+-msgstr "Brézil"
++msgstr "Brézil"
+ 
+ #: cfg_opt_settings.py:75 ../cfg_opt_settings.py:75
+ msgid "Chile"
+@@ -865,7 +866,7 @@
+ 
+ #: cfg_opt_settings.py:132 ../cfg_opt_settings.py:132
+ msgid "Greece"
+-msgstr "Grèce"
++msgstr "Grèce"
+ 
+ #: cfg_opt_settings.py:143 ../cfg_opt_settings.py:143
+ msgid "India"
+@@ -885,11 +886,11 @@
+ 
+ #: cfg_opt_settings.py:189 ../cfg_opt_settings.py:189
+ msgid "Norway"
+-msgstr "Norvège"
++msgstr "Norvège"
+ 
+ #: cfg_opt_settings.py:200 ../cfg_opt_settings.py:200
+ msgid "New Zealand"
+-msgstr "Nouvelle zélande"
++msgstr "Nouvelle zélande"
+ 
+ #: cfg_opt_settings.py:211 ../cfg_opt_settings.py:211
+ msgid "Poland"
+@@ -905,11 +906,11 @@
+ 
+ #: cfg_opt_settings.py:244 ../cfg_opt_settings.py:244
+ msgid "Sweden"
+-msgstr "Suède"
++msgstr "Suède"
+ 
+ #: cfg_opt_settings.py:255 ../cfg_opt_settings.py:255
+ msgid "Taiwan"
+-msgstr "Taïwan"
++msgstr "Taïwan"
+ 
+ #: cfg_opt_settings.py:267 ../cfg_opt_settings.py:267
+ msgid "United Kingdom"
+@@ -917,7 +918,7 @@
+ 
+ #: cfg_opt_settings.py:285 ../cfg_opt_settings.py:285
+ msgid "United States / North America"
+-msgstr "Etats unis / Amérique du nord"
++msgstr "Etats unis / Amérique du nord"
+ 
+ #: cfg_opt_settings.py:296 ../cfg_opt_settings.py:296
+ msgid "South Africa"
+@@ -926,7 +927,7 @@
+ #: cfg_opt_settings.py:315 cfg_opt_settings.py:316 ../cfg_opt_settings.py:315
+ #: ../cfg_opt_settings.py:316
+ msgid "General settings"
+-msgstr "Paramètres généraux"
++msgstr "Paramètres généraux"
+ 
+ #: cfg_opt_settings.py:320 ../cfg_opt_settings.py:320
+ msgid "Country"
+@@ -935,7 +936,7 @@
+ #: cfg_opt_settings.py:321 ../cfg_opt_settings.py:321
+ msgid "The country is used for generating dialtone, ringtone, busytone etc"
+ msgstr ""
+-"Le pays est utilisé pour générer les signaux d'appel, les sonneries, les "
++"Le pays est utilisé pour générer les signaux d'appel, les sonneries, les "
+ "signaux d'occupation, etc."
+ 
+ #: cfg_opt_settings.py:325 ../cfg_opt_settings.py:325
+@@ -944,7 +945,7 @@
+ 
+ #: cfg_opt_settings.py:326 ../cfg_opt_settings.py:326
+ msgid "The language is used for voice prompts"
+-msgstr "Le langage est utilisé pour les messages vocaux"
++msgstr "Le langage est utilisé pour les messages vocaux"
+ 
+ #: cfg_opt_sip_audio.py:27 cfg_opt_sip_audio.py:28 ../cfg_opt_sip_audio.py:27
+ #: ../cfg_opt_sip_audio.py:28
+@@ -953,7 +954,7 @@
+ 
+ #: cfg_opt_sip_audio.py:32 ../cfg_opt_sip_audio.py:32
+ msgid "Codecs to use"
+-msgstr "Codecs à utiliser"
++msgstr "Codecs à utiliser"
+ 
+ #: cfg_opt_sip_audio.py:33 ../cfg_opt_sip_audio.py:33
+ msgid "Allow alaw codec"
+@@ -977,7 +978,7 @@
+ 
+ #: cfg_opt_sip_audio.py:38 ../cfg_opt_sip_audio.py:38
+ msgid "g729 pass-thru unless license obtained"
+-msgstr "g729 passe à travers excepté si une license a été acquise"
++msgstr "g729 passe à travers excepté si une license a été acquise"
+ 
+ #: cfg_opt_sip_audio.py:39 ../cfg_opt_sip_audio.py:39
+ msgid "Allow g723.1 codec"
+@@ -985,7 +986,7 @@
+ 
+ #: cfg_opt_sip_audio.py:40 ../cfg_opt_sip_audio.py:40
+ msgid "g723.1 pass-thru"
+-msgstr "Autorise le codec g723.1 passe à travers"
++msgstr "Autorise le codec g723.1 passe à travers"
+ 
+ #: cfg_opt_sip_audio.py:48 ../cfg_opt_sip_audio.py:48
+ msgid "You should choose at least one codec"
+@@ -994,11 +995,11 @@
+ #: cfg_opt_sip_network.py:28 cfg_opt_sip_network.py:29
+ #: ../cfg_opt_sip_network.py:28 ../cfg_opt_sip_network.py:29
+ msgid "SIP Network Options"
+-msgstr "Option réseau SIP"
++msgstr "Option réseau SIP"
+ 
+ #: cfg_opt_sip_network.py:33 ../cfg_opt_sip_network.py:33
+ msgid "Bind specific address?"
+-msgstr "Lie à une adresse spécifique ?"
++msgstr "Lie à une adresse spécifique ?"
+ 
+ #: cfg_opt_sip_network.py:34 ../cfg_opt_sip_network.py:34
+ msgid "Bind address"
+@@ -1010,7 +1011,7 @@
+ 
+ #: cfg_opt_sip_network.py:36 ../cfg_opt_sip_network.py:36
+ msgid "Force external ip/internel network?"
+-msgstr "Force réseau ip externe/interne"
++msgstr "Force réseau ip externe/interne"
+ 
+ #: cfg_opt_sip_network.py:37 ../cfg_opt_sip_network.py:37
+ msgid "External ip"
+@@ -1018,11 +1019,11 @@
+ 
+ #: cfg_opt_sip_network.py:38 ../cfg_opt_sip_network.py:38
+ msgid "Internal network"
+-msgstr "Réseau interne"
++msgstr "Réseau interne"
+ 
+ #: cfg_opt_sip_network.py:39 ../cfg_opt_sip_network.py:39
+ msgid "Netmask"
+-msgstr "Masque réseau"
++msgstr "Masque réseau"
+ 
+ #: cfg_opt_user.py:25 page_config.ptl:68 ../cfg_opt_user.py:25
+ #: ../page_config.ptl:68
+@@ -1035,7 +1036,7 @@
+ 
+ #: cfg_opt_user.py:33 ../cfg_opt_user.py:33
+ msgid "Associated IP address of PC"
+-msgstr "IP adresse associée au PC"
++msgstr "IP adresse associée au PC"
+ 
+ #: cfg_opt_user.py:33 ../cfg_opt_user.py:33
+ msgid "Trusted for auto-login"
+@@ -1043,12 +1044,12 @@
+ 
+ #: cfg_opt_user.py:34 ../cfg_opt_user.py:34
+ msgid "Associated phone"
+-msgstr "Téléphone associé"
++msgstr "Téléphone associé"
+ 
+ #: cfg_opt_user.py:37 page_user_info.ptl:49 page_user.ptl:46
+ #: ../cfg_opt_user.py:38 ../page_user_info.ptl:49 ../page_user.ptl:46
+ msgid "disabled"
+-msgstr "désactivé"
++msgstr "désactivé"
+ 
+ #: cfg_opt_user.py:38 page_user_info.ptl:50 page_user.ptl:25 page_user.ptl:47
+ #: ../cfg_opt_user.py:39 ../page_user_info.ptl:50 ../page_user.ptl:25
+@@ -1076,15 +1077,15 @@
+ #: ../cfg_phone_epygi.py:107 ../cfg_phone_iax.py:87 ../cfg_phone_mgcp.py:96
+ #: ../cfg_phone_sip.py:107 ../cfg_phone_zap.py:94
+ msgid "Voicemail settings"
+-msgstr "Paramètres de boite à message"
++msgstr "Paramètres de boite à message"
+ 
+ #: cfg_opt_voicemail.py:30 ../cfg_opt_voicemail.py:30
+ msgid "Recording settings"
+-msgstr "Paramètres d'enregistrement"
++msgstr "Paramètres d'enregistrement"
+ 
+ #: cfg_opt_voicemail.py:31 ../cfg_opt_voicemail.py:31
+ msgid "File format for voicemail messages"
+-msgstr "Format de fichier pour boite à message"
++msgstr "Format de fichier pour boite à message"
+ 
+ #: cfg_opt_voicemail.py:33 ../cfg_opt_voicemail.py:33
+ msgid "Maximal message length (in seconds)"
+@@ -1096,34 +1097,34 @@
+ 
+ #: cfg_opt_voicemail.py:35 ../cfg_opt_voicemail.py:35
+ msgid "Seconds of silence to end the recording"
+-msgstr "Secondes de silence à la fin de l'enregistrement"
++msgstr "Secondes de silence à la fin de l'enregistrement"
+ 
+ #: cfg_opt_voicemail.py:36 ../cfg_opt_voicemail.py:36
+ msgid ""
+ "Silence threshold (what we consider silence, the lower, the more sensitive)"
+ msgstr ""
+-"Seuil de silence (ce que nous considérons du silence, le plus bas est le "
++"Seuil de silence (ce que nous considérons du silence, le plus bas est le "
+ "plus sensible)"
+ 
+ #: cfg_opt_voicemail.py:38 ../cfg_opt_voicemail.py:38
+ msgid "Playback settings"
+-msgstr "Paramètres de jeu"
++msgstr "Paramètres de jeu"
+ 
+ #: cfg_opt_voicemail.py:39 ../cfg_opt_voicemail.py:39
+ msgid "Max number of failed login attempts"
+-msgstr "Nombre maximal de tentatives échouées de login"
++msgstr "Nombre maximal de tentatives échouées de login"
+ 
+ #: cfg_opt_voicemail.py:40 ../cfg_opt_voicemail.py:40
+ msgid "Seconds to skip forward/backward"
+-msgstr "Secondes à passer en avant/en arrière"
++msgstr "Secondes à passer en avant/en arrière"
+ 
+ #: cfg_opt_voicemail.py:42 ../cfg_opt_voicemail.py:42
+ msgid "E-mail integration settings"
+-msgstr "Paramètres d'intégration e-mail"
++msgstr "Paramètres d'intégration e-mail"
+ 
+ #: cfg_opt_voicemail.py:43 ../cfg_opt_voicemail.py:43
+ msgid "Activate email voicemail notifications?"
+-msgstr "Activation de la notification e-mail de la boite à message"
++msgstr "Activation de la notification e-mail de la boite à message"
+ 
+ #: cfg_opt_voicemail.py:44 ../cfg_opt_voicemail.py:44
+ msgid "Who the e-mail notification should appear to come from"
+@@ -1148,7 +1149,7 @@
+ #: cfg_opt_voicemail.py:46 ../cfg_opt_voicemail.py:46
+ msgid "[DeStar PBX]: New message from ${VM_CALLERID} in mailbox ${VM_MAILBOX}"
+ msgstr ""
+-"[DeStar PBX]: Nouveau message de ${VM_CALLERID} dans la boite à message "
++"[DeStar PBX]: Nouveau message de ${VM_CALLERID} dans la boite à message "
+ "${VM_MAILBOX}"
+ 
+ #: cfg_opt_voicemail.py:47 ../cfg_opt_voicemail.py:47
+@@ -1162,19 +1163,19 @@
+ "from ${VM_CALLERID}, on ${VM_DATE}, so you might\\n\\twant to check it when "
+ "you get a chance. Thanks!\\n\\n\\t\\t\\t--Asterisk/Destar PBX."
+ msgstr ""
+-"Cher ${VM_NAME}:\\n\\n\\tJe vous notifie que vous avez à l'instant reçu un "
+-"messsage de longueur ${VM_DUR} (nombre ${VM_MSGNUM})\\n\\t dans la boite à "
+-"message ${VM_MAILBOX} provenant de ${VM_CALLERID}, Ã  la date du ${VM_DATE}. "
+-"Vous pouvez\\n\\t l'écouter dès à présent. Merci!\\n\\n\\t\\t\\t--"
++"Cher ${VM_NAME}:\\n\\n\\tJe vous notifie que vous avez à l'instant reçu un "
++"messsage de longueur ${VM_DUR} (nombre ${VM_MSGNUM})\\n\\t dans la boite à "
++"message ${VM_MAILBOX} provenant de ${VM_CALLERID}, à la date du ${VM_DATE}. "
++"Vous pouvez\\n\\t l'écouter dès à présent. Merci!\\n\\n\\t\\t\\t--"
+ "Asterisk/Destar PBX."
+ 
+ #: cfg_opt_voicemail.py:50 ../cfg_opt_voicemail.py:50
+ msgid "Should the email contain the voicemail as an attachment?"
+-msgstr "L'e-mail doit-il contenir le message vocal en pièce jointe"
++msgstr "L'e-mail doit-il contenir le message vocal en pièce jointe"
+ 
+ #: cfg_opt_voicemail.py:51 ../cfg_opt_voicemail.py:51
+ msgid "Override the default program to send e-mail"
+-msgstr "Spécifieun autre programme d'envoi d'e-mail"
++msgstr "Spécifieun autre programme d'envoi d'e-mail"
+ 
+ #: cfg_opt_voicemail.py:51 ../cfg_opt_voicemail.py:51
+ msgid "i.e.: /usr/sbin/sendmail -t"
+@@ -1187,28 +1188,28 @@
+ 
+ #: cfg_opt_zap_audio.py:31 ../cfg_opt_zap_audio.py:31
+ msgid "Be sloppy when detecting DTMF"
+-msgstr "Etre tolérant avec la détection des DTMF"
++msgstr "Etre tolérant avec la détection des DTMF"
+ 
+ #: cfg_opt_zap_audio.py:32 ../cfg_opt_zap_audio.py:32
+ msgid "Echo cancel samples"
+-msgstr "Exemples d'annulation d'écho"
++msgstr "Exemples d'annulation d'écho"
+ 
+ #: cfg_opt_zap_audio.py:34 ../cfg_opt_zap_audio.py:34
+ msgid "Cancel echo even on bridged calls"
+-msgstr "Annule l'écho même lors d'appel faisant le pont"
++msgstr "Annule l'écho même lors d'appel faisant le pont"
+ 
+ #: cfg_opt_zap_audio.py:35 ../cfg_opt_zap_audio.py:35
+ msgid "Do early echo training"
+-msgstr "Fait de l'entrainement précoce d'écho"
++msgstr "Fait de l'entrainement précoce d'écho"
+ 
+ #: cfg_opt_zap_phone.py:26 cfg_opt_zap_phone.py:27 ../cfg_opt_zap_phone.py:26
+ #: ../cfg_opt_zap_phone.py:27
+ msgid "Zaptel Phone Options"
+-msgstr "Options téléphone Zaptel"
++msgstr "Options téléphone Zaptel"
+ 
+ #: cfg_opt_zap_phone.py:31 ../cfg_opt_zap_phone.py:31
+ msgid "Use ADSI for menu phones"
+-msgstr "Utilise ADSI pour les menus de téléphone"
++msgstr "Utilise ADSI pour les menus de téléphone"
+ 
+ #: cfg_opt_zap_phone.py:32 ../cfg_opt_zap_phone.py:32
+ msgid "Signal a waiting call"
+@@ -1221,11 +1222,11 @@
+ 
+ #: cfg_opt_zap_phone.py:34 ../cfg_opt_zap_phone.py:34
+ msgid "Suspend a call temporarily via a hook flash"
+-msgstr "Supendre un appel temporairement via flash de combiné"
++msgstr "Supendre un appel temporairement via flash de combiné"
+ 
+ #: cfg_opt_zap_phone.py:35 ../cfg_opt_zap_phone.py:35
+ msgid "Allow call transfer"
+-msgstr "Autorise le transfère d'appel"
++msgstr "Autorise le transfère d'appel"
+ 
+ #: cfg_opt_zap_phone.py:36 ../cfg_opt_zap_phone.py:36
+ msgid "Allow call forwards"
+@@ -1233,7 +1234,7 @@
+ 
+ #: cfg_opt_zap_phone.py:37 ../cfg_opt_zap_phone.py:37
+ msgid "Read caller number with *69"
+-msgstr "Lire le numéro de l'appelant avec *69"
++msgstr "Lire le numéro de l'appelant avec *69"
+ 
+ #: cfg_opt_zappri.py:28 cfg_opt_zappri.py:29 ../cfg_opt_zappri.py:28
+ #: ../cfg_opt_zappri.py:29
+@@ -1246,11 +1247,11 @@
+ 
+ #: cfg_opt_zappri.py:33 ../cfg_opt_zappri.py:33
+ msgid "i.e. 1 if 1st card"
+-msgstr "par exemple, 1 pour la 1ère carte"
++msgstr "par exemple, 1 pour la 1ère carte"
+ 
+ #: cfg_opt_zappri.py:34 ../cfg_opt_zappri.py:34
+ msgid "Zaptel timing parameter"
+-msgstr "Paramètre de temporisation Zaptel"
++msgstr "Paramètre de temporisation Zaptel"
+ 
+ #: cfg_opt_zappri.py:34 ../cfg_opt_zappri.py:34
+ msgid "Read zaptel documentation"
+@@ -1265,8 +1266,8 @@
+ "Power level based on distance from the card to the service provider's "
+ "gateway."
+ msgstr ""
+-"Niveau de puissance basé sur la distance à la passerelle du fournisseurde "
+-"service"
++"Niveau de puissance basé sur la distance à la passerelle du fournisseur"
++"de service"
+ 
+ #: cfg_opt_zappri.py:37 ../cfg_opt_zappri.py:37
+ msgid "0: 0 db (CSU) / 0-133 feet (DSX-1)"
+@@ -1362,7 +1363,7 @@
+ #: cfg_opt_zap_trunk.py:31 ../cfg_opt_zap_trunk.py:31
+ msgid "Try to detect busy signal to detect if remove site hung up"
+ msgstr ""
+-"Essaie de détecter le signal d'occupation si le site distant raccroche"
++"Essaie de détecter le signal d'occupation si le site distant raccroche"
+ 
+ #: cfg_opt_zap_trunk.py:32 ../cfg_opt_zap_trunk.py:32
+ msgid "Wait how many busy signals before hanging up"
+@@ -1383,7 +1384,7 @@
+ #: cfg_phone_epygi.py:49 cfg_phone_sip.py:48 ../cfg_phone_epygi.py:54
+ #: ../cfg_phone_sip.py:53
+ msgid "Is the trunk behind NAT ?"
+-msgstr "Le canal est-il derrière un NAT"
++msgstr "Le canal est-il derrière un NAT"
+ 
+ #: cfg_phone_epygi.py:59 cfg_phone_sip.py:58 ../cfg_phone_epygi.py:63
+ #: ../cfg_phone_sip.py:62
+@@ -1424,7 +1425,7 @@
+ #: ../cfg_phone_iax.py:72 ../cfg_phone_mgcp.py:92 ../cfg_phone_sip.py:80
+ #: ../cfg_phone_zap.py:79
+ msgid "Call group number"
+-msgstr "Le numéro du groupe d'appel"
++msgstr "Le numéro du groupe d'appel"
+ 
+ #: cfg_phone_epygi.py:80 cfg_phone_sip.py:80 ../cfg_phone_epygi.py:84
+ #: ../cfg_phone_sip.py:84
+@@ -1446,7 +1447,7 @@
+ #: ../cfg_phone_iax.py:91 ../cfg_phone_mgcp.py:101 ../cfg_phone_sip.py:112
+ #: ../cfg_phone_zap.py:99
+ msgid "Use voicemail"
+-msgstr "Utilise la boite à message"
++msgstr "Utilise la boite à message"
+ 
+ #: cfg_phone_epygi.py:113 cfg_phone_iax.py:92 cfg_phone_mgcp.py:101
+ #: cfg_phone_sip.py:113 cfg_phone_zap.py:100 ../cfg_phone_epygi.py:117
+@@ -1460,7 +1461,7 @@
+ #: ../cfg_phone_iax.py:101 ../cfg_phone_mgcp.py:111 ../cfg_phone_sip.py:122
+ #: ../cfg_phone_zap.py:109
+ msgid "Voicemail PIN"
+-msgstr "PIN de boite à message"
++msgstr "PIN de boite à message"
+ 
+ #: cfg_phone_epygi.py:123 ../cfg_phone_epygi.py:127
+ msgid "E-mail"
+@@ -1471,13 +1472,13 @@
+ #: ../cfg_phone_iax.py:110 ../cfg_phone_mgcp.py:116 ../cfg_phone_sip.py:132
+ #: ../cfg_phone_zap.py:114
+ msgid "Calls from the phone"
+-msgstr "Appels à partir du téléphone"
++msgstr "Appels à partir du téléphone"
+ 
+ #: cfg_phone_epygi.py:132 cfg_phone_iax.py:110 cfg_phone_sip.py:132
+ #: cfg_phone_zap.py:114 ../cfg_phone_epygi.py:136 ../cfg_phone_iax.py:114
+ #: ../cfg_phone_sip.py:136 ../cfg_phone_zap.py:118
+ msgid "Caller-Id Number"
+-msgstr "Numéro de l'identifiant de l'appelant"
++msgstr "Numéro de l'identifiant de l'appelant"
+ 
+ #: cfg_phone_epygi.py:136 cfg_phone_iax.py:114 cfg_phone_sip.py:136
+ #: cfg_phone_zap.py:118 cfg_trunk_fwdiax.py:47 cfg_trunk_iaxtel.py:46
+@@ -1491,7 +1492,7 @@
+ #: ../cfg_phone_iax.py:122 ../cfg_phone_mgcp.py:128 ../cfg_phone_sip.py:144
+ #: ../cfg_phone_zap.py:126
+ msgid "Allowed dialout-entries"
+-msgstr "Autorise les entrées d'appel vers l'extérieur"
++msgstr "Autorise les entrées d'appel vers l'extérieur"
+ 
+ #: cfg_phone_epygi.py:145 cfg_phone_iax.py:123 cfg_phone_mgcp.py:128
+ #: cfg_phone_sip.py:145 cfg_phone_zap.py:127 ../cfg_phone_epygi.py:149
+@@ -1506,12 +1507,12 @@
+ 
+ #: cfg_phone_ext.py:28 ../cfg_phone_ext.py:28
+ msgid "Set an 'alias' extension to a phone"
+-msgstr "Active une extension 'Alias' vers un téléphone"
++msgstr "Active une extension 'Alias' vers un téléphone"
+ 
+ #: cfg_phone_ext.py:39 ../cfg_phone_ext.py:44
+ msgid "This can be used to set operator(o) or fax(fax) extensions."
+ msgstr ""
+-"Ceci peut être utilisé pour activer une extension d'opérateur(o) ou de fax"
++"Ceci peut être utilisé pour activer une extension d'opérateur(o) ou de fax"
+ "(fax)."
+ 
+ #: cfg_phone_ext.py:43 ../cfg_phone_ext.py:48
+@@ -1520,44 +1521,44 @@
+ 
+ #: cfg_phone_ext.py:47 ../cfg_phone_ext.py:52
+ msgid "Real phone to ring"
+-msgstr "Téléphone réel à appeler"
++msgstr "Téléphone réel à appeler"
+ 
+ #: cfg_phone_iax.py:27 ../cfg_phone_iax.py:27
+ msgid "Normal IAX phone"
+-msgstr "Téléphone IAX normal"
++msgstr "Téléphone IAX normal"
+ 
+ #: cfg_phone_iax.py:28 ../cfg_phone_iax.py:28
+ msgid "New IAX phone"
+-msgstr "Nouveau téléphone IAX"
++msgstr "Nouveau téléphone IAX"
+ 
+ #: cfg_phone_iax.py:42 cfg_phone_mgcp.py:42 cfg_phone_sip.py:43
+ #: ../cfg_phone_iax.py:47 ../cfg_phone_mgcp.py:47 ../cfg_phone_sip.py:48
+ msgid "IP address of phone"
+-msgstr "Adresse IP du téléphone"
++msgstr "Adresse IP du téléphone"
+ 
+ #: cfg_phone_iax.py:52 cfg_phone_mgcp.py:71 cfg_phone_zap.py:59
+ #: ../cfg_phone_iax.py:56 ../cfg_phone_mgcp.py:76 ../cfg_phone_zap.py:63
+ msgid "Allow direct dialling from outside?"
+-msgstr "Autorise l'appel direct à partir de l'extérieur"
++msgstr "Autorise l'appel direct à partir de l'extérieur"
+ 
+ #: cfg_phone_iax.py:102 ../cfg_phone_iax.py:106
+ msgid "Disable IAX transfer"
+-msgstr "Désactive le tranfert IAX"
++msgstr "Désactive le tranfert IAX"
+ 
+ #: cfg_phone_mgcp.py:26 ../cfg_phone_mgcp.py:26
+ msgid "Normal MGCP phone"
+-msgstr "Téléphone MGCP normal"
++msgstr "Téléphone MGCP normal"
+ 
+ #: cfg_phone_mgcp.py:27 ../cfg_phone_mgcp.py:27
+ msgid "New MGCP phone"
+-msgstr "Nouveau téléphone MGCP"
++msgstr "Nouveau téléphone MGCP"
+ 
+ #: cfg_phone_mgcp.py:35 ../cfg_phone_mgcp.py:40
+ msgid ""
+ "If you haven't configured a name for your phone please use the IP address "
+ "here."
+ msgstr ""
+-"Si vous n'avez pas configuré un nom pour votre téléphone, utilisez une "
++"Si vous n'avez pas configuré un nom pour votre téléphone, utilisez une "
+ "adresse IP "
+ 
+ #: cfg_phone_mgcp.py:51 ../cfg_phone_mgcp.py:56
+@@ -1566,11 +1567,11 @@
+ 
+ #: cfg_phone_mgcp.py:56 ../cfg_phone_mgcp.py:61
+ msgid "Three way calling"
+-msgstr "Appel à trois"
++msgstr "Appel à trois"
+ 
+ #: cfg_phone_mgcp.py:61 ../cfg_phone_mgcp.py:66
+ msgid "Enable Call transfer"
+-msgstr "Active le transfère d'appel"
++msgstr "Active le transfère d'appel"
+ 
+ #: cfg_phone_mgcp.py:66 ../cfg_phone_mgcp.py:71
+ msgid "Enable Call forward"
+@@ -1578,7 +1579,7 @@
+ 
+ #: cfg_phone_mgcp.py:115 ../cfg_phone_mgcp.py:120
+ msgid "Caller-Id-Number"
+-msgstr "Numéro de l'identification de l'appelant"
++msgstr "Numéro de l'identification de l'appelant"
+ 
+ #: cfg_phone_mgcp.py:119 ../cfg_phone_mgcp.py:124
+ msgid "Caller-Id-Name"
+@@ -1603,23 +1604,23 @@
+ #: cfg_phone_queue.py:56 ../cfg_phone_queue.py:61
+ msgid "Ring all - ring all available channels until one answers"
+ msgstr ""
+-"Appelle tous - appelle tous les canaux disponibles jusqu'à une réponse"
++"Appelle tous - appelle tous les canaux disponibles jusqu'à une réponse"
+ 
+ #: cfg_phone_queue.py:57 ../cfg_phone_queue.py:62
+ msgid "Round robin - take turns ringing each available interface"
+-msgstr "Caroussel - fait sonner chaque interface disponible à son tour"
++msgstr "Caroussel - fait sonner chaque interface disponible à son tour"
+ 
+ #: cfg_phone_queue.py:58 ../cfg_phone_queue.py:63
+ msgid ""
+ "Least recent - ring interface which was least recently called by this queue"
+ msgstr ""
+-"Le moins récent - fait sonner l'interface qui a été le moins récement "
+-"appelée dans cette file"
++"Le moins récent - fait sonner l'interface qui a été le moins récement "
++"appelée dans cette file"
+ 
+ #: cfg_phone_queue.py:59 ../cfg_phone_queue.py:64
+ msgid "Fewest calls - ring the one with fewest completed calls from this queue"
+ msgstr ""
+-"Le moins d'appels - fait sonner celle avec le moins d'appel complétés sur "
++"Le moins d'appels - fait sonner celle avec le moins d'appel complétés sur "
+ "cette file"
+ 
+ #: cfg_phone_queue.py:60 ../cfg_phone_queue.py:65
+@@ -1629,13 +1630,13 @@
+ #: cfg_phone_queue.py:61 ../cfg_phone_queue.py:66
+ msgid "Round robin with memory - remember where we left off last ring pass"
+ msgstr ""
+-"Caroussel avec mémoire - se souvient qui a laissé passer lors du dernier "
++"Caroussel avec mémoire - se souvient qui a laissé passer lors du dernier "
+ "passage"
+ 
+ #: cfg_phone_queue.py:65 ../cfg_phone_queue.py:70 ../cfg_phone_hunt.py:36
+ msgid "How long to wait before trying all the members again?"
+ msgstr ""
+-"Combien de temps faut-il attendre avant de réessayer tous les membre de "
++"Combien de temps faut-il attendre avant de réessayer tous les membre de "
+ "nouveau ?"
+ 
+ #: cfg_phone_queue.py:70 ../cfg_phone_queue.py:75
+@@ -1644,18 +1645,18 @@
+ 
+ #: cfg_phone_queue.py:75 ../cfg_phone_queue.py:80
+ msgid "Announce queue position to caller?"
+-msgstr "Annonce la position dans la file à l'appelant ?"
++msgstr "Annonce la position dans la file à l'appelant ?"
+ 
+ #: cfg_phone_queue.py:79 ../cfg_phone_queue.py:84
+ msgid ""
+ "How often to announce queue position and/or estimated holdtime to caller"
+ msgstr ""
+ "Combien de fois annoncer la position dans la liste et/ou le temps d'attente "
+-"estimé à l'appelant"
++"estimé à l'appelant"
+ 
+ #: cfg_phone_queue.py:84 ../cfg_phone_queue.py:89
+ msgid "Include estimated hold time in position announcements?"
+-msgstr "Inclure le temps estimé d'attente dans les annonces de position"
++msgstr "Inclure le temps estimé d'attente dans les annonces de position"
+ 
+ #: cfg_phone_queue.py:86 ../cfg_phone_queue.py:91
+ msgid "Yes"
+@@ -1675,7 +1676,7 @@
+ 
+ #: cfg_phone_queue.py:97 ../cfg_phone_queue.py:102
+ msgid "Monitor answered calls?"
+-msgstr "Surveillance des appels répondus ?"
++msgstr "Surveillance des appels répondus ?"
+ 
+ #: cfg_phone_queue.py:101 ../cfg_phone_queue.py:106
+ msgid "Monitor file format"
+@@ -1711,32 +1712,32 @@
+ 
+ #: cfg_phone_queue.py:157 ../cfg_phone_queue.py:149
+ msgid "You should select a frequency"
+-msgstr "Vous devriez sélectionner une fréquence"
++msgstr "Vous devriez sélectionner une fréquence"
+ 
+ #: cfg_phone_sip.py:27 ../cfg_phone_sip.py:27
+ msgid "Normal SIP phone"
+-msgstr "Téléphone SIP normal"
++msgstr "Téléphone SIP normal"
+ 
+ #: cfg_phone_sip.py:28 ../cfg_phone_sip.py:28
+ msgid "New SIP phone"
+-msgstr "Nouveau téléphone SIP normal"
++msgstr "Nouveau téléphone SIP normal"
+ 
+ #: cfg_phone_sip.py:123 ../cfg_phone_sip.py:127
+ msgid "Voicemail email"
+-msgstr "E-mail de boite à message"
++msgstr "E-mail de boite à message"
+ 
+ #: cfg_phone_zap.py:27 ../cfg_phone_zap.py:27
+ msgid "Normal ZAP phone"
+-msgstr "Téléphone ZAP normal"
++msgstr "Téléphone ZAP normal"
+ 
+ #: cfg_phone_zap.py:28 ../cfg_phone_zap.py:28
+ msgid "New ZAP phone"
+-msgstr "Nouveau téléphone ZAP"
++msgstr "Nouveau téléphone ZAP"
+ 
+ #: cfg_phone_zap.py:38 cfg_trunk_zappbx.py:34 cfg_trunk_zap.py:33
+ #: ../cfg_phone_zap.py:43 ../cfg_trunk_zappbx.py:34 ../cfg_trunk_zap.py:33
+ msgid "Zaptel channel number"
+-msgstr "Numéro du canal Zaptel"
++msgstr "Numéro du canal Zaptel"
+ 
+ #: cfg_phone_zap.py:43 cfg_trunk_zappbx.py:35 cfg_trunk_zappri.py:35
+ #: cfg_trunk_zap.py:34 ../cfg_phone_zap.py:48 ../cfg_trunk_zappbx.py:35
+@@ -1750,7 +1751,7 @@
+ 
+ #: cfg_phone_zap.py:84 ../cfg_phone_zap.py:88
+ msgid "Show this phone in the panel"
+-msgstr "Affiche ce téléphone sur le paneau"
++msgstr "Affiche ce téléphone sur le paneau"
+ 
+ #: cfg_trunk_capimsn.py:26 ../cfg_trunk_capimsn.py:26
+ msgid "ISDN using CAPI, incoming"
+@@ -1762,17 +1763,17 @@
+ 
+ #: cfg_trunk_capimsn.py:33 ../cfg_trunk_capimsn.py:33
+ msgid "Calls from the ISDN network"
+-msgstr "Appels du réseau ISDN"
++msgstr "Appels du réseau ISDN"
+ 
+ #: cfg_trunk_capimsn.py:34 cfg_trunk_capi.py:37 cfg_trunk_zaphfc.py:37
+ #: ../cfg_trunk_capimsn.py:34 ../cfg_trunk_capi.py:37
+ #: ../cfg_trunk_zaphfc.py:37
+ msgid "Subscriber number"
+-msgstr "Numéro du souscripteur"
++msgstr "Numéro du souscripteur"
+ 
+ #: cfg_trunk_capimsn.py:68 ../cfg_trunk_capimsn.py:68
+ msgid "MSN already assigned"
+-msgstr "MSN déja assigné"
++msgstr "MSN déja assigné"
+ 
+ #: cfg_trunk_capi.py:29 ../cfg_trunk_capi.py:29
+ msgid "ISDN using CAPI, outgoing"
+@@ -1785,12 +1786,12 @@
+ #: cfg_trunk_capi.py:36 cfg_trunk_zaphfc.py:36 ../cfg_trunk_capi.py:36
+ #: ../cfg_trunk_zaphfc.py:36
+ msgid "Calls to the ISDN network"
+-msgstr "Appels vers le réseau IDSN"
++msgstr "Appels vers le réseau IDSN"
+ 
+ #: cfg_trunk_capi.py:38 cfg_trunk_zaphfc.py:38 ../cfg_trunk_capi.py:38
+ #: ../cfg_trunk_zaphfc.py:38
+ msgid "Outgoing prefix"
+-msgstr "Préfixe sortant"
++msgstr "Préfixe sortant"
+ 
+ #: cfg_trunk_fwdiax.py:26 ../cfg_trunk_fwdiax.py:26
+ msgid "VOIP-Provider FreeworldDialup (IAX)"
+@@ -1812,16 +1813,16 @@
+ msgstr ""
+ "Vous pouvez vous inscire gratuitement sur\n"
+ "\t\t\thttp://freeworlddialup.com et recevoir un identifiant via\n"
+-"\t\t\tle quel on peut vous appeler. Ces appels sont gratuits également.\n"
++"\t\t\tle quel on peut vous appeler. Ces appels sont gratuits également.\n"
+ "\n"
+ "\t\t\tSi vous avez un compte, vous devez activer le support IAX chez FWD "
+ "sur\n"
+ "\t\t\thttp://www.freeworlddialup.com/advanced/iax pour utiliser celui-ci\n"
+-"\t\t\tsur cette ligne de téléphone."
++"\t\t\tsur cette ligne de téléphone."
+ 
+ #: cfg_trunk_fwdiax.py:41 ../cfg_trunk_fwdiax.py:41
+ msgid "FWD number"
+-msgstr "Numéro FWD"
++msgstr "Numéro FWD"
+ 
+ #: cfg_trunk_fwdiax.py:42 ../cfg_trunk_fwdiax.py:42
+ msgid "FWD password"
+@@ -1853,12 +1854,12 @@
+ msgid ""
+ "Used to setup an IAX trunk to another Asterisk server or an IAX termination."
+ msgstr ""
+-"Utilisé pour configurer un canal IAX vers un autre serveur Asterisk ou un "
+-"point d'accès IAX."
++"Utilisé pour configurer un canal IAX vers un autre serveur Asterisk ou un "
++"point d'accès IAX."
+ 
+ #: cfg_trunk_iax.py:35 ../cfg_trunk_iax.py:35
+ msgid "IAX host"
+-msgstr "Hôte IAX"
++msgstr "Hôte IAX"
+ 
+ #: cfg_trunk_iax.py:36 ../cfg_trunk_iax.py:36
+ msgid "Bandwith"
+@@ -1878,7 +1879,7 @@
+ 
+ #: cfg_trunk_iax.py:41 ../cfg_trunk_iax.py:41
+ msgid "Authentication Method"
+-msgstr "Méthode d'Authentification"
++msgstr "Méthode d'Authentification"
+ 
+ #: cfg_trunk_iax.py:42 ../cfg_trunk_iax.py:42
+ msgid "Plain text"
+@@ -1898,7 +1899,7 @@
+ 
+ #: cfg_trunk_iax.py:44 ../cfg_trunk_iax.py:44
+ msgid "Public key from remote server"
+-msgstr "Clé publique du serveur distant"
++msgstr "Clé publique du serveur distant"
+ 
+ #: cfg_trunk_iax.py:44 cfg_trunk_iax.py:45 ../cfg_trunk_iax.py:44
+ #: ../cfg_trunk_iax.py:45
+@@ -1907,7 +1908,7 @@
+ 
+ #: cfg_trunk_iax.py:45 ../cfg_trunk_iax.py:45
+ msgid "Private local key"
+-msgstr "Clé privée locale"
++msgstr "Clé privée locale"
+ 
+ #: cfg_trunk_iax.py:47 ../cfg_trunk_iax.py:47
+ msgid "Enable trunking?"
+@@ -1922,7 +1923,7 @@
+ #: ../cfg_trunk_sip.py:50 ../cfg_trunk_zappbx.py:51 ../cfg_trunk_zappri.py:59
+ #: ../cfg_trunk_zap.py:48
+ msgid "Extension to ring"
+-msgstr "Extension à faire sonner"
++msgstr "Extension à faire sonner"
+ 
+ #: cfg_trunk_iaxtel.py:26 ../cfg_trunk_iaxtel.py:26
+ msgid "VOIP-Provider Iaxtel"
+@@ -1939,12 +1940,12 @@
+ "\t\t\tpeople can call you. These calls are free of charge, too.'."
+ msgstr ""
+ "Vous pouvez vous inscire gratuitement sur\n"
+-"\t\t\thttp://www.iaxtel.com et recevoir un numéro IAXtel surlequel\n"
+-"\t\t\tvous êtes contactable. Ces appels sont gratuits."
++"\t\t\thttp://www.iaxtel.com et recevoir un numéro IAXtel surlequel\n"
++"\t\t\tvous êtes contactable. Ces appels sont gratuits."
+ 
+ #: cfg_trunk_iaxtel.py:40 ../cfg_trunk_iaxtel.py:40
+ msgid "IAXTEL number"
+-msgstr "Numéro IAXTEL"
++msgstr "Numéro IAXTEL"
+ 
+ #: cfg_trunk_iaxtel.py:41 ../cfg_trunk_iaxtel.py:41
+ msgid "IAXTEL password"
+@@ -1969,8 +1970,8 @@
+ #: cfg_trunk_sip.py:30 ../cfg_trunk_sip.py:30
+ msgid "Used to setup a SIP trunk to a SIP provider or a different SIP server."
+ msgstr ""
+-"Utilisé pour configurer un canal SIP vers un fournisseur SIP ou un serveur "
+-"sip différent."
++"Utilisé pour configurer un canal SIP vers un fournisseur SIP ou un serveur "
++"sip différent."
+ 
+ #: cfg_trunk_sip.py:36 ../cfg_trunk_sip.py:36
+ msgid "SIP username"
+@@ -1982,11 +1983,11 @@
+ 
+ #: cfg_trunk_sip.py:38 ../cfg_trunk_sip.py:38
+ msgid "SIP host"
+-msgstr "Hôte SIP"
++msgstr "Hôte SIP"
+ 
+ #: cfg_trunk_sip.py:39 ../cfg_trunk_sip.py:39
+ msgid "Register with remote host?"
+-msgstr "S'enregistrer (se faire connaître) de l'hôte distant ?"
++msgstr "S'enregistrer (se faire connaître) de l'hôte distant ?"
+ 
+ #: cfg_trunk_sip.py:40 ../cfg_trunk_sip.py:40
+ msgid "Enable forward address type?"
+@@ -1994,7 +1995,7 @@
+ 
+ #: cfg_trunk_sip.py:41 ../cfg_trunk_sip.py:41
+ msgid "Is the trunk behind NAT?"
+-msgstr "Le canal est-il derrière un NAT ?"
++msgstr "Le canal est-il derrière un NAT ?"
+ 
+ #: cfg_trunk_sip.py:42 ../cfg_trunk_sip.py:42
+ msgid "Bypass auth for incoming calls?"
+@@ -2032,17 +2033,17 @@
+ #: cfg_trunk_zappbx.py:37 cfg_trunk_zappri.py:47 cfg_trunk_zap.py:36
+ #: ../cfg_trunk_zappbx.py:37 ../cfg_trunk_zappri.py:47 ../cfg_trunk_zap.py:36
+ msgid "Callout group"
+-msgstr "Groupe d'appel vers l'extérieur"
++msgstr "Groupe d'appel vers l'extérieur"
+ 
+ #: cfg_trunk_zappbx.py:42 cfg_trunk_zappri.py:52 cfg_trunk_zap.py:41
+ #: ../cfg_trunk_zappbx.py:42 ../cfg_trunk_zappri.py:52 ../cfg_trunk_zap.py:41
+ msgid "Reception and Transmission Gains"
+-msgstr "Gains de réception et de transmission"
++msgstr "Gains de réception et de transmission"
+ 
+ #: cfg_trunk_zappbx.py:43 cfg_trunk_zappri.py:53 cfg_trunk_zap.py:42
+ #: ../cfg_trunk_zappbx.py:43 ../cfg_trunk_zappri.py:53 ../cfg_trunk_zap.py:42
+ msgid "Reception gain"
+-msgstr "Gain de réception"
++msgstr "Gain de réception"
+ 
+ #: cfg_trunk_zappbx.py:43 cfg_trunk_zappbx.py:44 cfg_trunk_zappri.py:53
+ #: cfg_trunk_zappri.py:54 cfg_trunk_zap.py:42 cfg_trunk_zap.py:43
+@@ -2059,11 +2060,11 @@
+ 
+ #: cfg_trunk_zappbx.py:46 ../cfg_trunk_zappbx.py:46
+ msgid "Outbound prefix"
+-msgstr "Préfixe de sortie"
++msgstr "Préfixe de sortie"
+ 
+ #: cfg_trunk_zappbx.py:46 ../cfg_trunk_zappbx.py:46
+ msgid "Used to call through a PBX"
+-msgstr "Utilisé pour appelé à travers un PBX"
++msgstr "Utilisé pour appelé à travers un PBX"
+ 
+ #: cfg_trunk_zappri.py:28 ../cfg_trunk_zappri.py:28
+ msgid "Standard ZAP PRI trunk"
+@@ -2075,11 +2076,11 @@
+ 
+ #: cfg_trunk_zappri.py:36 ../cfg_trunk_zappri.py:36
+ msgid "PRI signalling, CPE side"
+-msgstr "Signalisation PRI, coté CPE"
++msgstr "Signalisation PRI, coté CPE"
+ 
+ #: cfg_trunk_zappri.py:36 ../cfg_trunk_zappri.py:36
+ msgid "PRI signalling, Network side"
+-msgstr "Signalisation PRI, coté réseau"
++msgstr "Signalisation PRI, coté réseau"
+ 
+ #: cfg_trunk_zappri.py:37 ../cfg_trunk_zappri.py:37
+ msgid "Switch type"
+@@ -2091,7 +2092,7 @@
+ 
+ #: cfg_trunk_zappri.py:90 ../cfg_trunk_zappri.py:90
+ msgid "Group already in use"
+-msgstr "Groupe déja utlisé"
++msgstr "Groupe déja utlisé"
+ 
+ #: cfg_trunk_zap.py:27 ../cfg_trunk_zap.py:27
+ msgid "Standard ZAP trunk"
+@@ -2118,7 +2119,7 @@
+ 
+ #: configlets.py:637 ../configlets.py:620 ../configlets.py:624
+ msgid "Name already in use"
+-msgstr "Le nom est déja utilisé"
++msgstr "Le nom est déja utilisé"
+ 
+ #: configlets.py:733 configlets.py:1015 ../configlets.py:716
+ #: ../configlets.py:1034 ../configlets.py:720 ../configlets.py:1048
+@@ -2133,7 +2134,7 @@
+ 
+ #: configlets.py:785
+ msgid "Price for this pattern"
+-msgstr "Coût de ce pattern"
++msgstr "Coût de ce pattern"
+ 
+ #: configlets.py:797 ../configlets.py:780 ../configlets.py:784
+ msgid "Password:"
+@@ -2145,7 +2146,7 @@
+ 
+ #: configlets.py:845 ../configlets.py:828 ../configlets.py:832
+ msgid "You should select a phone to ring to"
+-msgstr "Sélectionner un téléphone à faire sonner"
++msgstr "Sélectionner un téléphone à faire sonner"
+ 
+ #: language.py:64 language.py:71 ../language.py:67
+ msgid "This menu will contain all sorts of administration stuff:"
+@@ -2173,7 +2174,7 @@
+ 
+ #: panelutils.py:124 ../panelutils.py:124
+ msgid "Restarting the panel daemon ..."
+-msgstr "Redémarrage du démon du panneau..."
++msgstr "Redémarrage du démon du panneau..."
+ 
+ #: ConfigHelper.ptl:53 ../ConfigHelper.ptl:53
+ msgid "E"
+@@ -2215,38 +2216,38 @@
+ msgid ""
+ "The following configlets depends on this object in a direct or indirect way:"
+ msgstr ""
+-"L'outil de configuration suivant depend de cet objet de façon directe ou "
++"L'outil de configuration suivant depend de cet objet de façon directe ou "
+ "indirecte :"
+ 
+ #: ConfigHelper.ptl:209 ConfigHelper.ptl:211 ../ConfigHelper.ptl:211
+ msgid "Hard Dependencie:"
+-msgstr "Dépendance forte:"
++msgstr "Dépendance forte:"
+ 
+ #: ConfigHelper.ptl:212 ConfigHelper.ptl:214 ../ConfigHelper.ptl:214
+ msgid "Soft Dependencie:"
+-msgstr "Dépendance faible"
++msgstr "Dépendance faible"
+ 
+ #: ConfigHelper.ptl:229 ConfigHelper.ptl:231 ../ConfigHelper.ptl:233
+ msgid ""
+ "Hard dependencie: The dependent object can not exist if this object is "
+ "deleted"
+ msgstr ""
+-"Dépendance forte : L'objet dépendant ne peut pas si l'objet est supprimé"
++"Dépendance forte : L'objet dépendant ne peut pas si l'objet est supprimé"
+ 
+ #: ConfigHelper.ptl:233 ConfigHelper.ptl:235 ../ConfigHelper.ptl:237
+ msgid ""
+ "Soft dependencie. The dependent object still can exist if this object is "
+ "deleted"
+ msgstr ""
+-"Dépendance faible : l'objet dépendant peut encore exister si cette objet "
+-"est supprimé"
++"Dépendance faible : l'objet dépendant peut encore exister si cette objet "
++"est supprimé"
+ 
+ #: ConfigHelper.ptl:277 ConfigHelper.ptl:298 ConfigHelper.ptl:305
+ #: ConfigHelper.ptl:279 ConfigHelper.ptl:300 ConfigHelper.ptl:307
+ #: ../ConfigHelper.ptl:281 ../ConfigHelper.ptl:302 ../ConfigHelper.ptl:309
+ #, python-format
+ msgid "Required '%s' not found"
+-msgstr "'%s' requis non trouvé"
++msgstr "'%s' requis non trouvé"
+ 
+ #: ConfigHelper.ptl:320 page_admin_callsstats.ptl:69
+ #: page_admin_dialoutsstats.ptl:85 page_admin_phonestats.ptl:83
+@@ -2262,7 +2263,7 @@
+ 
+ #: ConfigHelper.ptl:323 ConfigHelper.ptl:325 ../ConfigHelper.ptl:327
+ msgid "Update"
+-msgstr "Mise à jour"
++msgstr "Mise à jour"
+ 
+ #: ConfigHelper.ptl:324 ConfigHelper.ptl:326 ../ConfigHelper.ptl:328
+ msgid "Delete"
+@@ -2282,7 +2283,7 @@
+ #: page_admin_callsstats.ptl:99 ../page_stats_callsstats.ptl:106
+ #: ../page_stats_calls.ptl:106
+ msgid "Calls per Hour in a Day"
+-msgstr "Appels par heure dans une journée"
++msgstr "Appels par heure dans une journée"
+ 
+ #: page_admin_callsstats.ptl:99 page_admin_callsstats.ptl:100
+ #: page_admin_callsstats.ptl:101 ../page_stats_callsstats.ptl:106
+@@ -2295,7 +2296,7 @@
+ #: page_admin_callsstats.ptl:100 ../page_stats_callsstats.ptl:107
+ #: ../page_stats_calls.ptl:107
+ msgid "Minutes per Hour in a Day"
+-msgstr "Minuntes par heure dans une journée"
++msgstr "Minuntes par heure dans une journée"
+ 
+ #: page_admin_callsstats.ptl:100 page_admin_callsstats.ptl:132
+ #: page_admin_callsstats.ptl:165 page_admin_callsstats.ptl:166
+@@ -2312,7 +2313,7 @@
+ #: page_admin_callsstats.ptl:101 ../page_stats_callsstats.ptl:108
+ #: ../page_stats_calls.ptl:108
+ msgid "Cost per Hour in a Day"
+-msgstr "Coût par heure dans une journée"
++msgstr "Coût par heure dans une journée"
+ 
+ #: page_admin_callsstats.ptl:101 page_admin_callsstats.ptl:133
+ #: page_admin_callsstats.ptl:195 StatsHelper.ptl:113
+@@ -2321,7 +2322,7 @@
+ #: ../page_stats_calls.ptl:108 ../page_stats_calls.ptl:142
+ #: ../page_stats_calls.ptl:212
+ msgid "Cost"
+-msgstr "Coût"
++msgstr "Coût"
+ 
+ #: page_admin_callsstats.ptl:130 ../page_stats_callsstats.ptl:140
+ #: ../page_stats_calls.ptl:139
+@@ -2349,7 +2350,7 @@
+ #: page_admin_callsstats.ptl:133 ../page_stats_callsstats.ptl:143
+ #: ../page_stats_calls.ptl:142
+ msgid "Cost per Day in a Month"
+-msgstr "Coût par jour dans un mois"
++msgstr "Coût par jour dans un mois"
+ 
+ #: page_admin_callsstats.ptl:162 ../page_stats_callsstats.ptl:175
+ #: ../page_stats_calls.ptl:177
+@@ -2359,7 +2360,7 @@
+ #: page_admin_callsstats.ptl:164 ../page_stats_callsstats.ptl:177
+ #: ../page_stats_calls.ptl:179
+ msgid "Calls per Month in a Year"
+-msgstr "Appels par mois dans une année"
++msgstr "Appels par mois dans une année"
+ 
+ #: page_admin_callsstats.ptl:164 page_admin_callsstats.ptl:165
+ #: page_admin_callsstats.ptl:166 ../page_stats_callsstats.ptl:177
+@@ -2372,17 +2373,17 @@
+ #: page_admin_callsstats.ptl:165 ../page_stats_callsstats.ptl:178
+ #: ../page_stats_calls.ptl:180
+ msgid "Minutes per Month in a Year"
+-msgstr "Minutes par mois dans une année"
++msgstr "Minutes par mois dans une année"
+ 
+ #: page_admin_callsstats.ptl:166 ../page_stats_callsstats.ptl:179
+ #: ../page_stats_calls.ptl:181
+ msgid "Cost per Month in a Year"
+-msgstr "Coût par mois dans une année"
++msgstr "Coût par mois dans une année"
+ 
+ #: page_admin_callsstats.ptl:192 ../page_stats_callsstats.ptl:210
+ #: ../page_stats_calls.ptl:209
+ msgid "Year"
+-msgstr "Année"
++msgstr "Année"
+ 
+ #: page_admin_callsstats.ptl:193 ../page_stats_callsstats.ptl:211
+ #: ../page_stats_calls.ptl:210
+@@ -2405,7 +2406,7 @@
+ #: page_admin_callsstats.ptl:195 ../page_stats_callsstats.ptl:213
+ #: ../page_stats_calls.ptl:212
+ msgid "cost per Year"
+-msgstr "coût par an"
++msgstr "coût par an"
+ 
+ #: page_admin_callsstats.ptl:198 page_admin_cdr.ptl:109 StatsHelper.ptl:95
+ #: ../page_owner_cdr.ptl:108 ../page_stats_callsstats.ptl:216
+@@ -2417,7 +2418,7 @@
+ #: page_admin_callsstats.ptl:209 ../page_stats_callsstats.ptl:227
+ #: ../page_stats_calls.ptl:226
+ msgid "Sorry, this kind of query is not supported yet"
+-msgstr "Désolé, ce type de requête n'est pas encore supporté"
++msgstr "Désolé, ce type de requête n'est pas encore supporté"
+ 
+ #: page_admin_callsstats.ptl:213 ../page_stats_callsstats.ptl:231
+ #: ../page_stats_calls.ptl:230
+@@ -2431,7 +2432,7 @@
+ #: ../page_stats_calls.ptl:235 ../page_stats_dialouts.ptl:176
+ #: ../page_stats_phone.ptl:183 ../page_stats_trunks.ptl:190
+ msgid "Results"
+-msgstr "Résultat"
++msgstr "Résultat"
+ 
+ #: page_admin_callsstats.ptl:226 page_admin_dialoutsstats.ptl:178
+ #: page_admin_trunksstats.ptl:177 ../page_stats_callsstats.ptl:244
+@@ -2446,11 +2447,11 @@
+ 
+ #: page_admin_cdr.ptl:38 ../page_stats_cdr.ptl:38
+ msgid "Call Details"
+-msgstr "Détail des appels"
++msgstr "Détail des appels"
+ 
+ #: page_admin_cdr.ptl:39 ../page_owner_cdr.ptl:39 ../page_stats_cdr.ptl:39
+ msgid "Get statistics about made and received calls"
+-msgstr "Statistiques des appels effectués et reçus"
++msgstr "Statistiques des appels effectués et reçus"
+ 
+ #: page_admin_cdr.ptl:74 ../page_owner_cdr.ptl:73 ../page_stats_cdr.ptl:74
+ #: ../page_owner_cdr.ptl:74 ../page_stats_cdr.ptl:75
+@@ -2460,7 +2461,7 @@
+ #: page_admin_cdr.ptl:75 ../page_owner_cdr.ptl:74 ../page_stats_cdr.ptl:75
+ #: ../page_owner_cdr.ptl:75 ../page_stats_cdr.ptl:76
+ msgid "Previous"
+-msgstr "Précédent"
++msgstr "Précédent"
+ 
+ #: page_admin_cdr.ptl:86 ../page_owner_cdr.ptl:85 ../page_stats_cdr.ptl:86
+ #: ../page_owner_cdr.ptl:86 ../page_stats_cdr.ptl:87
+@@ -2482,7 +2483,7 @@
+ #: ../page_stats_cdr.ptl:118 ../StatsHelper.ptl:102 ../page_owner_cdr.ptl:118
+ #: ../page_stats_cdr.ptl:119
+ msgid "February"
+-msgstr "Février"
++msgstr "Février"
+ 
+ #: page_admin_cdr.ptl:118 StatsHelper.ptl:102 ../page_owner_cdr.ptl:117
+ #: ../page_stats_cdr.ptl:118 ../StatsHelper.ptl:102 ../page_owner_cdr.ptl:118
+@@ -2518,7 +2519,7 @@
+ #: ../page_stats_cdr.ptl:118 ../StatsHelper.ptl:103 ../page_owner_cdr.ptl:118
+ #: ../page_stats_cdr.ptl:119
+ msgid "August"
+-msgstr "Août"
++msgstr "Août"
+ 
+ #: page_admin_cdr.ptl:118 StatsHelper.ptl:104 ../page_owner_cdr.ptl:117
+ #: ../page_stats_cdr.ptl:118 ../StatsHelper.ptl:104 ../page_owner_cdr.ptl:118
+@@ -2542,7 +2543,7 @@
+ #: ../page_stats_cdr.ptl:118 ../StatsHelper.ptl:104 ../page_owner_cdr.ptl:118
+ #: ../page_stats_cdr.ptl:119
+ msgid "December"
+-msgstr "Décembre"
++msgstr "Décembre"
+ 
+ #: page_admin_cdr.ptl:140 ../page_owner_cdr.ptl:139 ../page_stats_cdr.ptl:141
+ #: ../page_owner_cdr.ptl:140 ../page_stats_cdr.ptl:142
+@@ -2558,8 +2559,8 @@
+ "Wildcards: % is the 'zero or more characters' wildcard, and _ is the "
+ "'exactly one character' wildcard"
+ msgstr ""
+-"Le caractère: % représente 'zéro ou plusieurs caractères' et _ "
+-"représente 'exactement un caractère'"
++"Le caractère: % représente 'zéro ou plusieurs caractères' et _ représente "
++"'exactement un caractère'"
+ 
+ #: page_admin_cdr.ptl:141 page_admin_phonestats.ptl:43 page_user_state.ptl:100
+ #: ../page_owner_cdr.ptl:140 ../page_stats_cdr.ptl:142
+@@ -2577,7 +2578,7 @@
+ #: page_admin_cdr.ptl:142 ../page_owner_cdr.ptl:141 ../page_stats_cdr.ptl:143
+ #: ../page_owner_cdr.ptl:142 ../page_stats_cdr.ptl:144
+ msgid "You can use the same wildcards as above"
+-msgstr "Vous pouvez utiliser les mêmes caractères de matching que ci-dessus"
++msgstr "Vous pouvez utiliser les mêmes caractères de matching que ci-dessus"
+ 
+ #: page_admin_cdr.ptl:143 page_admin_cdr.ptl:291 ../page_owner_cdr.ptl:142
+ #: ../page_owner_cdr.ptl:278 ../page_stats_cdr.ptl:144
+@@ -2585,7 +2586,7 @@
+ #: ../page_owner_cdr.ptl:283 ../page_stats_cdr.ptl:145
+ #: ../page_stats_cdr.ptl:285
+ msgid "Duration"
+-msgstr "Durée"
++msgstr "Durée"
+ 
+ #: page_admin_cdr.ptl:144 ../page_owner_cdr.ptl:143 ../page_stats_cdr.ptl:145
+ #: ../page_owner_cdr.ptl:144 ../page_stats_cdr.ptl:146
+@@ -2595,7 +2596,7 @@
+ #: page_admin_cdr.ptl:145 ../page_owner_cdr.ptl:144 ../page_stats_cdr.ptl:146
+ #: ../page_owner_cdr.ptl:145 ../page_stats_cdr.ptl:147
+ msgid "Number of records to show:"
+-msgstr "Nombre d'enregistrements affichés :"
++msgstr "Nombre d'enregistrements affichés :"
+ 
+ #: page_admin_cdr.ptl:146 ../page_owner_cdr.ptl:145 ../page_stats_cdr.ptl:147
+ #: ../page_owner_cdr.ptl:146 ../page_stats_cdr.ptl:148
+@@ -2605,7 +2606,7 @@
+ #: page_admin_cdr.ptl:147 ../page_owner_cdr.ptl:146 ../page_stats_cdr.ptl:148
+ #: ../page_owner_cdr.ptl:147 ../page_stats_cdr.ptl:149
+ msgid "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start:"
+-msgstr "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Début :"
++msgstr "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Début :"
+ 
+ #: page_admin_cdr.ptl:150 ../page_owner_cdr.ptl:149 ../page_stats_cdr.ptl:151
+ #: ../page_owner_cdr.ptl:150 ../page_stats_cdr.ptl:152
+@@ -2625,44 +2626,44 @@
+ #: page_admin_cdr.ptl:265 ../page_owner_cdr.ptl:265 ../page_stats_cdr.ptl:268
+ #: ../page_owner_cdr.ptl:266 ../page_stats_cdr.ptl:269
+ msgid "Desc. Order"
+-msgstr "Ordre décroissant"
++msgstr "Ordre décroissant"
+ 
+ #: page_admin_cdr.ptl:270
+ msgid "Duration of Call"
+-msgstr "Durée d'appel"
++msgstr "Durée d'appel"
+ 
+ #: page_admin_cdr.ptl:273
+ msgid "Cost of call"
+-msgstr "Coût de l'appel"
++msgstr "Coût de l'appel"
+ 
+ #: page_admin_cdr.ptl:281 page_admin_cdr.ptl:283 page_admin_cdr.ptl:285
+ #: page_admin_cdr.ptl:287
+ msgid "Result"
+-msgstr "Résultat"
++msgstr "Résultat"
+ 
+ #: page_admin_cdr.ptl:282 StatsHelper.ptl:160 ../StatsHelper.ptl:160
+ msgid "Answered"
+-msgstr "Réponse"
++msgstr "Réponse"
+ 
+ #: page_admin_cdr.ptl:284
+ msgid "Not answered"
+-msgstr "Pas répondu"
++msgstr "Pas répondu"
+ 
+ #: page_admin_cdr.ptl:286 StatsHelper.ptl:162 ../StatsHelper.ptl:162
+ msgid "Busy"
+-msgstr "Occupé"
++msgstr "Occupé"
+ 
+ #: page_admin_cdr.ptl:288 StatsHelper.ptl:163 ../StatsHelper.ptl:163
+ msgid "Failed"
+-msgstr "Echoué"
++msgstr "Echoué"
+ 
+ #: page_admin_cdr.ptl:289
+ msgid "start"
+-msgstr "début"
++msgstr "début"
+ 
+ #: page_admin_cdr.ptl:294
+ msgid "Cost_per_Minute"
+-msgstr "Coût_par_Minute"
++msgstr "Coût_par_Minute"
+ 
+ #: page_admin_cdr.ptl:321 page_admin_cdr.ptl:323 ../page_owner_cdr.ptl:293
+ #: ../page_owner_cdr.ptl:295 ../page_stats_cdr.ptl:296
+@@ -2671,18 +2672,18 @@
+ #: ../page_stats_cdr.ptl:302
+ #, python-format
+ msgid "Showing records from %s to %s of %s <br /><br />"
+-msgstr "Affiche les enregistrements de %s à %s de %s <br /><br />"
++msgstr "Affiche les enregistrements de %s à %s de %s <br /><br />"
+ 
+ #: page_admin_cdr.ptl:325 ../page_owner_cdr.ptl:297 ../page_stats_cdr.ptl:300
+ #: ../page_owner_cdr.ptl:302 ../page_stats_cdr.ptl:304
+ #, python-format
+ msgid "Total Duration of shown calls: %s min."
+-msgstr "Durée totale des appels affichés : %s min."
++msgstr "Durée totale des appels affichés : %s min."
+ 
+ #: page_admin_cdr.ptl:329
+ #, python-format
+ msgid "Total Cost of shown calls: %s"
+-msgstr "Coût total des appels affichés : %s"
++msgstr "Coût total des appels affichés : %s"
+ 
+ #: page_admin_dialoutsstats.ptl:35 ../page_stats_dialouts.ptl:35
+ #: ../page_stats_dialouts.ptl:34
+@@ -2692,7 +2693,7 @@
+ #: page_admin_dialoutsstats.ptl:36 ../page_stats_dialouts.ptl:36
+ #: ../page_stats_dialouts.ptl:35
+ msgid "Statistics for Dialout Entries"
+-msgstr "Statistiques des entrées d'appels sortants"
++msgstr "Statistiques des entrées d'appels sortants"
+ 
+ #: page_admin_dialoutsstats.ptl:48 page_admin_phonestats.ptl:46
+ #: page_admin_trunksstats.ptl:47 ../page_stats_dialouts.ptl:51
+@@ -2722,7 +2723,7 @@
+ #: page_admin_dialoutsstats.ptl:156 page_admin_phonestats.ptl:154
+ #: ../page_stats_dialouts.ptl:159 ../page_stats_phone.ptl:157
+ msgid "Incomming Calls per Dialout Entry"
+-msgstr "Appels entrants par entrée d'appels sortants"
++msgstr "Appels entrants par entrée d'appels sortants"
+ 
+ #: page_admin_dialoutsstats.ptl:157 page_admin_dialoutsstats.ptl:159
+ #: page_admin_phonestats.ptl:155 page_admin_phonestats.ptl:157
+@@ -2736,12 +2737,12 @@
+ #: ../page_stats_dialouts.ptl:161 ../page_stats_phone.ptl:159
+ #: ../page_stats_dialouts.ptl:167 ../page_stats_phone.ptl:174
+ msgid "Outgoing Calls per Dialout Entry"
+-msgstr "Appels sortants par entrée d'appels sortants"
++msgstr "Appels sortants par entrée d'appels sortants"
+ 
+ #: page_admin_dialoutsstats.ptl:165 ../page_stats_dialouts.ptl:168
+ #: ../page_stats_dialouts.ptl:171 ../page_stats_phone.ptl:178
+ msgid "Statistics of Calls by Dialout Entry:"
+-msgstr "Statistiques des appels par entrée d'appels sortants :"
++msgstr "Statistiques des appels par entrée d'appels sortants :"
+ 
+ #: page_admin_panel.ptl:28 ../page_admin_panel.ptl:28
+ msgid "Asternic Flash Operator Panel"
+@@ -2749,11 +2750,11 @@
+ 
+ #: page_admin_panel.ptl:43 ../page_admin_panel.ptl:43
+ msgid "You don't have a panel configured yet"
+-msgstr "Vous n'avez pas encore configuré le panneau"
++msgstr "Vous n'avez pas encore configuré le panneau"
+ 
+ #: page_admin_panel.ptl:47 ../page_admin_panel.ptl:47
+ msgid "You have a panel configured "
+-msgstr "Vous avez un panneau configuré"
++msgstr "Vous avez un panneau configuré"
+ 
+ #: page_admin_panel.ptl:49 ../page_admin_panel.ptl:49
+ msgid "here"
+@@ -2773,7 +2774,7 @@
+ #: ../page_admin_reload.ptl:44 ../page_user_quickdiallist.ptl:76
+ #: ../page_user_settings.ptl:105 ../page_user_state.ptl:138
+ msgid "Asterisk is not running!"
+-msgstr "Asterisk n'est pas lancé"
++msgstr "Asterisk n'est pas lancé"
+ 
+ #: page_admin_pbxstate.ptl:85 page_config_reload.ptl:49
+ #: page_user_quickdiallist.ptl:81 page_user_settings.ptl:110
+@@ -2781,7 +2782,7 @@
+ #: ../page_admin_reload.ptl:49 ../page_user_quickdiallist.ptl:81
+ #: ../page_user_settings.ptl:110 ../page_user_state.ptl:143
+ msgid "The manager access is not working!"
+-msgstr "L'accès de gestion ne fonctionne pas"
++msgstr "L'accès de gestion ne fonctionne pas"
+ 
+ #: page_admin_phonestats.ptl:30 ../page_stats_phone.ptl:30
+ #: ../page_stats_phone.ptl:34
+@@ -2795,7 +2796,7 @@
+ 
+ #: page_admin_phonestats.ptl:163 ../page_stats_phone.ptl:166
+ msgid "Statistics of Extension Calls by Dialout Entry:"
+-msgstr "Statistiques des appels d'extension par entrée d'appel sortant"
++msgstr "Statistiques des appels d'extension par entrée d'appel sortant"
+ 
+ #: page_admin.ptl:25 ../page_admin.ptl:25
+ msgid "Administration"
+@@ -2844,7 +2845,7 @@
+ 
+ #: page_config_applications.ptl:27 ../page_config_applications.ptl:27
+ msgid "Special Asterisk Applications"
+-msgstr "Application spécial d'Asterisk"
++msgstr "Application spécial d'Asterisk"
+ 
+ #: page_config_backup.ptl:27 ../page_admin_backup.ptl:27
+ msgid "Backup a config file"
+@@ -2853,7 +2854,7 @@
+ #: page_config_backup.ptl:44 ../page_admin_backup.ptl:44
+ #, python-format
+ msgid "I had a problem backing up %s"
+-msgstr "Problème de sauvegarde de %s"
++msgstr "Problème de sauvegarde de %s"
+ 
+ #: page_config_dialout.ptl:27 ../page_config_dialout.ptl:27
+ msgid "Dialout"
+@@ -2861,17 +2862,17 @@
+ 
+ #: page_config_dialout.ptl:28 ../page_config_dialout.ptl:28
+ msgid "Dialout entries for outgoing calls"
+-msgstr "Entrée d'appel sortant pour les appels extérieurs"
++msgstr "Entrée d'appel sortant pour les appels extérieurs"
+ 
+ #: page_config_down.ptl:26 ../page_config_down.ptl:26
+ msgid "Moves a configlet one position down"
+-msgstr "Déplace un outils de configuration une position en-dessous"
++msgstr "Déplace un outils de configuration une position en-dessous"
+ 
+ #: page_config_down.ptl:41 page_config_up.ptl:41 ../page_config_down.ptl:41
+ #: ../page_config_up.ptl:41
+ #, python-format
+ msgid "Could not swap id's %s and %s"
+-msgstr "Ne paut pas échanger %s et %s"
++msgstr "Ne paut pas échanger %s et %s"
+ 
+ #: page_config_edit.ptl:27 ../page_config_edit.ptl:27
+ msgid "Edit a configlet"
+@@ -2892,16 +2893,16 @@
+ 
+ #: page_config_options.ptl:27 ../page_config_options.ptl:27
+ msgid "DeStar and Asterisk options and parameters"
+-msgstr "DeStar et Asterisk options et paramètres"
++msgstr "DeStar et Asterisk options et paramètres"
+ 
+ #: page_config_phones.ptl:26 page_config.ptl:86 ../page_config_phones.ptl:26
+ #: ../page_config.ptl:86
+ msgid "Phones"
+-msgstr "Téléphones"
++msgstr "Téléphones"
+ 
+ #: page_config_phones.ptl:27 ../page_config_phones.ptl:27
+ msgid "Phones and their settings"
+-msgstr "Téléphones et leurs paramètres"
++msgstr "Téléphones et leurs paramètres"
+ 
+ #: page_config.ptl:26 page_config.ptl:68 page_config.ptl:80 page_config.ptl:86
+ #: page_config.ptl:92 ../page_config.ptl:26 ../page_config.ptl:68
+@@ -2922,7 +2923,7 @@
+ "You should create a user with type 'Configurator'. Without this user, "
+ "everyone connecting to DeStar can configure everything."
+ msgstr ""
+-"Vous devez créer un utilisateur de type 'Configurateur'. Sans cet "
++"Vous devez créer un utilisateur de type 'Configurateur'. Sans cet "
+ "utilisateur, tout le monde se connectant sur DeStar peut modifier tout."
+ 
+ #: page_config.ptl:72 ../page_config.ptl:72
+@@ -2932,25 +2933,25 @@
+ "ability to modify the configuration files DeStar would be pretty useless. "
+ "You should 'chmod g+rwx' this directory and set it's group to one of '%s'."
+ msgstr ""
+-"Vous devez authoriser l'accès en écriture au répertoire /etc/asterisk. "
+-"Sans cette possibilité de modification des fichiers de configuration DeStar "
+-"est inutilisable. Vous devez 'chmod g+rwx' ce répertoire et mettre son "
+-"groupe à un de '%s'."
++"Vous devez authoriser l'accès en écriture au répertoire /etc/asterisk. Sans "
++"cette possibilité de modification des fichiers de configuration DeStar est "
++"inutilisable. Vous devez 'chmod g+rwx' ce répertoire et mettre son groupe à "
++"un de '%s'."
+ 
+ #: page_config.ptl:78 ../page_config.ptl:78
+ msgid ""
+ "You should create a management API entry. Without this entry, DeStar can't "
+ "control the Asterisk PBX software."
+ msgstr ""
+-"Vous devez créer une entrée API de gestion. Sans cette entrée, DeStar ne "
+-"peut pas contrôler le logiciel de PBX Asterisk."
++"Vous devez créer une entrée API de gestion. Sans cette entrée, DeStar ne "
++"peut pas contrôler le logiciel de PBX Asterisk."
+ 
+ #: page_config.ptl:84 ../page_config.ptl:84
+ msgid ""
+ "You should create a phone. Without defined phones you can't make and receive "
+ "calls."
+ msgstr ""
+-"Vous devez créer un téléphone. Sans téléphones définis vous ne pouvez "
++"Vous devez créer un téléphone. Sans téléphones définis vous ne pouvez "
+ "pas effecuer et recevoir  des appels."
+ 
+ #: page_config.ptl:90 ../page_config.ptl:90
+@@ -2958,9 +2959,9 @@
+ "You should create a trunk (connection to a Phone company or VOIP Provider). "
+ "Without a trunk you can only make calls between local phones."
+ msgstr ""
+-"Vous devriez créer un canal (connection vers une compagnie de téléphone "
++"Vous devriez créer un canal (connection vers une compagnie de téléphone "
+ "ou un fournisseur VOIP). Sans un canl vous pouvez seulement effectuer des "
+-"appels entre téléphones locaux."
++"appels entre téléphones locaux."
+ 
+ #: page_config.ptl:92 page_config_trunks.ptl:26 ../page_config.ptl:92
+ #: ../page_config_trunks.ptl:26
+@@ -2975,10 +2976,10 @@
+ "cards, ZapHFC ISDN cards, etc. You should 'chmod g+rw' this file and set "
+ "it's group to one of '%s'."
+ msgstr ""
+-"Vous devez autoriser l'écriture sur /etc/zaptel.conf. Sans l'accès à ce "
+-"fichier vous ne serez pas à même de configurer les produits Zaptel, entre "
++"Vous devez autoriser l'écriture sur /etc/zaptel.conf. Sans l'accès à ce "
++"fichier vous ne serez pas à même de configurer les produits Zaptel, entre "
+ "autres cartes FXO/FXS, cartes T1/E1, cartes ZapHFC ISDN, etc. Vous devez "
+-"'chmod g+rw' ce fichier et mettre son groupe à un de '%s'."
++"'chmod g+rw' ce fichier et mettre son groupe à un de '%s'."
+ 
+ #: page_config.ptl:101 ../page_config.ptl:101
+ #, python-format
+@@ -2987,17 +2988,17 @@
+ "modify the Asternic Flash Operator Panel configuration files DeStar won't be "
+ "integrated whit the panel."
+ msgstr ""
+-"Vous devriez activer l'accès en écriture au répertoire %s. Sans cette "
+-"capacité à modifer les fichiers de configuration du panneau Asternic Flash "
+-"Operator, celui ne pourra pasêtre intégré au panneau."
++"Vous devriez activer l'accès en écriture au répertoire %s. Sans cette "
++"capacité à modifer les fichiers de configuration du panneau Asternic Flash "
++"Operator, celui ne pourra pasêtre intégré au panneau."
+ 
+ #: page_config.ptl:116 ../page_config.ptl:116
+ msgid "Configured"
+-msgstr "Configuré"
++msgstr "Configuré"
+ 
+ #: page_config.ptl:116 ../page_config.ptl:116
+ msgid "Category"
+-msgstr "Catégorie"
++msgstr "Catégorie"
+ 
+ #: page_config.ptl:132 ../page_config.ptl:132
+ msgid "Other things you can configure:"
+@@ -3013,23 +3014,23 @@
+ 
+ #: page_config_reload.ptl:28 ../page_admin_reload.ptl:28
+ msgid "Reload Asterisk/DeStar PBX"
+-msgstr "Redémarrer Asterisk/DeStar PBX"
++msgstr "Redémarrer Asterisk/DeStar PBX"
+ 
+ #: page_config_reload.ptl:53 ../page_admin_reload.ptl:53
+ msgid "Doing a reload, result is:"
+-msgstr "En train de faire un redémarrage, le résultat est :"
++msgstr "En train de faire un redémarrage, le résultat est :"
+ 
+ #: page_config_trunks.ptl:27 ../page_config_trunks.ptl:27
+ msgid "Telephone company lines and VoIP-Trunks"
+-msgstr "Lignes de compagnies de téléphone et canaux VoIP"
++msgstr "Lignes de compagnies de téléphone et canaux VoIP"
+ 
+ #: page_config_trunks.ptl:46 ../page_config_trunks.ptl:46
+ msgid "You should add at least one phone to configure trunks"
+-msgstr "Vous devez ajouter au moins un téléphone pour configurer des canaux"
++msgstr "Vous devez ajouter au moins un téléphone pour configurer des canaux"
+ 
+ #: page_config_up.ptl:26 ../page_config_up.ptl:26
+ msgid "Moves a configlet one position up"
+-msgstr "Déplace un outil de configuration une position au dessus"
++msgstr "Déplace un outil de configuration une position au dessus"
+ 
+ #: page_config_users.ptl:26 ../page_config_users.ptl:26
+ msgid "Users"
+@@ -3037,7 +3038,7 @@
+ 
+ #: page_config_users.ptl:27 ../page_config_users.ptl:27
+ msgid "Users and Mailboxes"
+-msgstr "Utilisateurs et boites à messages"
++msgstr "Utilisateurs et boites à messages"
+ 
+ #: page_config_viewconf.ptl:29 ../page_admin_viewconf.ptl:29
+ msgid "View Configuration"
+@@ -3057,20 +3058,20 @@
+ 
+ #: page_config_viewconf.ptl:101 ../page_admin_viewconf.ptl:101
+ msgid "Nothing to Show"
+-msgstr "Rien à afficher"
++msgstr "Rien à afficher"
+ 
+ #: page_config_viewconf.ptl:103 ../page_admin_viewconf.ptl:103
+ msgid "There is nothing configured yet."
+-msgstr "Rien n'a encore été configuré"
++msgstr "Rien n'a encore été configuré"
+ 
+ #: page_debug.ptl:25 ../page_debug.ptl:25
+ msgid "Debug"
+-msgstr "Débug"
++msgstr "Débug"
+ 
+ #: page_debug.ptl:26 ../page_debug.ptl:26
+ msgid "Various functions to debug DeStar, mostly useful for programmers"
+ msgstr ""
+-"Diverse fonctions pour débugguer DeStar, la plupart utiles aux développeurs"
++"Diverse fonctions pour débugguer DeStar, la plupart utiles aux développeurs"
+ 
+ #: page_debug_values.ptl:25 ../page_debug_values.ptl:25
+ msgid "Values"
+@@ -3078,7 +3079,7 @@
+ 
+ #: page_debug_values.ptl:26 ../page_debug_values.ptl:26
+ msgid "Dumps all values in the HTTP request"
+-msgstr "Affiche toutes les valeurs dans une requête HTTP"
++msgstr "Affiche toutes les valeurs dans une requête HTTP"
+ 
+ #: page_login.ptl:26 ../page_login.ptl:26
+ msgid "Login"
+@@ -3090,7 +3091,7 @@
+ 
+ #: page_login.ptl:42 ../page_login.ptl:42
+ msgid "User or phone name/number"
+-msgstr "Utilisateur ou numéro/nom de téléphone"
++msgstr "Utilisateur ou numéro/nom de téléphone"
+ 
+ #: page_login.ptl:43 ../page_login.ptl:43
+ msgid "Password or PIN"
+@@ -3103,11 +3104,11 @@
+ #: page_logout.ptl:25 Templates.ptl:234 ../page_logout.ptl:25
+ #: ../Templates.ptl:259 ../Templates.ptl:260
+ msgid "Logout"
+-msgstr "Se délogguer"
++msgstr "Se délogguer"
+ 
+ #: page_logout.ptl:26 ../page_logout.ptl:26
+ msgid "Logout and become a guest user"
+-msgstr "Se délogguer et devenir un utilisateur invité"
++msgstr "Se délogguer et devenir un utilisateur invité"
+ 
+ #: page_main.ptl:28 ../page_main.ptl:28
+ msgid "Main menu"
+@@ -3119,11 +3120,11 @@
+ 
+ #: page_main.ptl:137 ../page_main.ptl:137
+ msgid "Access Denied"
+-msgstr "Accès refusé"
++msgstr "Accès refusé"
+ 
+ #: page_main.ptl:139 ../page_main.ptl:139
+ msgid "You don't have access to this page."
+-msgstr "Vous n'avez pas accès à cette page"
++msgstr "Vous n'avez pas accès à cette page"
+ 
+ #: page_user_info.ptl:26 ../page_user_info.ptl:26
+ msgid "User Info"
+@@ -3131,17 +3132,17 @@
+ 
+ #: page_user_info.ptl:27 ../page_user_info.ptl:27
+ msgid "Your access rights in DeStar"
+-msgstr "Vos droits d'accès dans DeStar"
++msgstr "Vos droits d'accès dans DeStar"
+ 
+ #: page_user_info.ptl:43 page_user.ptl:40 ../page_user_info.ptl:43
+ #: ../page_user.ptl:40
+ msgid "You are now logged in as user"
+-msgstr "Vous êtes maintenant loggué comme l'utilisateur"
++msgstr "Vous êtes maintenant loggué comme l'utilisateur"
+ 
+ #: page_user_info.ptl:48 page_user.ptl:45 ../page_user_info.ptl:48
+ #: ../page_user.ptl:45
+ msgid "Your access level is "
+-msgstr "Votre niveau d'accès est"
++msgstr "Votre niveau d'accès est"
+ 
+ #: page_user_info.ptl:53 page_user.ptl:50 ../page_user_info.ptl:53
+ #: ../page_user.ptl:50
+@@ -3151,12 +3152,12 @@
+ #: page_user_info.ptl:56 page_user.ptl:53 ../page_user_info.ptl:56
+ #: ../page_user.ptl:53
+ msgid "Your account is disabled. "
+-msgstr "Votre compte est désactivé"
++msgstr "Votre compte est désactivé"
+ 
+ #: page_user_info.ptl:58 page_user.ptl:55 ../page_user_info.ptl:58
+ #: ../page_user.ptl:55
+ msgid "You are not logged in."
+-msgstr "Vous n'êtes pas loggués"
++msgstr "Vous n'êtes pas loggués"
+ 
+ #: page_user_info.ptl:60 page_user.ptl:57 ../page_user_info.ptl:60
+ #: ../page_user.ptl:57
+@@ -3165,11 +3166,11 @@
+ 
+ #: page_user_info.ptl:64 ../page_user_info.ptl:64
+ msgid "access all public accessible info pages"
+-msgstr "accès à toutes les pages d'info publique"
++msgstr "accès à toutes les pages d'info publique"
+ 
+ #: page_user_info.ptl:68 ../page_user_info.ptl:68
+ msgid "change your personal phone settings"
+-msgstr "changez votre configuration personnelle de téléphone"
++msgstr "changez votre configuration personnelle de téléphone"
+ 
+ #: page_user_info.ptl:72 ../page_user_info.ptl:72
+ msgid "change phone settings of other people"
+@@ -3181,7 +3182,7 @@
+ 
+ #: page_user_info.ptl:80 ../page_user_info.ptl:80
+ msgid "access debug pages to help program DeStar"
+-msgstr "accès aux pages de débug pour aider à la programmation de DeStar"
++msgstr "accès aux pages de débug pour aider à la programmation de DeStar"
+ 
+ #: page_user_info.ptl:83 ../page_user_info.ptl:83
+ msgid "Have fun!"
+@@ -3189,19 +3190,19 @@
+ 
+ #: page_user.ptl:26 ../page_user.ptl:26
+ msgid "Perform tasks allowed by users"
+-msgstr "Effetuer des tâches autorisées par utilisateurs"
++msgstr "Effetuer des tâches autorisées par utilisateurs"
+ 
+ #: page_user.ptl:61 ../page_user.ptl:61
+ msgid "Access all public accessible info pages"
+-msgstr "Accès à toutes les pages d'info publiquement accessible"
++msgstr "Accès à toutes les pages d'info publiquement accessible"
+ 
+ #: page_user.ptl:65 ../page_user.ptl:65
+ msgid "Change your personal phone settings"
+-msgstr "Changez vos paramètres personnels"
++msgstr "Changez vos paramètres personnels"
+ 
+ #: page_user.ptl:69 ../page_user.ptl:69
+ msgid "Change phone settings of other people"
+-msgstr "Changez les paramètres des téléphones d'autres gens"
++msgstr "Changez les paramètres des téléphones d'autres gens"
+ 
+ #: page_user.ptl:73 ../page_user.ptl:73
+ msgid "Configure the PBX"
+@@ -3209,12 +3210,12 @@
+ 
+ #: page_user.ptl:77 ../page_user.ptl:77
+ msgid "Access debug pages to help program DeStar"
+-msgstr "Accès aux pages de débug pour aider à la programmation de DeStar"
++msgstr "Accès aux pages de débug pour aider à la programmation de DeStar"
+ 
+ #: page_user_quickdiallist.ptl:28 page_user_quickdiallist.ptl:29
+ #: ../page_user_quickdiallist.ptl:28 ../page_user_quickdiallist.ptl:29
+ msgid "Quick Dial List"
+-msgstr "Liste de numérotation rapide"
++msgstr "Liste de numérotation rapide"
+ 
+ #: page_user_quickdiallist.ptl:46 ../page_user_quickdiallist.ptl:46
+ msgid "Global Shorcuts and Final Destinations"
+@@ -3222,41 +3223,41 @@
+ 
+ #: page_user_quickdiallist.ptl:54 ../page_user_quickdiallist.ptl:54
+ msgid "No Global Shorcuts Found on Database"
+-msgstr "Pas de raccourcis globaux trouvés dans la base de données"
++msgstr "Pas de raccourcis globaux trouvés dans la base de données"
+ 
+ #: page_user_quickdiallist.ptl:60 ../page_user_quickdiallist.ptl:60
+ msgid "Private Shorcuts and Final Destinations"
+-msgstr "Raccourcis privés et destinations finales"
++msgstr "Raccourcis privés et destinations finales"
+ 
+ #: page_user_quickdiallist.ptl:68 ../page_user_quickdiallist.ptl:68
+ msgid "No Private Shorcuts Found on Database"
+-msgstr "Pas de raccourcis privés trouvés dans la base de données"
++msgstr "Pas de raccourcis privés trouvés dans la base de données"
+ 
+ #: page_user_quickdiallist.ptl:88 page_user_settings.ptl:118
+ #: page_user_state.ptl:151 ../page_user_quickdiallist.ptl:88
+ #: ../page_user_settings.ptl:118 ../page_user_state.ptl:151
+ msgid "You don't have an associated phone"
+-msgstr "Vous n'avez pas de téléphone associé"
++msgstr "Vous n'avez pas de téléphone associé"
+ 
+ #: page_user_settings.ptl:27 ../page_user_settings.ptl:27
+ msgid "Phone Settings"
+-msgstr "Paramètres des téléphones"
++msgstr "Paramètres des téléphones"
+ 
+ #: page_user_settings.ptl:28 ../page_user_settings.ptl:28
+ msgid "Set your phone settings"
+-msgstr "Configurez votre téléphone"
++msgstr "Configurez votre téléphone"
+ 
+ #: page_user_settings.ptl:56 ../page_user_settings.ptl:56
+ msgid "Enable 'do not disturb'"
+-msgstr "Activer 'Ne pas déranger'"
++msgstr "Activer 'Ne pas déranger'"
+ 
+ #: page_user_settings.ptl:57 ../page_user_settings.ptl:57
+ msgid "Immediate call forwarding to"
+-msgstr "Faire suivre l'appel immédiatement à "
++msgstr "Faire suivre l'appel immédiatement à"
+ 
+ #: page_user_settings.ptl:58 ../page_user_settings.ptl:58
+ msgid "Forward call when busy/unavailable to"
+-msgstr "Faire suivre l'appel quand occupé/non disponible à "
++msgstr "Faire suivre l'appel quand occupé/non disponible à"
+ 
+ #: page_user_settings.ptl:59 ../page_user_settings.ptl:59
+ msgid "Seconds of incoming ring time"
+@@ -3264,7 +3265,7 @@
+ 
+ #: page_user_settings.ptl:61 ../page_user_settings.ptl:61
+ msgid "Voicemail pin"
+-msgstr "Pin de boite à message"
++msgstr "Pin de boite à message"
+ 
+ #: page_user_settings.ptl:64 ../page_user_settings.ptl:64
+ msgid "Extension Password"
+@@ -3272,15 +3273,15 @@
+ 
+ #: page_user_settings.ptl:95 ../page_user_settings.ptl:95
+ msgid "Could not create destar configuration file."
+-msgstr "Impossible de créer le fichier de configuration DeStar."
++msgstr "Impossible de créer le fichier de configuration DeStar."
+ 
+ #: page_user_state.ptl:27 ../page_user_state.ptl:27
+ msgid "Phone State"
+-msgstr "Status du téléphone"
++msgstr "Status du téléphone"
+ 
+ #: page_user_state.ptl:28 ../page_user_state.ptl:28
+ msgid "Status of your phone"
+-msgstr "Status de votre téléphone"
++msgstr "Status de votre téléphone"
+ 
+ #: page_user_state.ptl:48 ../page_user_state.ptl:48
+ msgid "State"
+@@ -3288,7 +3289,7 @@
+ 
+ #: page_user_state.ptl:57 ../page_user_state.ptl:57
+ msgid "Last updated"
+-msgstr "Dernière mise à jour"
++msgstr "Dernière mise à jour"
+ 
+ #: page_user_state.ptl:69 ../page_user_state.ptl:69
+ msgid "Registration status"
+@@ -3308,7 +3309,7 @@
+ 
+ #: page_user_state.ptl:81 ../page_user_state.ptl:81
+ msgid "Called extension"
+-msgstr "Extension appelée"
++msgstr "Extension appelée"
+ 
+ #: page_user_state.ptl:87 ../page_user_state.ptl:87 ../cfg_opt_music.py:33
+ msgid "Application"
+@@ -3344,19 +3345,19 @@
+ 
+ #: StatsHelper.ptl:114 ../StatsHelper.ptl:114
+ msgid "Answered Calls"
+-msgstr "Appels répondus"
++msgstr "Appels répondus"
+ 
+ #: StatsHelper.ptl:115 ../StatsHelper.ptl:115
+ msgid "Not Answered Calls"
+-msgstr "Appels non répondus"
++msgstr "Appels non répondus"
+ 
+ #: StatsHelper.ptl:116 ../StatsHelper.ptl:116
+ msgid "Busy Calls"
+-msgstr "Appels occupés"
++msgstr "Appels occupés"
+ 
+ #: StatsHelper.ptl:117 ../StatsHelper.ptl:117
+ msgid "Failed Calls"
+-msgstr "Appels ayant échoués"
++msgstr "Appels ayant échoués"
+ 
+ #: StatsHelper.ptl:158 ../StatsHelper.ptl:158
+ msgid "Calls"
+@@ -3364,7 +3365,7 @@
+ 
+ #: StatsHelper.ptl:161 ../StatsHelper.ptl:161
+ msgid "Not Answered"
+-msgstr "Non répondu"
++msgstr "Non répondu"
+ 
+ #: Templates.ptl:255 ../Templates.ptl:280 ../Templates.ptl:281
+ msgid "Error"
+@@ -3372,7 +3373,7 @@
+ 
+ #: Templates.ptl:263 ../Templates.ptl:288 ../Templates.ptl:289
+ msgid "You don't have access to this page"
+-msgstr "Vous n'avez pas accès à cette page"
++msgstr "Vous n'avez pas accès à cette page"
+ 
+ #: destar:98 ../destar:105 ../destar:106
+ msgid "Error:"
+@@ -3414,15 +3415,15 @@
+ 
+ #: ../cfg_opt_pbx.py:29
+ msgid "You can have several logically separated PBX"
+-msgstr "Vous pouvez avoir plusieurs PBX séparés logiquement"
++msgstr "Vous pouvez avoir plusieurs PBX séparés logiquement"
+ 
+ #: ../cfg_opt_user.py:36
+ msgid "Associated Virtual PBX"
+-msgstr "PBX virtuel associé"
++msgstr "PBX virtuel associé"
+ 
+ #: ../configlets.py:768 ../configlets.py:772
+ msgid "Price/Account_code for this pattern"
+-msgstr "Coût/Code_de_compte pour ce pattern"
++msgstr "Coût/Code_de_compte pour ce pattern"
+ 
+ #: ../page_admin.ptl:26
+ msgid "Perform administrative actions to PBX"
+@@ -3434,22 +3435,22 @@
+ 
+ #: ../page_config_dids.ptl:28
+ msgid "Direct Inward Dialing."
+-msgstr "Sélection directe à l'arrivée"
++msgstr "Sélection directe à l'arrivée"
+ 
+ #: ../page_owner_cdr.ptl:38
+ msgid "Call Details For Virtual PBX"
+-msgstr "Détails d'appel pour le PBX virtuel"
++msgstr "Détails d'appel pour le PBX virtuel"
+ 
+ #: ../page_owner_cdr.ptl:155 ../page_owner_cdr.ptl:241
+ #: ../page_stats_cdr.ptl:157 ../page_stats_cdr.ptl:244
+ #: ../page_owner_cdr.ptl:156 ../page_owner_cdr.ptl:242
+ #: ../page_stats_cdr.ptl:158 ../page_stats_cdr.ptl:245
+ msgid "Time_of_start"
+-msgstr "Heure_du_début"
++msgstr "Heure_du_début"
+ 
+ #: ../page_owner.ptl:25
+ msgid "Virtual PBX Owner"
+-msgstr "Propriétaire du PBX virtuel"
++msgstr "Propriétaire du PBX virtuel"
+ 
+ #: ../page_stats_cdr.ptl:140 ../page_stats_cdr.ptl:141
+ msgid "PBX"


Property changes on: destar/trunk/debian/patches/30_pofiles.dpatch
___________________________________________________________________
Name: svn:executable
   + *

Added: destar/trunk/debian/patches/40_zaptypo.dpatch
===================================================================
--- destar/trunk/debian/patches/40_zaptypo.dpatch	2006-06-27 05:10:10 UTC (rev 1961)
+++ destar/trunk/debian/patches/40_zaptypo.dpatch	2006-06-27 05:51:37 UTC (rev 1962)
@@ -0,0 +1,232 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 40_zaptypo.dpatch by  <root at localhost.localdomain>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad destar-0.2beta~/cfg_phone_zap.py destar-0.2beta/cfg_phone_zap.py
+--- destar-0.2beta~/cfg_phone_zap.py	2006-05-31 05:52:56.000000000 +0000
++++ destar-0.2beta/cfg_phone_zap.py	2006-06-27 05:33:50.000000000 +0000
+@@ -202,7 +202,7 @@
+ 			self.technology,
+ 			self.channels,
+ 			self.name,
+-			int(self.usevm)),
++			int(self.usevm),
+ 			pbx,
+-			ext
++			ext)
+ 		      )
+diff -urNad destar-0.2beta~/cfg_phone_zap.py.orig destar-0.2beta/cfg_phone_zap.py.orig
+--- destar-0.2beta~/cfg_phone_zap.py.orig	1970-01-01 00:00:00.000000000 +0000
++++ destar-0.2beta/cfg_phone_zap.py.orig	2006-05-31 05:52:56.000000000 +0000
+@@ -0,0 +1,208 @@
++# -*- coding: iso-latin-1 -*-
++#
++# Copyright (C) 2005 by Holger Schurig,
++# 
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++#
++
++
++from configlets import *
++import panelutils
++
++
++class CfgPhoneZap(CfgPhone):
++
++	shortName = _("Normal ZAP phone")
++	newObjectTitle = _("New ZAP phone")
++	technology = "ZAP"
++	
++	def createVariables(self):
++		self.variables = [
++			VarType("pbx",    
++				title=_("Virtual PBX"), 
++				type="choice", 
++				options=getChoice("CfgOptPBX")),
++
++			VarType("name",
++				title=_("Name"),
++				len=35),
++
++			VarType("channels",
++				title=_("Zaptel channel number"),
++				type="string",
++				len=5),
++
++			VarType("sigtype",
++				title=_("Signalling type"),
++				type="choice",
++				options=[('ls','loopstart'),
++					('ks', 'kewlstart')]),
++				
++			VarType("group",
++				title=_("Group"),
++				type="int",
++				optional=True),
++				
++			VarType("ext",
++				title=_("Extension"),
++				len=6),
++
++			VarType("did",
++				title=_("Allow direct dialling from outside?"),
++				type="bool",
++				hide=True,
++				default=False),
++
++			VarType("Call Group",
++				title=_("Call group"),
++				type="label"),
++				
++			VarType("enablecallgroup",
++				title=_("Enable call group"),
++				type="bool",
++				optional=False,
++				default=False),
++				
++			VarType("callgroup",
++				title=_("Call group number"),
++				optional=True),
++			
++			VarType("panelLab",
++				title=_("Operator Panel"),
++				type="label",
++				hide=True),
++
++			VarType("panel",
++				title=_("Show this phone in the panel"),
++				type="bool",
++				hide=True,
++				optional=True),
++			
++			VarType("Voicemail",
++				title=_("Voicemail settings"),
++				type="label",
++				len=6),
++			
++			VarType("usevm",
++				title=_("Use voicemail"),
++				type="bool",
++				optional=True),
++				
++			VarType("usemwi",
++				title=_("Signal waiting mail"),
++				type="bool",
++				optional=True),
++
++			VarType("pin",
++				title=_("Voicemail PIN"),
++				optional=True,
++				len=6),
++	
++			VarType("Outbound",
++				title=_("Calls from the phone"),
++				type="label"),
++				
++			VarType("calleridnum",
++				title=_("Caller-Id Number"),
++				optional=True),
++				
++			VarType("calleridname",
++				title=_("Caller-Id Name"),
++				optional=True),
++				
++			VarType("Dialout",
++				title=_("Allowed dialout-entries"),
++				type="label",
++				hide=True),
++
++			VarType("timeout",
++				title=_("Enable time restriction?"),
++				type="bool",
++				optional=True,
++				hide=True),]
++
++		if varlist_manager.hasDialouts():
++			self.variables += varlist_manager.getDialouts()
++			for v in self.variables:
++				if v.name == "Dialout" or v.name=="timeout":
++					v.hide = False
++					
++		queues = len(configlet_tree.getConfigletsByName('CfgPhoneQueue'))
++		if queues > 0:
++			for v in self.variables:
++				if v.name == "QueueLab" or v.name == "queues":
++					v.hide = False
++		self.dependencies = [
++			DepType("pbx", 
++					type="hard",
++					message = _("This is a Dependency")),
++		]
++		for var in self.__dict__.keys():
++			if var.startswith('dialout_'):
++				self.dependencies.append(
++					DepType(var,
++							type="hard",
++							message = _("This is a Dependency")))
++
++	def createAsteriskConfig(self):
++		needModule("chan_zap")
++
++		# Create config for chan_zap:
++		c = AstConf("zapata.conf")
++		c.append("signalling=fxo_%s" % self.sigtype)
++
++		if self.calleridname and self.calleridnum:
++			c.append('callerid="%s" <%s>' % (self.calleridname, self.calleridnum))
++		elif self.calleridname:
++			c.append('callerid="%s"' % self.calleridname)
++		elif self.calleridnum:
++			c.append('callerid=%s' % self.calleridnum)
++		c.append("context=out-%s" % self.name)
++
++		if self.group:
++			c.appendValue(self, "group")
++		c.append("txgain=0.0")
++		c.append("rxgain=0.0")
++		c.append("channel=%s" % self.channels)
++		c.append("")
++
++		c = AstConf("zaptel.conf")
++		c.setSection("")
++		c.destar_comment = False
++		c.append("fxo%s=%s" % (self.sigtype, self.channels))
++		c.append("")
++
++		if self.enablecallgroup:
++			c.append('callgroup=%s' % self.callgroup)
++			c.append('pickupgroup=%s' % self.callgroup)
++
++		self.createExtensionConfig()
++		self.createVoicemailConfig(c)
++		self.createOutgoingContext()
++		self.createPanelConfig()
++
++	def channelString(self):
++		return "%s/%s" % (self.technology, self.channels)
++
++
++	def createDialEntry(self, extensions, exten, pbx, ext):
++		ret = extensions.appendExten(exten, "Macro(dial-std-exten,%s/%s,out-%s,%d,%s,%s)" % (
++			self.technology,
++			self.channels,
++			self.name,
++			int(self.usevm)),
++			pbx,
++			ext
++		      )


Property changes on: destar/trunk/debian/patches/40_zaptypo.dpatch
___________________________________________________________________
Name: svn:executable
   + *

Added: destar/trunk/debian/patches/50_portbug.dpatch
===================================================================
--- destar/trunk/debian/patches/50_portbug.dpatch	2006-06-27 05:10:10 UTC (rev 1961)
+++ destar/trunk/debian/patches/50_portbug.dpatch	2006-06-27 05:51:37 UTC (rev 1962)
@@ -0,0 +1,1273 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 50_portbug.dpatch by  <root at localhost.localdomain>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad destar-0.2beta~/configlets.py destar-0.2beta/configlets.py
+--- destar-0.2beta~/configlets.py	2006-06-17 12:23:57.000000000 +0000
++++ destar-0.2beta/configlets.py	2006-06-27 05:40:04.000000000 +0000
+@@ -379,6 +379,8 @@
+ 		self.groups[configlet.groupName].append(configlet)
+ 	
+ 
++configlet_tree = ConfigletTree()
++
+ class Holder(object):
+ 	"""
+ 	This is a simple wrapper class so that you can write
+@@ -443,7 +445,6 @@
+ 
+ 
+ 
+-configlet_tree = ConfigletTree()
+ 
+ class DependentObject:
+ 	def __init__(self, configlet, dependency):
+@@ -604,6 +605,7 @@
+ 		May be overridden for additional test."""
+ 
+ 		# Make sure we don't add two thingies with the same extension on the same pbx
++		global configlet_tree
+ 		if self.__dict__.has_key('ext'):
+ 			for o in configlet_tree:
+ 				if o==self: continue
+@@ -745,6 +747,7 @@
+ 		'clazz' where the child class can tell us which class should
+ 		be unique in the configlet_tree."""
+ 
++		global configlet_tree
+ 		if not clazz:
+ 			clazz = self
+ 		for o in configlet_tree:
+@@ -766,6 +769,7 @@
+ 		return self.trunks
+ 		
+ 	def updateTrunks(self):
++		global configlet_tree
+ 		self.trunks = []
+ 		for obj in configlet_tree['Trunks']:
+ 			self.trunks.append(VarType("trunk_%s" % obj.name, title=_("%s") % obj.name, type="bool", optional=True,render_br=False))
+@@ -778,6 +782,7 @@
+ 		return self.dialouts
+ 
+ 	def updateDialouts(self):
++		global configlet_tree
+ 		self.dialouts = []
+ 		for obj in configlet_tree['Dialout']:
+ 			self.dialouts.append(VarType("dialout_%s" % obj.name, title=_("%s") % obj.name, type="bool", optional=True,render_br=False))
+@@ -897,6 +902,7 @@
+ 	def fixup(self):
+ 		Cfg.fixup(self)
+ 		self.lookPanel()
++		global configlet_tree
+ 		if configlet_tree.hasConfiglet('CfgPhoneQueue'):
+ 			for v in self.variables:
+ 				if v.name == "QueueLab" or v.name == "queues":
+diff -urNad destar-0.2beta~/configlets.py.orig destar-0.2beta/configlets.py.orig
+--- destar-0.2beta~/configlets.py.orig	1970-01-01 00:00:00.000000000 +0000
++++ destar-0.2beta/configlets.py.orig	2006-06-17 12:23:57.000000000 +0000
+@@ -0,0 +1,1053 @@
++# -*- coding: iso-latin-1 -*-
++#
++# Copyright (C) 2005 by Holger Schurig
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA	02111-1307	USA
++#
++
++
++import sys, os, types, sha, binascii, time
++import panelutils
++
++CONF_DIR = "/etc/asterisk"
++CONF_TAG = "; Automatically created by DESTAR\n"
++
++
++class AsteriskConfigFile:
++	"""
++	A class to generate Asterisk configuration files more easily.
++
++	Create an AstConf class with the filename of the configfile, change
++	sections and append lines or extension lines. When you call you
++	destroy the class (normally at the end of program), the config file
++	will be written. You can force a write with the write() method.
++
++	This autowrite on destroy allows us to create an instance of this
++	class at several places in the source code, add stuff and be sure that
++	all those writes will make it into the config file.
++	"""
++
++
++	def __init__(self, fn):
++		if fn == 'zaptel.conf':
++			fn = os.path.join("/etc", fn)
++		if fn == 'op_server.cfg' or fn == 'op_buttons.cfg':
++			fn = os.path.join(panelutils.PANEL_CONF_DIR, fn)
++		elif fn.find('/')==-1:
++			fn = os.path.join(CONF_DIR, fn)
++		self.fn		  = fn
++		self.sections = {}		# dictionary of sections
++		self.order	  = []		# ordered list of sections
++		self.dirty	  = False		# nothing to write yet
++		self.extpriority = 1
++		self.section  = "general"
++		self.destar_comment = True
++		self.lastext  = None
++
++	def write(self, f=None):
++		"Write myself into the config file"
++		if self.dirty:
++			if not f:
++				f = open(self.fn, "w")
++			if self.destar_comment:
++				f.write(CONF_TAG)
++			for sect in self.order:
++				if sect:
++					f.write("\n[%s]" % sect)
++				f.write("\n")
++				for l in self.sections[sect]:
++					f.write(l)
++					f.write("\n")
++			self.dirty = False
++
++	def setSection(self, sect):
++		"Select a config file section where append() etc will put their data"
++		self.section = sect
++		self.extpriority  = 1
++
++	def hasSection(self, sect):
++		"Does the section already exists?"
++		return sect in self.sections
++
++	def append(self,l):
++		"""Append an ordinary line to the current section"""
++		try:
++			self.sections[self.section].append(l)
++		except KeyError:
++			self.sections[self.section] = [l]
++			self.order.append(self.section)
++		self.dirty = True
++
++	def prepend(self,l):
++		"""Prepend an ordinary line to the current section"""
++		try:
++			self.sections[self.section].insert(0,l)
++		except KeyError:
++			self.sections[self.section] = [l]
++			self.order.append(self.section)
++		self.dirty = True
++
++	def appendExten(self,ext,l,e=None):
++		"""Append an extension line l to the current section. Append
++		an optional error extenion e as well. Increments the priorty
++		if the extension stays the same, resets the prio to 1 if the
++		extension changes."""
++
++		if ext != self.lastext:
++			self.extpriority = 1
++		self.lastext = ext
++		self.append("exten=%s,%d,%s" % (ext, self.extpriority, l))
++		if e:
++			self.append("exten=%s,%d,%s" % (ext, self.extpriority+101, e))
++			
++		ret = self.extpriority
++		self.extpriority = self.extpriority + 1
++		return ret
++
++	def setPriority(self,n):
++		"""Manually set extension priority to an arbitrary number."""
++		self.extpriority = n
++
++	def appendValue(self,conf,var, name=None):
++		"""Write an value that is inside an configuration class"""
++		try:
++			val = getattr(conf,var)
++		except:
++			return
++
++		if not name:
++			name = var
++
++		if val==None:
++			return
++
++		if type(val) == types.IntType:
++			self.append("%s=%d" % (name, val))
++		elif type(val) == types.StringType:
++			self.append("%s=%s" % (name, val))
++		elif type(val) == types.FloatType:
++			self.append("%s=%f" % (name, val))
++		elif type(val) == types.BooleanType:
++			if val:
++				self.append("%s=yes" % name)
++			else:
++				self.append("%s=no" % name)
++		else:
++			print "invalid type ", val
++			raise Exception
++
++
++asterisk_configfiles = []
++
++
++def AstConf(fn):
++	"""Retrieve the AsteriskConfigFile class that contains file 'fn'
++	from our config file cache, create a new class if it doesn't exist."""
++	global asterisk_configfiles
++	for cfg, obj in asterisk_configfiles:
++		if cfg == fn:
++			return obj
++	obj = AsteriskConfigFile(fn)
++	asterisk_configfiles.append( (fn,obj) )
++	return obj
++
++
++
++
++#########################################################################
++
++class __PasswordGeneratorClass:
++	def __init__(self):
++		self.hash = sha.new("D35tar r0ck5")
++		self.hash.update(str(time.time()))
++
++	def __call__(self, len=6, seed=""):
++		try:
++			self.hash.update(open("/dev/urandom", "rb").read(32))
++		except IOError:
++			self.hash.update(str(time.time()))
++
++		if seed:
++			self.hash.update(str(seed))
++		return binascii.b2a_base64(self.hash.digest())[:len]
++
++generatePassword = __PasswordGeneratorClass()
++
++
++#########################################################################
++
++
++def needModule(mod):
++	#print "Need module", mod
++	c = AstConf("modules.conf")
++	if not "modules" in dir(c):
++		#print "setting c.modules"
++		c.modules = Holder(
++			pbx =	[
++				"pbx_config",
++				"pbx_spool",
++				"pbx_functions",
++				],
++			# TODO: get list of codecs and format from /usr/lib/asterisk/modules
++			codec = [
++				"codec_a_mu",
++				"codec_adpcm",
++				"codec_alaw",
++				"codec_g726",
++				"codec_gsm",
++				"codec_ilbc",
++				"codec_lpc10",
++				"codec_ulaw",
++				],
++			format = [
++				"format_g726",
++				"format_g729",
++				"format_gsm",
++				"format_h263",
++				"format_ilbc",
++				"format_jpeg",
++				"format_pcm",
++				"format_vox",
++				"format_wav",
++				"format_wav_gsm",
++				],
++			res =	[ "res_musiconhold",
++				  "res_features" ],
++			cdr =	[ ],
++			chan =	[ ],
++			func =	[ 
++				"func_callerid",
++				],
++			app =	[
++				"app_db",
++				"app_dial", # needs res_musiconhold, res_parking
++				"app_macro",
++				"app_playback",
++				],
++			preload = [],
++			)
++
++	sect = mod.split("_")[0]
++	#print "sect", sect
++	try:
++		sect = c.modules[sect]
++		#print "sect now:", sect
++	except KeyError:
++		# create new array
++		c.modules[sect] = [mod]
++		return
++	# sect contains now the entire section array
++	if not mod in sect:
++		sect.append(mod)
++	#print "sect finally", sect
++
++
++
++#########################################################################
++
++class ConfigletTree:
++	
++	def __init__(self):
++		self.groups = {}
++		self.name = ''
++	
++	def __getitem__(self, key):
++		if self.groups.has_key(key):
++			return self.groups[key]
++		else: return []
++
++	def __setitem__(self, key, val):
++		self.groups[key] = val
++		
++	def __iter__(self):
++		for group in self.groups.values():
++			for element in group:
++				yield element
++				
++	def __str__(self):
++		stringname = ''
++		for element in self:
++			stringname += str(element) + ', '
++		return stringname[:-2]
++	
++	def __len__(self):
++		length = 0
++		for i in self.groups.values():
++			length += len(i)
++		return length
++			
++	def updateConfiglet(self, obj):
++		configlet_list = self.groups[obj.groupName]
++		
++		
++		for i in range(len(configlet_list)):
++			if configlet_list[i]._id == obj._id:
++				configlet_list[i] = obj
++				
++	def deleteConfiglet(self, _id):
++		for group in self.groups.values():
++			for i in range(len(group)):
++				if group[i]._id == _id:
++					for dep in group[i].dependent_objs:
++						self.deleteConfiglet(dep.configlet._id)
++					del group[i]
++					return
++					
++	def moveConfigletUp(self, _id):
++		obj = self.getConfiglet(_id)
++		configlet_list = self.groups[obj.groupName]
++		
++		for i in range(len(configlet_list)):
++			if configlet_list[i]._id == obj._id and i > 0:
++				configlet_list[i] = configlet_list[i-1]
++				configlet_list[i-1] = obj
++				return obj
++		return None
++		
++	def moveConfigletDown(self, _id):
++		obj = self.getConfiglet(_id)
++		configlet_list = self.groups[obj.groupName]
++		
++		for i in range(len(configlet_list)):
++			if configlet_list[i]._id == obj._id and i < (len(configlet_list) -1):
++				configlet_list[i] = configlet_list[i+1]
++				configlet_list[i+1] = obj
++				return obj
++		return None
++	
++	def getConfigletsByGroup(self, groupName):
++		return self[groupName]
++	
++	#TODO: Make this as fast as getConfigletsByGroup
++	def getConfigletsByName(self, name):
++		result = []
++		for obj in self:
++			if obj.shortName == name or obj.__class__.__name__ == name:
++				result.append(obj)
++		return result
++
++	def getConfigletsByClass(self, _class):
++		result = []
++		for obj in self:
++			if isinstance(obj, _class):
++				result.append(obj)
++		return result
++		
++	def hasConfiglet(self, _class):
++		for obj in self:
++			if obj.__class__.__name__ == _class: 
++				return True
++		return False
++			
++
++	def empty(self):
++		return len(self)==0
++		
++	def getConfiglet(self, _id):
++		for obj in self:
++			try:
++				if obj._id == int(_id):
++					return obj
++			except:
++				pass
++		return None
++		
++	def getConfigletByName(self, name):
++		for obj in self:
++			try:
++				if obj.name == name:
++					return obj
++			except:
++				pass
++		return None
++		
++	def addConfiglet(self, configlet):
++		if not self.groups.has_key(configlet.groupName):
++			self.groups[configlet.groupName] = []
++		self.groups[configlet.groupName].append(configlet)
++	
++
++class Holder(object):
++	"""
++	This is a simple wrapper class so that you can write
++
++	 foo = Holder(bar = 1,
++				baz = "test")
++	instead of
++
++	 foo["bar"] = 1
++	 baz["bar"] = "test"
++
++	Holder will be a base class for all configuration options and
++	modules.
++	"""
++
++	def __init__(self, **kw):
++		self.__dict__.update(kw)
++
++	def keys(self):
++		"""Return list of stored variables."""
++		return self.__dict__.keys()
++
++	def __getitem__(self,key):
++		"""Allows access to the variables via obj[name] syntax."""
++		return self.__dict__[key]
++
++	def __setitem__(self,key,val):
++		"""Allows access to the variables via obj[name] syntax."""
++		self.__dict__[key] = val
++
++	def __repr__(self):
++		return "<configlets.Holder object: " + self.__dict__.__repr__()
++
++
++class DepType(Holder):
++	"""We use this class to store meta-information about dependendencies"""
++	
++	def __init__(self,name,**kw):
++		Holder.__init__(self,**kw)
++		self.name = name
++		self.__dict__.setdefault("type","hard")
++		self.__dict__.setdefault("message", _("This is a Dependency"))
++
++class VarType(Holder):
++	"""We use this class to store meta-information about configuration variables"""
++
++	def __init__(self,name,**kw):
++		Holder.__init__(self,**kw)
++		self.name = name
++		self.__dict__.setdefault("type","string")
++		self.__dict__.setdefault("len",60)
++		self.__dict__.setdefault("size",20)
++		self.__dict__.setdefault("title",self.name)
++		self.__dict__.setdefault("hint","")
++		self.__dict__.setdefault("optional", False)
++		self.__dict__.setdefault("read", "admin")		# admin, user, all
++		self.__dict__.setdefault("write", "admin")
++		#self.__dict__.setdefault("default", "")
++		self.__dict__.setdefault("hide", False)
++		self.__dict__.setdefault("render_br", True)
++	
++
++
++
++configlet_tree = ConfigletTree()
++
++class DependentObject:
++	def __init__(self, configlet, dependency):
++		self.configlet = configlet
++		self.dependency = dependency
++
++class Cfg(Holder):
++	"""Base class for all configlets.
++
++	Configlets belong to a group, see CfgPhone, CfgOpt, CfgTrunk etc. The
++	group is also stored in the variable 'group'.
++
++	Configlets also contain data. This data is stored quite normally, as
++	anyone would store data inside a class. What is not so normal is that
++	a configurable has a variables[] array that contains various VarType
++	objects that describe those variables (name, description, default
++	value, length etc). This descriptions are used to automatically
++	create forms.
++
++	And, last not least, a configurabe also have a name, stored in 'shortName'
++	(to keep 'name' available for actual data)."""
++
++	#shortName = "Cfg class (do not use directly)"
++	#group	   = "Generic option"
++	variables  = []
++	dependent_objs = []
++	dependencies = []
++
++
++	def __init__(self,autoAdd=True,**kw):
++		"""Stores values from '*kw' into self.__dict__ and add the
++		newly instantiated object into configlets.configlet_tree if
++		'autoAdd' says so."""
++
++		Holder.__init__(self,**kw)
++
++		# Store the object into global array
++		global configlet_tree
++		self._id = len(configlet_tree)
++		if autoAdd:
++			configlet_tree.addConfiglet(self)
++		else:
++			self.createVariables();
++			self.fixup();
++
++		for v in self.variables:
++			# Labels don't have values. We set 'optional' to True
++			# so that we later don't get warnings about missing
++			# values.
++			if v.type=="label":
++				v.optional = True
++				continue
++				
++		self.dependent_objs = []
++		self.dependencies = []
++				
++	def __getattr__(self, field):
++		self.createVariables()
++		self.fixup()
++		if self.__dict__.has_key(field):
++			return self.__dict__[field]
++		else:
++			raise AttributeError
++
++	def lookPanel(self):
++		if panelutils.isConfigured() == 1:
++			for v in self.variables:
++				if v.name == "panelLab" or v.name == "panel":
++					v.hide = False
++					
++	def renameDependencies(self, new_name):
++		for dep in self.dependent_objs:
++				dep.configlet.__dict__[dep.dependency.name] = new_name
++
++	def hasDependencies(self):
++		return len(self.dependent_objs) > 0
++
++	def createDependencies(self):
++		for dep in self.dependencies:
++			if self.__dict__.has_key(dep.name):
++				obj_name = self.__dict__[dep.name]
++				import configlets
++				obj = configlets.configlet_tree.getConfigletByName(obj_name)
++				if obj is None:
++					return
++				dependent_obj = DependentObject(self, dep)
++				obj.dependent_objs.append(dependent_obj)
++
++	def createVariables(self):
++		variables = []
++		
++	def clearDependencies(self):
++		self.dependent_objs = []
++
++	def fixup(self):
++		"""Each configlet's fixup() method get's called after the
++		modules have been loaded from the config file."""
++
++		# Make sure all variables are set:
++		for v in self.variables:
++			if not self.__dict__.has_key(v.name):
++				_v = ""
++				#print v.name,v.type
++				if v.__dict__.has_key("default"):
++					#print "set",v.name,"to default",v.default
++					_v = v.default
++				elif v.type in ["string","rostring","choice","mchoice","radio"]:
++					#print "set",v.name,"to ''"
++					_v = ""
++				elif v.type=="int":
++					#print "set",v.name,"to 0"
++					_v = 0
++				elif v.type=="bool":
++					#print "set",v.name,"to false"
++					_v = False
++				elif v.type=="label":
++					continue
++				else:
++					print "didn't set",v.name,"to anything"
++				#print "set %s %s to" % (v.type, v.name), _v
++				self.__dict__[v.name] = _v
++
++
++	def head(self):
++		"""Configlets can return a tuple of headers and values via
++		row() that can be used to display them in tables.
++
++		This method gives the header. Usually it will be overwritten."""
++
++		return ( _("Extension"),_("Type") )
++
++
++	def row(self):
++		"""Like head(), but returns a table row."""
++
++		try:
++			ext = self.ext
++		except AttributeError:
++			ext = _('None')
++		return (ext, self.shortName)
++
++
++	def isAddable(self):
++		"""Teturns True if it is OK to create instances of this class.
++
++		This can be used to check if a configlet should be presented
++		in the menu. The method is a classMethod, so that we can call
++		it without instantiating an object, e.g. we can call this
++		like CfgOptPhoneZap.isAddable()."""
++
++		# Normally every object is addable
++		return True
++	isAddable = classmethod(isAddable)
++
++
++	def checkConfig(self):
++		"""Test if all variables are set, used by createAsteriskConfig().
++		May be overridden for additional test."""
++
++		# Make sure we don't add two thingies with the same extension on the same pbx
++		if self.__dict__.has_key('ext'):
++			for o in configlet_tree:
++				if o==self: continue
++				try:
++					if o.ext == self.ext and o.pbx == self.pbx:
++						return ("ext", _("Extension already in use on that PBX"))
++				except AttributeError:
++					pass
++
++		# Make sure we don't add two thingies with the same name
++		if self.__dict__.has_key('name'):
++			if self.name.find("-") > 1 or self.name.find(" ") > 1:
++				return ("name", _("Name should not contain '-' or spaces"))
++			for o in configlet_tree:
++				if o==self: continue
++				try:
++					if o.name == self.name:
++						return ("name", _("Name already in use"))
++				except AttributeError:
++					pass
++
++
++
++	def createAsteriskConfig(self):
++		"Creates AsteriskConfigFile entries if checkConfig() gave us an 'ok'."
++		if self.checkConfig()==None:
++			self.createAsteriskConfig()
++
++
++	def createPythonConfig(self):
++		"""Returns an array of strings that resends this class in Python
++		syntax. Can be stored in cfg.py (or whereever) and re-read with
++		execfile()."""
++
++		python_cfg = []
++		python_cfg.append("%s(" % self.__class__.__name__)
++
++		for v in self.variables:
++			if not self.__dict__.has_key(v.name): continue
++			_v = self.__dict__[v.name]
++			if _v == None or _v == "":
++				continue
++			#print v.name,v.type,_v
++			if v.__dict__.has_key("default") and _v==v.default:
++				continue
++			if v.type in ("string","rostring","choice","mchoice","radio"):
++				cont = '"%s"' % _v
++			elif v.type=="text":
++				cont = '"""%s"""' % _v
++			elif v.type=="int":
++				if _v == 0:
++					print v.name
++					continue
++				else:
++					cont = _v
++			elif v.type=="bool":
++				if _v:
++					cont = "True"
++				else:
++					continue
++			elif v.type=="label":
++				continue
++			else:
++				print "unknown type", v.type
++				cont = v.type
++			python_cfg.append("\t%-8s = %s," % (v.name, cont))
++		python_cfg.append("\t)")
++		python_cfg.append("")
++		return python_cfg
++
++	
++
++#######################################################################
++#
++# Accessors for various settings
++#
++
++def getSetting(name, default=None):
++	return getConfig('CfgOptSettings',name, default)
++
++
++def getChoice(clazz):
++	"""
++	Here we actually use a trick. In the configlets, the variables[]
++	get's build once at configlets load-time. While the configlets are
++	in the middle of being loaded, you can't really iterate in
++	configlets.configlet_tree to get a list of, say, all Phones. So this
++	iteration needs to be postponed. We do this with a lambda function.
++
++	This getChoice() uses __getChoice(), which is not defined here in
++	configlets. It comes from backend.py. But because backend.py imports
++	us, we don't import backend.py. Therefore, backend.py "implants"
++	this helper function with "configlets._getChoice = getChoice".
++	"""
++
++	return (lambda : __getChoice(clazz=clazz))
++
++
++#######################################################################
++#
++# Base classes for the different configlet groups
++#
++
++class CfgOpt(Cfg):
++	"""Base class for all Asterisk options."""
++
++	groupName = "Options"
++
++
++	def __init__(self,**kw):
++		Cfg.__init__(self,**kw)
++
++	def head(self):
++		return (_("Name"),_("Info"))
++
++
++	def row(self):
++		return (self.shortName,'')
++
++
++
++
++class CfgOptSingle(CfgOpt):
++	"""Some Asterisk options should only exist exactly once in the
++	config. Descend them from this class."""
++
++	groupName = "Options"
++
++
++	def isAddable(self, clazz=None):
++		"""Allow Options to be added exactly once. We'll enforce this
++		by looking if the current class is already contained in
++		configlet_tree.
++
++		If	a child class, e.g.	 CfgOptZapAudio.isAddable(), wants
++		to call us, then 'self' is no longer CfgOptZapAudio, but it
++		is CfgOptSingle. This is because of the classMethod
++		attribute of isAddable. So we have an optional parameter
++		'clazz' where the child class can tell us which class should
++		be unique in the configlet_tree."""
++
++		if not clazz:
++			clazz = self
++		for o in configlet_tree:
++			#print o.__class__, clazz
++			if o.__class__ == clazz: return False
++		return True
++	isAddable = classmethod(isAddable)
++
++class VarListManager:
++
++	def __init__(self):
++		self.trunks = []
++		self.dialouts = []
++		
++	def hasTrunks(self):
++		return len(self.trunks)>0
++		
++	def getTrunks(self):
++		return self.trunks
++		
++	def updateTrunks(self):
++		self.trunks = []
++		for obj in configlet_tree['Trunks']:
++			self.trunks.append(VarType("trunk_%s" % obj.name, title=_("%s") % obj.name, type="bool", optional=True,render_br=False))
++			self.trunks.append(VarType("trunk_%s_price" % obj.name, title=_("Price/Account_code for this pattern"), type="int", optional=True, len=10, default=0))
++
++	def hasDialouts(self):
++		return len(self.dialouts)>0
++
++	def getDialouts(self):
++		return self.dialouts
++
++	def updateDialouts(self):
++		self.dialouts = []
++		for obj in configlet_tree['Dialout']:
++			self.dialouts.append(VarType("dialout_%s" % obj.name, title=_("%s") % obj.name, type="bool", optional=True,render_br=False))
++			self.dialouts.append(VarType("dialout_%s_secret" % obj.name, title=_("Password:"), len=50, optional=True))
++
++varlist_manager = VarListManager()
++
++
++class CfgTrunk(Cfg):
++	"""Base class for external lines."""
++
++	groupName = "Trunks"
++
++
++	def __init__(self,**kw):
++		Cfg.__init__(self,**kw)
++
++	def fixup(self):
++		Cfg.fixup(self)
++		self.lookPanel()
++
++
++	def head(self):
++		return (_("Name"), _("Type"), _("Dial Command"))
++
++
++	def row(self):
++		return (self.name, self.shortName, self.dial)
++
++
++	def channel(self):
++		return "%s/%s" % (self.technology, self.name)
++
++	def isAddable(self):
++		"We can only add this object if we have at least one other phone defined."
++
++		# BUG: it does somehow not work to simply write for obj in configlet_tree,
++		# despite the "from configlets import *" above
++		global configlet_tree
++		if len(configlet_tree['Phones']) > 0:
++			return True
++		else:
++			return False
++	isAddable = classmethod(isAddable)
++	# BUG: if the choosed phone is deleted, we have a problem
++
++	def checkConfig(self):
++		res = Cfg.checkConfig(self)
++		if res:
++			return res
++		if self.contextin == 'phone' and not self.phone:
++			return ('phone',_("You should select a phone to ring to"))
++
++	def createIncomingContext(self): 
++		c = AstConf("extensions.conf")
++		contextin = "in-%s" % self.name
++		c.setSection(contextin)
++		c.appendExten("_X.","Set(CDR(intrunk)=%s)" %  self.name)
++		if self.clid:
++			needModule("func_callerid")
++			c.appendExten("_X.","Set(CALLERID(name)=%s)" %  self.clid)
++		if self.contextin == 'phone' and self.phone:
++			global configlet_tree
++			obj = configlet_tree.getConfigletByName(self.phone)
++			try:
++				pbx = obj.pbx
++			except AttributeError:
++				pass
++			c.appendExten("_X.", "Goto(%s,%s,1)" % (pbx,self.phone))
++		if self.contextin == 'ivr' and self.ivr:
++			c.appendExten("_X.", "Goto(%s,s,1)" % self.ivr)
++		c.appendExten("s","Set(CDR(intrunk)=%s)" %  self.name)
++		if self.clid:
++			needModule("func_callerid")
++			c.appendExten("s","Set(CALLERID(name)=%s)" %  self.clid)
++		if self.contextin == 'phone' and self.phone:
++			global configlet_tree
++			obj = configlet_tree.getConfigletByName(self.phone)
++			try:
++				pbx = obj.pbx
++			except AttributeError:
++				pass
++			c.appendExten("s", "Goto(%s,%s,1)" % (pbx,self.phone))
++		if self.contextin == 'ivr' and self.ivr:
++			c.appendExten("s", "Goto(%s,s,1)" % self.ivr)
++
++		
++class CfgPhone(Cfg):
++	"""Base class for all phone devices."""
++
++	groupName = "Phones"
++
++
++	def __init__(self,**kw):
++		self.did = True
++		Cfg.__init__(self,**kw)
++
++
++	def head(self):
++		return (_("Type"), _("Extension"), _("Name"), _("Virtual PBX"))
++
++
++	def row(self):
++		try:
++			ext = self.ext
++			pbx = self.pbx
++		except AttributeError:
++			ext = _('None')
++			pbx = _('None')
++		return (self.shortName, ext, self.name, pbx)
++
++
++	def channelString(self):
++		return "%s/%s" % (self.technology, self.name)
++
++
++	def fixup(self):
++		Cfg.fixup(self)
++		self.lookPanel()
++		if configlet_tree.hasConfiglet('CfgPhoneQueue'):
++			for v in self.variables:
++				if v.name == "QueueLab" or v.name == "queues":
++					v.hide = False
++
++	def createDialEntry(self, extensions, exten, pbx, ext):
++		ret = extensions.appendExten(exten, "Macro(dial-std-exten,%s/%s,out-%s,%d,%s,%s)" % (
++			self.technology,
++			self.name,
++			self.name,
++			int(self.usevm),
++			ext,
++			pbx
++			))
++
++	def createExtensionConfig(self):
++		needModule("res_adsi")
++		needModule("app_voicemail")
++		extensions = AstConf("extensions.conf")
++                try:
++                        pbx = self.pbx
++                except AttributeError:
++                        pbx = "phones"
++                extensions.setSection(pbx)
++		extensions.appendExten(self.ext,"Set(CDR(pbx)=%s,CDR(userfield)=%s)" % (pbx,self.name))
++		self.createDialEntry(extensions, self.ext, pbx, self.ext)
++		extensions.appendExten(self.name,"Set(CDR(pbx)=%s,CDR(userfield)=%s)" % (pbx,self.name))
++		self.createDialEntry(extensions, self.name, pbx, self.ext)
++
++	def createVoicemailConfig(self, conf):
++		if self.ext and self.usevm:
++			needModule("res_adsi")
++			needModule("app_voicemail")
++			if self.usemwi:
++				conf.append("mailbox=%s@%s" % (self.ext,self.pbx))
++
++			vm = AstConf("voicemail.conf")
++			vm.setSection(self.pbx)
++			try:
++				pin = self.pin
++			except:
++				pin = ""
++			#TODO: deal with timezones
++			#options = "tz=cest"
++			options = ""
++			if self.email:
++				vm.append("%s=%s,%s,%s,%s" % (self.ext, pin, self.name, self.email, options))
++			else:
++				vm.append("%s=%s,%s,,%s" % (self.ext, pin, self.name, options))
++	
++	def createQueuesConfig(self):
++		try:
++			if self.queues:
++				c = AstConf("queues.conf")
++				for queue in self.queues.split(','):
++					c.setSection(queue)
++					c.append("member => %s/%s" % (self.technology,self.name))
++		except AttributeError:
++			pass
++
++	def createOutgoingContext(self):
++		c = AstConf("extensions.conf")
++		c.setSection("out-%s" % self.name)
++		try:
++			pbx = self.pbx
++		except AttributeError:
++			pbx = "phones"
++		c.append("include=>%s" % pbx)
++		c.appendExten("i","Playback(privacy-invalid)")
++		c.appendExten("_**XX","Set(dest=${DB( QUICKDIALLIST/${CALLERIDNUM}/${EXTEN:2} )})", e="Playback(privacy-invalid)")
++		c.appendExten("_**XX","Goto(${dest},1)")
++		try:
++			timeoutvalue = not self.timeout and "0" or "1"
++		except AttributeError:
++			timeoutvalue=0
++		global configlet_tree
++		for obj in configlet_tree:
++			if obj.__class__.__name__ == 'CfgDialoutNormal':
++				try:
++					if self.__getitem__("dialout_"+obj.name):
++						c.appendExten("%s" % obj.pattern,"Set(CDR(pbx)=%s)" % (self.pbx))
++						c.appendExten("%s" % obj.pattern,"Set(CDR(userfield)=%s)" % (self.name))
++						c.appendExten("%s" % obj.pattern,"Set(CDR(dialout)=%s)" % (obj.name))
++						if self.calleridnum:
++							c.appendExten("%s" % obj.pattern,"Set(CALLERID(number)=%s)" % self.calleridnum)
++						secret = self.__getitem__("dialout_%s_secret" % obj.name)
++						if secret:
++                                                        c.appendExten("%s" % obj.pattern,"Macro(%s,%s${EXTEN:%s},%s,%s)" % (obj.name,obj.addprefix,obj.rmprefix,secret,timeoutvalue))
++                                                else:
++                                                        c.appendExten("%s" % obj.pattern,"Macro(%s,%s${EXTEN:%s},n,%s)" % (obj.name,obj.addprefix,obj.rmprefix,timeoutvalue))
++				except KeyError:
++					pass
++	
++	def createPanelConfig(self):
++		try:
++			if panelutils.isConfigured() == 1 and self.panel:
++				panelutils.createExtButton(self)
++		except AttributeError:
++			pass
++
++class CfgApp(Cfg):
++	"""Base class for all applications (an application is a piece
++	of software that has a number and that you can dial)."""
++
++	groupName ="Applications"
++
++	def head(self):
++		return (_("Extension"), _("Type"), _("Virtual PBX"))
++
++	def row(self):
++		try:
++			pbx = self.pbx
++		except AttributeError:
++			pbx = _('None')
++		return (self.ext, self.shortName, pbx)
++ 
++	
++class CfgDialout(Cfg):
++	"""Base class for dialout entries."""
++
++	groupName = "Dialout"
++
++
++	def __init__(self,**kw):
++		Cfg.__init__(self,**kw)
++
++
++	def head(self):
++		return (_("Extension"), _("Name"), _("Type"))
++
++
++	def row(self):
++		try:
++			ext = self.pattern
++		except AttributeError:
++			ext = _('None')
++		return (ext, self.name, self.shortName)
++
++class CfgIVR(Cfg):
++	"""Base class for IVRs."""
++
++	groupName = "IVRs"
++
++
++	def __init__(self,**kw):
++		Cfg.__init__(self,**kw)
++
++	def head(self):
++		return (_("Name"),_("Info"))
++
++
++	def row(self):
++		return (self.shortName,self.name)
++
+diff -urNad destar-0.2beta~/destar destar-0.2beta/destar
+--- destar-0.2beta~/destar	2006-06-17 11:11:18.000000000 +0000
++++ destar-0.2beta/destar	2006-06-27 05:35:50.000000000 +0000
+@@ -63,11 +63,11 @@
+ 
+ try:
+ 	opts,args = getopt.getopt(sys.argv[1:],'dhpr:v', 
+-		['daemonize=','help','pid=', 'port', 'version'])
++		['daemonize','help','pid=', 'port=', 'version'])
+ except getopt.GetoptError:
+ 	print _("DeStar: Command-line parsing error. Aborting.")
+ 	print_usage()
+-	exit(2)
++	sys.exit(2)
+ 
+ for opt,val in opts:
+ 	if opt in  ('-d', '--daemonize'):
+diff -urNad destar-0.2beta~/destar.orig destar-0.2beta/destar.orig
+--- destar-0.2beta~/destar.orig	1970-01-01 00:00:00.000000000 +0000
++++ destar-0.2beta/destar.orig	2006-06-17 11:11:18.000000000 +0000
+@@ -0,0 +1,128 @@
++#!/usr/bin/env python
++# -*- coding: iso-latin-1 -*-
++#
++# Copyright (C) 2005 by Holger Schurig
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++#
++
++
++"""
++An HTTP handler for Medusa that publishes the Asterisk setup Quixote application
++"""
++
++# A simple HTTP server, using Medusa, that publishes a Quixote application,
++# based on medusa_http.py from Quixote
++
++
++
++import language
++language.setLanguage('en')
++
++import sys, getopt, panelutils
++import daemonize
++be_daemon = False
++rport = 8080
++pid_file = '/var/run/destar.pid'
++VERSION = '0.2beta'
++
++
++def print_version():
++	print _("DeStar %s, Copyright (C) 2005 by Holger Schurig and contributors.\n\n"\
++	"DeStar comes with ABSOLUTELY NO WARRANTY. This is free software,\n"\
++	"you are welcome to redistribute it under certain conditions;\n"\
++	"see the included files GPL-2.txt and COPYRIGHT.txt\n") % VERSION
++	
++
++def print_usage():
++	program = "destar"
++	print _("DeStar: Asterisk Management web interface")
++	print
++	print _("Usage:")
++	print _("  %s [options]: normal execution") % program
++	print _("  %s -h|--help: print this text and exit peacefully") % program
++	print _("  %s -v|--version: only print version information") % program
++	print ""
++	print _("Options:")
++	print _("  -p <pid>  | --pid=<pid>: use <pid> to store the daemon's PID")
++	print _("  -d | --daemonize: run in the background")
++	print _("  -r <port> | --port=<port>: run on port <port> (default: 8080)")
++
++
++try:
++	opts,args = getopt.getopt(sys.argv[1:],'dhpr:v', 
++		['daemonize=','help','pid=', 'port', 'version'])
++except getopt.GetoptError:
++	print _("DeStar: Command-line parsing error. Aborting.")
++	print_usage()
++	exit(2)
++
++for opt,val in opts:
++	if opt in  ('-d', '--daemonize'):
++		be_daemon=True
++	if opt in  ('-h', '--help'):
++		print_usage()
++		sys.exit(0)
++	if opt in ('-p', '--pid'):
++		pid_file = val
++	if opt in ('-r', '--port'):
++		rport = val
++	if opt in ('-v', '--version'):
++		print_version()
++		sys.exit(0)
++
++# Validate parameters to give better errors:
++try:
++	rport_num = int(rport)
++except ValueError:
++	print _("Error: rport (-r <num>/--port=<num> must be a number)")
++	print_usage()
++	sys.exit(2)
++
++print_version()
++
++
++# 'medusa' is a stand-alone web server
++import medusa
++
++# 'quixote' is a web application framework
++try:
++	import quixote
++	if quixote.__version__ < "1.2" or quixote.__version__ >= "2.0":
++		raise ImportError
++except ImportError:
++	print _("Error:"), _("please install Quixote > 1.2  and < 2.0")
++	import sys
++	sys.exit(1)
++
++# 'Publisher.py' contains our session management, 'page_main' contains
++# the start page.
++import Server, Publisher
++pub = Server.Server("page_main", port=int(rport), publisher=Publisher.DeStarPublisher)
++
++
++
++
++# only daemonize after binding to the port. This makes error handling saner
++if be_daemon:
++	quixote.config.DISPLAY_EXCEPTIONS = 'plain'
++	daemonize.daemonize(stdout='/var/log/asterisk/destar.log', stderr='/var/log/asterisk/destar.err', pidfile=pid_file)
++
++try:
++	pub.run()
++except KeyboardInterrupt:
++	if panelutils.isConfigured():
++		panelutils.stopPanelDaemon()
++	pass


Property changes on: destar/trunk/debian/patches/50_portbug.dpatch
___________________________________________________________________
Name: svn:executable
   + *




More information about the Pkg-voip-commits mailing list