diff --git a/swad_account.c b/swad_account.c index ef1a97cb1..21baa2a56 100644 --- a/swad_account.c +++ b/swad_account.c @@ -68,7 +68,7 @@ extern struct Globals Gbl; /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Acc_ShowFormCheckIfIHaveAccount (void); +static void Acc_ShowFormCheckIfIHaveAccount (const char *Title); static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWithoutArroba, const char *NewEmail); static bool Acc_GetParamsNewAccount (char *NewNicknameWithoutArroba, @@ -114,14 +114,13 @@ void Acc_ShowFormAccount (void) /* Links to log in and to change language */ fprintf (Gbl.F.Out,"
"); Usr_PutLinkToLogin (); + Pwd_PutLinkToSendNewPasswd (); Pre_PutLinkToChangeLanguage (); fprintf (Gbl.F.Out,"
"); /**** Show form to check if I have an account *****/ - Acc_ShowFormCheckIfIHaveAccount (); - - /**** Show form to create a new account *****/ - Acc_ShowFormRequestNewAccountWithParams ("",""); + Acc_ShowFormCheckIfIHaveAccount ("Antes de crear una cuenta nueva" + " compruebe si ya le han inscrito con su ID"); // TODO: Need translation!!! } } @@ -129,13 +128,13 @@ void Acc_ShowFormAccount (void) /***************** Show form to check if I have an account *******************/ /*****************************************************************************/ -static void Acc_ShowFormCheckIfIHaveAccount (void) +static void Acc_ShowFormCheckIfIHaveAccount (const char *Title) { extern const char *The_ClassForm[The_NUM_THEMES]; extern const char *Txt_ID; /***** Start frame *****/ - Lay_StartRoundFrame (NULL,"Es posible que ya le hayan inscrito con su ID (DNI/cédula)",NULL); // TODO: Need translation!!! + Lay_StartRoundFrame (NULL,Title,NULL); /***** Form to request user's ID for possible account already created *****/ Act_FormStart (ActChkUsrAcc); @@ -160,7 +159,7 @@ static void Acc_ShowFormCheckIfIHaveAccount (void) void Acc_CheckIfEmptyAccountExists (void) { extern const char *Txt_Name; - char NewID[ID_MAX_LENGTH_USR_ID+1]; + char ID[ID_MAX_LENGTH_USR_ID+1]; unsigned NumUsrs; unsigned NumUsr; struct UsrData UsrDat; @@ -168,51 +167,52 @@ void Acc_CheckIfEmptyAccountExists (void) MYSQL_RES *mysql_res; MYSQL_ROW row; + /***** Links to other actions *****/ + fprintf (Gbl.F.Out,"
"); + Usr_PutLinkToLogin (); + Pwd_PutLinkToSendNewPasswd (); + Pre_PutLinkToChangeLanguage (); + fprintf (Gbl.F.Out,"
"); + /***** Get new user's ID from form *****/ - Par_GetParToText ("ID",NewID,ID_MAX_LENGTH_USR_ID); + Par_GetParToText ("ID",ID,ID_MAX_LENGTH_USR_ID); // Users' IDs are always stored internally in capitals and without leading zeros - Str_RemoveLeadingZeros (NewID); - Str_ConvertToUpperText (NewID); + Str_RemoveLeadingZeros (ID); + Str_ConvertToUpperText (ID); /***** Check if there are users with this user's ID *****/ - if (ID_CheckIfUsrIDIsValid (NewID)) + if (ID_CheckIfUsrIDIsValid (ID)) { - sprintf (Query,"SELECT usr_data.UsrCod,usr_data.EncryptedUsrCod," - "UPPER(usr_data.FirstName)," - "UPPER(usr_data.Surname1)," - "UPPER(usr_data.Surname2)" + sprintf (Query,"SELECT usr_IDs.UsrCod" " FROM usr_IDs,usr_data" " WHERE usr_IDs.UsrID='%s'" " AND usr_IDs.UsrCod=usr_data.UsrCod" " AND usr_data.Password=''", - NewID); + ID); NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's codes"); if (NumUsrs) { /***** Start frame and write message with number of accounts found *****/ - if (NumUsrs == 1) - Lay_StartRoundFrameTable (NULL,5,"¿Cree que usted es el siguiente usuario?"); // TODO: Need translation!!! - else - { - sprintf (Gbl.Title,"¿Cree que usted es uno de los siguientes %u usuarios?", - NumUsrs); - Lay_StartRoundFrameTable (NULL,5,Gbl.Title); // TODO: Need translation!!! - } + Lay_StartRoundFrameTable (NULL,5,(NumUsrs == 1) ? "¿Cree que usted es este usuario/a?" : // TODO: Need translation!!! + "¿Cree que usted es uno de estos usuarios?"); // TODO: Need translation!!! + + /***** Initialize structure with user's data *****/ + Usr_UsrDataConstructor (&UsrDat); /***** List users found *****/ for (NumUsr = 1, Gbl.RowEvenOdd = 0; NumUsr <= NumUsrs; NumUsr++, Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd) { + /***** Get user's data from query result *****/ row = mysql_fetch_row (mysql_res); /* Get user's code */ UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0]); - /* Get encrypted user's code */ - strncpy (UsrDat.EncryptedUsrCod,row[1],sizeof (UsrDat.EncryptedUsrCod) - 1); - UsrDat.EncryptedUsrCod[sizeof (UsrDat.EncryptedUsrCod) - 1] = '\0'; + /* Get user's data */ + Usr_GetAllUsrDataFromUsrCod (&UsrDat); /***** Write number of user in the list *****/ fprintf (Gbl.F.Out,"" @@ -222,28 +222,19 @@ void Acc_CheckIfEmptyAccountExists (void) "", Gbl.RowEvenOdd,NumUsr); - fprintf (Gbl.F.Out,"%s: ", - Gbl.RowEvenOdd,Txt_Name); - if (row[2][0] || - row[3][0] || - row[4][0]) - { - if (row[2][0]) - fprintf (Gbl.F.Out,"%c.",row[2][0]); - if (row[3][0]) - fprintf (Gbl.F.Out,"%c.",row[3][0]); - if (row[4][0]) - fprintf (Gbl.F.Out,"%c.",row[4][0]); - } - else - fprintf (Gbl.F.Out,"?"); - fprintf (Gbl.F.Out,""); + /***** Write user's name *****/ + fprintf (Gbl.F.Out,"" + "%s: %s" + "", + Gbl.RowEvenOdd,Txt_Name, + UsrDat.FullName[0] ? UsrDat.FullName : + "?"); /* Button to login with this account */ fprintf (Gbl.F.Out,"", Gbl.RowEvenOdd); Act_FormStart (ActAutUsrNew); - Usr_PutParamUsrCodEncrypted (Gbl.Usrs.Me.UsrDat.EncryptedUsrCod); + Usr_PutParamUsrCodEncrypted (UsrDat.EncryptedUsrCod); Lay_PutCreateButtonInline ("¡Soy yo!"); // TODO: Need translation!!! Act_FormEnd (); fprintf (Gbl.F.Out,"" @@ -260,25 +251,39 @@ void Acc_CheckIfEmptyAccountExists (void) ""); } + /***** Free memory used for user's data *****/ + Usr_UsrDataDestructor (&UsrDat); + /***** End frame *****/ Lay_EndRoundFrameTable (); } else { - sprintf (Gbl.Message,"No hay ninguna cuenta vacía asociada a su ID %s.", // TODO: Need translation!!! - NewID); + sprintf (Gbl.Message,"No existe ninguna cuenta "vacía"" + " (aún no usada) asociada a su ID %s.
" + " Si cree que puede haber sido inscrito/a" + " con otro ID, compruébelo, por favor.", // TODO: Need translation!!! + ID); Lay_ShowAlert (Lay_INFO,Gbl.Message); - - /**** Show form to check if I have an account *****/ - Acc_ShowFormCheckIfIHaveAccount (); } /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); - } - /**** Show form to create a new account *****/ - Acc_ShowFormRequestNewAccountWithParams ("",""); + /**** Show form to check if I have an account *****/ + Acc_ShowFormCheckIfIHaveAccount ("Comprobar otro ID"); // TODO: Need translation!!! + + /**** Show form to create a new account *****/ + Acc_ShowFormRequestNewAccountWithParams ("",""); + } + else // ID not valid + { + /**** Show again form to check if I have an account *****/ + Lay_ShowAlert (Lay_WARNING,"Escriba su ID (DNI/cédula…)."); + + Acc_ShowFormCheckIfIHaveAccount ("Antes de crear una cuenta nueva" + " compruebe si ya le han inscrito con su ID"); // TODO: Need translation!!! + } } /*****************************************************************************/ @@ -293,14 +298,12 @@ static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWith extern const char *Txt_HELP_nickname; extern const char *Txt_HELP_email; extern const char *Txt_Email; - extern const char *Txt_New_on_PLATFORM_Sign_up; extern const char *Txt_Create_account; char NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; /***** Form to enter some data of the new user *****/ Act_FormStart (ActCreUsrAcc); - sprintf (Gbl.Title,Txt_New_on_PLATFORM_Sign_up,Cfg_PLATFORM_SHORT_NAME); - Lay_StartRoundFrameTable (NULL,2,Gbl.Title); + Lay_StartRoundFrameTable (NULL,2,"Crear una nueva cuenta"); // TODO: Need translation!!!! /***** Nickname *****/ if (NewNicknameWithoutArroba[0]) diff --git a/swad_changelog.h b/swad_changelog.h index c323df743..6ee4ae32a 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -135,17 +135,21 @@ // TODO: FIX BUG: Passwords with % do not work +// TODO: Send a message to the user when rejecting a requesto for enrollment. Suggested by Javier Fernández Baldomero. +// TODO: Fix bug: database error when a not logged user searches users. "Database error: can not check if a user shares any course with you (Table 'swad.my_courses_tmp' doesn't exist). + /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.2.4 (2016-09-22)" +#define Log_PLATFORM_VERSION "SWAD 16.2.5 (2016-09-26)" #define CSS_FILE "swad15.229.css" #define JS_FILE "swad15.238.1.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 /* + Version 16.2.5: Sep 26, 2016 Check if an account already exists. Not finished. (205019 lines) Version 16.2.4: Sep 22, 2016 Check if an account already exists. Not finished. (205016 lines) Version 16.2.3: Sep 22, 2016 Check if an account already exists. Not finished. (204984 lines) Version 16.2.2: Sep 22, 2016 Fixed bug in photo visibility. (204951 lines) diff --git a/swad_text.c b/swad_text.c index 8ac6cc819..84e972370 100644 --- a/swad_text.c +++ b/swad_text.c @@ -940,7 +940,7 @@ const char *Txt_The_following_password_has_been_assigned_to_you_to_log_in_X_NO_H #elif L==6 "Se le ha asignado la siguiente contraseña para entrar en %s: %s\n" "Si desea activar esta nueva contraseña," - " debe entrar en %s con su ID (DNI/cédula), apodo o dirección de correo" + " debe entrar en %s con su ID (DNI/cédula…), apodo o dirección de correo" " y esta nueva contraseña antes de %u días." " Una vez que haya entrado, puede cambiar la contraseña por otra.\n" "Si no accede con esta nueva contraseña," @@ -1552,11 +1552,11 @@ const char *Txt_A_user_can_not_have_more_than_X_IDs = #elif L==3 "A user can not have more than %u IDs."; #elif L==4 - "Un usuario no puede tener más de %u ID (DNI/cédulas)."; + "Un usuario no puede tener más de %u ID (DNI/cédulas…)."; #elif L==5 "Un utilisateur ne peut pas avoir plus de %u IDs."; #elif L==6 - "Un usuario no puede tener más de %u ID (DNI/cédulas)."; // Okoteve traducción + "Un usuario no puede tener más de %u ID (DNI/cédulas…)."; // Okoteve traducción #elif L==7 "Un utente non può avere più di %u ID."; #elif L==8 @@ -2581,11 +2581,11 @@ const char *Txt_Another_ID = #elif L==3 "Another ID"; #elif L==4 - "Otro ID (DNI/cédula)"; + "Otro ID (DNI/cédula…)"; #elif L==5 "Un autre numéro d'identité"; #elif L==6 - "Otro ID (DNI/cédula)"; // Okoteve traducción + "Otro ID (DNI/cédula…)"; // Okoteve traducción #elif L==7 "Un'altra carta d'identità"; #elif L==8 @@ -9210,11 +9210,11 @@ const char *Txt_Do_you_want_to_confirm_the_ID_X = // Warning: it is very importa #elif L==3 "Do you want to confirm the ID (identity number/passport) %s?"; #elif L==4 - "¿Desea confirmar el ID (DNI/cédula) %s?"; + "¿Desea confirmar el ID (DNI/cédula…) %s?"; #elif L==5 "Voulez-vous confirmer l'ID %s?"; #elif L==6 - "¿Desea confirmar el ID (DNI/cédula) %s?"; // Okoteve traducción + "¿Desea confirmar el ID (DNI/cédula…) %s?"; // Okoteve traducción #elif L==7 "Vuoi confermare l'ID %s?"; #elif L==8 @@ -11968,7 +11968,7 @@ const char *Txt_Files_of_marks_must_contain_a_table_in_HTML_format_ = " seleccionando la parte deseada de la tabla y guardándola como página web.
" " Una tabla puede tener varias filas de cabecera y varias filas de pie." " Entre ellas debe haber una única fila para cada estudiante," - " con cualquier número de columnas, conteniendo la primera columna el ID (DNI/cédula) del estudiante.
" + " con cualquier número de columnas, conteniendo la primera columna el ID (DNI/cédula…) del estudiante.
" " Un estudiante verá una tabla con las filas de cabecera," " seguidas por la fila con sus calificaciones," " y por las filas de pie."; // Necessita traduccio @@ -11994,7 +11994,7 @@ const char *Txt_Files_of_marks_must_contain_a_table_in_HTML_format_ = " seleccionando la parte deseada de la tabla y guardándola como página web.
" " Una tabla puede tener varias filas de cabecera y varias filas de pie." " Entre ellas debe haber una única fila para cada estudiante," - " con cualquier número de columnas, conteniendo la primera columna el ID (DNI/cédula) del estudiante.
" + " con cualquier número de columnas, conteniendo la primera columna el ID (DNI/cédula…) del estudiante.
" " Un estudiante verá una tabla con las filas de cabecera," " seguidas por la fila con sus calificaciones," " y por las filas de pie."; @@ -12014,7 +12014,7 @@ const char *Txt_Files_of_marks_must_contain_a_table_in_HTML_format_ = " seleccionando la parte deseada de la tabla y guardándola como página web.
" " Una tabla puede tener varias filas de cabecera y varias filas de pie." " Entre ellas debe haber una única fila para cada estudiante," - " con cualquier número de columnas, conteniendo la primera columna el ID (DNI/cédula) del estudiante.
" + " con cualquier número de columnas, conteniendo la primera columna el ID (DNI/cédula…) del estudiante.
" " Un estudiante verá una tabla con las filas de cabecera," " seguidas por la fila con sus calificaciones," " y por las filas de pie."; // Okoteve traducción @@ -14226,11 +14226,11 @@ const char *Txt_ID = #elif L==3 "ID (identity number/passport)"; #elif L==4 - "ID (DNI/cédula)"; + "ID (DNI/cédula…)"; #elif L==5 "Num. d'identité"; #elif L==6 - "ID (DNI/cédula)"; // Okoteve traducción + "ID (DNI/cédula…)"; // Okoteve traducción #elif L==7 "Numero carta d'identità"; #elif L==8 @@ -14241,17 +14241,17 @@ const char *Txt_ID = const char *Txt_ID_X_had_already_been_confirmed = // Warning: it is very important to include %s in the following sentences #if L==1 - "El ID (DNI/cédula) %s ja havia estat confirmat."; + "El ID (DNI/cédula…) %s ja havia estat confirmat."; #elif L==2 "ID %s hatte bereits bestätigt worden."; #elif L==3 "ID %s had already been confirmed."; #elif L==4 - "El ID (DNI/cédula) %s ya había sido confirmado."; + "El ID (DNI/cédula…) %s ya había sido confirmado."; #elif L==5 "L'ID %s avait déjà été confirmée."; #elif L==6 - "El ID (DNI/cédula) %s ya había sido confirmado."; // Okoteve traducción + "El ID (DNI/cédula…) %s ya había sido confirmado."; // Okoteve traducción #elif L==7 "L'ID %s era già stato confermato."; #elif L==8 @@ -14262,17 +14262,17 @@ const char *Txt_ID_X_had_already_been_confirmed = // Warning: it is very importa const char *Txt_ID_X_confirmed = // Warning: it is very important to include %s in the following sentences #if L==1 - "ID (DNI/cédula) %s confirmat"; + "ID (DNI/cédula…) %s confirmat"; #elif L==2 "ID %s bestätigt"; #elif L==3 "ID %s confirmed"; #elif L==4 - "ID (DNI/cédula) %s confirmado"; + "ID (DNI/cédula…) %s confirmado"; #elif L==5 "ID %s confirmé"; #elif L==6 - "ID (DNI/cédula) %s confirmado"; // Okoteve traducción + "ID (DNI/cédula…) %s confirmado"; // Okoteve traducción #elif L==7 "ID %s confermato"; #elif L==8 @@ -14283,17 +14283,17 @@ const char *Txt_ID_X_confirmed = // Warning: it is very important to include %s const char *Txt_ID_X_not_confirmed = // Warning: it is very important to include %s in the following sentences #if L==1 - "ID (DNI/cédula) %s no confirmat"; + "ID (DNI/cédula…) %s no confirmat"; #elif L==2 "ID %s nicht bestätigt"; #elif L==3 "ID %s not confirmed"; #elif L==4 - "ID (DNI/cédula) %s no confirmado"; + "ID (DNI/cédula…) %s no confirmado"; #elif L==5 "ID %s pas confirmé"; #elif L==6 - "ID (DNI/cédula) %s no confirmado"; // Okoteve traducción + "ID (DNI/cédula…) %s no confirmado"; // Okoteve traducción #elif L==7 "ID %s non confermato"; #elif L==8 @@ -14304,17 +14304,17 @@ const char *Txt_ID_X_not_confirmed = // Warning: it is very important to include const char *Txt_ID_X_removed = // Warning: it is very important to include %s in the following sentences #if L==1 - "ID (DNI/cédula) %s eliminat."; + "ID (DNI/cédula…) %s eliminat."; #elif L==2 "ID %s entfernt."; #elif L==3 "ID %s removed."; #elif L==4 - "ID (DNI/cédula) %s eliminado."; + "ID (DNI/cédula…) %s eliminado."; #elif L==5 "ID %s supprimé."; #elif L==6 - "ID (DNI/cédula) %s eliminado."; // Okoteve traducción + "ID (DNI/cédula…) %s eliminado."; // Okoteve traducción #elif L==7 "ID %s rimosso."; #elif L==8 @@ -14386,7 +14386,7 @@ const char *Txt_If_there_are_multiple_versions_of_the_ID_ = const char *Txt_If_this_is_a_new_user_in_X_you_should_indicate_her_his_ID = // Warning: it is very important to include %s in the following sentences #if L==1 "Si se trata de un usuario nuevo en %s," - " debe indicar el ID (DNI/cédula)."; // Necessita traduccio + " debe indicar el ID (DNI/cédula…)."; // Necessita traduccio #elif L==2 "If this is a new user in %s," " you should indicate her/his ID."; // Übersetzung notwendig @@ -14395,13 +14395,13 @@ const char *Txt_If_this_is_a_new_user_in_X_you_should_indicate_her_his_ID = // W " you should indicate her/his ID."; #elif L==4 "Si se trata de un usuario nuevo en %s," - " debe indicar el ID (DNI/cédula)."; + " debe indicar el ID (DNI/cédula…)."; #elif L==5 "If this is a new user in %s," " you should indicate her/his ID."; // Besoin de traduction #elif L==6 "Si se trata de un usuario nuevo en %s," - " debe indicar el ID (DNI/cédula)."; // Okoteve traducción + " debe indicar el ID (DNI/cédula…)."; // Okoteve traducción #elif L==7 "If this is a new user in %s," " you should indicate her/his ID."; // Bisogno di traduzione @@ -14513,7 +14513,7 @@ const char *Txt_If_you_have_forgotten_your_password_ = const char *Txt_If_you_have_written_your_ID_nickname_or_email_correctly_ = #if L==1 - "Si usted ha escrito correctamente su @apodo, correo o ID (DNI/cédula)," + "Si usted ha escrito correctamente su @apodo, correo o ID (DNI/cédula…)," " y el correo en su ficha es correcto," " recibirá un mensaje con una nueva contraseña."; // Necessita traduccio #elif L==2 @@ -14525,7 +14525,7 @@ const char *Txt_If_you_have_written_your_ID_nickname_or_email_correctly_ = " and the e-mail address on your record is correct," " you will receive an e-mail with a new password."; #elif L==4 - "Si usted ha escrito correctamente su @apodo, correo o ID (DNI/cédula)," + "Si usted ha escrito correctamente su @apodo, correo o ID (DNI/cédula…)," " y el correo en su ficha es correcto," " recibirá un mensaje con una nueva contraseña."; #elif L==5 @@ -14533,7 +14533,7 @@ const char *Txt_If_you_have_written_your_ID_nickname_or_email_correctly_ = " ainsi que l'adresse e-mail sur votre carte est correct," " vous recevrez un e-mail avec un nouveau mot de passe."; #elif L==6 - "Si usted ha escrito correctamente su @apodo, correo o ID (DNI/cédula)," + "Si usted ha escrito correctamente su @apodo, correo o ID (DNI/cédula…)," " y el correo en su ficha es correcto," " recibirá un mensaje con una nueva contraseña."; // Okoteve traducción #elif L==7 @@ -16536,17 +16536,17 @@ const char *Txt_List_of_detailed_clicks = const char *Txt_List_of_nicks_emails_or_IDs = #if L==1 - "Lista de @apodos, correos o ID (DNI/cédulas)"; // Necessita traduccio + "Lista de @apodos, correos o ID (DNI/cédulas…)"; // Necessita traduccio #elif L==2 "Liste von @Benutzernamen, E-mails oder Ausweis-Nr."; #elif L==3 "List of @nicks, e-mails or IDs"; #elif L==4 - "Lista de @apodos, correos o ID (DNI/cédulas)"; + "Lista de @apodos, correos o ID (DNI/cédulas…)"; #elif L==5 "Liste de numéros d'identité"; #elif L==6 - "Lista de @apodos, correos o ID (DNI/cédulas)"; // Okoteve traducción + "Lista de @apodos, correos o ID (DNI/cédulas…)"; // Okoteve traducción #elif L==7 "Lista di @nomi-utenti, e-mail o numero carte d'identità"; #elif L==8 @@ -23543,11 +23543,11 @@ const char *Txt_nick_email_or_ID = #elif L==3 "@nick, e-mail or ID"; #elif L==4 - "@apodo, correo o ID (DNI/cédula)"; + "@apodo, correo o ID (DNI/cédula…)"; #elif L==5 "@surnom, courrier ou numéro d'identité"; #elif L==6 - "@apodo, correo o ID (DNI/cédula)"; // Okoteve traducción + "@apodo, correo o ID (DNI/cédula…)"; // Okoteve traducción #elif L==7 "@nome-utente, e-mail o numero carta d'identità"; #elif L==8 @@ -23558,17 +23558,17 @@ const char *Txt_nick_email_or_ID = const char *Txt_nicks_emails_or_IDs_separated_by_commas = #if L==1 - "@apodos, correos o ID (DNI/cédulas) separados por comas"; // Necessita traduccio + "@apodos, correos o ID (DNI/cédulas…) separados por comas"; // Necessita traduccio #elif L==2 "@Benutzernamen, E-mails oder Ausweis-Nr. durch Kommas getrennt"; #elif L==3 "@nicks, e-mails or IDs separated by commas"; #elif L==4 - "@apodos, correos o ID (DNI/cédulas) separados por comas"; + "@apodos, correos o ID (DNI/cédulas…) separados por comas"; #elif L==5 "@surnoms, courriers ou numéros d'identité séparés par des virgules"; #elif L==6 - "@apodos, correos o ID (DNI/cédulas) separados por comas"; // Okoteve traducción + "@apodos, correos o ID (DNI/cédulas…) separados por comas"; // Okoteve traducción #elif L==7 "@nomi-utenti, e-mail o numero carte d'identità separati da virgole"; #elif L==8 @@ -28082,7 +28082,7 @@ const char *Txt_Please_fill_in_your_ID = " because it facilitates the registration process" " of users in the courses."; #elif L==4 - "Por favor, rellene su ID (DNI/cédula)." + "Por favor, rellene su ID (DNI/cédula…)." " Es un dato opcional," " pero es recomendable que lo rellene" " porque facilita el proceso de inscripción" @@ -28094,7 +28094,7 @@ const char *Txt_Please_fill_in_your_ID = " parce qu'il facilite le processus d'enregistrement" " des utilisateurs dans les matières."; #elif L==6 - "Por favor, rellene su ID (DNI/cédula)." + "Por favor, rellene su ID (DNI/cédula…)." " Es un dato opcional," " pero es recomendable que lo rellene" " porque facilita el proceso de inscripción" @@ -42449,7 +42449,7 @@ const char *Txt_The_HTML_file_has_been_received_successfully = const char *Txt_The_ID_X_has_been_confirmed = // Warning: it is very important to include %s in the following sentences #if L==1 - "El ID (DNI/cédula) %s" + "El ID (DNI/cédula…) %s" " ha sido confirmado."; // Necessita traduccio #elif L==2 "The ID %s" @@ -42458,13 +42458,13 @@ const char *Txt_The_ID_X_has_been_confirmed = // Warning: it is very important t "The ID %s" " has been confirmed."; #elif L==4 - "El ID (DNI/cédula) %s" + "El ID (DNI/cédula…) %s" " ha sido confirmado."; #elif L==5 "The ID %s" " has been confirmed."; // Besoin de traduction #elif L==6 - "El ID (DNI/cédula) %s" + "El ID (DNI/cédula…) %s" " ha sido confirmado."; // Okoteve traducción #elif L==7 "Il ID %s" @@ -42479,7 +42479,7 @@ const char *Txt_The_ID_X_has_been_confirmed = // Warning: it is very important t const char *Txt_The_ID_X_has_been_registered_successfully = // Warning: it is very important to include %s in the following sentences #if L==1 - "El ID (DNI/cédula) %s" + "El ID (DNI/cédula…) %s" " se ha registrado correctamente."; // Necessita traduccio #elif L==2 "The ID %s" @@ -42488,13 +42488,13 @@ const char *Txt_The_ID_X_has_been_registered_successfully = // Warning: it is ve "The ID %s" " has been registered successfully."; #elif L==4 - "El ID (DNI/cédula) %s" + "El ID (DNI/cédula…) %s" " se ha registrado correctamente."; #elif L==5 "The ID %s" " has been registered successfully."; // Besoin de traduction #elif L==6 - "El ID (DNI/cédula) %s" + "El ID (DNI/cédula…) %s" " se ha registrado correctamente."; // Okoteve traducción #elif L==7 "Il ID %s" @@ -42509,7 +42509,7 @@ const char *Txt_The_ID_X_has_been_registered_successfully = // Warning: it is ve const char *Txt_The_ID_X_is_not_valid = // Warning: it is very important to include %s in the following sentences #if L==1 - "El ID (DNI/cédula) %s no es válido." + "El ID (DNI/cédula…) %s no es válido." " Solo puede contener números (al menos uno) y letras."; // Necessita traduccio #elif L==2 "The ID %s is not valid." @@ -42518,13 +42518,13 @@ const char *Txt_The_ID_X_is_not_valid = // Warning: it is very important to incl "The ID %s is not valid." " It can only contain numbers (at least one) and letters."; #elif L==4 - "El ID (DNI/cédula) %s no es válido." + "El ID (DNI/cédula…) %s no es válido." " Solo puede contener números (al menos uno) y letras."; #elif L==5 "The ID %s is not valid." " It can only contain numbers (at least one) and letters."; // Besoin de traduction #elif L==6 - "El ID (DNI/cédula) %s no es válido." + "El ID (DNI/cédula…) %s no es válido." " Solo puede contener números (al menos uno) y letras."; // Okoteve traducción #elif L==7 "L'ID %s non è valido." @@ -42578,17 +42578,17 @@ const char *Txt_The_ID_is_used_in_order_to_facilitate_ = const char *Txt_The_ID_nickname_or_email_X_is_not_valid = // Warning: it is very important to include %s in the following sentences #if L==1 - "El @apodo, correo o ID (DNI/cédula) %s no es válido."; // Necessita traduccio + "El @apodo, correo o ID (DNI/cédula…) %s no es válido."; // Necessita traduccio #elif L==2 "The @nick, e-mail or ID %s is not valid."; // Need Übersetzung #elif L==3 "The @nick, e-mail or ID %s is not valid."; #elif L==4 - "El @apodo, correo o ID (DNI/cédula) %s no es válido."; + "El @apodo, correo o ID (DNI/cédula…) %s no es válido."; #elif L==5 "The @nick, e-mail or ID %s is not valid."; // Besoin de traduction #elif L==6 - "El @apodo, correo o ID (DNI/cédula) %s no es válido."; // Okoteve traducción + "El @apodo, correo o ID (DNI/cédula…) %s no es válido."; // Okoteve traducción #elif L==7 "Il @nome-utente, e-mail o ID %s non è valido."; #elif L==8 @@ -42599,7 +42599,7 @@ const char *Txt_The_ID_nickname_or_email_X_is_not_valid = // Warning: it is very const char *Txt_The_ID_X_matches_one_of_the_existing = // Warning: it is very important to include %s in the following sentences #if L==1 - "El ID (DNI/cédula) %s" + "El ID (DNI/cédula…) %s" " coincide con uno de los existentes."; // Necessita traduccio #elif L==2 "The ID %s" @@ -42608,13 +42608,13 @@ const char *Txt_The_ID_X_matches_one_of_the_existing = // Warning: it is very im "The ID %s" " matches one of the existing."; #elif L==4 - "El ID (DNI/cédula) %s" + "El ID (DNI/cédula…) %s" " coincide con uno de los existentes."; #elif L==5 "The ID %s" " matches one of the existing."; // Besoin de traduction #elif L==6 - "El ID (DNI/cédula) %s" + "El ID (DNI/cédula…) %s" " coincide con uno de los existentes."; // Okoteve traducción #elif L==7 "The ID %s" @@ -46079,17 +46079,17 @@ const char *Txt_There_are_no_types_of_group_in_the_course_X = // Warning: it is const char *Txt_There_are_X_users_with_the_ID_Y = // Warning: it is very important to include %u and %s in the following sentences #if L==1 - "Hi ha %u usuaris amb el ID (DNI/cédula) %s."; + "Hi ha %u usuaris amb el ID (DNI/cédula…) %s."; #elif L==2 "There are %u users with the ID %s."; // Need Übersetzung #elif L==3 "There are %u users with the ID %s."; #elif L==4 - "Hay %u usuarios con el ID (DNI/cédula) %s."; + "Hay %u usuarios con el ID (DNI/cédula…) %s."; #elif L==5 "Il y a %u utilisateurs avec le ID %s."; #elif L==6 - "Hay %u usuarios con el ID (DNI/cédula) %s."; // Okoteve traducción + "Hay %u usuarios con el ID (DNI/cédula…) %s."; // Okoteve traducción #elif L==7 "Ci sono %u utenti con il ID %s."; #elif L==8 @@ -46299,7 +46299,7 @@ const char *Txt_There_is_no_user_with_email_X = // Warning: it is very important const char *Txt_There_is_no_user_in_X_with_ID_Y_If_you_already_have_an_account_on_Z_ = // Warning: it is very important to include three %s in the following sentences #if L==1 "No existe ningún usuario en %s" - " con el ID (DNI/cédula) %s." + " con el ID (DNI/cédula…) %s." " Si usted ya tiene cuenta en %s," " inicie sesión y añada este ID a su cuenta." " Si no tiene cuenta, puede crear una nueva."; // Necessita traduccio @@ -46317,7 +46317,7 @@ const char *Txt_There_is_no_user_in_X_with_ID_Y_If_you_already_have_an_account_o " If you have no account, you can create a new one."; #elif L==4 "No existe ningún usuario en %s" - " con el ID (DNI/cédula) %s." + " con el ID (DNI/cédula…) %s." " Si usted ya tiene cuenta en %s," " inicie sesión y añada este ID a su cuenta." " Si no tiene cuenta, puede crear una nueva."; @@ -46329,7 +46329,7 @@ const char *Txt_There_is_no_user_in_X_with_ID_Y_If_you_already_have_an_account_o " Si vous n'avez pas de compte, vous pouvez en créer un nouveau."; #elif L==6 "No existe ningún usuario en %s" - " con el ID (DNI/cédula) %s." + " con el ID (DNI/cédula…) %s." " Si usted ya tiene cuenta en %s," " inicie sesión y añada este ID a su cuenta." " Si no tiene cuenta, puede crear una nueva."; // Okoteve traducción @@ -46356,7 +46356,7 @@ const char *Txt_There_is_no_user_in_X_with_ID_Y_If_you_already_have_an_account_o const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X = // Warning: it is very important to include %s in the following sentences #if L==1 "No existe ningún usuario" - " con ID (DNI/cédula), apodo o correo %s."; // Necessita traduccio + " con ID (DNI/cédula…), apodo o correo %s."; // Necessita traduccio #elif L==2 "There is no user" " with ID, nick or e-mail %s."; // Übersetzung notwendig @@ -46365,13 +46365,13 @@ const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X = // Warning: it is ve " with ID, nick or e-mail %s."; #elif L==4 "No existe ningún usuario" - " con ID (DNI/cédula), apodo o correo %s."; + " con ID (DNI/cédula…), apodo o correo %s."; #elif L==5 "There is no user" " with ID, nick or e-mail %s."; // Besoin de traduction #elif L==6 "No existe ningún usuario" - " con ID (DNI/cédula), apodo o correo %s."; // Okoteve traducción + " con ID (DNI/cédula…), apodo o correo %s."; // Okoteve traducción #elif L==7 "Non c'è alcun utente" " con ID, nome utente o e-mail %s."; @@ -46386,7 +46386,7 @@ const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X = // Warning: it is ve const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X_in_the_course_Y = // Warning: it is very important to include two %s in the following sentences #if L==1 "No existe ningún usuario" - " con ID (DNI/cédula), apodo o correo %s" + " con ID (DNI/cédula…), apodo o correo %s" " en la asignatura %s."; // Necessita traduccio #elif L==2 "There is no user" @@ -46398,7 +46398,7 @@ const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X_in_the_course_Y = // W " in the course %s."; #elif L==4 "No existe ningún usuario" - " con ID (DNI/cédula), apodo o correo %s" + " con ID (DNI/cédula…), apodo o correo %s" " en la asignatura %s."; #elif L==5 "There is no user" @@ -46406,7 +46406,7 @@ const char *Txt_There_is_no_user_with_ID_nick_or_e_mail_X_in_the_course_Y = // W " in the course %s."; // Besoin de traduction #elif L==6 "No existe ningún usuario" - " con ID (DNI/cédula), apodo o correo %s" + " con ID (DNI/cédula…), apodo o correo %s" " en la asignatura %s."; // Okoteve traducción #elif L==7 "Non c'è alcun utente" @@ -48108,12 +48108,12 @@ const char *Txt_Type_of_group_X_removed = // Warning: it is very important to in const char *Txt_Type_or_paste_a_list_of_IDs_nicks_or_emails_ = #if L==1 "Escriba o pegue una lista" - " con @apodos, correos o ID (DNI/cédulas)." - " Los @apodos, correos o ID (DNI/cédulas)" + " con @apodos, correos o ID (DNI/cédulas…)." + " Los @apodos, correos o ID (DNI/cédulas…)" " pueden ir separados por cadenas de caracteres arbitrarias" " (por ej. nombres, apellidos, espacios, etc.)." " Solo se tendrán en cuenta aquellas palabras" - " que parezcan @apodos, correos o ID (DNI/cédulas);" + " que parezcan @apodos, correos o ID (DNI/cédulas…);" " el resto del texto se ignorará."; // Necessita traduccio #elif L==2 "Type or paste a list" @@ -48135,12 +48135,12 @@ const char *Txt_Type_or_paste_a_list_of_IDs_nicks_or_emails_ = " the rest of the text will be ignored."; #elif L==4 "Escriba o pegue una lista" - " con @apodos, correos o ID (DNI/cédulas)." - " Los @apodos, correos o ID (DNI/cédulas)" + " con @apodos, correos o ID (DNI/cédulas…)." + " Los @apodos, correos o ID (DNI/cédulas…)" " pueden ir separados por cadenas de caracteres arbitrarias" " (por ej. nombres, apellidos, espacios, etc.)." " Solo se tendrán en cuenta aquellas palabras" - " que parezcan @apodos, correos o ID (DNI/cédulas);" + " que parezcan @apodos, correos o ID (DNI/cédulas…);" " el resto del texto se ignorará."; #elif L==5 "Type or paste a list" @@ -48153,12 +48153,12 @@ const char *Txt_Type_or_paste_a_list_of_IDs_nicks_or_emails_ = " the rest of the text will be ignored."; // Besoin de traduction #elif L==6 "Escriba o pegue una lista" - " con @apodos, correos o ID (DNI/cédulas)." - " Los @apodos, correos o ID (DNI/cédulas)" + " con @apodos, correos o ID (DNI/cédulas…)." + " Los @apodos, correos o ID (DNI/cédulas…)" " pueden ir separados por cadenas de caracteres arbitrarias" " (por ej. nombres, apellidos, espacios, etc.)." " Solo se tendrán en cuenta aquellas palabras" - " que parezcan @apodos, correos o ID (DNI/cédulas);" + " que parezcan @apodos, correos o ID (DNI/cédulas…);" " el resto del texto se ignorará."; // Okoteve traducción #elif L==7 "Scrivi o incolla la lista" @@ -49141,11 +49141,11 @@ const char *Txt_User_ID = #elif L==3 "User ID"; #elif L==4 - "ID (DNI/cédula) del usuario"; + "ID (DNI/cédula…) del usuario"; #elif L==5 "Numéro d'identité d'utilisateur"; #elif L==6 - "ID (DNI/cédula) del usuario"; // Okoteve traducción + "ID (DNI/cédula…) del usuario"; // Okoteve traducción #elif L==7 "Numero carta d'identità utente"; #elif L==8 @@ -51320,17 +51320,17 @@ const char *Txt_You_can_not_delete_your_current_nickname = const char *Txt_You_can_not_delete_this_ID = #if L==1 - "No puede eliminar este ID (DNI/cédula)."; // Necessita traduccio + "No puede eliminar este ID (DNI/cédula…)."; // Necessita traduccio #elif L==2 "You can not delete this ID."; // Need Übersetzung #elif L==3 "You can not delete this ID."; #elif L==4 - "No puede eliminar este ID (DNI/cédula)."; + "No puede eliminar este ID (DNI/cédula…)."; #elif L==5 "You can not delete this ID."; // Besoin de traduction #elif L==6 - "No puede eliminar este ID (DNI/cédula)."; // Okoteve traducción + "No puede eliminar este ID (DNI/cédula…)."; // Okoteve traducción #elif L==7 "Non puoi cancellare questo ID."; #elif L==8 @@ -52925,11 +52925,11 @@ const char *Txt_You_must_enter_your_nick_email_or_ID = #elif L==3 "You must enter your @nick, e-mail or ID."; #elif L==4 - "Debe escribir su @apodo, correo o ID (DNI/cédula)."; + "Debe escribir su @apodo, correo o ID (DNI/cédula…)."; #elif L==5 "Vous devez entrer votre @surnom, courrier ou numéro d'identité."; #elif L==6 - "Debe escribir su @apodo, correo o ID (DNI/cédula)."; // Okoteve traducción + "Debe escribir su @apodo, correo o ID (DNI/cédula…)."; // Okoteve traducción #elif L==7 "Devi inserire il tuo @nome-utente, e-mail o numero carta d'identità."; #elif L==8