All notable changes to this project will be documented in this file.

[0.9.0] - 2026-06-01

Changed

  • LangChain requirement widened to >= 0.8.0 (was ~> 0.6.2). The open upper bound means GettextTranslator no longer pins a maximum LangChain version, so host applications are free to upgrade LangChain (0.8.x, 0.9.x, …) without this library blocking dependency resolution. Verified compiling and testing clean against LangChain 0.8.11. The existing ContentPart / LLMChain.run/2 handling already covers the upstream content-structure and return-value changes introduced in 0.4.0.

Added

  • Configurable request retries — New optional :endpoint_retry_count config key, forwarded to the chat model constructor. Since LangChain 0.7.0 disabled Req-level HTTP retries by default and surfaces transient 429/503 errors after retry_count attempts (upstream default: 2), this lets you raise or disable retries for rate-limited endpoints. When omitted, the chat model's own default is used.

Dependencies

  • Bumped tooling/optional dependencies to latest within existing requirements: credo 1.7.16 → 1.7.18, ex_doc 0.40.1 → 0.40.3, phoenix_live_view 1.1.22 → 1.1.31.

[0.8.0] - 2026-03-26

Added

  • TranslateGemma Support — Automatic detection and prompt formatting for Google's TranslateGemma open translation models (4B, 12B, 27B). When the model name contains "translategemma" (case-insensitive), the library uses the model's required prompt structure: a single user message with professional translator persona, source/target language names and ISO codes, and two blank lines before the text to translate. No system message is sent.
  • Source Language Configuration — New :source_language config option to specify the language of msgid strings (defaults to "en"). Used by TranslateGemma to build accurate source-to-target translation prompts.
  • Language Names Utility — New GettextTranslator.Util.LanguageNames module mapping 90+ POSIX locale codes to full language names and ISO/BCP47 codes. Handles regional variants (e.g., pt_BR -> "Portuguese" / pt-BR, zh_CN -> "Chinese (Simplified)" / zh-Hans).

Changed

  • GettextTranslator.Processor.LLM now branches prompt construction based on model type: TranslateGemma models use the dedicated format, all other models use the existing system+user message format unchanged.
  • Provider type updated to include source_language field across parser, translator type, and dashboard resolver.

[0.7.0] - 2026-02-28

Breaking Changes

LangChain Upgrade: 0.5.x → 0.6.0

This release upgrades the LangChain dependency from ~> 0.5.0 to ~> 0.6.0, which includes new features and breaking changes upstream.

Upstream Breaking Changes (LangChain 0.6.0)

  • DeepResearch Source Migration — Inline Source struct replaced with unified Citation/CitationSource structs
  • Perplexity Response Format — Content now returns as ContentPart structs instead of plain strings
  • Google AI Grounding Metadata — Raw metadata moved to message.metadata["grounding_metadata"]

Note: These upstream changes do not affect the core translation workflow of this library, as it does not use DeepResearch, Perplexity, or Google AI grounding features directly.

New Upstream Features Available

  • Citations Support — Unified citation abstraction across all providers (Anthropic, OpenAI, Google AI, Perplexity)
  • Customizable Run Modes — Composable execution modes (WhileNeedsResponse, UntilSuccess, Step, UntilToolUsed)
  • Streaming Reasoning Callbackson_llm_reasoning_delta for Azure OpenAI reasoning summaries

Added

  • Quick Prompt Buttons — Locale-aware translation action buttons (Regenerate, Short Version, Rephrase, Synonyms) in the translation details panel
  • PromptTemplates Module — New GettextTranslator.Dashboard.PromptTemplates module with per-locale prompt templates for 7 languages (English, Ukrainian, Spanish, German, Polish, French, Portuguese)
  • Quick Translate Event — New llm_quick_translate LiveView event handler for executing prompt-based translation actions

Changed

  • Renamed "LLM Translate" button to "GPT" for brevity
  • Updated LangChain dependency from ~> 0.5.0 to ~> 0.6.0

[0.6.0] - 2026-02-11

Added

  • Dashboard Tab Navigation — Page-level tabs separating Translation Stats, New Extracted, and New Translated views for a streamlined workflow
  • Extract & Merge from Dashboard — Run mix gettext.extract --merge --no-fuzzy directly from the dashboard UI; automatically switches to the New Extracted tab to show newly discovered strings
  • Batch Translate All Pending — Translate every pending entry in a single click with real-time progress bar tracking; uses sequential processing to respect LLM API rate limits
  • New Translated Review Tab — After batch translation, a dedicated tab appears showing all translations from the current session grouped by language and domain, allowing review, editing, and approval before saving
  • LLM Provider Override — Session-scoped form to switch AI adapter (OpenAI, Anthropic, Ollama, Google AI), model, API key, and endpoint URL without modifying config files
  • Extractor Module — New GettextTranslator.Util.Extractor for dev/prod-aware extraction (System.cmd in dev, Expo-based merge in releases)

Changed

  • Dashboard UI restructured from flat view to tab-based navigation
  • Improved session-based config passing between init and mount for reliable path resolution across LiveDashboard page loads
  • Updated README with full dashboard workflow documentation and screenshots

Fixed

  • Fixed gettext_path being nil on page reload by passing config through the LiveDashboard session instead of relying solely on ETS/persistent_term

[0.5.0] - 2025-11-11

Breaking Changes

LangChain Upgrade: 0.3.3 → 0.4.0

This release upgrades the LangChain dependency from 0.3.3 to 0.4.0, which introduces breaking changes in how LLM responses are handled.

What Changed

  • Message Content Structure: LangChain 0.4.0 returns message content as a list of ContentPart structs instead of plain strings
    • Before: %Message{content: "text response"}
    • After: %Message{content: [%ContentPart{type: :text, content: "text response"}]}
    • The library now automatically converts this using ContentPart.parts_to_string/1

Model Support Changes

LangChain 0.4.0 officially supports only the following LLM providers:

  • OpenAI ChatGPT - Fully supported
  • Anthropic Claude - Fully supported
  • Google Gemini - Fully supported
  • Google Vertex AI - Fully supported
  • Other models - May not work with LangChain 0.4.0

Important: If you're using ChatOllamaAI or other unsupported models, they may not function correctly with this version. We recommend:

  1. Testing your specific model after upgrading
  2. Using one of the officially supported providers
  3. Implementing a custom adapter if needed
  4. Staying on version 0.4.5 if you require unsupported models

Migration Notes

If you're upgrading from 0.4.5 to 0.5.0:

  1. No configuration changes required - Your existing configuration will continue to work
  2. Test your LLM provider - Verify translations work with your chosen provider
  3. Check the updated README - New examples added for Anthropic Claude, Google Gemini, and custom endpoints

Added

Changed

  • Updated LangChain dependency from 0.3.3 to ~> 0.4.0
  • Modified message content handling to support new ContentPart structure
  • Updated README with additional provider examples and custom endpoint configuration

Technical Details

The translate/2 function in GettextTranslator.Processor.LLM now:

  • Pattern matches on {:ok, %{last_message: %Message{content: content}}}
  • Converts ContentPart list to string using ContentPart.parts_to_string/1
  • Maintains backward compatibility with existing configurations

[0.4.5] - 2025-09-03

  • Fixed bug regarding nil values in the message strings that the Expo.PO.Composer can't handle.

[0.4.4] - 2025-06-25

  • Fixed bug with plural translations #14

[0.4.3] - 2025-06-25

  • Fixed bug regarding a new creation of changelog entries when making PRs to gitlab.

[0.4.2] - 2025-05-08

  • Fixed difference in changelog structure when making PR and saving locally to files.

[0.4.1] - 2025-05-08

  • Fixed bugs.

[0.4.0] - 2025-05-08

[Breaking chanegs]
  • Reworked changelog integration to use a simple 1:1 mapping between translations and changelog entries. Previous changelog will be overwritten, therefore new changelog entries will be created with a different structure.
  • Fixed bugs, refactored code.
  • Added visibility which changes are done in current session and will be commited or saved to files.

[0.3.0] - 2025-05-04

  • Git integration for committing changes as PRs.
  • Support Gitlab and Github (not fully tested).

[0.2.3] - 2025-05-01

  • Fixes for release environments

[0.2.2] - 2025-05-01

  • Update regex pattern in extract_language_code/1 to correctly match LC_MESSAGES folder structure
  • Extract common path patterns to module attributes to reduce repetition
  • Add private app_path/2 helper to standardize path generation
  • Ensure consistent path handling across all helper functions

[0.2.1] - 2025-05-01

Fixed

  • Fixed path resolution in release environments by using Application.app_dir
  • Added application parameter to properly resolve paths in releases
  • Fixed Ukrainian pluralization by adding support for required third plural form
  • Modified TranslationStore to correctly save and load translations in releases
  • Added ETS-based configuration for LiveDashboard integration
  • Improved PathHelper to handle both development and production environments

Added

  • New helpers for proper path resolution in both dev and release environments
  • ETS-based configuration state management between LiveView mounts
  • Support for additional plural forms required by specific languages

[0.2.0] - 2025-03-08

Added

  • Phoenix LiveDashboard integration for monitoring and managing translations
  • In-memory translation store using ETS tables
  • Web UI for viewing, editing, and approving translations
  • Filtering and pagination in dashboard
  • Improved documentation with dashboard setup guide

Fixed

  • LLM integration for gettext files.

[0.1.0] - 2025-02-23

Added

  • Initial release of GettextTranslator.
  • Multi-provider support for AI translation.
  • CLI integration for translating Gettext files.
  • Basic documentation and configuration examples.