This guide explains how to add or update datasheet content for your language.
Datasheets describe each language dataset in Common Voice. They include information about the language, its writing system, text sources, and community contributors.
- Fork this repository
- Look at
content/_template/for the directory structure and file list - Look at
content/_example/for a filled-in reference - Create or edit files under
content/locales/{your-locale-code}/ - Submit a Pull Request
Datasheets can also be submitted via Google Form (English and Spanish):
Scripted/Read Speech:
Spontaneous Speech:
If you cannot access GitHub or the form, email the Common Voice team at commonvoice@mozilla.com.
content/locales/{locale}/
shared/ # Language-level (shared across SCS and SPS)
description.md About the language
variants.md Dialect / accent variants
accents.md Accent options
writing_system.md Writing system description
alphabet.md Symbol table
community_links.md Community resource links
scripted/ # Scripted Speech (SCS) only
corpus.md Text corpus description
sources.md Corpus sources
text_domain.md Text domain descriptions
processing.md Text processing applied
postprocessing.md Recommended post-processing
discussion_links.md Discussion links
contribute_links.md Additional contribute links
authors.md Datasheet authors
citation.md Citation guidelines
funding.md Non-OMSF or additional funding
spontaneous/ # Spontaneous Speech (SPS) only
transcriptions.md Transcription process description
postprocessing.md Recommended post-processing
discussion_links.md Discussion links
contribute_links.md Additional contribute links
authors.md Datasheet authors
citation.md Citation guidelines
funding.md Non-OMSF or additional funding- Only create files you have content for. Empty files are ignored.
shared/fields apply to both SCS and SPS. Write them once here instead of duplicating acrossscripted/andspontaneous/.- Write plain Markdown -- no Jinja2 or HTML needed.
- List items (bullets, numbered lists) are deduplicated at compile time as a safety net.
Datasheet content is built by the community over time. Fields have two edit modes that indicate how they should be maintained.
Additive fields -- extend, do not replace:
| Field | Why it grows |
|---|---|
sources.md |
New text sources are added across releases |
community_links.md |
New community spaces are created |
authors.md |
New contributors and community leads join over time |
citation.md |
New publications reference the dataset |
funding.md |
Additional funders may support the project |
When editing additive fields, add your entries below the existing content.
Do not remove previous contributions -- they represent the work of earlier
community members. Include version references where helpful (e.g.
v24.0, v22.0-present).
Descriptive fields -- rewrite or improve freely:
| Field | What it describes |
|---|---|
description.md |
The language itself |
variants.md |
Dialect / accent variants |
accents.md |
Accent options |
corpus.md |
Text corpus description |
text_domain.md |
Text domain descriptions |
transcriptions.md |
Transcription process |
writing_system.md |
How the language is written |
alphabet.md |
Symbol table or character list |
processing.md |
Current text processing pipeline |
postprocessing.md |
Current recommended post-processing |
discussion_links.md |
Current discussion channels |
contribute_links.md |
Current contribution paths |
These fields describe the current state. They can be rewritten entirely when the understanding improves -- they are not a historical record.
Mergeable fields -- community content + auto-generated data:
Some fields are also mergeable: the final datasheet includes auto-generated data alongside your content. Your community content is optional -- if you provide it, your text appears before the auto-generated data. If you don't provide it, only the auto-generated data appears. Each mergeable field is still either additive or descriptive -- follow the edit rules above.
| Field | Edit mode | Auto-generated data |
|---|---|---|
sources.md |
additive | Per-source counts (bundler) |
corpus.md |
descriptive | Corpus statistics (bundler) |
text_domain.md |
descriptive | Domain breakdown (bundler) |
variants.md |
descriptive | Per-variant recording stats (bundler) |
accents.md |
descriptive | Per-accent recording stats (bundler) |
transcriptions.md |
descriptive | Transcription quality metrics (bundler) |
community_links.md |
additive | Pontoon + Communities links (template) |
discussion_links.md |
descriptive | Matrix/Discourse/Discord/Telegram links (template) |
contribute_links.md |
descriptive | Speak/Write/Listen/Review links (template) |
See content/_example/ for examples, particularly
scripted/sources.md and scripted/authors.md for the additive style.
Some fields always include default links in the final datasheet. Your community content appears before the defaults. Do not duplicate the default links in your files.
community_links.md-- Pontoon translators link + Communities page are always includeddiscussion_links.md-- Matrix, Discourse, Discord, and Telegram links are always includedcontribute_links.md-- Standard contribution links are always included (Speak/Write/Listen/Review for SCS, question/transcription links for SPS)funding.md-- OMSF funding text is added for eligible locales (only when no community file exists)
By default, datasheets are generated in English. You can add support for a new language so that speakers of that language see the datasheet in their own language.
A translated datasheet requires two things:
- i18n strings -- section titles and boilerplate text in an i18n JSON file
- Template language mapping -- telling the compile script which locales use the new language
The compile script auto-discovers available template languages by scanning templates/i18n/*.json. No code changes are needed -- just add the files.
Create a new file in templates/i18n/{lang-code}.json by copying templates/i18n/en.json and translating all values. Keep the JSON keys unchanged.
The compile script detects which modalities the translation supports by checking for header_intro_scs and/or header_intro_sps keys. To support both SCS and SPS, include both keys. To support only one modality, include only the relevant key.
Use the English file as the reference for the complete list of keys. All shared keys (titles, labels) must be present; modality-specific keys can be omitted for unsupported modalities.
Existing translations:
| File | Language | Keys | Coverage |
|---|---|---|---|
en.json |
English | 55 | Complete (SCS + SPS) |
es.json |
Spanish | 55 | Complete (SCS + SPS) |
zh-TW.json |
Traditional Chinese | 55 | Complete (SCS + SPS) |
Edit metadata/template-languages.json to assign locales to your new template language. Only non-English locales need entries -- English is the default.
{
"_comment": "Template language overrides. Locales not listed here default to 'en'.",
"fr": "fr",
"fr-CA": "fr"
}If you want default link text in the new language, add the translated
community_links_defaults, discussion_links_defaults,
scs_contribute_links_defaults, and sps_contribute_links_defaults keys
to your i18n JSON file. See en.json for the pattern.
For OMSF funding text, add a translated string to OMSF_FUNDING_TEXT
in compile_datasheets.py.
python3 compile_datasheets.py {version} \
--api-snapshot metadata/api-snapshots/languagedata-{date}.json \
--prettyCheck that the output JSON contains your new template in templates.scs.{lang} (or templates.sps.{lang}) and that the mapped locales reference the correct template_language.