mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-09 02:05:24 +02:00
Version 14.109
This commit is contained in:
parent
1b8c1355cb
commit
66bb166ecc
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 22 KiB |
|
@ -127,8 +127,8 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="justify">
|
<p align="justify">
|
||||||
SWAD core has about 175 000 <a href="http://en.wikipedia.org/wiki/Source_lines_of_code">lines of source code</a>.
|
SWAD core has about 185 000 <a href="http://en.wikipedia.org/wiki/Source_lines_of_code">lines of source code</a>.
|
||||||
Each executable program (one for each language) has a size of 1.8 <a href="http://en.wikipedia.org/wiki/Mebibyte">MiB</a>
|
Each executable program (one for each language) has a size of 1.85 <a href="http://en.wikipedia.org/wiki/Mebibyte">MiB</a>
|
||||||
and in most of the possible actions
|
and in most of the possible actions
|
||||||
generates the <a href="http://en.wikipedia.org/wiki/Web_page">page</a> in few milliseconds.
|
generates the <a href="http://en.wikipedia.org/wiki/Web_page">page</a> in few milliseconds.
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -103,11 +103,12 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 14.108.4 (2015/04/04)"
|
#define Log_PLATFORM_VERSION "SWAD 14.109 (2015/04/06)"
|
||||||
|
|
||||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
// 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
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
|
||||||
/*
|
/*
|
||||||
|
Version 14.109: Apr 06, 2015 Links in file browsers can be uploaded with a name. (184324 lines)
|
||||||
Version 14.108.4: Apr 04, 2015 Changes in statistic about institutions. (184267 lines)
|
Version 14.108.4: Apr 04, 2015 Changes in statistic about institutions. (184267 lines)
|
||||||
Version 14.108.3: Apr 03, 2015 Fixed bug in statistic about institutions. (184144 lines)
|
Version 14.108.3: Apr 03, 2015 Fixed bug in statistic about institutions. (184144 lines)
|
||||||
Version 14.108.2: Apr 03, 2015 Fixed bug in statistic about institutions. (184142 lines)
|
Version 14.108.2: Apr 03, 2015 Fixed bug in statistic about institutions. (184142 lines)
|
||||||
|
|
|
@ -2067,8 +2067,8 @@ void Brw_GetParAndInitFileBrowser (void)
|
||||||
case ActCreLnkAsgUsr:
|
case ActCreLnkAsgUsr:
|
||||||
case ActCreLnkWrkUsr:
|
case ActCreLnkWrkUsr:
|
||||||
case ActCreLnkBrf:
|
case ActCreLnkBrf:
|
||||||
/* Get the new link */
|
/* Get the name of the new link */
|
||||||
Par_GetParToText ("NewLink",Gbl.FileBrowser.NewFilFolLnkName,NAME_MAX);
|
Par_GetParToText ("NewLinkName",Gbl.FileBrowser.NewFilFolLnkName,NAME_MAX);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -7648,17 +7648,9 @@ static void Brw_PutFormToCreateAFolder (const char *FileNameToShow)
|
||||||
Brw_ParamListFiles (Brw_IS_FOLDER,Gbl.FileBrowser.Priv.PathInTreeExceptFileOrFolder,Gbl.FileBrowser.FilFolLnkName);
|
Brw_ParamListFiles (Brw_IS_FOLDER,Gbl.FileBrowser.Priv.PathInTreeExceptFileOrFolder,Gbl.FileBrowser.FilFolLnkName);
|
||||||
|
|
||||||
/* Folder */
|
/* Folder */
|
||||||
fprintf (Gbl.F.Out,"<table style=\"width:100%%;\">"
|
fprintf (Gbl.F.Out,"<label class=\"%s\">%s:</label>"
|
||||||
"<tr>"
|
"<input type=\"text\" name=\"NewLink\""
|
||||||
"<td class=\"%s\""
|
" size=\"32\" maxlength=\"40\" value=\"\" />",
|
||||||
" style=\"width:30%%; text-align:right;\">"
|
|
||||||
"%s:"
|
|
||||||
"</td>"
|
|
||||||
"<td style=\"width:70%%; text-align:left;\">"
|
|
||||||
"<input type=\"text\" name=\"NewFolderName\" size=\"32\" maxlength=\"40\" value=\"\" />"
|
|
||||||
"</td>"
|
|
||||||
"</tr>"
|
|
||||||
"</table>",
|
|
||||||
The_ClassFormul[Gbl.Prefs.Theme],Txt_Folder);
|
The_ClassFormul[Gbl.Prefs.Theme],Txt_Folder);
|
||||||
|
|
||||||
/* Button to send */
|
/* Button to send */
|
||||||
|
@ -7797,7 +7789,8 @@ static void Brw_PutFormToUploadOneFileClassic (const char *FileNameToShow)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Brw_ParamListFiles (Brw_IS_FOLDER,Gbl.FileBrowser.Priv.PathInTreeExceptFileOrFolder,Gbl.FileBrowser.FilFolLnkName);
|
Brw_ParamListFiles (Brw_IS_FOLDER,Gbl.FileBrowser.Priv.PathInTreeExceptFileOrFolder,Gbl.FileBrowser.FilFolLnkName);
|
||||||
fprintf (Gbl.F.Out,"<input type=\"file\" name=\"%s\" size=\"50\" maxlength=\"100\" value=\"\" />",
|
fprintf (Gbl.F.Out,"<input type=\"file\" name=\"%s\""
|
||||||
|
" size=\"50\" maxlength=\"100\" value=\"\" />",
|
||||||
Fil_NAME_OF_PARAM_FILENAME_ORG);
|
Fil_NAME_OF_PARAM_FILENAME_ORG);
|
||||||
|
|
||||||
/* Button to send */
|
/* Button to send */
|
||||||
|
@ -7867,6 +7860,7 @@ static void Brw_PutFormToCreateALink (const char *FileNameToShow)
|
||||||
extern const char *Txt_Create_link;
|
extern const char *Txt_Create_link;
|
||||||
extern const char *Txt_or_you_can_create_a_new_link_inside_the_folder_X;
|
extern const char *Txt_or_you_can_create_a_new_link_inside_the_folder_X;
|
||||||
extern const char *Txt_URL;
|
extern const char *Txt_URL;
|
||||||
|
extern const char *Txt_Save_as;
|
||||||
|
|
||||||
/***** Start frame *****/
|
/***** Start frame *****/
|
||||||
Lay_StartRoundFrameTable10 (NULL,0,Txt_Create_link);
|
Lay_StartRoundFrameTable10 (NULL,0,Txt_Create_link);
|
||||||
|
@ -7895,18 +7889,31 @@ static void Brw_PutFormToCreateALink (const char *FileNameToShow)
|
||||||
Brw_ParamListFiles (Brw_IS_FOLDER,Gbl.FileBrowser.Priv.PathInTreeExceptFileOrFolder,Gbl.FileBrowser.FilFolLnkName);
|
Brw_ParamListFiles (Brw_IS_FOLDER,Gbl.FileBrowser.Priv.PathInTreeExceptFileOrFolder,Gbl.FileBrowser.FilFolLnkName);
|
||||||
|
|
||||||
/* URL */
|
/* URL */
|
||||||
fprintf (Gbl.F.Out,"<table style=\"width:100%%;\">"
|
fprintf (Gbl.F.Out,"<table>"
|
||||||
"<tr>"
|
"<tr>"
|
||||||
"<td class=\"%s\""
|
"<td style=\"text-align:right;\">"
|
||||||
" style=\"width:30%%; text-align:right;\">"
|
"<label class=\"%s\">%s:</label>"
|
||||||
"%s:"
|
|
||||||
"</td>"
|
"</td>"
|
||||||
"<td style=\"width:70%%; text-align:left;\">"
|
"<td style=\"text-align:left;\">"
|
||||||
"<input type=\"text\" name=\"NewLink\" size=\"80\" maxlength=\"%u\" value=\"\" />"
|
"<input type=\"text\" name=\"NewLinkURL\""
|
||||||
|
" size=\"40\" maxlength=\"%u\" value=\"\" />"
|
||||||
|
"</td>"
|
||||||
|
"</tr>",
|
||||||
|
The_ClassFormul[Gbl.Prefs.Theme],Txt_URL,
|
||||||
|
PATH_MAX);
|
||||||
|
|
||||||
|
/* Link name */
|
||||||
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
"<td style=\"text-align:right;\">"
|
||||||
|
"<label class=\"%s\">%s:</label>"
|
||||||
|
"</td>"
|
||||||
|
"<td style=\"text-align:left;\">"
|
||||||
|
"<input type=\"text\" name=\"NewLinkName\""
|
||||||
|
" size=\"40\" maxlength=\"100\" value=\"\" />"
|
||||||
"</td>"
|
"</td>"
|
||||||
"</tr>"
|
"</tr>"
|
||||||
"</table>",
|
"</table>",
|
||||||
The_ClassFormul[Gbl.Prefs.Theme],Txt_URL,PATH_MAX);
|
The_ClassFormul[Gbl.Prefs.Theme],Txt_Save_as);
|
||||||
|
|
||||||
/* Button to send */
|
/* Button to send */
|
||||||
Lay_PutCreateButton (Txt_Create_link);
|
Lay_PutCreateButton (Txt_Create_link);
|
||||||
|
@ -8338,12 +8345,13 @@ void Brw_RecLinkFileBrowser (void)
|
||||||
extern const char *Txt_Can_not_create_the_link_X_because_there_is_already_a_folder_or_a_link_with_that_name;
|
extern const char *Txt_Can_not_create_the_link_X_because_there_is_already_a_folder_or_a_link_with_that_name;
|
||||||
extern const char *Txt_Can_not_create_the_link_X_because_it_would_exceed_the_disk_quota;
|
extern const char *Txt_Can_not_create_the_link_X_because_it_would_exceed_the_disk_quota;
|
||||||
extern const char *Txt_The_link_X_has_been_placed_inside_the_folder_Y;
|
extern const char *Txt_The_link_X_has_been_placed_inside_the_folder_Y;
|
||||||
extern const char *Txt_UPLOAD_FILE_Invalid_name;
|
extern const char *Txt_UPLOAD_FILE_Invalid_link;
|
||||||
extern const char *Txt_You_can_not_create_links_here;
|
extern const char *Txt_You_can_not_create_links_here;
|
||||||
char URLWithoutEndingSlash[NAME_MAX+1]; // TODO: It should be PATH_MAX
|
char URL[PATH_MAX+1];
|
||||||
|
char URLWithoutEndingSlash[PATH_MAX+1];
|
||||||
size_t LengthURL;
|
size_t LengthURL;
|
||||||
char URLUntilLastFilename[PATH_MAX+1];
|
char URLUntilLastFilename[PATH_MAX+1];
|
||||||
char LastFilenameInURL[NAME_MAX+1];
|
char FileName[NAME_MAX+1];
|
||||||
char Path[PATH_MAX+1];
|
char Path[PATH_MAX+1];
|
||||||
FILE *FileURL;
|
FILE *FileURL;
|
||||||
char PathCompleteInTreeIncludingFile[PATH_MAX+1];
|
char PathCompleteInTreeIncludingFile[PATH_MAX+1];
|
||||||
|
@ -8359,42 +8367,53 @@ void Brw_RecLinkFileBrowser (void)
|
||||||
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level))
|
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level))
|
||||||
{
|
{
|
||||||
/***** Create a new file to store URL ****/
|
/***** Create a new file to store URL ****/
|
||||||
/*
|
Par_GetParToText ("NewLinkURL",URL,PATH_MAX);
|
||||||
Gbl.FileBrowser.NewFilFolLnkName holds the URL of the new link
|
if ((LengthURL = strlen (URL)))
|
||||||
Example:
|
|
||||||
URL: http://www.intel.es/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf
|
|
||||||
File in swad: 64-ia-32-architectures-software-developer-manual-325462.pdf.url
|
|
||||||
*/
|
|
||||||
if ((LengthURL = strlen (Gbl.FileBrowser.NewFilFolLnkName)))
|
|
||||||
{
|
{
|
||||||
strncpy (URLWithoutEndingSlash,Gbl.FileBrowser.NewFilFolLnkName,NAME_MAX);
|
if (Gbl.FileBrowser.NewFilFolLnkName[0])
|
||||||
URLWithoutEndingSlash[NAME_MAX] = '\0';
|
/*
|
||||||
|
Gbl.FileBrowser.NewFilFolLnkName holds the name given by me in the form
|
||||||
|
Example:
|
||||||
|
Name given by me: intel-architectures.pdf
|
||||||
|
File in swad: intel-architectures.pdf.url
|
||||||
|
*/
|
||||||
|
strncpy (URLWithoutEndingSlash,Gbl.FileBrowser.NewFilFolLnkName,PATH_MAX);
|
||||||
|
else
|
||||||
|
/*
|
||||||
|
Gbl.FileBrowser.NewFilFolLnkName is empty
|
||||||
|
URL holds the URL given by me in the form
|
||||||
|
Example:
|
||||||
|
URL: http://www.intel.es/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf
|
||||||
|
File in swad: 64-ia-32-architectures-software-developer-manual-325462.pdf.url
|
||||||
|
*/
|
||||||
|
strncpy (URLWithoutEndingSlash,URL,PATH_MAX);
|
||||||
|
URLWithoutEndingSlash[PATH_MAX] = '\0';
|
||||||
|
|
||||||
/* Remove possible final '/' from URL */
|
/* Remove possible final '/' from URL */
|
||||||
if (URLWithoutEndingSlash[LengthURL - 1] == '/')
|
if (URLWithoutEndingSlash[LengthURL - 1] == '/')
|
||||||
URLWithoutEndingSlash[LengthURL - 1] = '\0';
|
URLWithoutEndingSlash[LengthURL - 1] = '\0';
|
||||||
|
|
||||||
/* Get the last name in URL-without-ending-slash */
|
/* Get the last name in URL-without-ending-slash */
|
||||||
Str_SplitFullPathIntoPathAndFileName (URLWithoutEndingSlash,
|
Str_SplitFullPathIntoPathAndFileName (URLWithoutEndingSlash,
|
||||||
URLUntilLastFilename,
|
URLUntilLastFilename,
|
||||||
LastFilenameInURL);
|
FileName);
|
||||||
|
|
||||||
/* Convert the last name in URL to a valid filename */
|
/* Convert the last name in URL to a valid filename */
|
||||||
if (Str_ConvertFilFolLnkNameToValid (LastFilenameInURL)) // Gbl.Message contains feedback text
|
if (Str_ConvertFilFolLnkNameToValid (FileName)) // Gbl.Message contains feedback text
|
||||||
{
|
{
|
||||||
/* The name of the file with the link will be the LastFilenameInURL.url */
|
/* The name of the file with the link will be the FileName.url */
|
||||||
sprintf (Path,"%s/%s",Gbl.FileBrowser.Priv.PathAboveRootFolder,Gbl.FileBrowser.Priv.FullPathInTree);
|
sprintf (Path,"%s/%s",Gbl.FileBrowser.Priv.PathAboveRootFolder,Gbl.FileBrowser.Priv.FullPathInTree);
|
||||||
if (strlen (Path) + 1 + strlen (LastFilenameInURL) + strlen (".url") > PATH_MAX)
|
if (strlen (Path) + 1 + strlen (FileName) + strlen (".url") > PATH_MAX)
|
||||||
Lay_ShowErrorAndExit ("Path is too long.");
|
Lay_ShowErrorAndExit ("Path is too long.");
|
||||||
strcat (Path,"/");
|
strcat (Path,"/");
|
||||||
strcat (Path,LastFilenameInURL);
|
strcat (Path,FileName);
|
||||||
strcat (Path,".url");
|
strcat (Path,".url");
|
||||||
|
|
||||||
/* Check if the URL file exists */
|
/* Check if the URL file exists */
|
||||||
if (Fil_CheckIfPathExists (Path))
|
if (Fil_CheckIfPathExists (Path))
|
||||||
{
|
{
|
||||||
sprintf (Gbl.Message,Txt_Can_not_create_the_link_X_because_there_is_already_a_folder_or_a_link_with_that_name,
|
sprintf (Gbl.Message,Txt_Can_not_create_the_link_X_because_there_is_already_a_folder_or_a_link_with_that_name,
|
||||||
LastFilenameInURL);
|
FileName);
|
||||||
Lay_ShowAlert (Lay_WARNING,Gbl.Message);
|
Lay_ShowAlert (Lay_WARNING,Gbl.Message);
|
||||||
}
|
}
|
||||||
else // URL file does not exist
|
else // URL file does not exist
|
||||||
|
@ -8403,7 +8422,7 @@ void Brw_RecLinkFileBrowser (void)
|
||||||
if ((FileURL = fopen (Path,"wb")) != NULL)
|
if ((FileURL = fopen (Path,"wb")) != NULL)
|
||||||
{
|
{
|
||||||
/* Write URL */
|
/* Write URL */
|
||||||
fprintf (FileURL,"%s",Gbl.FileBrowser.NewFilFolLnkName);
|
fprintf (FileURL,"%s",URL);
|
||||||
|
|
||||||
/* Close file */
|
/* Close file */
|
||||||
fclose (FileURL);
|
fclose (FileURL);
|
||||||
|
@ -8415,7 +8434,7 @@ void Brw_RecLinkFileBrowser (void)
|
||||||
{
|
{
|
||||||
Brw_RemoveTree (Path);
|
Brw_RemoveTree (Path);
|
||||||
sprintf (Gbl.Message,Txt_Can_not_create_the_link_X_because_it_would_exceed_the_disk_quota,
|
sprintf (Gbl.Message,Txt_Can_not_create_the_link_X_because_it_would_exceed_the_disk_quota,
|
||||||
LastFilenameInURL);
|
FileName);
|
||||||
Lay_ShowAlert (Lay_WARNING,Gbl.Message);
|
Lay_ShowAlert (Lay_WARNING,Gbl.Message);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -8427,7 +8446,7 @@ void Brw_RecLinkFileBrowser (void)
|
||||||
Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.Priv.FullPathInTree);
|
Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.Priv.FullPathInTree);
|
||||||
|
|
||||||
/* Add entry to the table of files/folders */
|
/* Add entry to the table of files/folders */
|
||||||
sprintf (PathCompleteInTreeIncludingFile,"%s/%s.url",Gbl.FileBrowser.Priv.FullPathInTree,LastFilenameInURL);
|
sprintf (PathCompleteInTreeIncludingFile,"%s/%s.url",Gbl.FileBrowser.Priv.FullPathInTree,FileName);
|
||||||
FilCod = Brw_AddPathToDB (Gbl.Usrs.Me.UsrDat.UsrCod,Brw_IS_LINK,
|
FilCod = Brw_AddPathToDB (Gbl.Usrs.Me.UsrDat.UsrCod,Brw_IS_LINK,
|
||||||
PathCompleteInTreeIncludingFile,false,Brw_LICENSE_DEFAULT);
|
PathCompleteInTreeIncludingFile,false,Brw_LICENSE_DEFAULT);
|
||||||
|
|
||||||
|
@ -8435,7 +8454,7 @@ void Brw_RecLinkFileBrowser (void)
|
||||||
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,Brw_IS_FOLDER,
|
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,Brw_IS_FOLDER,
|
||||||
Gbl.FileBrowser.FilFolLnkName,FileNameToShow);
|
Gbl.FileBrowser.FilFolLnkName,FileNameToShow);
|
||||||
sprintf (Gbl.Message,Txt_The_link_X_has_been_placed_inside_the_folder_Y,
|
sprintf (Gbl.Message,Txt_The_link_X_has_been_placed_inside_the_folder_Y,
|
||||||
LastFilenameInURL,FileNameToShow);
|
FileName,FileNameToShow);
|
||||||
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
|
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
|
||||||
|
|
||||||
FileMetadata.FilCod = FilCod;
|
FileMetadata.FilCod = FilCod;
|
||||||
|
@ -8467,11 +8486,9 @@ void Brw_RecLinkFileBrowser (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // Link name not valid
|
|
||||||
Lay_ShowAlert (Lay_WARNING,Gbl.Message);
|
|
||||||
}
|
}
|
||||||
else // Link name not valid
|
else // Link URL not valid
|
||||||
Lay_ShowAlert (Lay_WARNING,Txt_UPLOAD_FILE_Invalid_name);
|
Lay_ShowAlert (Lay_WARNING,Txt_UPLOAD_FILE_Invalid_link);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Lay_ShowErrorAndExit (Txt_You_can_not_create_links_here); // It's difficult, but not impossible that a user sees this message
|
Lay_ShowErrorAndExit (Txt_You_can_not_create_links_here); // It's difficult, but not impossible that a user sees this message
|
||||||
|
|
|
@ -505,7 +505,7 @@ struct Globals
|
||||||
char PathInTreeExceptFileOrFolder[PATH_MAX+1];
|
char PathInTreeExceptFileOrFolder[PATH_MAX+1];
|
||||||
char FullPathInTree[PATH_MAX+1];
|
char FullPathInTree[PATH_MAX+1];
|
||||||
} Priv;
|
} Priv;
|
||||||
char NewFilFolLnkName[NAME_MAX+1]; // TODO: It should be PATH_MAX (for URL in links)
|
char NewFilFolLnkName[NAME_MAX+1];
|
||||||
char FilFolLnkName[NAME_MAX+1];
|
char FilFolLnkName[NAME_MAX+1];
|
||||||
Brw_FileType_t FileType;
|
Brw_FileType_t FileType;
|
||||||
unsigned Level;
|
unsigned Level;
|
||||||
|
|
50
swad_text.c
50
swad_text.c
|
@ -33396,6 +33396,27 @@ const char *Txt_Save =
|
||||||
"Salvar";
|
"Salvar";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Save_as =
|
||||||
|
#if L==0
|
||||||
|
"Guardar com";
|
||||||
|
#elif L==1
|
||||||
|
"Speichern unter";
|
||||||
|
#elif L==2
|
||||||
|
"Save as";
|
||||||
|
#elif L==3
|
||||||
|
"Guardar como";
|
||||||
|
#elif L==4
|
||||||
|
"Enregistrer sous";
|
||||||
|
#elif L==5
|
||||||
|
"Guardar como"; // Okoteve traducción
|
||||||
|
#elif L==6
|
||||||
|
"Salva come";
|
||||||
|
#elif L==7
|
||||||
|
"Zapisz jako";
|
||||||
|
#elif L==8
|
||||||
|
"Salvar como";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Save_changes =
|
const char *Txt_Save_changes =
|
||||||
#if L==0
|
#if L==0
|
||||||
"Desar canvis";
|
"Desar canvis";
|
||||||
|
@ -46565,25 +46586,46 @@ const char *Txt_Update_students_according_to_selected_groups =
|
||||||
"Atualizar os estudantes de acordo com grupos selecionados";
|
"Atualizar os estudantes de acordo com grupos selecionados";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_UPLOAD_FILE_Invalid_link =
|
||||||
|
#if L==0
|
||||||
|
"Enlace no válido."; // Necessita traduccio
|
||||||
|
#elif L==1
|
||||||
|
"Invalid link."; // Need Übersetzung
|
||||||
|
#elif L==2
|
||||||
|
"Invalid link.";
|
||||||
|
#elif L==3
|
||||||
|
"Enlace no válido.";
|
||||||
|
#elif L==4
|
||||||
|
"Invalid link."; // Besoin de traduction
|
||||||
|
#elif L==5
|
||||||
|
"Enlace no válido."; // Okoteve traducción
|
||||||
|
#elif L==6
|
||||||
|
"Link non valido.";
|
||||||
|
#elif L==7
|
||||||
|
"Invalid link."; // Potrzebujesz tlumaczenie
|
||||||
|
#elif L==8
|
||||||
|
"Invalid link."; // Necessita de tradução
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_UPLOAD_FILE_Invalid_name =
|
const char *Txt_UPLOAD_FILE_Invalid_name =
|
||||||
#if L==0
|
#if L==0
|
||||||
"Nombre no válido."; // Necessita traduccio
|
"Nombre no válido."; // Necessita traduccio
|
||||||
#elif L==1
|
#elif L==1
|
||||||
"Invalid name."; // Need Übersetzung
|
"Invalid name."; // Need Übersetzung
|
||||||
#elif L==2
|
#elif L==2
|
||||||
"Invalid name.";
|
"Invalid name.";
|
||||||
#elif L==3
|
#elif L==3
|
||||||
"Nombre no válido.";
|
"Nombre no válido.";
|
||||||
#elif L==4
|
#elif L==4
|
||||||
"Invalid name."; // Besoin de traduction
|
"Invalid name."; // Besoin de traduction
|
||||||
#elif L==5
|
#elif L==5
|
||||||
"Nombre no válido."; // Okoteve traducción
|
"Nombre no válido."; // Okoteve traducción
|
||||||
#elif L==6
|
#elif L==6
|
||||||
"Nome non valido.";
|
"Nome non valido.";
|
||||||
#elif L==7
|
#elif L==7
|
||||||
"Invalid name."; // Potrzebujesz tlumaczenie
|
"Invalid name."; // Potrzebujesz tlumaczenie
|
||||||
#elif L==8
|
#elif L==8
|
||||||
"Invalid name."; // Necessita de tradução
|
"Invalid name."; // Necessita de tradução
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_UPLOAD_FILE_X_invalid_name = // Warning: it is very important to include %s in the following sentences
|
const char *Txt_UPLOAD_FILE_X_invalid_name = // Warning: it is very important to include %s in the following sentences
|
||||||
|
|
Loading…
Reference in New Issue
Block a user