Skip to content

Commit cd9f742

Browse files
authored
fix masculine and feminine forms of the weekdays (#326)
1 parent f44efff commit cd9f742

File tree

5 files changed

+70
-26
lines changed

5 files changed

+70
-26
lines changed

src/expressionDescriptor.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,8 @@ export class ExpressionDescriptor {
381381
let format: string | null = null;
382382
if (s.indexOf("#") > -1) {
383383
let dayOfWeekOfMonthNumber: string = s.substring(s.indexOf("#") + 1);
384-
format = this.i18n.commaOnThe(dayOfWeekOfMonthNumber).trim() + this.i18n.spaceX0OfTheMonth();
384+
let dayOfWeek = s.substring(0, s.indexOf("#"));
385+
format = this.i18n.commaOnThe(dayOfWeekOfMonthNumber, dayOfWeek).trim() + this.i18n.spaceX0OfTheMonth();
385386
} else if (s.indexOf("L") > -1) {
386387
format = this.i18n.commaOnTheLastX0OfTheMonth(s.replace("L", ""));
387388
} else {

src/i18n/locale.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export interface Locale {
3737
third(s?: string): string;
3838
fourth(s?: string): string;
3939
fifth(s?: string): string;
40-
commaOnThe(s?: string): string;
40+
commaOnThe(s?: string, day?: string): string;
4141
spaceX0OfTheMonth(): string;
4242
lastDay(): string;
4343
commaOnTheLastX0OfTheMonth(s?: string): string;

src/i18n/locales/pt_BR.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ export class pt_BR implements Locale {
6565
commaAndOnX0() {
6666
return ", e de %s";
6767
}
68-
commaOnThe() {
69-
return ", na ";
68+
commaOnThe(s?: string, day?: string) {
69+
return day === '6' || day === '0' ? ", no" : ", na ";
7070
}
7171
commaOnTheLastDayOfTheMonth() {
7272
return ", no último dia do mês";
@@ -110,23 +110,23 @@ export class pt_BR implements Locale {
110110
everyX0Seconds() {
111111
return "a cada %s segundos";
112112
}
113-
fifth() {
114-
return "quinta";
113+
fifth(s?: string) {
114+
return s === '6' || s === '0' ? "quinto" : "quinta";
115115
}
116-
first() {
117-
return "primeira";
116+
first(s?: string) {
117+
return s === '6' || s === '0' ? "primeiro" : "primeira";
118118
}
119119
firstWeekday() {
120120
return "primeiro dia da semana";
121121
}
122-
fourth() {
123-
return "quarta";
122+
fourth(s?: string) {
123+
return s === '6' || s === '0' ? "quarto" : "quarta";
124124
}
125125
minutesX0ThroughX1PastTheHour() {
126126
return "do minuto %s até %s de cada hora";
127127
}
128-
second() {
129-
return "segunda";
128+
second(s?: string) {
129+
return s === '6' || s === '0' ? "segundo" : "segunda";
130130
}
131131
secondsX0ThroughX1PastTheMinute() {
132132
return "No segundo %s até %s de cada minuto";
@@ -140,8 +140,8 @@ export class pt_BR implements Locale {
140140
lastDay() {
141141
return "o último dia";
142142
}
143-
third() {
144-
return "terceira";
143+
third(s?: string) {
144+
return s === '6' || s === '0' ? "terceiro" : "terceira";
145145
}
146146
weekdayNearestDayX0() {
147147
return "dia da semana mais próximo do dia %s";

src/i18n/locales/pt_PT.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ export class pt_PT implements Locale {
6565
commaAndOnX0() {
6666
return ", e de %s";
6767
}
68-
commaOnThe() {
69-
return ", na ";
68+
commaOnThe(s?: string, day?: string) {
69+
return day === '6' || day === '0' ? ", no" : ", na ";
7070
}
7171
commaOnTheLastDayOfTheMonth() {
7272
return ", no último dia do mês";
@@ -110,23 +110,23 @@ export class pt_PT implements Locale {
110110
everyX0Seconds() {
111111
return "a cada %s segundos";
112112
}
113-
fifth() {
114-
return "quinta";
113+
fifth(s?: string) {
114+
return s === '6' || s === '0' ? "quinto" : "quinta";
115115
}
116-
first() {
117-
return "primeira";
116+
first(s?: string) {
117+
return s === '6' || s === '0' ? "primeiro" : "primeira";
118118
}
119119
firstWeekday() {
120120
return "primeiro dia da semana";
121121
}
122-
fourth() {
123-
return "quarta";
122+
fourth(s?: string) {
123+
return s === '6' || s === '0' ? "quarto" : "quarta";
124124
}
125125
minutesX0ThroughX1PastTheHour() {
126126
return "do minuto %s até %s de cada hora";
127127
}
128-
second() {
129-
return "segunda";
128+
second(s?: string) {
129+
return s === '6' || s === '0' ? "segundo" : "segunda";
130130
}
131131
secondsX0ThroughX1PastTheMinute() {
132132
return "No segundo %s até %s de cada minuto";
@@ -140,8 +140,8 @@ export class pt_PT implements Locale {
140140
lastDay() {
141141
return "o último dia";
142142
}
143-
third() {
144-
return "terceira";
143+
third(s?: string) {
144+
return s === '6' || s === '0' ? "terceiro" : "terceira";
145145
}
146146
weekdayNearestDayX0() {
147147
return "dia da semana mais próximo do dia %s";

test/i18n.ts

+43
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,27 @@ describe("i18n", function () {
181181
"A cada 5 minutos, entre 15:00 e 15:59, somente de segunda-feira a sexta-feira e domingo"
182182
);
183183
});
184+
185+
it("45 10 * * 6#2", function () {
186+
assert.equal(
187+
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
188+
"Às 10:45, no segundo sábado do mês"
189+
);
190+
});
191+
192+
it("45 10 * * 0#3", function () {
193+
assert.equal(
194+
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
195+
"Às 10:45, no terceiro domingo do mês"
196+
);
197+
});
198+
199+
it("45 10 * * 1#3", function () {
200+
assert.equal(
201+
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
202+
"Às 10:45, na terceira segunda-feira do mês"
203+
);
204+
});
184205
});
185206

186207

@@ -195,6 +216,28 @@ describe("i18n", function () {
195216
"A cada 5 minutos, entre 15:00 e 15:59, de segunda-feira a sexta-feira"
196217
);
197218
});
219+
220+
221+
it("45 10 * * 6#2", function () {
222+
assert.equal(
223+
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
224+
"Às 10:45, no segundo sábado do mês"
225+
);
226+
});
227+
228+
it("45 10 * * 0#3", function () {
229+
assert.equal(
230+
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
231+
"Às 10:45, no terceiro domingo do mês"
232+
);
233+
});
234+
235+
it("45 10 * * 1#3", function () {
236+
assert.equal(
237+
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
238+
"Às 10:45, na terceira segunda-feira do mês"
239+
);
240+
});
198241
});
199242

200243
describe("ro", function () {

0 commit comments

Comments
 (0)