Languages¶
| Rails | |
|---|---|
| Status | 🟡 |
| Code | config/application.rb, app/controllers/application_controller.rb (set_locale, default_url_options), config/locales/ |
Verified against code: 2026-10-20
Purpose¶
The public site speaks seven languages so sailors find SailEver in their own language. The signed-in logbook and the admin area are English for now. Emails follow the user's preferred language where texts exist.
Locales¶
en (default), de, fr, it, es, el, pt. A missing key falls back to English.
Which language a page uses¶
| Area | Language |
|---|---|
/admin… |
Always English, no prefix in URLs |
| Signed in (any page, also public pages) | Always English |
| Signed out | The URL prefix (/de/watchapp); no prefix = English |
| Emails to users | users.locale, else English (emails.md) |
| Watch apps | English only (not part of the server) |
- Every generated link keeps the current locale as a prefix, except in
/admin. - The footer has language links (EN DE FR IT ES EL PT) to the same page in each language.
- Every public page lists
hreflangalternates for all seven locales. - Films show German overlays on
deand English on every other locale (public-site.md). - The preferred language on the account page only affects emails.
Locale files¶
| File | Holds | Translated |
|---|---|---|
web.<locale>.yml |
Public site copy (web.*) |
All 7. The other six lack 38 newer keys (home carousel web.home.slides.*, "My Logbook" and others), which show in English. |
app.<locale>.yml |
Signed-in UI (app.*) |
English complete (210 keys); the other six have 39 |
logbook.<locale>.yml |
Trip, day and track screens (logbook.*) |
All 7 complete (not shown, since signed-in pages are English) |
sharing.<locale>.yml |
Share popover, crew section, public trip page, crew link pages, the account setting (sharing.*) |
English complete; German has the public page and crew link texts (the pages signed-out visitors see); the others show English |
rich_text.<locale>.yml |
Sailor bio and trip description: field labels, the model error, the "Last edited by" line (rich_text.*) |
English complete; German has the "Last edited" line (the public page); the others show English |
<locale>.yml |
Older shared keys (nav, auth, trips, boats, tracks, mailers, home.disclaimer …) |
English has all mailer texts; German has the magic-link, new-trip, account-deleted and support texts but not the email-change texts; the others have only the support texts |
Legal pages (imprint, privacy, terms) are English prose in the templates on every locale.
Rules¶
- New UI text goes into the English file first; other languages follow later and fall back to English until then.
- Counts in copy come from interpolation (
%{count}), never typed in. - Use the terms from
glossary.mdin every language (German uses "Track", not "Etappe").
Known deviations¶
en.ymlholds many keys from the old site that no page uses any more (home.features.*,home.faq.*,support_request.*,trips.dropzone.*,auth.sign_in_title…), andmailers.common,mailers.reply_sentandmailers.support_request_createdare defined twice in it (so areadminandtime).- French, Italian, Spanish, Greek and Portuguese have no magic-link or new-trip texts, and no language but English has the email-change texts; those emails fall back to English.