Thanks for helping improve the translations for Classroom 50, the open-source GitHub Classroom alternative supported by the Fifty Foundation.
This repo holds the language packs — one <code>.json per locale (a
translation of the app's base locale,
en.json).
Most contributions here are small: fixing an awkward phrase, a typo, or a term
that reads wrong in your language. Those are exactly the changes we want.
New here? See the README for how packs are produced, installed, and published. This guide covers how to contribute a change.
- Fix or improve a translation — open a pull request editing the relevant
<code>.json(see below). - Report a bad string without fixing it — open an issue with the locale, the key, and what's wrong.
- Request a new language — open an issue. New languages are added on the
classroom50side (itstargets.json), then generated and opened here as a PR; you don't need to hand-write a new pack from scratch.
Please keep tokens, secrets, and private student data out of issues and PRs.
Every pack must stay structurally identical to en.json — same keys, same
nesting, same {{placeholders}}. The app and the CI both reject packs that
drift. So when you edit a <code>.json:
- Only change the string values. Never rename, add, remove, or reorder keys.
- Keep every
{{placeholder}}intact, spelled exactly as in the English source (e.g.{{count}},{{name}}). You may move a placeholder within the sentence to fit your language's word order, but don't rename it, drop it, or invent new ones. - Leave values as strings. No numbers, booleans, or nested objects on a leaf.
- Don't translate the keys or
en.json— the English file is the source of truth and lives in theclassroom50repo, not here.
Plural forms are the one place extra keys are allowed: i18next plural variants
(_zero, _one, _two, _few, _many, _other) of a key that already has a
_one/_other in the base are accepted, so you can add the plural categories
your language needs.
-
Fork this repo and create a branch.
-
Edit the
<code>.jsonfor your locale (e.g.fr.json,pt-BR.json). Change only values, per the rule above. -
Validate locally (optional but encouraged) — the same check CI uses:
# from a clone of the classroom50 repo, in web/src/locales, # with your edited pack copied in as <code>.json: python verify_locale.py fr.json
It prints
PASS/FAILand lists any missing/extra keys, non-string values, or placeholder mismatches.verify_locale.pylives inweb/src/locales/of theclassroom50repo. -
Open a pull request against
main. A maintainer reviews the diff and merges (squash). On merge, GitHub Pages redeploys and your change goes live athttps://foundation50.github.io/classroom50-language-packs/<code>.json.
Packs are periodically regenerated from the latest en.json by CI. This does
not clobber your work: the pipeline re-translates only the keys whose
English changed since the pack was last built, and carries every other
value — including your corrections — through untouched. So a merged fix
survives future runs unless the English for that exact string changes.
We squash-merge, so the PR title becomes the commit on main. Use a short,
imperative summary; the Conventional Commits
style used across Classroom 50 is welcome but not required for translation
edits. Examples:
fix(fr): correct wording of the assignment accept buttondocs: clarify placeholder rule
Keep PRs focused — one locale (or one theme) per PR makes review quick.
By contributing, you agree that your contributions will be licensed under the GNU General Public License v3.0, matching the Classroom 50 project.