The catalogue that forgot two languages
The brief listed three interface languages: German, English and Russian. The first version written by the agent opened in Russian only. How that happened, and what we learned about multilingual catalogues.
The catalogue prototype worked in three languages from the start: an RU / DE / EN switch in the header, every label translated, even the names of publication languages. The brief for the AI agent stated it plainly: the catalogue and the reader account in Russian, German and English.
What we got
The first build opened in Russian. There was no switch, no German and no English. For a library in Tübingen, that meant most potential readers simply couldn’t use the catalogue.
The agent didn’t reject the requirement or argue with it. It just didn’t implement it: a large task got simplified, and a detail that seemed secondary fell out.
How we described multilingual support the second time
- The language on first visit is taken from the browser. If the browser language isn’t supported, the default language set by the librarian opens (German initially).
- The reader’s choice is remembered, and for logged-in readers it is saved in their profile and works on any device.
- Library texts — the name, loan rules, opening hours — are entered separately for each language. If a translation is missing, the default language is shown.
- Every label comes from dictionaries, not a single phrase hard-coded in the markup. The librarian workspace was Russian-only at first, but it was built on dictionaries too — and later gained German and English without a rewrite.
- Dates and numbers are formatted according to the selected language.

A second-level bug
Once the languages appeared, a subtlety surfaced. Publication language names had been set up for two-letter codes: en, de, fr. But the catalogue uses three-letter MARC codes: eng, ger, lat. The filter would have shown “eng” instead of “English”. You don’t see such things in the code until you look at real data.
Later, while taking screenshots for this journal, a third one turned up: in the export, languages are recorded inconsistently — “ger, eng”, “ger.”, “Fre”, “jap.”. Katlog showed each variant as a separate language, and the filter had 37 of them. After parsing and mapping to MARC codes, 15 real languages remained, and the non-standard values went to “Data quality”.