Defining Translations
Translations live in a version-controlledtranslations.yaml file at the project root, alongside evidence.config.yaml and theme.yaml. They apply to every page in the project — there is no per-page translations file.
Translations are defined in YAML format with 2-digit language codes (e.g., en, fr, es, de) as top-level keys. (Language Codes)
Nested Translations
You can organize translations into groups:Reusing Translations
Translations support i18next nesting syntax for reusing translations within other translations:$translations.report_title becomes “Q4 Revenue Report” in English or “Rapport Chiffre d’affaires T4” in French.
Using Translations in Pages
Translations are accessible via the special$translations variable.
Inline in Text
In Component Attributes
Templated in Strings
In SQL
Using Translations Inside SQL String Literals
Translation values often contain apostrophes (d'affaires, l'offre, chiffre d'affaires). Interpolating them raw into a '…' SQL string literal closes
the literal early and the warehouse rejects the query. Use the .sql
accessor in that position — Evidence escapes the value using the target
warehouse’s own string-literal rules (doubled quote '' on Postgres, DuckDB,
ClickHouse, Snowflake; backslash-escaped \' on BigQuery, Databricks):
Offre d'adhérents:
- On Postgres / DuckDB / ClickHouse / Snowflake:
where section = 'Offre d''adhérents' - On BigQuery / Databricks:
where section = 'Offre d\'adhérents'
Offre d'adhérents) — the escape is SQL
syntax only, never text the reader sees.
Use .sql only inside a single-quoted SQL string literal. Elsewhere —
plain text, headings, identifier concatenation like label_{{ $translations.langcode }} — the bare form is correct and .sql would
incorrectly rewrite apostrophes that were never inside a SQL literal.
Fallback Behavior
If a translation key is missing for the selected language, it will fall back to English (en) if available.
