0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-04 10:39:43 +08:00
discourse/config
Régis Hanol 00aad38a64
FIX: Base custom sidebar section translations on their source locale (#42027)
Previously, the custom sidebar section editor and the server assumed a
section's base title and link names were written in the site's current
*default* locale, so changing the default locale scrambled which
language each stored value mapped to and offered the wrong set of
translation targets ([meta](https://meta.discourse.org/t/408327)).

This change keys the editor, the same-locale de-duplication and the
collision cleanup off each record's own source locale — now surfaced as
an editable "Section language" — and reorganises the translation UI
around languages rather than fields.

### Notable behaviour changes

- Links keep their own source language, so saving a section no longer
relabels a link authored in a different one.
- A localization colliding with its record's source is now destroyed
instead of being left behind to shadow the base string. The collision is
matched **exactly**, so a regional variant like `en_GB` under an `en`
source is preserved.
- Localization permissions are evaluated against the visibility being
*submitted*, so making a section public and translating it in one save
no longer 403s and loses the edit.
- `create` now enforces localization permissions, which it previously
skipped entirely — an admin could write localizations onto a private
section. A non-admin submitting localizations on create now gets a `403`
instead of a silent drop, matching `update`.
- A submitted locale is validated at the request boundary: an
unsupported or over-long value returns `400` rather than an unhandled
`500`. A value already stored on the record is still accepted, so
AI-detected locales outside the supported list stay editable.

### UI

<img width="821" height="646" alt="2026-07-29 @ 14 56 10"
src="https://github.com/user-attachments/assets/19dad480-9f77-4f5b-b1a6-ed29689839a8"
/>
<img width="820" height="666" alt="2026-07-29 @ 14 56 16"
src="https://github.com/user-attachments/assets/a9377282-d4b2-43af-91a6-700e10c50ce6"
/>


Translations moved from inline per-field rows to a single "Manage
translations" entry point opening a language-major panel — one group per
language holding the section title and every link name. The old layout
rendered `1 + links × languages` rows with an add button per field,
which stopped being usable at three links and two languages.

A blank field means "not translated yet" rather than invalid, and
clearing a saved translation now asks for confirmation before removing
it.
2026-08-03 17:49:42 +02:00
..
environments
imagemagick FIX: Render topic OG images under ImageMagick policy (#42125) 2026-07-30 08:12:33 +08:00
initializers FIX: Do not notify new sites or plugins enabled of old upcoming changes (#42045) 2026-07-30 09:51:08 +10:00
locales FIX: Base custom sidebar section translations on their source locale (#42027) 2026-08-03 17:49:42 +02:00
application.rb DEV: Retroactive review and refactor of custom emoji bulk import/export (#41860) 2026-07-22 10:06:54 +10:00
boot.rb
cdn.yml.sample
database.yml
deploy.rb.sample
dev_defaults.yml
discourse.config.sample
discourse.pill.sample
discourse_defaults.conf
environment.rb
logrotate.conf
multisite.yml.production-sample
nginx.sample.conf DEV: remove x-real-ip references (#41371) 2026-07-03 15:53:21 -04:00
official_plugins.json DEV: Remove deprecated themes/plugins from the list (#41948) 2026-07-23 13:06:14 +02:00
pitchfork.conf.rb
projections.json
routes.rb FEATURE: Log staff actions for admin onboarding panel steps (#42032) 2026-07-24 14:43:01 -07:00
sidekiq.yml
site_settings.yml FEATURE: Improve crawler detection of unengaged traffic (#42198) 2026-08-03 10:46:19 +08:00
spring.rb
thin.yml.sample
unicorn_launcher