Version 15.20.2

This commit is contained in:
Antonio Cañas Vargas 2015-10-24 21:41:41 +02:00
parent 3fad46233d
commit 5bde190ea8
9 changed files with 181 additions and 220 deletions

View File

@ -1005,8 +1005,6 @@ void Asg_RequestCreatOrEditAsg (void)
extern const char *The_ClassForm[The_NUM_THEMES]; extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_New_assignment; extern const char *Txt_New_assignment;
extern const char *Txt_Edit_assignment; extern const char *Txt_Edit_assignment;
extern const char *Txt_Start_date;
extern const char *Txt_End_date;
extern const char *Txt_Title; extern const char *Txt_Title;
extern const char *Txt_Upload_files_QUESTION; extern const char *Txt_Upload_files_QUESTION;
extern const char *Txt_Folder; extern const char *Txt_Folder;
@ -1015,9 +1013,6 @@ void Asg_RequestCreatOrEditAsg (void)
extern const char *Txt_Save; extern const char *Txt_Save;
struct Assignment Asg; struct Assignment Asg;
bool ItsANewAssignment; bool ItsANewAssignment;
Asg_StartOrEndTime_t StartOrEndTime;
const char *Id[Asg_NUM_DATES] = {"Start","End"};
const char *Dates[Asg_NUM_DATES] = {Txt_Start_date,Txt_End_date};
char Txt[Cns_MAX_BYTES_TEXT+1]; char Txt[Cns_MAX_BYTES_TEXT+1];
/***** Get parameters *****/ /***** Get parameters *****/
@ -1081,34 +1076,7 @@ void Asg_RequestCreatOrEditAsg (void)
Asg_MAX_LENGTH_ASSIGNMENT_TITLE,Asg.Title); Asg_MAX_LENGTH_ASSIGNMENT_TITLE,Asg.Title);
/***** Assignment start and end dates *****/ /***** Assignment start and end dates *****/
for (StartOrEndTime = Asg_START_TIME; Dat_PutFormStartEndClientLocalDateTimes (Asg.TimeUTC);
StartOrEndTime <= Asg_END_TIME;
StartOrEndTime++)
{
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">"
"<table class=\"CELLS_PAD_2\">"
"<tr>"
"<td class=\"LEFT_TOP\">",
The_ClassForm[Gbl.Prefs.Theme],
Dates[StartOrEndTime]);
/* Date-time */
Dat_WriteFormClientLocalDateTime (Id[StartOrEndTime],
Asg.TimeUTC[StartOrEndTime],
Gbl.Now.Date.Year - 1,
Gbl.Now.Date.Year + 1,
false,false);
fprintf (Gbl.F.Out,"</td>"
"</tr>"
"</table>"
"</td>"
"</tr>");
}
/***** Send work? *****/ /***** Send work? *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"

View File

@ -975,8 +975,6 @@ void Att_RequestCreatOrEditAttEvent (void)
extern const char *Txt_New_event; extern const char *Txt_New_event;
extern const char *Txt_Edit_event; extern const char *Txt_Edit_event;
extern const char *Txt_Teachers_comment; extern const char *Txt_Teachers_comment;
extern const char *Txt_Start_date;
extern const char *Txt_End_date;
extern const char *Txt_Title; extern const char *Txt_Title;
extern const char *Txt_Hidden_MALE_PLURAL; extern const char *Txt_Hidden_MALE_PLURAL;
extern const char *Txt_Visible_MALE_PLURAL; extern const char *Txt_Visible_MALE_PLURAL;
@ -985,9 +983,6 @@ void Att_RequestCreatOrEditAttEvent (void)
extern const char *Txt_Save; extern const char *Txt_Save;
struct AttendanceEvent Att; struct AttendanceEvent Att;
bool ItsANewAttEvent; bool ItsANewAttEvent;
Att_StartOrEndTime_t StartOrEndTime;
const char *Id[Att_NUM_DATES] = {"Start","End"};
const char *Dates[Att_NUM_DATES] = {Txt_Start_date,Txt_End_date};
char Txt[Cns_MAX_BYTES_TEXT+1]; char Txt[Cns_MAX_BYTES_TEXT+1];
/***** Get parameters *****/ /***** Get parameters *****/
@ -1046,33 +1041,8 @@ void Att_RequestCreatOrEditAttEvent (void)
The_ClassForm[Gbl.Prefs.Theme],Txt_Title, The_ClassForm[Gbl.Prefs.Theme],Txt_Title,
Att_MAX_LENGTH_ATTENDANCE_EVENT_TITLE,Att.Title); Att_MAX_LENGTH_ATTENDANCE_EVENT_TITLE,Att.Title);
/***** Attendance event start and end dates *****/ /***** Assignment start and end dates *****/
for (StartOrEndTime = Att_START_TIME; Dat_PutFormStartEndClientLocalDateTimes (Att.TimeUTC);
StartOrEndTime <= Att_END_TIME;
StartOrEndTime++)
{
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_TOP\">"
"%s:"
"</td>"
"<td class=\"LEFT_TOP\">"
"<table class=\"CELLS_PAD_2\">"
"<tr>"
"<td class=\"LEFT_TOP\">",
The_ClassForm[Gbl.Prefs.Theme],
Dates[StartOrEndTime]);
/* Date-time */
Dat_WriteFormClientLocalDateTime (Id[StartOrEndTime],
Att.TimeUTC[StartOrEndTime],
Gbl.Now.Date.Year - 1,
Gbl.Now.Date.Year + 1,
false,false);
fprintf (Gbl.F.Out,"</td>"
"</tr></table></td>"
"</tr>");
}
/***** Visibility of comments *****/ /***** Visibility of comments *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"

View File

@ -108,11 +108,12 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.20.1 (2015/10/24)" #define Log_PLATFORM_VERSION "SWAD 15.20.2 (2015/10/24)"
// 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 15.20.2: Oct 24, 2015 Code refactoring related to date-times forms. (186294 lines)
Version 15.20.1: Oct 24, 2015 Detailed clics are displayed in client local date-time. (186333 lines) Version 15.20.1: Oct 24, 2015 Detailed clics are displayed in client local date-time. (186333 lines)
Version 15.20: Oct 24, 2015 Date-times in notifications, messages and forums are displayed in client local date-time. (186334 lines) Version 15.20: Oct 24, 2015 Date-times in notifications, messages and forums are displayed in client local date-time. (186334 lines)
Version 15.19: Oct 23, 2015 Surveys date-times are displayed in client local date-time. (186309 lines) Version 15.19: Oct 23, 2015 Surveys date-times are displayed in client local date-time. (186309 lines)

View File

@ -63,6 +63,11 @@ const unsigned Dat_NumDaysMonth[1+12] =
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
static void Dat_WriteFormClientLocalDateTime (const char *Id,
time_t TimeUTC,
unsigned FirstYear,unsigned LastYear,
bool SubmitFormOnChange,bool Disabled);
/*****************************************************************************/ /*****************************************************************************/
/***************************** Get current time ******************************/ /***************************** Get current time ******************************/
/*****************************************************************************/ /*****************************************************************************/
@ -267,14 +272,65 @@ void Dat_WriteFormIniEndDates (void)
} }
/*****************************************************************************/
/************* Show forms to enter initial and ending date-times *************/
/*****************************************************************************/
void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2])
{
extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Start_date;
extern const char *Txt_End_date;
Asg_StartOrEndTime_t StartOrEndTime;
const char *Id[Asg_NUM_DATES] =
{
"Start",
"End"
};
const char *Dates[Asg_NUM_DATES] =
{
Txt_Start_date,
Txt_End_date
};
for (StartOrEndTime = 0;
StartOrEndTime <= 1;
StartOrEndTime++)
{
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">"
"<table class=\"CELLS_PAD_2\">"
"<tr>"
"<td class=\"LEFT_TOP\">",
The_ClassForm[Gbl.Prefs.Theme],
Dates[StartOrEndTime]);
/* Date-time */
Dat_WriteFormClientLocalDateTime (Id[StartOrEndTime],
TimeUTC[StartOrEndTime],
Gbl.Now.Date.Year - 1,
Gbl.Now.Date.Year + 1,
false,false);
fprintf (Gbl.F.Out,"</td>"
"</tr>"
"</table>"
"</td>"
"</tr>");
}
}
/*****************************************************************************/ /*****************************************************************************/
/************************* Show a form to enter a date ***********************/ /************************* Show a form to enter a date ***********************/
/*****************************************************************************/ /*****************************************************************************/
void Dat_WriteFormClientLocalDateTime (const char *Id, static void Dat_WriteFormClientLocalDateTime (const char *Id,
time_t TimeUTC, time_t TimeUTC,
unsigned FirstYear,unsigned LastYear, unsigned FirstYear,unsigned LastYear,
bool SubmitFormOnChange,bool Disabled) bool SubmitFormOnChange,bool Disabled)
{ {
extern const char *Txt_MONTHS_SMALL[12]; extern const char *Txt_MONTHS_SMALL[12];
unsigned Day; unsigned Day;

View File

@ -78,11 +78,8 @@ void Dat_GetLocalTimeFromClock (const time_t *clock);
void Dat_ConvDateToDateStr (struct Date *Date,char *DateStr); void Dat_ConvDateToDateStr (struct Date *Date,char *DateStr);
void Dat_WriteFormIniEndDates (void); void Dat_WriteFormIniEndDates (void);
void Dat_PutFormStartEndClientLocalDateTimes (time_t TimeUTC[2]);
void Dat_WriteFormClientLocalDateTime (const char *Id,
time_t TimeUTC,
unsigned FirstYear,unsigned LastYear,
bool SubmitFormOnChange,bool Disabled);
time_t Dat_GetTimeUTCFromForm (const char *ParamName); time_t Dat_GetTimeUTCFromForm (const char *ParamName);
void Dat_WriteFormDate (unsigned FirstYear,unsigned LastYear, void Dat_WriteFormDate (unsigned FirstYear,unsigned LastYear,

View File

@ -2162,7 +2162,6 @@ void Enr_ShowEnrollmentRequests (void)
bool ShowPhoto = false; bool ShowPhoto = false;
char PhotoURL[PATH_MAX+1]; char PhotoURL[PATH_MAX+1];
Rol_Role_t DesiredRole; Rol_Role_t DesiredRole;
time_t RequestTimeUTC;
/***** Start frame *****/ /***** Start frame *****/
Lay_StartRoundFrame (NULL,Txt_Enrollment_requests); Lay_StartRoundFrame (NULL,Txt_Enrollment_requests);
@ -2641,8 +2640,7 @@ void Enr_ShowEnrollmentRequests (void)
Txt_ROLES_SINGUL_abc[DesiredRole][UsrDat.Sex]); Txt_ROLES_SINGUL_abc[DesiredRole][UsrDat.Sex]);
/***** Request time (row[4]) *****/ /***** Request time (row[4]) *****/
RequestTimeUTC = Dat_GetUNIXTimeFromStr (row[4]); Msg_WriteMsgDate (Dat_GetUNIXTimeFromStr (row[4]),"DAT");
Msg_WriteMsgDate (RequestTimeUTC,"DAT");
/***** Button to confirm the request *****/ /***** Button to confirm the request *****/
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP\">"); fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP\">");

View File

@ -1038,7 +1038,9 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
break; break;
case Sta_CLICKS_CRS_PER_DAYS_AND_HOUR: case Sta_CLICKS_CRS_PER_DAYS_AND_HOUR:
case Sta_CLICKS_GBL_PER_DAYS_AND_HOUR: case Sta_CLICKS_GBL_PER_DAYS_AND_HOUR:
sprintf (Query,"SELECT SQL_NO_CACHE DATE_FORMAT(ClickTime,'%%Y%%m%%d') AS Day,DATE_FORMAT(ClickTime,'%%H') AS Hour,%s FROM %s", sprintf (Query,"SELECT SQL_NO_CACHE "
"DATE_FORMAT(ClickTime,'%%Y%%m%%d') AS Day,"
"DATE_FORMAT(ClickTime,'%%H') AS Hour,%s FROM %s",
StrQueryCountType,LogTable); StrQueryCountType,LogTable);
break; break;
case Sta_CLICKS_CRS_PER_WEEKS: case Sta_CLICKS_CRS_PER_WEEKS:
@ -1668,7 +1670,8 @@ static void Sta_ShowDetailedAccessesList (unsigned long NumRows,MYSQL_RES *mysql
fprintf (Gbl.F.Out,"<td id=\"date_%u\" class=\"LOG CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td id=\"date_%u\" class=\"LOG CENTER_TOP COLOR%u\">"
"<script type=\"text/javascript\">" "<script type=\"text/javascript\">"
"writeLocalDateTimeFromUTC('date_%u',%ld,'&nbsp;');" "writeLocalDateTimeFromUTC('date_%u',%ld,'&nbsp;');"
"</script>", "</script>"
"</td>",
UniqueId,Gbl.RowEvenOdd, UniqueId,Gbl.RowEvenOdd,
UniqueId,(long) Dat_GetUNIXTimeFromStr (row[3])); UniqueId,(long) Dat_GetUNIXTimeFromStr (row[3]));

View File

@ -1448,8 +1448,6 @@ void Svy_RequestCreatOrEditSvy (void)
extern const char *Txt_New_survey; extern const char *Txt_New_survey;
extern const char *Txt_Scope; extern const char *Txt_Scope;
extern const char *Txt_Edit_survey; extern const char *Txt_Edit_survey;
extern const char *Txt_Start_date;
extern const char *Txt_End_date;
extern const char *Txt_Title; extern const char *Txt_Title;
extern const char *Txt_Description; extern const char *Txt_Description;
extern const char *Txt_Users; extern const char *Txt_Users;
@ -1458,9 +1456,6 @@ void Svy_RequestCreatOrEditSvy (void)
struct Survey Svy; struct Survey Svy;
struct SurveyQuestion SvyQst; struct SurveyQuestion SvyQst;
bool ItsANewSurvey; bool ItsANewSurvey;
Svy_StartOrEndTime_t StartOrEndTime;
const char *Id[Att_NUM_DATES] = {"Start","End"};
const char *Dates[Svy_NUM_DATES] = {Txt_Start_date,Txt_End_date};
char Txt[Cns_MAX_BYTES_TEXT+1]; char Txt[Cns_MAX_BYTES_TEXT+1];
/***** Get parameters *****/ /***** Get parameters *****/
@ -1552,34 +1547,7 @@ void Svy_RequestCreatOrEditSvy (void)
Svy_MAX_LENGTH_SURVEY_TITLE,Svy.Title); Svy_MAX_LENGTH_SURVEY_TITLE,Svy.Title);
/***** Survey start and end dates *****/ /***** Survey start and end dates *****/
for (StartOrEndTime = Svy_START_TIME; Dat_PutFormStartEndClientLocalDateTimes (Svy.TimeUTC);
StartOrEndTime <= Svy_END_TIME;
StartOrEndTime++)
{
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">"
"<table class=\"CELLS_PAD_2\">"
"<tr>"
"<td class=\"LEFT_MIDDLE\">",
The_ClassForm[Gbl.Prefs.Theme],
Dates[StartOrEndTime]);
/* Date-time */
Dat_WriteFormClientLocalDateTime (Id[StartOrEndTime],
Svy.TimeUTC[StartOrEndTime],
Gbl.Now.Date.Year - 1,
Gbl.Now.Date.Year + 1,
false,false);
fprintf (Gbl.F.Out,"</td>"
"</tr>"
"</table>"
"</td>"
"</tr>");
}
/***** Survey text *****/ /***** Survey text *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"

View File

@ -35218,123 +35218,123 @@ const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_BY] =
#endif #endif
, ,
#if L==0 #if L==0
"dia" "dia*"
#elif L==1 #elif L==1
"Tag" "Tag*"
#elif L==2 #elif L==2
"day" "day*"
#elif L==3 #elif L==3
"d&iacute;a" "d&iacute;a*"
#elif L==4 #elif L==4
"jour" "jour*"
#elif L==5 #elif L==5
"d&iacute;a" // Okoteve traducción "d&iacute;a*" // Okoteve traducción
#elif L==6 #elif L==6
"giorno" "giorno*"
#elif L==7 #elif L==7
"dzie&nacute;" "dzie&nacute;*"
#elif L==8 #elif L==8
"dia" "dia*"
#endif #endif
, ,
#if L==0 #if L==0
"dia i hora" "dia i hora*"
#elif L==1 #elif L==1
"Tag und Stunde" "Tag und Stunde*"
#elif L==2 #elif L==2
"day and hour" "day and hour*"
#elif L==3 #elif L==3
"d&iacute;a y hora" "d&iacute;a y hora*"
#elif L==4 #elif L==4
"jour et heure" "jour et heure*"
#elif L==5 #elif L==5
"d&iacute;a y hora" // Okoteve traducción "d&iacute;a y hora*" // Okoteve traducción
#elif L==6 #elif L==6
"giorno e ora" "giorno e ora*"
#elif L==7 #elif L==7
"dzie&nacute; i godzin&eogon;" "dzie&nacute; i godzin&eogon;*"
#elif L==8 #elif L==8
"dia e hora" "dia e hora*"
#endif #endif
, ,
#if L==0 #if L==0
"setmana" "setmana*"
#elif L==1 #elif L==1
"Woche" "Woche*"
#elif L==2 #elif L==2
"week" "week*"
#elif L==3 #elif L==3
"semana" "semana*"
#elif L==4 #elif L==4
"semaine" "semaine*"
#elif L==5 #elif L==5
"arapok&otilde;indy" "arapok&otilde;indy*"
#elif L==6 #elif L==6
"settimana" "settimana*"
#elif L==7 #elif L==7
"tydzie&nacute;" "tydzie&nacute;*"
#elif L==8 #elif L==8
"semana" "semana*"
#endif #endif
, ,
#if L==0 #if L==0
"mes" "mes*"
#elif L==1 #elif L==1
"Monat" "Monat*"
#elif L==2 #elif L==2
"month" "month*"
#elif L==3 #elif L==3
"mes" "mes*"
#elif L==4 #elif L==4
"mois" "mois*"
#elif L==5 #elif L==5
"jasy" "jasy*"
#elif L==6 #elif L==6
"mese" "mese*"
#elif L==7 #elif L==7
"miesi&aogon;c" "miesi&aogon;c*"
#elif L==8 #elif L==8
"m&ecirc;s" "m&ecirc;s*"
#endif #endif
, ,
#if L==0 #if L==0
"hora" "hora*"
#elif L==1 #elif L==1
"Stunde" "Stunde*"
#elif L==2 #elif L==2
"hour" "hour*"
#elif L==3 #elif L==3
"hora" "hora*"
#elif L==4 #elif L==4
"heure" "heure*"
#elif L==5 #elif L==5
"aravo" "aravo*"
#elif L==6 #elif L==6
"ora" "ora*"
#elif L==7 #elif L==7
"godzina" "godzina*"
#elif L==8 #elif L==8
"hora" "hora*"
#endif #endif
, ,
#if L==0 #if L==0
"minut" "minut*"
#elif L==1 #elif L==1
"Minute" "Minute*"
#elif L==2 #elif L==2
"minute" "minute*"
#elif L==3 #elif L==3
"minuto" "minuto*"
#elif L==4 #elif L==4
"minute" "minute*"
#elif L==5 #elif L==5
"aravo'i" "aravo'i*"
#elif L==6 #elif L==6
"minuto" "minuto*"
#elif L==7 #elif L==7
"minut&eogon;" "minut&eogon;*"
#elif L==8 #elif L==8
"minuto" "minuto*"
#endif #endif
, ,
#if L==0 #if L==0
@ -35358,123 +35358,123 @@ const char *Txt_STAT_CLICKS_GROUPED_BY[Sta_NUM_CLICKS_GROUPED_BY] =
#endif #endif
, ,
#if L==0 #if L==0
"dia" "dia*"
#elif L==1 #elif L==1
"Tag" "Tag*"
#elif L==2 #elif L==2
"day" "day*"
#elif L==3 #elif L==3
"d&iacute;a" "d&iacute;a*"
#elif L==4 #elif L==4
"jour" "jour*"
#elif L==5 #elif L==5
"d&iacute;a" // Okoteve traducción "d&iacute;a*" // Okoteve traducción
#elif L==6 #elif L==6
"giorno" "giorno*"
#elif L==7 #elif L==7
"dzie&nacute;" "dzie&nacute;*"
#elif L==8 #elif L==8
"dia" "dia*"
#endif #endif
, ,
#if L==0 #if L==0
"dia i hora" "dia i hora*"
#elif L==1 #elif L==1
"Tag und Stunde" "Tag und Stunde*"
#elif L==2 #elif L==2
"day and hour" "day and hour*"
#elif L==3 #elif L==3
"d&iacute;a y hora" "d&iacute;a y hora*"
#elif L==4 #elif L==4
"jour et heure" "jour et heure*"
#elif L==5 #elif L==5
"d&iacute;a y hora" // Okoteve traducción "d&iacute;a y hora*" // Okoteve traducción
#elif L==6 #elif L==6
"giorno e ora" "giorno e ora*"
#elif L==7 #elif L==7
"dzie&nacute; i godzin&eogon;" "dzie&nacute; i godzin&eogon;*"
#elif L==8 #elif L==8
"dia e hora" "dia e hora*"
#endif #endif
, ,
#if L==0 #if L==0
"setmana" "setmana*"
#elif L==1 #elif L==1
"Woche" "Woche*"
#elif L==2 #elif L==2
"week" "week*"
#elif L==3 #elif L==3
"semana" "semana*"
#elif L==4 #elif L==4
"semaine" "semaine*"
#elif L==5 #elif L==5
"arapok&otilde;indy" "arapok&otilde;indy*"
#elif L==6 #elif L==6
"settimana" "settimana*"
#elif L==7 #elif L==7
"tydzie&nacute;" "tydzie&nacute;*"
#elif L==8 #elif L==8
"semana" "semana*"
#endif #endif
, ,
#if L==0 #if L==0
"mes" "mes*"
#elif L==1 #elif L==1
"Monat" "Monat*"
#elif L==2 #elif L==2
"month" "month*"
#elif L==3 #elif L==3
"mes" "mes*"
#elif L==4 #elif L==4
"mois" "mois*"
#elif L==5 #elif L==5
"jasy" "jasy*"
#elif L==6 #elif L==6
"mese" "mese*"
#elif L==7 #elif L==7
"miesi&aogon;c" "miesi&aogon;c*"
#elif L==8 #elif L==8
"m&ecirc;s" "m&ecirc;s*"
#endif #endif
, ,
#if L==0 #if L==0
"hora" "hora*"
#elif L==1 #elif L==1
"Stunde" "Stunde*"
#elif L==2 #elif L==2
"hour" "hour*"
#elif L==3 #elif L==3
"hora" "hora*"
#elif L==4 #elif L==4
"heure" "heure*"
#elif L==5 #elif L==5
"aravo" "aravo*"
#elif L==6 #elif L==6
"ora" "ora*"
#elif L==7 #elif L==7
"godzina" "godzina*"
#elif L==8 #elif L==8
"hora" "hora*"
#endif #endif
, ,
#if L==0 #if L==0
"minut" "minut*"
#elif L==1 #elif L==1
"Minute" "Minute*"
#elif L==2 #elif L==2
"minute" "minute*"
#elif L==3 #elif L==3
"minuto" "minuto*"
#elif L==4 #elif L==4
"minute" "minute*"
#elif L==5 #elif L==5
"aravo'i" "aravo'i*"
#elif L==6 #elif L==6
"minuto" "minuto*"
#elif L==7 #elif L==7
"minut&eogon;" "minut&eogon;*"
#elif L==8 #elif L==8
"minuto" "minuto*"
#endif #endif
, ,
#if L==0 #if L==0