- Content MUST support all three languages (en, de, fr)
- NEVER change the meaning of content when translating. Always translate as 1:1.
- ALWAYS align the content with the corresponding base (defined in
archetypes)
- ALWAYS use the exact translations for headlines (defined in
archetypes)
- ALWAYS create new content pages with
hugo new {base}/{name} where base can be country, operator or booking.
- Use "Freifahrtschein" instead of "Freifahrtsschein"
- Use "FIP Coupon" instead of "FIP free travel"
- Use "Motorail train" instead of "car train"
- Use "Break of journey" instead of "Journey Interruption"
- Use ’ (U+2019) instead of ' (U+0027) for apostrophes in French content
| Deutsch |
Englisch |
Französisch |
| FIP Freifahrtschein |
FIP Coupon |
Coupon FIP |
| FIP Globalpreis |
FIP Global Fare |
Tarif Global FIP |
| FIP 50 Ticket |
FIP 50 Ticket |
Billet FIP 50 |
| FIP Ausweis |
FIP Card |
Carte FIP |
| Ticketschalter |
Ticket Office |
Guichet |
| Website |
Website |
Site Web |
| Telefon |
Telephone |
Téléphone |
| Fahrkartenautomat |
Ticket Machine |
Distributeurs de billets |
| Grenzpunkt |
Border Point |
Point frontière |
| FIP Rabatt / FIP Ermäßigung |
FIP Discount |
Remise FIP / Réduction FIP |
| FIP Freifahrtschein für Angehörige |
FIP Coupon for relatives |
Coupon FIP pour les ayants droit |
| SBB |
SBB |
CFF |
Use these exact translations for headlines on the pages:
| Deutsch |
Englisch |
Französisch |
| FIP Nutzung |
FIP Information |
Informations FIP |
| Wissenswertes |
Interesting |
Informations générales |
| Anreise und Grenzpunkte |
Arrival and Border Points |
Arrivée et points frontières |
| Zusammenfassung |
Summary |
Résumé |
| Gültigkeit FIP Tickets |
Validity of FIP Tickets |
Validité des Billets FIP |
| Zugkategorien und Reservierungen |
Train Categories and Reservations |
Catégories de trains et réservations |
| Klassenkategorien |
Class Categories |
Catégories de classes |
| Ticket- und Reservierungskauf |
Ticket and Reservation Purchase |
Achat de billets et réservations |
| Online |
Online |
En ligne |
| Telefon |
Telephone |
Par téléphone |
| Vor Ort |
On-Site |
En gare |
| Im Zug |
On the Train |
À bord du train |
| Ermäßigungen |
Discounts |
Réductions |
| Tarifliche Besonderheiten |
Special Tariff Conditions |
Conditions tarifaires spéciales |
| Empfehlungen |
Recommendations |
Recommandations |
| Quellen |
Sources |
Sources |
hugo serve: Start local development server
hugo --gc --minify: Build for production
npx prettier --write .: Format code
npx pagefind --site public: Generate search index
prek run -a: Run all prek checks
- HTML Templates: Use Hugo / Go template syntax
- JavaScript: ES6 modules with relative imports (
./filename.js).
- CSS/SCSS: Use SCSS with BEM-like naming, variables defined in
_variables.scss
- Markdown:
- Frontmatter in YAML format, use shortcodes for complex layouts
- When using shortcodes, pass each parameter on a new line for better readability.
- i18n: Files in
i18n/ sorted alphabetically by key, support en/de/fr languages
- Content in
content/ with multilingual structure (index.en.md, index.de.md, index.fr.md)
- Layouts in
layouts/ following Hugo conventions:
- Partials for reusable components in HTML files in
layouts/partials/
- Shortcodes for reusable components in Markdown files in
layouts/shortcodes/
- Assets in
assets/ (processed) and static/ (copied as-is)
- All commits MUST pass the prek hooks defined in
.prek-config.yaml
- HTML templates must be valid Go template syntax
- Do NOT add any comments to the code
- NEVER create markdown files outside the content directory