Skip to main content
shipi18n logo|Documentation

Frequently Asked Questions

General

What is Shipi18n?

Shipi18n is a set of open-source tools that translate your app's locale files using your own LLM key. It preserves placeholders, handles pluralization, and plugs into your workflow through a CLI, an MCP server, a Vite plugin and a GitHub Action. There is no hosted service and no account.

What does it cost?

The packages are free and Apache-2.0 licensed. You pay your LLM provider directly for the tokens you use, at their prices, with nothing added on top. Incremental mode means you only pay for keys that actually changed, so day-to-day translation of a mature locale file costs very little.

Which languages are supported?

Shipi18n supports 100+ languages including all major world languages, regional variants, and RTL languages like Arabic and Hebrew.

Technical

Are my translations cached?

Yes! Shipi18n maintains a 90-day translation memory. If you translate the same text again, it returns the cached result instantly at no additional cost.

How are placeholders handled?

Shipi18n automatically detects and preserves common placeholder formats:

  • {name} - i18next style
  • {{count}} - Handlebars/Angular style
  • %s, %d - printf style
  • {0}, {1} - Positional arguments

Can I use Shipi18n with my framework?

Yes! Shipi18n works with any i18n library that uses JSON locale files, including:

  • react-i18next / i18next
  • next-intl
  • vue-i18n
  • angular/localize
  • And many more...

See the integrations section for specific guides.

Troubleshooting

My GitHub Action is failing

Common causes:

  1. Invalid API key - Verify your ANTHROPIC_API_KEY repository secret
  2. Missing provider SDK - The action bundles them, but a custom setup may need @anthropic-ai/sdk
  3. Missing permissions - Add contents: write to workflow

See the GitHub Action setup guide for the full configuration reference.

The action ran but nothing changed

Incremental mode is on by default, so keys that already exist in the target files are skipped. Set incremental: false to force a full re-translation, and check the Actions tab in your repository for the run log.