Languages
HiLMS speaks as many languages as you tell it to. One is the default; the others sit behind an address of their own (/en/courses). What each language holds is up to you: a course exists once per language, the interface is translated for you, and any sentence you disagree with can be corrected without touching a file.
Adding languages is an administrator’s job. Writing in them is an editor’s.
The list
Section titled “The list”Settings → Languages (Ustawienia → Języki), administrators only, is every language this installation speaks, in the order the switcher shows them.
| Column | Means |
|---|---|
| Name (Nazwa) | How the language names itself — “Polski”, “English”. This is what visitors see in the switcher, and it is yours to correct |
| Language (Język) | The language code, which begins every address in that language |
| Enabled (Włączony) | A language that is off can be written in from the panel but is never served to a visitor |
| Default (Domyślny) | The one language whose addresses carry no code at all |
New language (Utwórz) offers every language code there is, with the name each one calls itself already filled in. Drag rows to set the order of the switcher.
Row actions:
- Make default (Ustaw jako domyślny) — the addresses without a code start being served in this language, and the previous default gets a code of its own. It switches the language on if it was off: a language nobody may see cannot be the one the front page is in.
- Enable / Disable (Włącz / Wyłącz) — neither is offered for the default language. While a language is off,
/de/coursesanswers “not found”, and everything written in it waits in the panel. - Edit (Edytuj) — the name and whether it is on. The code cannot be changed afterwards; it is part of every address.
- Delete (Usuń) — not offered for the default language, and refused while the language still holds something. The message names what holds it (“3 kursy”). Move or delete that content first.
An installation starts with one language, the one it was installed with. Adding a second costs nothing but the content you write in it: nothing is translated for you.
Why the default language has no code
Section titled “Why the default language has no code”The default language is the site as most people find it: /kursy, /o-nas, /. Every other language sits behind its code: /en/courses, /en/about-us, /en. The path itself is never translated — only the code in front of it changes. That way the address a visitor already had keeps working, and search engines are told about the other languages by the page itself.
The panel is not part of this. /admin has no language in its address, and neither do the API, the download links inside a lesson, or the addresses Google and Facebook were given for signing in.
The switch, for visitors
Section titled “The switch, for visitors”Where there is more than one enabled language, the header carries a Język button showing the language being read; it opens the list of languages, with the one being read marked. On a phone the same entries stand in the open inside the menu. What an entry shows is chosen under Ustawienia → Identyfikacja → Przełącznik języka: the language’s own name (“Polski”, “English” — the default), its code, its flag, or the flag with the name or the code. A flag stands for a country rather than a language, so it is never the whole answer: with the flag alone, the language’s name is still there for a screen reader.
A visitor who has chosen nothing gets the language their browser asks for, if the installation speaks it, and the default one otherwise. Using the switch while signed in also records the choice on the account, so it follows the person onto another computer.
Your own language
Section titled “Your own language”Two places, one setting:
- My account (Moje konto) → Profile (Profil) → Language (Język): the language of the site and of the mail HiLMS sends you. Saving that card asks for your password first, because the same form holds your email address.
- In the panel, the avatar menu → Language (Język): the panel has no language in its addresses, so this is where somebody working in it says which language to work in. It writes the same setting.
The language you choose follows you into your email as well: a message about a course you were granted arrives in your language, whoever set it off.
Numbers and dates follow it too. A file size reads “1,5 MB” in Polish and “1.5 MB” in English, and a date in the panel’s lists is written the way the language writes one — “3 paź 2026 20:13” in Polish, “Oct 3, 2026 8:13 PM” in English — in the clock you keep.
Writing a course or a page in another language
Section titled “Writing a course or a page in another language”A course is written in one language, and the same course in another language is a second course linked to the first. It has its own sections, lessons and blocks, so a translator can change anything without disturbing the original. The pictures, videos and downloads are files of the media library, which both courses show: nothing is uploaded twice, and a picture’s alternative text is written on the file once per language, so each course reads it in its own (The media library).
In the course editor the sidebar carries Translations (Tłumaczenia):
- the other languages of this course, as links — click one to edit it;
- Add a translation (Dodaj tłumaczenie) — pick a language and HiLMS makes the copy: the title, the summary, the description, the category, the instructors, the tags, the cover and every section, lesson and block, showing the same library files. The copy is a draft, so nothing appears in the new language until somebody has read it through and published it. You land in the copy straight away;
- behind the Translations (Tłumaczenia) button: Link an existing one (Połącz z istniejącym), for two courses you wrote separately and now want joined — it offers courses of another language that belong to no group yet — and Unlink this one (Odłącz to), which takes this course out of the group. Nothing is deleted either way.
The Language (Język) field in Details (Szczegóły) is locked once a course has translations: changing it would change what the others are translations of. A course on its own can be moved to another language freely.
Pages work exactly the same way, with their Język field under Publikacja. Dodaj tłumaczenie copies the page with its blocks (showing the same pictures), its template and its audience, as a draft. No page is treated differently: they are all yours.
The three settings under Ustawienia → Strony serwisu follow the translations rather than one row, so a visitor reading in English gets the English front page when there is one and the default language’s when there is not (Pages).
Both the course list and the page list carry a Język column and a language filter once there is more than one language.
Menus per language
Section titled “Menus per language”A menu is assigned to a place, and a place is one area of the site in one language: Nagłówek — Polski, Stopka — English. A language you have not built a menu for reads the default language’s, and the site tells a screen reader that those words are in another language. See Menus.
What a student sees
Section titled “What a student sees”- The catalogue lists courses in every language, and the filter column narrows by language (see Browsing and learning). A card that is not in the language being read says which language it is in, in words.
- A course page and a lesson are drawn in the course’s own language, with the interface around them in the visitor’s. Somebody reading in English who opens a Polish course is taken to the English one when it exists.
- Addresses carry the language, so a link somebody shares opens in the language they were reading.
- Mail arrives in the language the person chose.
Categories, tags and the two branding lines
Section titled “Categories, tags and the two branding lines”These are labels rather than content, so they are not written again — they are translated field by field:
- Categories (Kategorie): the language switcher in the page header decides which language’s Name (Nazwa) and Description (Opis) you are editing. The category’s address stays one address, made from the name in the default language.
- Tags (Tagi) on a course: typed in the language you are working in.
- Branding (Identyfikacja), in Settings: the tagline and the footer line get one field per language, each naming its own (“Slogan · English”). The site name is not translated: a name is a name.
- Profile fields (Pola profilu), in Settings: a field’s Label (Etykieta) gets one input per language, and only the default language’s is required — a field with no English label still reads as its Polish one.
A label nobody wrote in the language being read falls back to another language rather than showing nothing: an empty category name says less than a name in another language.
Correcting a phrase
Section titled “Correcting a phrase”Phrases (Zwroty), administrators only, in the main navigation rather than in Settings because correcting a phrase is everyday work, is every sentence the application can say — its own, its modules’, Laravel’s and its packages’ — with the English behind each one and what the chosen language says now.
- Pick the Language (Język) you are correcting.
- Narrow the list if you like: Where it comes from (Skąd pochodzi) — this application, its modules, Laravel, packages and the panel — and State (Stan): Not translated yet (Jeszcze nieprzetłumaczone) or Corrected here (Poprawione tutaj).
- Search by the phrase, the English or the text.
- Correct (Popraw) opens the sentence with the English above it. Write what it should say and save; the site says it that way at once, and the text is marked as corrected here.
- Back to the file (Przywróć z pliku) appears only on a corrected phrase and puts the original back.
Two things to know:
- A correction must keep the
:placeholdersof the sentence it replaces —:count,:name,:language. The application puts a value there, and a correction that loses one is refused with an explanation. - Nothing you write here edits a file. An upgrade brings new and corrected translations without touching what you decided to call things.
Laravel’s own sentences — validation messages, the paginator, the password-reset mail — come ready-made for Polish. For another language somebody with server access adds the framework’s translation files once; until they do, those particular sentences stay English while everything HiLMS writes itself is translated. Either way, every one of them can be corrected on this page.
HiLMS is MIT-licensed. No replicants were harmed in the writing of these books.