Skip to content

Generate one ICS/RSS file per language for multi-language feeds #49

Description

@hhkaos

OTE events/feeds can carry per-field translations (name/description, keyed by BCP 47 tag), but feed.ics and feed.xml are only ever generated from the primary textLanguage content — build-feed reads translations but never feeds it to the exporters (see packages/build-feed/src/index.ts, around the FEED_CONFIG_FIELDS comment). JSON consumers (e.g. apps/embed) can use translations directly, but ICS/RSS subscribers only ever see one language.

Idea: generate one ICS/RSS file per language present in the feed's translations, so subscribers can pick e.g. feed.en.ics instead of only the primary-language feed.ics.

Open design questions to resolve before implementation:

  • Fallback semantics: a given event may have a translation for some languages but not others — does the per-language feed fall back to the primary text for that event, or omit/flag it?
  • Which languages to generate: the union of every event's + the feed's own translations keys? Configurable allow-list in ote.config.json?
  • Naming/URL convention: feed.en.ics vs en/feed.ics — needs to work with build-pages.yml (currently assumes one fixed feed.json/feed.ics/feed.xml) and with apps/preview's URL guessing (pagesUrl/rawUrl/sibling-file logic in apps/preview/src/main.ts), which also assumes fixed filenames.

Scope: this lives entirely in ote-tools (packages/build-feed, the two exporters, build-pages.yml, possibly apps/preview). Consuming repos (forks of ote-template) wouldn't need any changes beyond linking the new files.

Intentionally split out from the Markdown→HTML description rendering work (RSS <description> + ICS X-ALT-DESC) — independent, larger design decision.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesttool:build-feedFeed builder (packages/build-feed)tool:export-icsOTE -> iCalendar (packages/export-ics)tool:export-rssOTE -> RSS/JSON Feed (packages/export-rss)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions