How I Translated 277 Strings in 5 Minutes (Real-World Case Study)

Published: (January 4, 2026 at 01:44 PM EST)
3 min read
Source: Dev.to

Source: Dev.to

Cover image for How I Translated 277 Strings in 5 Minutes (Real‑World Case Study)

Nikolaos Protopapas

The Challenge

ShareX is an amazing open‑source screen‑capture tool with 35K+ GitHub stars. It supports 24 languages with 170 translatable strings.

I wanted to:

  • Add Greek as a new language
  • Complete Spanish translations
  • Find any unused localization keys

…and I wanted to do it for free – no paid translation APIs.

The Tool: LRM

LRM (Localization Resource Manager) is an open‑source CLI tool I built for managing localization files. It supports:

  • .resx (ShareX uses this), JSON, i18next, Android, iOS, PO, XLIFF
  • Free translation providers: MyMemory, Lingva, LibreTranslate
  • Local LLMs: Ollama (Llama, Mistral, etc.)
  • Paid providers: DeepL, Google, Azure, OpenAI, Claude (if you need them)

Step 1: Check Current Status

cd ~/ShareX/ShareX/Properties
lrm stats
┌─────────────────────────────────────────────────────────────────┐
│                     Localization Statistics                     │
├──────────┬──────┬────────────┬───────┬─────────┬─────────┬──────┤
│ Language │ Keys │ Translated │ Empty │ Missing │ Coverage│ Size │
├──────────┼──────┼────────────┼───────┼─────────┼─────────┼──────┤
│ default  │ 170 │ 170 │ 0 │ 0 │ 100.0% │ 48KB │
│ de       │ 163 │ 163 │ 0 │ 7 │ 95.9% │ 47KB │
│ es       │ 63  │ 63  │ 0 │ 107 │ 37.1% │ 20KB │
│ fr       │ 170 │ 170 │ 0 │ 0 │ 100.0% │ 50KB │
│ …        │ …   │ …   │ … │ …   │ …     │ …    │
└──────────┴──────┴────────────┴───────┴─────────┴─────────┴──────┘

Spanish is only at 37 % – let’s fix that.

Step 2: Add Greek (New Language)

lrm add-language el
✓ Created: Resources.el.resx
  Keys: 170 (copied from default)
  All values empty – ready for translation

Step 3: Translate with Free Providers

Option A – MyMemory (Free, No API Key)

# Translate Greek (all strings)
lrm translate "*" --provider mymemory --from en --to el

# Complete Spanish (only missing)
lrm translate "*" --provider mymemory --from en --to es --only-missing

Option B – Lingva (Free Google‑Translate proxy)

lrm translate "*" --provider lingva --from en --to el

Option C – Local Ollama (100 % Offline)

If you have Ollama running locally:

# Use Llama 3.2 or any model you have
lrm translate "*" --provider ollama --from en --to el

Configure the model in lrm.json:

{
  "Translation": {
    "AIProviders": {
      "Ollama": {
        "Model": "llama3.2",
        "ApiUrl": "http://localhost:11434"
      }
    }
  }
}

Step 4: Validate

lrm validate
✓ Validation passed
  Files: 25
  Issues: 0
  Placeholder mismatches: 0

LRM automatically checks that {0}, {1} placeholders are preserved.

Step 5: Find Unused Keys

lrm scan --show-unused
Code Scan Results
─────────────────
Source files scanned: 847
Localization keys: 170

Unused Keys (5):
  • HotkeyType_DisableHotkeys
  • QuickTaskMenuEditorForm_Separator
  • TaskSettings_CaptureAutoHideTaskbar
  • …

Five keys exist in the .resx files but aren’t used in the code.

Results

LanguageBeforeAfterStrings
Greek0 %100 %170 new
Spanish37 %100 %107 added

Total: 277 strings translated in ~5 minutes

Bonus: Team Collaboration with LRM Cloud

For team projects, sync to LRM Cloud (free tier available):

lrm cloud push

LRM Cloud Dashboard

Features

  • Web‑based translation editor
  • Translation memory & glossary
  • GitHub integration
  • Role‑based team access

Full Case Study

See the complete walkthrough with all CLI output:
ShareX Case Study on GitHub

Get Started

# Download LRM
curl -L https://github.com/nickprotop/LocalizationManager/releases/latest/download/lrm-linux-x64.tar.gz | tar xz

Or on Windows

Download from GitHub Releases

Check your project

cd ./YourProject/Resources
lrm stats

Links

Have questions? Drop a comment or open a GitHub Discussion!

Back to Blog

Related posts

Read more »

OpenGitOps

Article URL: https://opengitops.dev/ Comments URL: https://news.ycombinator.com/item?id=46491765 Points: 6 Comments: 0...