Designing a calendar for 34 languages, 32 of which ship
The hard part of putting a calendar in another language isn't translating the words. It's that the same grid has to hold every language without redrawing it. We wrote locale definitions for 34 languages. Thirty-two of them ship. The two that don't are the most useful thing to explain, because they show exactly where a calendar layout breaks.
Two languages are benched over their month abbreviations
Lithuanian and Sourashtra are written and sitting in the code, commented out, with a note to ourselves: "weird month short names, need different layout." A short month label is supposed to be three or four characters wide. In those two languages it isn't, and rather than ship a grid where one column heading spills into the next, we held them back until the layout can take them. Advertising 34 and shipping 32 is the honest version of that trade.
Long month names shrink the type, in four steps
English gives you "May" — three letters. Finnish gives you "marraskuu" for November and "helmikuu" for February. German runs long too. A fixed font size that looks right for English overflows for half of Europe, so the month title scales down as the name gets longer: full size up to eight characters, then 82%, then 68%, then 56% for anything past sixteen. The reader never notices. That's the point — the design absorbs the length so the month always fits its box.
The week doesn't start on the same day everywhere
Most of the world starts the week on Monday; the US, Japan, Korea, and a few others start on Sunday, so each locale carries its own start day and the grid rotates to match. Week numbers add a second rule on top. The ISO 8601 numbering that most of the world uses is Monday-based — week one is the week holding the year's first Thursday — so on a Sunday-starting layout the week number has to be computed from the Monday inside that row, not from the Sunday you see on the left. Get that wrong and every week number is off by one for half the year.
Three languages read right to left
Arabic, Persian, and Hebrew flip the whole grid: the week runs right to left, so the first day sits on the right edge instead of the left. The catch is that numbers stay left to right even inside right-to-left text, so a single day cell in an Arabic month is a small bidirectional layout problem of its own — the label leans one way, the number the other. Marking three locales right-to-left in the config is one line; making the cells look deliberate is not.
The digits aren't always 1, 2, 3
Several locales don't count in the Arabic numerals you're reading now. Thai has its own digits (๐–๙); Arabic and Persian use Arabic-Indic ones. So the numbers aren't printed as raw figures — they're formatted through each locale's numbering system. On the layout that prints ISO week numbers, the week count and the days beside it come out in the locale's own digits: Thai numerals on a Thai calendar, Arabic-Indic on an Arabic one. Same grid, a different alphabet of numbers.
The PDF generator lost two locales' names, so we shipped them ourselves
We render the PDFs with a slim headless-Chromium build, and it turns out that build ships without the font and locale data for Norwegian Nynorsk and Icelandic. Left alone, the month and weekday names would render one way in a normal browser and blank or wrong in the generator — the exact kind of bug you only catch by printing. The fix was unglamorous: the correct names for both languages are hardcoded into the codebase so they come out identical every time, in the browser and on paper. Localization is half typography and half plumbing.
The same restraint that keeps it readable in every language
None of this shows up if you only ever print English, which is the point: the work is invisible when it succeeds. The calendar is text and hairlines with no decoration to fight the script — the same design system that keeps it ink-light is what lets one layout carry 32 languages. You can see every language we ship and print any of them at $19 once, for every year and size.