Skip to content

Release Notes - v0.10.0

Overview

This release adds localization support for rendered Markdown output in 6 languages, and migrates the JSON schema to camelCase for consistency with the broader JSON ecosystem.

Highlights

  • Localized changelog output in English, German, Spanish, French, Japanese, and Chinese
  • Header text fully localized (Keep a Changelog, SemVer, Conventional Commits references)
  • JSON schema migrated from snake_case to camelCase (breaking change)
  • Custom locale override support for tailored translations
  • Commit hash validation with --require-commits flag

Breaking Changes

camelCase Migration

All JSON property names have been changed from snake_case to camelCase:

Old (snake_case) New (camelCase)
ir_version irVersion
tag_path tagPath
commit_convention commitConvention
generated_at generatedAt
compare_url compareUrl
upgrade_guide upgradeGuide
known_issues knownIssues
component_version componentVersion
cvss_score cvssScore
cvss_vector cvssVector
affected_versions affectedVersions
patched_versions patchedVersions

Migration: Update your CHANGELOG.json files to use camelCase property names, then run schangelog validate to verify.

Added

Localization Support

Generate changelogs in multiple languages:

# Generate in French
schangelog generate CHANGELOG.json --locale=fr -o CHANGELOG.md

# Generate in Japanese
schangelog generate CHANGELOG.json --locale=ja -o CHANGELOG.md

# Use custom translation overrides
schangelog generate CHANGELOG.json --locale=fr --locale-file=./custom-fr.json

Built-in Languages

Code Language Example Headers
en English Changelog, Added, Breaking
de German Änderungsprotokoll, Hinzugefügt, Breaking Changes
es Spanish Registro de cambios, Añadido, Cambios importantes
fr French Journal des modifications, Ajouté, Changements majeurs
ja Japanese 変更履歴, 追加, 破壊的変更
zh Chinese 变更日志, 新增, 破坏性变更

Custom Overrides

Create a JSON file to override specific translations:

{
  "messages": [
    {"id": "changelog.title", "translation": "Release Notes"},
    {"id": "category.added", "translation": "New Features"},
    {"id": "marker.breaking", "translation": "⚠️ BREAKING:"}
  ]
}

See the Localization Guide for all 50 customizable message IDs.

Commit Validation

Validate that changelog entries include commit hashes:

# Default: W005 warnings for missing commits (valid=true)
schangelog validate CHANGELOG.json --format=json

# Require commits: W005 becomes E010 errors (valid=false)
schangelog validate CHANGELOG.json --format=json --require-commits

# Strict mode also converts warnings to errors
schangelog validate CHANGELOG.json --format=json --strict

Exempt categories (don't require commit hashes):

  • highlights — Human-readable summaries
  • upgradeGuide — Documentation/guidance
  • knownIssues — Ongoing issues
Mode Missing Commit Result
Default W005 warning valid=true
--require-commits E010 error valid=false
--strict W005 as error valid=false

Library Additions

Renderer Options

import "github.com/grokify/structured-changelog/renderer"

// Built-in locale
opts := renderer.DefaultOptions().WithLocale("fr")

// With custom overrides
opts := renderer.DefaultOptions().
    WithLocale("fr").
    WithLocaleOverrides("./custom-fr.json")

md, err := renderer.RenderMarkdown(changelog, opts)

New Options

Option Description
Locale BCP 47 locale code (e.g., "en", "fr", "ja")
LocaleOverrides Path to custom translation JSON file

Dependencies

  • Added github.com/grokify/structured-locale v0.1.0 for localization support

Examples

See examples/l10n/ for rendered changelogs in all 6 languages:

What's Next

Future releases may include:

  • Additional languages (Portuguese, Russian, Korean, etc.)
  • RTL language support
  • Date format localization