-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
feat(locales): add nl #4425
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(locales): add nl #4425
Changes from 1 commit
f3f49e4
4453106
2ded95a
9e2c645
c156d23
9f56a8f
61efd33
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,126 @@ | ||||||||||||||||||||||||||||||||||||||||||
import type { $ZodStringFormats } from "../core/checks.js"; | ||||||||||||||||||||||||||||||||||||||||||
import type * as errors from "../core/errors.js"; | ||||||||||||||||||||||||||||||||||||||||||
import * as util from "../core/util.js"; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
const Sizable: Record<string, { unit: string; }> = { | ||||||||||||||||||||||||||||||||||||||||||
string: { unit: "tekens" }, | ||||||||||||||||||||||||||||||||||||||||||
file: { unit: "bytes" }, | ||||||||||||||||||||||||||||||||||||||||||
array: { unit: "elementen" }, | ||||||||||||||||||||||||||||||||||||||||||
set: { unit: "elementen" }, | ||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
function getSizing(origin: string): { unit: string; } | null { | ||||||||||||||||||||||||||||||||||||||||||
return Sizable[origin] ?? null; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
export const parsedType = (data: any): string => { | ||||||||||||||||||||||||||||||||||||||||||
const t = typeof data; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
switch (t) { | ||||||||||||||||||||||||||||||||||||||||||
case "number": { | ||||||||||||||||||||||||||||||||||||||||||
return Number.isNaN(data) ? "NaN" : "getal"; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
case "object": { | ||||||||||||||||||||||||||||||||||||||||||
if (Array.isArray(data)) { | ||||||||||||||||||||||||||||||||||||||||||
return "array"; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
if (data === null) { | ||||||||||||||||||||||||||||||||||||||||||
return "null"; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) { | ||||||||||||||||||||||||||||||||||||||||||
return data.constructor.name; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
return t; | ||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
const Nouns: { | ||||||||||||||||||||||||||||||||||||||||||
[k in $ZodStringFormats | (string & {})]?: string; | ||||||||||||||||||||||||||||||||||||||||||
} = { | ||||||||||||||||||||||||||||||||||||||||||
regex: "invoer", | ||||||||||||||||||||||||||||||||||||||||||
email: "emailadres", | ||||||||||||||||||||||||||||||||||||||||||
url: "URL", | ||||||||||||||||||||||||||||||||||||||||||
emoji: "emoji", | ||||||||||||||||||||||||||||||||||||||||||
uuid: "UUID", | ||||||||||||||||||||||||||||||||||||||||||
uuidv4: "UUIDv4", | ||||||||||||||||||||||||||||||||||||||||||
uuidv6: "UUIDv6", | ||||||||||||||||||||||||||||||||||||||||||
nanoid: "nanoid", | ||||||||||||||||||||||||||||||||||||||||||
guid: "GUID", | ||||||||||||||||||||||||||||||||||||||||||
cuid: "cuid", | ||||||||||||||||||||||||||||||||||||||||||
cuid2: "cuid2", | ||||||||||||||||||||||||||||||||||||||||||
ulid: "ULID", | ||||||||||||||||||||||||||||||||||||||||||
xid: "XID", | ||||||||||||||||||||||||||||||||||||||||||
ksuid: "KSUID", | ||||||||||||||||||||||||||||||||||||||||||
datetime: "ISO datum en tijd", | ||||||||||||||||||||||||||||||||||||||||||
date: "ISO datum", | ||||||||||||||||||||||||||||||||||||||||||
time: "ISO tijd", | ||||||||||||||||||||||||||||||||||||||||||
duration: "ISO duur", | ||||||||||||||||||||||||||||||||||||||||||
ipv4: "IPv4-adres", | ||||||||||||||||||||||||||||||||||||||||||
ipv6: "IPv6-adres", | ||||||||||||||||||||||||||||||||||||||||||
cidrv4: "IPv4-bereik", | ||||||||||||||||||||||||||||||||||||||||||
cidrv6: "IPv6-bereik", | ||||||||||||||||||||||||||||||||||||||||||
base64: "base64-gecodeerde tekst", | ||||||||||||||||||||||||||||||||||||||||||
base64url: "base64 URL-gecodeerde tekst", | ||||||||||||||||||||||||||||||||||||||||||
json_string: "JSON string", | ||||||||||||||||||||||||||||||||||||||||||
e164: "E.164-nummer", | ||||||||||||||||||||||||||||||||||||||||||
jwt: "JWT", | ||||||||||||||||||||||||||||||||||||||||||
template_literal: "invoer", | ||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
const error: errors.$ZodErrorMap = (issue) => { | ||||||||||||||||||||||||||||||||||||||||||
switch (issue.code) { | ||||||||||||||||||||||||||||||||||||||||||
case "invalid_type": | ||||||||||||||||||||||||||||||||||||||||||
return `Ongeldige invoer: verwacht ${issue.expected}, ontving ${parsedType(issue.input)}`; | ||||||||||||||||||||||||||||||||||||||||||
case "invalid_value": | ||||||||||||||||||||||||||||||||||||||||||
if (issue.values.length === 1) return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`; | ||||||||||||||||||||||||||||||||||||||||||
return `Ongeldige optie: verwacht één van ${util.joinValues(issue.values, "|")}`; | ||||||||||||||||||||||||||||||||||||||||||
case "too_big": { | ||||||||||||||||||||||||||||||||||||||||||
const adj = issue.inclusive ? "<=" : "<"; | ||||||||||||||||||||||||||||||||||||||||||
const sizing = getSizing(issue.origin); | ||||||||||||||||||||||||||||||||||||||||||
if (sizing) | ||||||||||||||||||||||||||||||||||||||||||
return `Te lang: verwacht dat ${issue.origin ?? "waarde"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementen"} bevat`; | ||||||||||||||||||||||||||||||||||||||||||
return `Te lang: verwacht dat ${issue.origin ?? "waarde"} ${adj}${issue.maximum.toString()} is`; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
case "too_small": { | ||||||||||||||||||||||||||||||||||||||||||
const adj = issue.inclusive ? ">=" : ">"; | ||||||||||||||||||||||||||||||||||||||||||
const sizing = getSizing(issue.origin); | ||||||||||||||||||||||||||||||||||||||||||
if (sizing) { | ||||||||||||||||||||||||||||||||||||||||||
return `Te kort: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} bevat`; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
return `Te kort: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+86
to
+94
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Inconsistent fallback for - if (sizing) {
- return `Te kort: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} bevat`;
- }
- return `Te kort: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;
+ if (sizing) {
+ return `Te kort: verwacht dat ${issue.origin ?? "waarde"} ${adj}${issue.minimum.toString()} ${sizing.unit} bevat`;
+ }
+ return `Te kort: verwacht dat ${issue.origin ?? "waarde"} ${adj}${issue.minimum.toString()} is`; 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents
|
||||||||||||||||||||||||||||||||||||||||||
case "invalid_format": { | ||||||||||||||||||||||||||||||||||||||||||
const _issue = issue as errors.$ZodStringFormatIssues; | ||||||||||||||||||||||||||||||||||||||||||
if (_issue.format === "starts_with") { | ||||||||||||||||||||||||||||||||||||||||||
return `Ongeldige string: moet met "${_issue.prefix}" beginnen`; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
if (_issue.format === "ends_with") return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`; | ||||||||||||||||||||||||||||||||||||||||||
if (_issue.format === "includes") return `Ongeldige tekst: moet "${_issue.includes}" bevatten`; | ||||||||||||||||||||||||||||||||||||||||||
if (_issue.format === "regex") return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`; | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+100
to
+102
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) Keep consistent code style for return statements. Some return statements use braces and others are on the same line. Let's make it consistent. if (_issue.format === "starts_with") {
return `Ongeldige string: moet met "${_issue.prefix}" beginnen`;
}
-if (_issue.format === "ends_with") return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`;
-if (_issue.format === "includes") return `Ongeldige tekst: moet "${_issue.includes}" bevatten`;
-if (_issue.format === "regex") return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;
+if (_issue.format === "ends_with") {
+ return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`;
+}
+if (_issue.format === "includes") {
+ return `Ongeldige tekst: moet "${_issue.includes}" bevatten`;
+}
+if (_issue.format === "regex") {
+ return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;
+} 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents
|
||||||||||||||||||||||||||||||||||||||||||
return `Ongeldig: ${Nouns[_issue.format] ?? issue.format}`; | ||||||||||||||||||||||||||||||||||||||||||
coderabbitai[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) Add line break for consistent error cases. For clarity and consistency with other cases, consider adding a line break after the first _issue format check. case "invalid_format": {
const _issue = issue as errors.$ZodStringFormatIssues;
if (_issue.format === "starts_with") {
return `Ongeldige string: moet met "${_issue.prefix}" beginnen`;
}
+
if (_issue.format === "ends_with") return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`; 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents
|
||||||||||||||||||||||||||||||||||||||||||
case "not_multiple_of": | ||||||||||||||||||||||||||||||||||||||||||
return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`; | ||||||||||||||||||||||||||||||||||||||||||
case "unrecognized_keys": | ||||||||||||||||||||||||||||||||||||||||||
return `Onbekende key${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`; | ||||||||||||||||||||||||||||||||||||||||||
case "invalid_key": | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+107
to
+109
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Translate “key(s)” to Dutch -case "unrecognized_keys":
- return `Onbekende key${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+case "unrecognized_keys":
+ return `Onbekende sleutel${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`; 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents
|
||||||||||||||||||||||||||||||||||||||||||
return `Ongeldige key in ${issue.origin}`; | ||||||||||||||||||||||||||||||||||||||||||
case "invalid_union": | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+109
to
+111
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Translate “key” in invalid_key -case "invalid_key":
- return `Ongeldige key in ${issue.origin}`;
+case "invalid_key":
+ return `Ongeldige sleutel in ${issue.origin}`; 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents
|
||||||||||||||||||||||||||||||||||||||||||
return "Ongeldige invoer"; | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) Consider adding more context to error message. The "invalid_union" error message is very generic. Consider providing more detail to help users understand what went wrong. - return "Ongeldige invoer";
+ return "Ongeldige invoer: voldoet aan geen van de toegestane types"; 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents
|
||||||||||||||||||||||||||||||||||||||||||
case "invalid_element": | ||||||||||||||||||||||||||||||||||||||||||
return `Ongeldige waarde in ${issue.origin}`; | ||||||||||||||||||||||||||||||||||||||||||
default: | ||||||||||||||||||||||||||||||||||||||||||
return `Ongeldige invoer`; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
export { error }; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
export default function (): { localeError: errors.$ZodErrorMap } { | ||||||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||||||
localeError: error, | ||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider adding a line break for consistency.
In the 'too_small' case, you have an extra line break after the sizing conditional, but not in the 'too_big' case.
case "too_big": { const adj = issue.inclusive ? "<=" : "<"; const sizing = getSizing(issue.origin); if (sizing) return `Te lang: verwacht dat ${issue.origin ?? "waarde"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementen"} bevat`; + return `Te lang: verwacht dat ${issue.origin ?? "waarde"} ${adj}${issue.maximum.toString()} is`; }
📝 Committable suggestion
🤖 Prompt for AI Agents