SaM Solutions, the Riga-based software engineering and IT services provider, has cut the time to translate its internal content from an estimated two and a half weeks of manual work to a few hours by running a self-hosted large language model inside the Umbraco CMS that carries the company's employee portal.
The need came from growth: the portal now holds more than a thousand pages of news, articles and corporate updates in English, German, Polish and Lithuanian, and manual translation was ruled out on volume and time grounds. Cloud translation services were rejected over data confidentiality and recurring subscription cost, so the company deployed the model on its own infrastructure instead, where all processing stays internal, there are no ongoing licensing or API fees after the initial on-premises setup, and the model can be fine-tuned on the company's own domain data so that it understands internal terminology, writing style and context-specific phrasing.
Choosing the model was measured rather than assumed. The team evaluated open-source models at different quantisation levels and versions, including Qwen, Deepseek, Mistral Nemo, Phi4 and Gemma, each tested with the same prompt on a representative sample of articles and scored on linguistic accuracy, tone consistency, handling of markup and abbreviations, and overall usability. Gemma 3 came out the clear winner, delivering the most consistent and coherent translations with the least post-processing, and became the foundation of the localisation pipeline.
The integration is deliberately modular. Untranslated documents are identified by scanning Umbraco metadata for content types such as News and Articles, and each qualifying document is assigned its own translation job so processing is traceable and isolated. A conditional publishing flow was established on top: News items publish automatically once translated, while Articles are held unpublished and sent to designated editors, because longer pieces carry specialised terminology and sensitive material such as corporate policies and ISO documentation.
Hangfire, a .NET job-scheduling library, handles the workflow with background execution, retry logic and a monitoring dashboard embedded in the CMS behind internal authentication, plus extended logging, manual job restart and off-peak scheduling.
Edge cases were handled with specific engineering decisions: long documents are segmented so they never exceed the model's context window, articles with intricate markup run a post-translation validation step that flags malformed output for manual review, short strings such as acronyms and product codes are filtered out before translation, failed runs are retried up to three times, and completed translations are scanned for mixed-language output.
In the initial rollout the system processed more than 1,300 documents, averaging about 30 seconds per document under 1,000 words, with rare outliers at five or six minutes.