Locize

Created By
4 hours ago
Overview
<html lang="en">
  <head>
    <link rel="stylesheet" type="text/css" href="/assets/static/components_Code-3e34ba09.Dssfkf82.css">
    <link rel="stylesheet" type="text/css" href="/assets/static/components_CustomerLogoMarquee-159ffaa2.BWuGdCmw.css">
    <link rel="stylesheet" type="text/css" href="/assets/static/components_ImageModal-d039a1a5.DkMppxon.css">
    <link rel="stylesheet" type="text/css" href="/assets/static/css_cookie-consent-859f3a0a.BIwnj8jl.css">
    <link rel="stylesheet" type="text/css" href="/assets/static/css_font-530a5bb1.C_2GmKb2.css">
    <link rel="stylesheet" type="text/css" href="/assets/static/css_tailwind-8f883db8.hrYT9SzL.css">
    <link rel="stylesheet" type="text/css" href="/assets/static/vanilla-cookieconsent-cb8de7a4.CpXrOrr9.css">
    <link rel="stylesheet" type="text/css" href="/assets/static/pages_Layout-69d9ce51.BFXRn4rv.css">
    <meta charset="UTF-8" />
    
    
<title>MCP Server - Documentation - Locize</title><meta property="og:title" content="MCP Server - Documentation - Locize" />
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/img/favicon.ico"/><meta property="og:site_name" content="Locize"/><meta property="og:image" content="https://www.locize.com/img/locize_sticker.png"/><meta name="twitter:site" content="@locize"/><meta name="twitter:description" content="Connect AI assistants like Claude, Cursor, and GitHub Copilot to your Locize translation projects via the MCP (Model Context Protocol) server."/><link rel="canonical" href="https://www.locize.com/docs/integration/mcp"/><link rel="manifest" href="/manifest.json"/><link rel="shortcut icon" href="/img/favicon.ico"/><meta name="author" content="inweso Ltd liab. Co"/><meta name="language" content="en"/><meta name="revisit-after" content="7 days"/><meta name="format-detection" content="telephone=no"/><meta name="mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="default"/><meta name="slack-app-id" content="A71NM84Q6"/><meta property="og:type" content="website"/><meta property="og:url" content="https://www.locize.com/docs/integration/mcp"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="MCP Server - Documentation - Locize"/><script type="application/ld+json">{"@context":"https://schema.org","@type":"TechArticle","headline":"MCP Server - Documentation - Locize","description":"Connect AI assistants like Claude, Cursor, and GitHub Copilot to your Locize translation projects via the MCP (Model Context Protocol) server.","url":"https://www.locize.com/docs/integration/mcp","publisher":{"@type":"Organization","name":"Locize","url":"https://www.locize.com"}}</script><script>
        window.dataLayer = window.dataLayer || [];
        window.gtag = function() {
          window.dataLayer.push(arguments);
        }
        window.gtag('consent', 'default', {
          analytics_storage: 'denied',
          ad_user_data: 'denied',
          ad_personalization: 'denied',
          ad_storage: 'denied',
          wait_for_update: 500
        });
      </script>

<meta name="description" content="Connect AI assistants like Claude, Cursor, and GitHub Copilot to your Locize translation projects via the MCP (Model Context Protocol) server." /><meta property="og:description" content="Connect AI assistants like Claude, Cursor, and GitHub Copilot to your Locize translation projects via the MCP (Model Context Protocol) server." />


    
  </head>
  <body>
    
    <div id="root"><link rel="preload" as="image" href="/img/locize_color.svg"/><link rel="preload" as="image" href="/img/locize_white.svg"/><div data-theme="light" class="min-h-screen text-base-content flex flex-col relative overflow-x-hidden bg-soft-brand-gradient"><a href="#page-content" class="sr-only focus:not-sr-only focus:absolute focus:z-[9999] focus:bg-primary focus:text-white focus:px-4 focus:py-2 focus:top-2 focus:left-2 focus:rounded">Skip to content</a><header class="sticky top-0 z-50 brand-header"><div class="max-w-[90rem] mx-auto px-4"><div class="navbar px-0 min-h-[3.75rem]"><div class="navbar-start"><a href="/" class="inline-flex items-center gap-3 no-underline"><img src="/img/locize_color.svg" alt="Locize" class="h-7 w-auto"/></a></div><div class="navbar-center hidden md:flex"><nav class="flex items-center gap-7 text-sm font-medium" aria-label="Primary"><a class="brand-nav-link" href="/how-it-works">How it works</a><a class="brand-nav-link" href="/for-your-team">For your team</a><a class="brand-nav-link" href="/pricing">Pricing</a><a class="brand-nav-link" href="/customers">Customers</a><a class="brand-nav-link" href="/services">Services</a><a class="brand-nav-link" href="/ai">AI</a><a class="brand-nav-link" href="/docs">Docs</a><a class="brand-nav-link" href="/blog">Blog</a></nav></div><div class="navbar-end gap-2"><a class="brand-btn-outline btn-sm no-underline" href="https://www.locize.app/login" rel="noopener noreferrer" target="_blank">Login</a><a class="brand-btn btn-sm no-underline" href="https://www.locize.app/register" rel="noopener noreferrer" target="_blank">Register</a></div></div><div class="md:hidden pb-2"><nav class="flex items-center gap-5 text-sm font-medium overflow-x-auto whitespace-nowrap [scrollbar-width:none] [-webkit-overflow-scrolling:touch]" aria-label="Primary"><a class="brand-nav-link" href="/how-it-works">How it works</a><a class="brand-nav-link" href="/for-your-team">For your team</a><a class="brand-nav-link" href="/pricing">Pricing</a><a class="brand-nav-link" href="/customers">Customers</a><a class="brand-nav-link" href="/services">Services</a><a class="brand-nav-link" href="/ai">AI</a><a class="brand-nav-link" href="/docs">Docs</a><a class="brand-nav-link" href="/blog">Blog</a></nav></div></div></header><main id="page-content" class="flex-1 relative z-10"><div class="max-w-[90rem] mx-auto px-4 py-4"><div class="flex flex-col lg:flex-row gap-4 lg:gap-4"><div class="hidden lg:block"><aside id="sidebar" class="w-72 shrink-0 brand-card p-5 sticky top-[3.75rem]"><div class="mb-4"><a href="/docs" class="inline-flex items-center gap-2 no-underline"><span class="text-sm font-semibold text-base-content/70">Docs</span></a></div><label class="text-sm font-medium mb-1" for="docs-search">Search docs</label><input id="docs-search" type="search" placeholder="Type to filter…" class="input input-bordered w-full mb-4" value=""/><div class="flex flex-col gap-1 text-sm"><div class="px-3 pt-6 pb-2 text-[10px] font-bold uppercase tracking-[0.15em] text-base-content/40 mt-2 first:mt-0">Start Here</div><div><div class="flex items-center gap-2"><a href="/docs/introduction" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Introduction</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/getting-started" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Getting started</a><button type="button" class="btn btn-ghost btn-xs px-2" aria-label="Expand section" aria-expanded="false"><i class="material-icons" style="font-size:18px">chevron_right</i></button></div></div><div><div class="flex items-center gap-2"><a href="/docs/whats-inside" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">What&#x27;s inside?</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/the-different-views" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">The different views</a><button type="button" class="btn btn-ghost btn-xs px-2" aria-label="Expand section" aria-expanded="false"><i class="material-icons" style="font-size:18px">chevron_right</i></button></div></div><div class="px-3 pt-6 pb-2 text-[10px] font-bold uppercase tracking-[0.15em] text-base-content/40 mt-2 first:mt-0">Integration &amp; Delivery</div><div><div class="flex items-center gap-2"><a href="/docs/integration" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3 flex-1 px-3 py-2 rounded-xl no-underline bg-[color:var(--brand-primary)]/10 text-[var(--brand-ink)] font-semibold pl-3">Integration</a><button type="button" class="btn btn-ghost btn-xs px-2" aria-label="Collapse section" aria-expanded="true"><i class="material-icons" style="font-size:18px">expand_more</i></button></div><div class="mt-1 flex flex-col gap-1"><div><div class="flex items-center gap-2"><a href="/docs/integration/api" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">API</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/cdn-types-standard-vs-pro" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">CDN types: Standard vs. Pro</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/cli" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">CLI</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/figma-plugin" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">Figma Plugin</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/file-formats" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">File formats</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/github-action" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">GitHub Action</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/github-repository-dispatch-event" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">GitHub Repository Dispatch Event</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/i18n-formats" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">i18n Formats</a><button type="button" class="btn btn-ghost btn-xs px-2" aria-label="Expand section" aria-expanded="false"><i class="material-icons" style="font-size:18px">chevron_right</i></button></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/instrumenting-your-code" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">Instrumenting your code: i18next, react-intl, Vue-i18n, LinguiJS, Polyglot, and more</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/mcp" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6 flex-1 px-3 py-2 rounded-xl no-underline bg-[color:var(--brand-primary)]/10 text-[var(--brand-ink)] font-semibold pl-6">MCP Server</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/microsoft-teams" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">Microsoft Teams</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/personal-access-tokens" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">Personal Access Tokens</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/slack" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">Slack</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/integration/webhook" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-6">Webhook</a></div></div></div></div><div><div class="flex items-center gap-2"><a href="/docs/cdn" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">CDN (Content Delivery Network)</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/caching" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Caching</a><button type="button" class="btn btn-ghost btn-xs px-2" aria-label="Expand section" aria-expanded="false"><i class="material-icons" style="font-size:18px">chevron_right</i></button></div></div><div><div class="flex items-center gap-2"><a href="/docs/backend-fallback" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Backend Fallback</a></div></div><div class="px-3 pt-6 pb-2 text-[10px] font-bold uppercase tracking-[0.15em] text-base-content/40 mt-2 first:mt-0">Workflow</div><div><div class="flex items-center gap-2"><a href="/docs/namespaces" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Namespaces</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/versioning" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Versioning</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/review-workflow" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Review workflow</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/translation-memory" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Translation Memory</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/tags" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Tags</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/history" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">History</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/glossary" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Glossary</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/styleguide" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Styleguide</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/checks-issues" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Checks/Issues</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/context" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Context</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/automatic-translation" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Automatic Translation</a></div></div><div class="px-3 pt-6 pb-2 text-[10px] font-bold uppercase tracking-[0.15em] text-base-content/40 mt-2 first:mt-0">Administration</div><div><div class="flex items-center gap-2"><a href="/docs/user-management" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">User management</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/2-factor-authentication" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">2-factor authentication</a><button type="button" class="btn btn-ghost btn-xs px-2" aria-label="Expand section" aria-expanded="false"><i class="material-icons" style="font-size:18px">chevron_right</i></button></div></div><div><div class="flex items-center gap-2"><a href="/docs/multi-tenant" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Multi-Tenant</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/notifications" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Notifications</a></div></div><div><div class="flex items-center gap-2"><a href="/docs/backups" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Backups</a></div></div><div class="px-3 pt-6 pb-2 text-[10px] font-bold uppercase tracking-[0.15em] text-base-content/40 mt-2 first:mt-0">Resources</div><div><div class="flex items-center gap-2"><a href="/docs/guides" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">Guides</a><button type="button" class="btn btn-ghost btn-xs px-2" aria-label="Expand section" aria-expanded="false"><i class="material-icons" style="font-size:18px">chevron_right</i></button></div></div><div><div class="flex items-center gap-2"><a href="/docs/general-questions" class="flex-1 px-3 py-2 rounded-xl no-underline text-base-content/70 hover:text-base-content hover:bg-base-200/50 transition-colors pl-3">General questions</a><button type="button" class="btn btn-ghost btn-xs px-2" aria-label="Expand section" aria-expanded="false"><i class="material-icons" style="font-size:18px">chevron_right</i></button></div></div></div></aside></div><div id="page-container" class="min-w-0 flex-1"><div class="mb-4 lg:hidden"><button type="button" class="btn btn-outline btn-sm">Menu</button></div><div class="p-6 pb-12 brand-card brand-prose docs-content"><h1 id="locize-mcp-server">Locize MCP Server<a href="#locize-mcp-server" class="heading-anchor" aria-label="Link to this section"></a></h1>

The Locize MCP (Model Context Protocol) server lets AI assistants (Claude, Cursor, GitHub Copilot, and others) interact directly with your translation projects.

Server URL: https://mcp.locize.app

smart_display
YouTube Video
This video is hosted on YouTube. Accept YouTube cookies to watch it here.
Watch on YouTube

Setup

Claude Desktop / claude.ai (OAuth)

  1. Go to Settings > Connectors > Add custom connector
  2. Enter URL: https://mcp.locize.app
  3. Click Connect, and your browser opens a login/consent screen
  4. Sign in with your Locize account and grant the requested permissions
  5. A Personal Access Token is created automatically in your profile

Claude Code (CLI)

claude mcp add --transport http locize https://mcp.locize.app

Then run /mcp in a Claude Code session and complete the OAuth flow.

Note: After first-time OAuth, Claude Code may show "Authentication successful, but server reconnection failed." This is a known Claude Code issue; simply restart Claude Code and the server will connect automatically using the stored token.

Other HTTP-native clients (Cursor, VS Code, etc.)

Add the server URL https://mcp.locize.app in your client's MCP settings and complete the OAuth flow. The exact steps vary by client; consult your client's MCP documentation.

Stdio transport (PAT alternative)

For clients that support stdio but not HTTP, use mcp-remote as a bridge:

{
  "mcpServers": {
    "locize": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.locize.app"]
    }
  }
}

Authentication

The MCP server supports two authentication methods:

OAuth 2.0 (recommended): used automatically by Claude Desktop, Cursor, and other MCP clients that support it. No manual token management needed. The OAuth flow creates a Personal Access Token in your profile automatically. Access can be revoked at any time.

Personal Access Token (PAT): for CI/CD, scripts, or clients that don't support OAuth. Create one in your profile under Personal Access Tokens. Pass it as Authorization: Bearer lz_pat_.... See the PAT documentation for details on scopes and security.


Available tools

The MCP server exposes 22 tools organized by workflow:

Discovery

ToolDescription
list_projectsList all projects accessible via your token. Call this first.
get_project_statsTranslation coverage per version, language, and namespace
list_branchesList branch projects of a parent project
list_tenantsList tenant projects of a parent project

Translation content

ToolDescription
get_translationsFetch unpublished (editor state) translations with filtering by tags, timestamps, and pagination
get_published_translationsFetch published (CDN) translations for a namespace
find_missing_translationsCompare a target language against the reference language; returns missing and stale keys
report_missing_keysAdd new keys (never overwrites existing). Auto-batches at 1000 keys. If Automatic Translation is enabled, new keys on the reference language are translated into all target languages automatically.
update_translationsUpdate or delete translation keys. Set a value to null to delete.

Release workflow

ToolDescription
publish_versionPublish a version to the CDN. Returns a jobId for status tracking.
copy_versionCopy all translations from one version to another (e.g. latest → production)
copy_languageCopy a single language between versions
get_job_statusCheck or wait for async operations (publish, copy, merge) to complete

Branch workflow

ToolDescription
create_branchCreate a translation branch from a version
merge_branchMerge a branch back into its parent project

Project structure

ToolDescription
add_languageAdd a language to the project
remove_languageRemove a language and all its translations
change_languagesReplace the entire language list atomically
add_versionAdd a new version
delete_versionDelete a version and all its translations
rename_namespaceRename a namespace across all languages
delete_namespaceDelete a namespace and all its translations

Example prompts

Once connected, you can ask your AI assistant things like:

  • "Find all missing German translations in the checkout namespace"
  • "Publish the latest version of my project"
  • "Add Japanese to all versions"
  • "Create a branch for the v2 feature, translate it, then merge it back"
  • "Show me which keys changed in English this week"
  • "Report these new keys from my codebase to Locize"
  • "What's the translation coverage for the production version?"

PAT scopes

Tools require specific PAT scopes. If a tool returns a scope error, your token needs additional permissions.

ScopeTools
readlist_projects, get_project_stats, list_branches, list_tenants, get_translations, get_published_translations, find_missing_translations
writereport_missing_keys, update_translations, rename_namespace, delete_namespace
managepublish_version, copy_version, copy_language, get_job_status, create_branch, merge_branch, add_language, remove_language, change_languages, add_version, delete_version

Beyond PAT scopes

PAT scopes are only the first gate. Your project-level role and permissions still apply on top:

  • Project role: your role on a given project (admin / manager / publisher / user / accountant) always wins when it is stricter than the PAT scope. For example, a PAT with manage scope called by a user whose project role is readonly still cannot modify that project.
  • Language / version / namespace scope: if your membership is restricted to specific languages, versions, or namespaces, get_translations and find_missing_translations will reject requests outside that scope.
  • translateOnly users: the structural tools (add_language, remove_language, change_languages, add_version, delete_version, publish_version, copy_version, copy_language, create_branch, merge_branch, rename_namespace, delete_namespace) are blocked for users marked translate-only.
  • Blocked / revoked access: if your project membership is blocked or your PAT has been revoked, every tool call fails immediately with a 401.
  • Parent project access: for tenant and branch projects, merging translations with the parent only happens if your PAT also has access to the parent project; otherwise you see the child-only view.

Technical details

  • Transport: Streamable HTTP (Web Standard Request/Response)
  • Auth: OAuth 2.0 (Authorization Code + PKCE with Dynamic Client Registration) or PAT Bearer token
  • Endpoint: POST https://mcp.locize.app
  • OAuth metadata: GET https://mcp.locize.app/.well-known/oauth-protected-resource
  • Stateless: Each request creates a fresh MCP server instance. No session management required.

See also

    <script id="vike_pageContext" type="application/json">{"pageId":"\\/pages\\/docs\\/integration\\/mcp","routeParams":{},"data":{"docsIndex":[{"title":"2-factor authentication","description":"Learn how to enable and manage 2-factor authentication (2FA) in Locize for enhanced account security. Overview of supported methods and setup instructions.","href":"\\/docs\\/2-factor-authentication","searchText":"2 factor authentication"},{"title":"2-factor authentication with TOTP","description":"Step-by-step guide to enabling 2-factor authentication (2FA) with Time-based One-Time Password (TOTP) in Locize. Improve your account security using authenticator apps.","href":"\\/docs\\/2-factor-authentication\\/2-factor-authentication-with-totp","searchText":"2 factor authentication with TOTP Enhance your Locize account security by enabling Time based One Time Password (TOTP) as a second authentication factor. TOTP provides an extra layer of protection by requiring a code from an authenticator app in addition to your password. Prerequisites A smartphone or tablet with an authenticator app, such as: a Google Authenticator for iOS a Google Authenticator for Android A valid Locize user account How to enable TOTP 1. Open the corner menu (your avatar). 2. In the Two factor authentication card, click \"ENABLE TOTP\". 3. Scan the QR code with your authenticator app and enter the generated code. 4. If successful, you will see a green circle. 5. On future logins, you will be prompted for the TOTP code. 6. Enter the code from your app and click LOGIN."},{"title":"2-factor authentication with WebAuthn","description":"Step-by-step guide to enabling 2-factor authentication (2FA) with WebAuthn in Locize. Use hardware security keys or device credentials for secure, passwordless login.","href":"\\/docs\\/2-factor-authentication\\/2-factor-authentication-with-webauthn","searchText":"2 factor authentication with WebAuthn Strengthen your Locize account security by enabling WebAuthn as a second authentication factor. WebAuthn allows you to use hardware security keys or built in device credentials for secure, passwordless authentication. Prerequisites A WebAuthn compatible credential or device A valid Locize user account How to enable WebAuthn 1. Open the corner menu (your avatar). 2. In the Two factor authentication card, click \"ENABLE WEBAUTHN\". 3. Set up your WebAuthn credential. (The process depends on your device\\/credential type.) 4. If successful, you will see a green circle. 5. On future logins, you will be prompted for your WebAuthn credential. 6. The process depends on your device\\/credential type. You can add multiple WebAuthn credentials for different devices."},{"title":"2-factor authentication with Yubikey","description":"How to enable 2-factor authentication (2FA) in Locize using Yubico Yubikey hardware security keys. Step-by-step setup for strong, phishing-resistant account protection.","href":"\\/docs\\/2-factor-authentication\\/2-factor-authentication-with-yubikey","searchText":"2 factor authentication with Yubikey Add an extra layer of security to your Locize account by enabling Yubico Yubikey as a second authentication factor. Yubikeys are hardware security keys that provide strong, phishing resistant authentication. Prerequisites A Yubico Yubikey A valid Locize user account How to register a Yubikey 1. Open the corner menu (your avatar). 2. In the Two factor authentication card, click \"ENABLE YUBI\". 3. Insert the Yubikey into your workstation and touch or press the Yubikey button to inject the Yubikey ID. 4. If successful, you will see a green circle. 5. On future logins, you will be prompted for the Yubikey Security Code. 6. Insert the Yubikey and touch or press the button to inject the security code."},{"title":"Automatic Translation","description":"Enable automatic translation of new keys in Locize using machine translation or generative AI. Learn how to set up, trigger, and optimize your workflow.","href":"\\/docs\\/automatic-translation","searchText":"Automatic Translation Availability: Subscribed projects only. Automatic Translation lets Locize translate newly created keys in your reference language into all target languages automatically, using Machine Translation (MT) or Generative AI (depending on your project setup). Only new keys are translated automatically. Existing keys are not translated automatically. To translate existing content, use Bulk actions (see below). How it works (what to expect) Automatic Translation runs in the backend . After you save new keys in the reference language, translations will appear shortly after. Each automatically translated key counts as a normal modification . Trigger via API (and a powerful i18next workflow) You can also trigger Automatic Translation via the API. A particularly effective workflow is combining it with i18next’s feature: Your app detects missing keys at runtime It pushes them to Locize automatically Locize translates them instantly (MT \\/ GenAI), without a separate extraction step ➡️ Setup guide: Discover a Smarter Way: Automating i18next Translations with and Locize AI Important (i18next): When using , make sure is set to the same language as your reference language in Locize. Video reference: See this section Tip: Define a Styleguide for your project to provide tone, formality, and audience context to all AI providers automatically. Bulk translate existing keys To translate already existing content, use the AU or Machine translation task in Bulk actions. Related read: Using AI + human translations with Locize [](\\/blog\\/i18next locize ai human) The complete automated workflow Combine with Automatic Translation to create a fully automated localization pipeline: 1. Configure saveMissing in your i18next setup: 2. Enable Automatic Translation in your Locize project settings (Project → Settings → EDITOR, TM\\/MT\\/AI, ORDERING → enable Automatic Translation Workflow) 3. Write code : when i18next encounters a missing key, it sends it to Locize automatically 4. Locize auto translates using your configured provider with your styleguide, glossary, and translation memory as context 5. Translations go live via CDN, and your app receives them at next load without any deployment For teams using AI coding assistants: the MCP server's tool is the equivalent of for AI agent workflows. Learn more about the MCP server → Automatic translations + review workflow When you add a new key via the Locize UI and your project has the review workflow enabled for some languages, auto translations for those languages are automatically routed through review . They appear as pending review and are only published after approval, with no extra configuration needed. When using the CLI , API , or MCP , auto translations bypass the review workflow by default. To route them through review, use the option: CLI: API: MCP: Set on or Auto translations will appear as review proposals for languages with review enabled. They are only published after approval in the Locize UI. Learn more about the review workflow → Example: react i18next +"},{"title":"Backend Fallback","description":"Ensure your app always has translations available by configuring backend fallback in Locize. Learn how to use local or bundled resources for offline support and reliability.","href":"\\/docs\\/backend-fallback","searchText":"Backend Fallback Ensuring your application always has translations available, even if the network is down or the primary backend is unreachable, is crucial for a seamless user experience. Backend fallback lets you define a secondary source for translations, such as local or bundled resources, to guarantee reliability and offline support. Why use backend fallback? Provides resilience if the primary backend (e.g., Locize) is temporarily unavailable Enables offline support for your app Ensures users always see translations, even in poor network conditions Browser fallback with local \\/ bundled translations With i18next, you can configure a fallback backend in the browser. The primary backend (e.g., your Locize backend) is used first. If it is not reachable or does not serve translations, a secondary backend (such as local or bundled translations) is used. This is made possible by the chained backend. Example: Using bundled resources as a fallback Lazy loading in memory translations (e.g. with webpack) You can also lazy load your in memory translations, which is useful for large projects or when using bundlers like webpack. Example: Lazy loading JSON files as a fallback More information can be found here: i18next chained backend i18next resources to backend i18next locize backend Server side fallback with filesystem On server side you can also use the i18next fs backend for example instead of the in memory fallback. More information can be found here: i18next chained backend i18next fs backend i18next locize backend We suggest not to use multiple backends with the i18next chained backend in combination with saveMissing or updateMissing, because it may happen, that the trigger for this is based on stale data."},{"title":"Backups","description":"Automatic namespace backups: plans, configuration, restore, and best practices.","href":"\\/docs\\/backups","searchText":"Backups Automatic backups of your namespaces. Safe, simple and fully managed: pick a plan, configure how often you want snapshots and how long you want to keep them. Use the Backups tab to browse snapshots, download them as a ZIP or restore any version \\/ language \\/ namespace. Where backups are saved Backups are stored securely by Locize and are accessible from your project’s Backups tab. Each snapshot contains all namespaces, grouped (by language and version) under that run’s timestamp. Locize handles storage, retention and security. How to enable backups 1. Go to Billing → Add ons in your Locize project settings. 2. Under Backup Service , choose Standard or Pro and confirm purchase. 3. Backups for projects with the service enabled appear automatically in each project’s Backups tab. Note: enabling a plan bills the project monthly. You can switch plans at any time. Retention cleanup runs afterwards and removes anything beyond the new plan’s limits gradually. Configure backups for a project 1. Open your project settings in Locize. 2. Click the Backups tab. 3. Click Configure in the \"more\" (3 dots) menu. 4. Choose the scope : (default): backs up every version. Only for Pro plan, Standard plan can select only 1 version Or select specific version(s) to limit backups. 5. Choose frequency (depends on plan): Standard: weekly only. Pro: daily or weekly. 6. Save. Browse snapshots The Backups tab shows a left hand list of snapshot dates (newest first). Pick a snapshot to open it and drill down by version → language → namespace . You can also filter snapshots by date range to quickly find the snapshot you need. Download snapshots Click Download for a snapshot to create a ZIP with all namespace JSON files for that run. Large snapshots may take a few seconds to prepare. Restore snapshots You can restore at three levels: Version : restore an entire version (all languages and namespaces). Language : restore all namespaces for a language (e.g. ). Namespace : restore a single namespace (e.g. ) into the chosen version\\/language. Restore behavior Restores write back to your project’s translation store and will overwrite current keys for the selected scope, but the process is always controlled and transparent. The restore workflow shows a detailed list of files and changes to be restored, and requires explicit confirmation before any data is changed. You can cherry pick exactly what to restore (whether a whole version, a single language, or just one namespace), ensuring you never roll back more than intended. All restore actions are restricted to users with sufficient project permissions and are logged for auditability and compliance. Billing & costs Backups are sold as a plan add on (Standard or Pro). The monthly price is fixed. (see pricing) These fees cover backup creation, storage and retention according to plan limits. No per file or per download charges. Your project billing page displays: Selected plan, Frequency and retention settings, Snapshot count and total backed up file count, Monthly cost. Limits & behavior Standard plan: weekly backups, max 25 snapshots retained. Pro plan: daily or weekly backups, max 365 days retained (or up to 365 snapshots). When switching plans downward, existing snapshots are preserved; retention cleanup will remove older snapshots exceeding the new limits over time. Backups are created once per scheduled run (the runner runs daily and decides which projects need a snapshot that day based on frequency). Security & Privacy Enterprise Grade Disaster Recovery Backups are stored in Locize managed storage, encrypted at rest, and isolated from your production translation store. Data is stored in geographically redundant, isolated environments to ensure maximum resilience and business continuity. Backups are never publicly accessible. Access is strictly controlled by your project permissions. Audit & Compliance Ready. Maintain a 1 year audit trail of all translation changes with Pro retention, satisfying internal data governance and SOC2 requirements. Best practices Choose Standard for light use, and Pro for production and compliance needs. Use the scope option to back up only what you need (e.g., only production versions), which reduces snapshot size and speeds restores. FAQ Q. Will downgrading delete my backups immediately? A. No, existing backups remain. The retention job will remove snapshots exceeding the new plan limits over time. Q. Can I download a ZIP? A. Yes, choose a snapshot and use Download or download and create a ZIP. Q. Who can restore backups? A. Only users with appropriate project permissions (admins and managers without scope limit) can perform restores. Q. How often are backups created? A. Depends on your plan and configuration. The backup runner checks once per day and runs backups according to the plan frequency (daily\\/weekly\\/etc.)."},{"title":"Caching","description":"Learn about caching strategies in Locize, including cache-control, max-age settings, and best practices for balancing performance and up-to-date translations.","href":"\\/docs\\/caching","searchText":"Caching Efficient caching is crucial for fast and reliable delivery of your translations. By controlling how long files are cached, you can balance performance with the need for up to date content. If you're integrating Locize outside of a browser application, check out alternative caching options. Standard CDN vs Pro CDN caching Standard CDN: Has a fixed caching setting; custom cache times are not available. Pro CDN: Allows you to set custom cache times (max age) per version for more control. Custom caching is only available with the Pro CDN type. The Standard CDN uses a fixed cache duration. Best practices and recommendations For development versions, disable caching ( ) to always get the latest translations. For production, use a low but non zero cache value to balance performance and update speed. Create a dedicated version for production, and do not enable auto publish for it. Enable Cache Control max age. Publish manually or via the API or CLI. Avoid enabling caching on the default \"latest\" version for a better saveMissing developer experience. Why is there such a high download amount?"},{"title":"Alternative Caching with i18next","description":"Explore advanced caching strategies for translations using i18next, including localStorage, chained backends, and offline support for browser and server environments.","href":"\\/docs\\/caching\\/alternative-caching-with-i18next","searchText":"Alternative Caching with i18next In some scenarios, you may want more control over how translations are cached, especially outside of browser based applications or when you need offline support. i18next provides flexible caching options for browser, server, React Native, and Next.js environments. Server side caching with filesystem For server side applications, you can cache translations on disk using the filesystem backend. This reduces API calls and speeds up translation loading. Again, you can use the chained backend to fall back to Locize if the cache is missing or expired. More information: i18next chained backend i18next fs backend i18next locize backend React Native caching with AsyncStorage For React Native apps, you can cache translations using AsyncStorage. This works well for mobile offline support. Use it with the chained backend to fall back to Locize as needed. More information: i18next chained backend i18next async storage backend i18next locize backend Server side Next.js caching with filesystem For Next.js apps using next i18next, you can use custom backends to cache translations on disk and fall back to Locize as needed. App Router (next i18next v16+) With next i18next v16, use with a chained backend on the server side: See the next i18next v16 blog post for the full setup guide, including client side caching with . Pages Router (next i18next v15 \\/ v16 via next i18next\\/pages) Example : More information: next i18next v16 blog post next i18next locize example (Pages Router) i18next chained backend i18next fs backend i18next locize backend Note: We suggest not to use multiple backends with the i18next chained backend in combination with or , because triggers for these features may be based on stale data."},{"title":"CDN (Content Delivery Network)","description":"Discover how the Locize CDN delivers translations globally with high performance and reliability. Learn about CDN types, caching, private publishing, and best practices.","href":"\\/docs\\/cdn","searchText":"CDN (Content Delivery Network) A Content Delivery Network (CDN) is a globally distributed network of servers that delivers your translation files quickly and reliably to users around the world. Using the Locize CDN ensures: Fast delivery and low latency, worldwide Automatic updates: no need to redeploy your app for translation changes High availability and reliability CDN Types Locize offers two CDN types: Standard and Pro . Both provide global reach and instant updates, but differ in features and providers. For a detailed comparison, see: CDN types: Standard vs Pro Standard CDN leverages Bunny: Pro CDN leverages Amazon CloudFront: How to use the CDN By default, translations are published to the CDN unless you turn this off in your project settings. No need to download translations or redeploy your app for changes to take effect. You can choose between Standard and Pro CDN in your Locize project settings. Private Publishing Optionally, you can configure publishing to be done in private mode (requires API Key to access the published translations): Caching and Performance Define a custom Cache Control max age value per version to optimize latency. For best performance, create a dedicated production version and enable caching on it. See latency optimization tips. Fallback and Hosting Options Do I have to use the Locize CDN or can I host \\/ bundle the translations directly? I want to use the Locize CDN, but would like to have a fallback that uses local\\/bundled translations Related topics Continuous localization: how CDN delivered translations enable the continuous workflow CDN types: Standard vs Pro API access for private publishing Caching Going to production Latency optimization tips"},{"title":"Checks\\/Issues","description":"Learn how Locize automatically checks your translations for issues, inconsistencies, and errors. See how to resolve, ignore, and manage checks in your localization workflow.","href":"\\/docs\\/checks-issues","searchText":"Checks\\/Issues Locize helps you keep your translations high quality and consistent by automatically performing a variety of checks. These checks identify potential issues, inconsistencies, and errors in your translations, making it easier to maintain accuracy and streamline your localization workflow. On this page, you'll find an overview of possible issues, how to resolve them, and how to manage checks in the CAT (Computer Assisted Translation) interface \\/ Translation Editor. How checks and issues are displayed The CAT interface \\/ Translation Editor will show warnings or errors on specific keys. For details, follow the link to the right hand column for the selected key: Running all checks for your project You can run checks for a single segment on the right sidebar or for your entire project on the left side bar in the bulk actions: In the bulk actions section, checks can be run for all segments or the currently filtered set. In the CAT interface \\/ Translation Editor, checks run for the selected language and namespace. Check this section in the video to see how Checks\\/Issues can be used. checks\\/issues part of showcase\\/demo Ignoring checks If a check is not relevant, you can use the eye icon button to ignore an error for a specific segment. Generally ignoring checks You can also generally ignore specific checks for your project. Go to your project settings, \"EDITOR, TM\\/MT\\/AI, ORDERING\" tab, and click the \"Issues to ignore\" section in the \"Cat settings\" card. Consistency checks Some checks, such as consistency checks, are performance intensive and must be triggered manually. Issue 220 not consistent with the translation memory This issue means another translation in the translation memory was translated differently. You can choose to update the translation for consistency or ignore the issue if the inconsistency is intentional. Check glossary consistency Glossary checks are also performance intensive and must be triggered manually. They only work if you have uploaded a glossary file in your settings. Issue 230 found forbidden term (glossary) The translation contains a term that is forbidden in your project's glossary. Issue 231 inconsistent terms (glossary) The segment matches a glossary entry in the source language, but no allowed term was used in the target language. Check i18n syntax consistency This check compares source and target translations for matching i18n syntax features (such as interpolation, nesting, etc.). Issue 240 detected i18n syntax inconsistency The translation contains a different number of i18n syntax elements compared to the source. Miscellaneous checks Check exists in the source language Issue 301 is not found in the source language The key was only imported into a target language. It is recommended to add the content in the source language as well. This may also affect your translation statistics and the percentage of translated segments. Check if the translation is up to date Issue 302 the content in the source language changed after translating to this target language There was a change to the source content. The translation might be outdated or incorrect. Check if the provided translation is still valid. If the translation is still valid, you can confirm it: Do not forget to click the SAVE button after clicking CONFIRM. Check if an overridden value (tenants, branches) is unnecessary Issue 305 unnecessary override when value equals value in source project You can remove unnecessary overrides because the values in the tenant or branch, as well as the value in the parent project, are all equal. Use the matching bulk action under \"misc\" to remove all of these values at once. Check max characters length issue 310 is longer than the defined max characters In the source language, a max length is defined for this sentence, and the provided translation is too long. File checks Invalid Nesting issue 420 gets nested into another string This issue exists if there is a key eg. that would be nested into another key . The result in a JSON export would then be: So you would lose one of the keys in your export. To solve this issue rename one of the keys. Check array size issue 430 check for array issue The key is in form which leads to exporting as an array (eg. in the JSON format). Having such a key would result in the creation of an array with the given number. This check asserts array sizes stay in a limited size (below 100). You can avoid the conversion of the content to an array by providing a key that has a non numeric end like ."},{"title":"Context","description":"Provide translators with the right context in Locize. Learn how to add context information, use the InContext editor, and improve translation quality.","href":"\\/docs\\/context","searchText":"Context Delivering high quality localization starts with providing translators the right context. Locize empowers teams to add and manage context for every translation key, ensuring translators understand exactly where and how each string is used in your application. Context information per key\\/segment InContext Screenshots context information is part of our showcase\\/demo. Context information per key\\/segment Add specific context for each key or segment while selecting it. This gives translators clear insight into the meaning and intended use of every string. The context field supports markdown syntax, so you can format notes for maximum clarity. See this section in the video for a live example of context information in action. InContext The InContext editor provides real time, visual context by connecting your website or app directly to your Locize project. Translators can see strings in their actual environment, improving accuracy and speed. There are two approaches: The Locize popup in your website (recommended) The recommended approach opens the Locize editor as a draggable, resizable popup directly on your website. Enable it by using the locize module (for example, via locizify or the i18next plugin), and add to your URL. A standard Locize user account is required. For SAML users, log in via SAML in a separate window\\/tab first. If you encounter issues, try the iframe approach below. Your website in Locize (iframe) Alternatively, the InContext view lets you embed your website or app inside the Locize UI via an iframe, so translators can edit content in its true context. For more details, see this guide. See this section in the video for a demonstration of the InContext editor. For detailed setup instructions for both approaches, see the InContext documentation. Screenshots Screenshots offer powerful visual context for translators. Upload screenshots and assign translation keys or segments to specific areas, making it clear where each string appears in your app. 1. Navigate to the screenshots page 2. Upload a screenshot 3. Assign keys\\/segments Click \"ASSIGN KEYS\" to begin. Locize automatically detects text snippets using OCR. Exact text matches are automatically assigned to the appropriate key. Review and assign keys\\/segments for detected OCR snippets, or delete any unnecessary ones. To create a new assignment, click the add button and select the appropriate key\\/segment. For newly added texts, you can optionally define a bounding box. 4. Result: In the CAT \\/ Translation Editor Once assigned, screenshots appear in the CAT view \\/ Translation Editor: Screenshots are shown for the assigned keys. See this section in the video for a walkthrough of using screenshots in Locize."},{"title":"General questions","description":"Find answers to common questions about Locize, localization, integration, and best practices.","href":"\\/docs\\/general-questions","searchText":"General questions"},{"title":"Do I have to use the Locize CDN or can I host \\/ bundle the translations directly?","description":"You are not required to use the Locize CDN; translations can be self-hosted or bundled for offline or restricted environments. This page explains the benefits of both CDN and custom hosting, how to download translations, and best practices for development and production workflows.","href":"\\/docs\\/general-questions\\/do-i-have-to-use-the-locize-cdn-or-can-i-host-bundle-the-translations-directly","searchText":"Do I have to use the Locize CDN or can I host \\/ bundle the translations directly? Short answer: No, you do not have to use the Locize CDN. You can host or bundle the translations yourself if you prefer. Both approaches are fully supported. Using the CDN vs. Custom Hosting While our CDN offers the most convenience, you may need to bundle translations with your product (e.g., for offline use, restricted environments, or backend fallback). There are two types of CDN available: Standard CDN and Pro CDN. Each offers different features and performance options; see the linked documentation for details and to choose the best fit for your needs. Advantages of using the CDN: Update translations instantly without redeploying your app Auto publish for instant feedback during development and testing Private publishing (API key required) to control access and prevent leaks Downloading and Bundling Translations If you need or prefer to host or bundle translations yourself, you can easily download them. Using the CDN is completely optional and you are only billed for actual CDN usage. Ways to download translations: Download manually via the web application Automate downloads using the API or locize cli Automated example with locize cli: You can specify the option to choose from various formats (json, yaml, xliff, csv, po, resx, fluent, properties, and more). This is especially useful if you are not using i18next and need a different format for your framework or environment. Recommendation We highly recommend using the CDN during development for the best translation workflow and efficiency. For production, you can: Continue using the CDN for live updates Bundle\\/download translations for offline or restricted environments Use a hybrid approach: CDN as primary, with local\\/bundled fallback (see backend fallback example) If you use i18next, you can easily switch backend plugins for different environments. For other frameworks, locize cli's flexible format support makes integration straightforward."},{"title":"How can a segment\\/key be copied\\/moved or renamed?","description":"Learn how to copy, move, or rename translation keys (segments) in Locize using the CAT interface. This guide covers step-by-step instructions for reorganizing keys, changing namespaces, and managing your translation structure efficiently.","href":"\\/docs\\/general-questions\\/how-can-a-segment-key-be-copied-moved-or-renamed","searchText":"How can a segment\\/key be copied\\/moved or renamed? Sometimes you need to reorganize your translations by copying, moving, or renaming keys (segments) or even changing their namespace. Locize makes this easy to do directly in the CAT (Computer Assisted Translation) interface \\/ Translation Editor. Examples Change namespace, keep key name: MOVE: Moves the key to a different namespace. COPY: Copies the key to a different namespace. Change key name, keep namespace: MOVE: Renames the key. COPY: Copies the key within the same namespace, but with a new key name."},{"title":"How to Open and Edit JSON Translation Files","description":"How to open and edit JSON translation files: recommended editors (VS Code, Sublime, Notepad++), validation, the i18next JSON v4 format, plurals, and how to manage JSON translations at scale with Locize.","href":"\\/docs\\/general-questions\\/how-do-i-open-and-edit-json-files","searchText":"return ( How do I open and edit JSON files? To open a JSON file , drag it into any code editor: Visual Studio Code , Sublime Text , or Notepad++ all work. To edit it , use the same editor with JSON syntax highlighting enabled, then validate the result with JSONLint or your editor's built-in formatter before deploying. An invalid JSON file fails silently at runtime, so always validate. A JSON translation file is a plain-text, UTF-8 file with the .json extension that maps translation keys (like welcome.greeting ) to translated strings. It supports nested objects, interpolation placeholders, and pluralization suffixes, all covered in detail below. Key facts File extension: .json Encoding: UTF-8 (always; non-UTF-8 files fail in most parsers) Format: key\\/value pairs, with nested objects supported Common pitfalls: trailing commas, single quotes, and unescaped \" inside strings, all invalid in JSON How JSON translation files work In a typical i18n setup, each language has its own JSON file (for example en\\/common.json , de\\/common.json ). Translation keys map to translated strings, with placeholders for runtime values: {` `} The syntax is i18next interpolation . The _one \\/ _other suffixes are i18next JSON v4 plural forms , and the framework picks the right key based on the active language's CLDR plural rules. If you're managing translations across many languages or with a team, a translation editor like Locize replaces per-file editing with a CAT-style UI, version history, and review workflow, while still exporting the same JSON files for your build. Recommended editors For local editing: VS Code : best free option; built-in JSON validation, auto-formatting (Shift+Alt+F), and extensions like i18n Ally surface translation status across languages. Notepad++ (Windows): lightweight, with the JSON Viewer plugin for tree-view editing. Sublime Text : fast, with the Pretty JSON package for formatting and validation. For browser-based editing without installing anything: translate.i18next.com : free online editor for i18next JSON files. JSONLint : paste, validate, format. Text editor vs translation management system: when to upgrade Editing JSON files directly works fine for solo projects with one or two languages. The friction shows up once you have multiple translators, multiple languages, or want to ship copy changes without redeploying. Here is what each option actually solves: Need Text editor (VS Code, …) Locize 1–2 languages, solo developer ✓ Just edit the JSON file Overkill Non-developer translators ✗ Each edit needs a Git PR ✓ Web UI, no Git Update strings without redeploy ✗ Requires deploy every time ✓ CDN delivery, instant updates AI auto-translation of new keys ✗ Manual scripts ✓ Built in, with glossary + TM context Translation memory + glossary reuse ✗ Manual ✓ Per-project, shared across files Review workflow + per-key audit log ✗ Only Git history ✓ Native Plural \\/ context \\/ format validation ✗ Only syntax-level validation ✓ Semantic, checks against i18next plural rules How to edit JSON translation files in Locize If your project has more than a few languages, more than one translator, or strict review requirements, file-by-file editing becomes a bottleneck. Locize is a translation management system designed around the i18next workflow: Get started Import your JSON files Edit translations in the CAT view \\/ Translation Editor Use bulk actions for machine translation Configure automatic AI\\/machine translation for new keys Export back to JSON, or pull via CDN without redeploying Supported import\\/export formats are listed under File formats . Demo video: Watch how to edit JSON files in Locize Frequently asked questions ) } function renderInlineCode (text) react .\\/+Head.jsx prose prose-lg max-w-none https:\\/\\/code.visualstudio.com\\/ _blank noreferrer https:\\/\\/www.sublimetext.com\\/ _blank noreferrer https:\\/\\/notepad-plus-plus.org\\/ _blank noreferrer https:\\/\\/jsonlint.com\\/ _blank noreferrer not-prose my-8 rounded-2xl border border-base-200 bg-base-50 p-5 text-sm font-semibold uppercase tracking-wide text-base-content\\/60 mb-3 space-y-2 text-sm language-json greeting Hello, {{name}}! items_one You have one item. items_other You have {{count}} items. {{name}} https:\\/\\/www.i18next.com\\/translation-function\\/interpolation _blank noreferrer https:\\/\\/www.i18next.com\\/translation-function\\/plurals _blank noreferrer re managing translations across many languages or with a team, a translation editor like \u003ca href= https:\\/\\/code.visualstudio.com\\/ _blank noreferrer https:\\/\\/notepad-plus-plus.org\\/ _blank noreferrer https:\\/\\/www.sublimetext.com\\/ _blank noreferrer https:\\/\\/translate.i18next.com\\/ _blank noreferrer https:\\/\\/jsonlint.com\\/ _blank noreferrer not-prose my-6 overflow-x-auto table table-zebra \\/i18next \\/docs\\/getting-started \\/docs\\/general-questions\\/how-to-import-translations-from-a-file \\/docs\\/the-different-views\\/cat \\/docs\\/the-different-views\\/cat#bulk-actions \\/docs\\/automatic-translation \\/docs\\/general-questions\\/how-to-translate-a-file-and-download-the-results#5-export-your-translations \\/docs\\/cdn \\/docs\\/integration\\/file-formats https:\\/\\/youtu.be\\/lCuHSZvSiVg _blank noreferrer not-prose my-6 aspect-video rounded-2xl overflow-hidden border border-base-200 w-full h-full https:\\/\\/www.youtube-nocookie.com\\/embed\\/lCuHSZvSiVg How to edit JSON files in Locize 0 accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture lazy not-prose space-y-3 my-6 collapse collapse-arrow bg-base-100 border border-base-200 rounded-2xl checkbox collapse-title text-base font-medium collapse-content text-sm text-base-content\\/70 mt-1 &amp; &lt; &gt; \u003ccode>$1\u003c\\/code> { \"greeting\": \"Hello, {{name}}!\", \"items_one\": \"You have one item.\", \"items_other\": \"You have {{count}} items.\" } ([^"},{"title":"How is Locize different from the alternatives?","description":"Discover what sets Locize apart from other localization platforms: flexible pricing, powerful i18n integration, built-in versioning, no service lock-in, expert support, seamless third-party integrations, and advanced translation management features.","href":"\\/docs\\/general-questions\\/how-is-locize-different-from-the-alternatives","searchText":"How is Locize Different from the Alternatives? When we started Locize, our goal was to go beyond being just another localization as a service provider. We set out to deliver real value and innovation in several key areas: Flexible Pricing Model Choose the pricing that fits your needs: Locize offers both usage based (variable) pricing that grows with your success, and fixed plans for predictable monthly costs. You only pay for what you use, or you can lock in a fixed price for cost certainty. No more overpaying just because you’re close to the next plan tier. Powerful & Flexible Instrumentation Get started instantly with our one liner script, or leverage the full power of i18next, our mature, flexible i18n framework. Our vibrant ecosystem ensures you’ll always find the right integration for your needs. Built in Versioning Our experience with large scale cloud projects taught us the importance of versioning and branches. Locize supports true versioning, so you can manage translations just like your code, enabling safe, organized, and reliable releases. No Service Lock In We believe in earning your trust, not locking you in. You’re always free to export your translations and use them with i18next or any other compatible tool. Expert Support Locize is built and supported by the creators of i18next. You get direct access to the best expertise in the industry. There’s simply no better alternative. 😉 Seamless 3rd Party Translation Integrations We integrate with third party translation services so you can benefit from their unique features: Finalize projects (add documents, etc.) Work with your preferred translators Approve translations Directly contact your translators ...and more Multiple Namespaces & Files Manage multiple files per project with ease (what we call namespaces). This flexibility is rare among translation management platforms. Advanced Pluralization Locize understands the complexities of pluralization in different languages. For example, Polish and Romanian require special rules for plurals. Locize tracks and calculates your translation progress accurately, respecting each language’s unique rules. Multi Tenant Functionality Need to localize for multiple clients, brands, or customer specific UIs? Locize’s multi tenant support lets you manage all your customers, brands, or environments from a single account. Perfect for agencies, SaaS providers, or organizations with complex requirements, you can easily separate data, permissions, and workflows for each tenant, while keeping everything organized under one roof. AI Translation Infrastructure Locize integrates AI and machine translation directly into the workflow, not as a separate tool, but as part of how translations are created and managed: Bring your own key (BYOK): Use your own OpenAI, Gemini, Mistral, or DeepL key from the Professional plan. No markup, and your data stays under your provider agreement. Built in Locize AI: Token based AI translation on all paid plans, no external key needed. Styleguide: Define tone, formality, and audience once, and it is automatically injected into every AI translation prompt alongside your glossary and translation memory. Automatic translation: New keys can be translated automatically as they arrive via saveMissing, fully hands free. MCP Server: Connect AI coding assistants (Claude, Cursor, VS Code) directly to your translation projects, with 22 tools for the full workflow. Learn more about AI in Locize → Beyond Translation Management Locize is more than just a translation management tool. Stay organized and agile after your initial translation: Add new segments to live projects without replacing entire files or starting over Version your translation projects just like your applications, without extra costs Instantly update translations via our CDN, correct errors, or add new languages without redeploying your app Enable private CDN publishing for sensitive projects, secured by API key Order translations from a growing list of integrated services for faster, more affordable results"},{"title":"How to change credit card or billing information or download the invoices?","description":"Learn how to update your credit card, change billing information, and download invoices in Locize. This guide covers step-by-step instructions, required permissions, and tax information for managing your subscription.","href":"\\/docs\\/general-questions\\/how-to-change-credit-card-or-billing-information-or-download-the-invoices","searchText":"How to change credit card or billing information or download the invoices? To update your billing details or download invoices, follow these steps: 1. Go to your project page and click the billing info button: 2. On the billing page , click the relevant info in the \"Subscription Details\" card: 3. Here you can: Change the credit card Update other billing information Download your invoices\\/receipts Permissions Required Note: You need to have admin or accountant permissions to access the billing page. If you don’t see the billing option, ask a project admin to adapt your permissions or in case you are not part of the Locize project yet, ask a project admin to invite you with the appropriate role. Tax Information Advice for companies in certain jurisdictions (e.g., some EU countries): If you enter your tax ID\\/number, you’ll be eligible for reverse charging. The tax on invoices\\/receipts will be marked as reverse charged and not included in the total cost."},{"title":"How to change the publish format?","description":"Learn how to change the publish format for your translations in Locize. This guide explains the differences between auto, nested, and flat formats, and provides step-by-step instructions for updating your project settings.","href":"\\/docs\\/general-questions\\/how-to-change-the-publish-format","searchText":"How to change the publish format? The publish format determines how your translations are structured when served via the CDN or exported. By default, it is set to \"auto\", but you can also choose \"nested\" or \"flat\" formats depending on your integration needs. Choose the format that best fits your application's requirements. \"Nested\" is useful for hierarchical JSON structures, while \"flat\" is better for key value pairs."},{"title":"How to delete or rename a namespace?","description":"Learn how to delete or rename translation namespaces in Locize. This guide provides step-by-step instructions for managing namespaces to keep your localization project organized and up to date.","href":"\\/docs\\/general-questions\\/how-to-delete-or-rename-a-namespace","searchText":"How to delete or rename a namespace? Namespaces are essential for organizing your translations, allowing you to group related keys for better clarity and management. Occasionally, you may need to delete an unused namespace or rename one to maintain consistency. Here’s how you can manage namespaces in Locize: Steps to delete or rename a namespace 1. Open your project dashboard. If your project has multiple versions, ensure you have selected the correct version. 2. Locate the namespace you want to manage. Click the dropdown menu for the specific namespace: 3. Choose your action. Select either DELETE or RENAME , then confirm your choice: You can optionally apply this action across all versions of your project. Deleting or renaming a namespace will automatically update all languages in your project to reflect the change."},{"title":"How to import translations from a file?","description":"Learn how to import translations into Locize from various file formats, including JSON, CSV, and XLSX. This guide covers importing in the Project Dashboard, CAT Editor, and for specific languages or namespaces.","href":"\\/docs\\/general-questions\\/how-to-import-translations-from-a-file","searchText":"How to import translations from a file? Locize makes it easy to import translations from a variety of file formats. Whether you want to update a single namespace, add new languages, or migrate content from another system, you can do it quickly using the import features. See all supported file formats here. Importing in the CAT \\/ Translation Editor Click the \"IMPORT\" button next to the \"EXPORT\" button: Be sure to click the \"SAVE\" button after importing. What does \"Keep segments not imported\" mean? If you disable this option, any key already present in your project but missing from the imported file will be deleted in Locize. Importing for a specific language and namespace To import a file for a dedicated language, select the appropriate language and namespace in the filter before importing: Importing an \"all\" format file (CSV\\/XLSX) for the whole project To import a file that covers the whole project (like CSV or XLSX), make sure no language or namespace is selected in the filter: More info about special formats like CSV and XLSX. The \"all\" format includes a namespace column, making it ideal for importing\\/exporting multiple namespaces. Ensure the namespace exists before importing this format."},{"title":"How to manually publish a specific version?","description":"Learn how to manually publish a specific version of your translations in Locize. This guide explains how to control releases, stage changes, and ensure only reviewed translations are published to the CDN.","href":"\\/docs\\/general-questions\\/how-to-manually-publish-a-specific-version","searchText":"How to manually publish a specific version? Manually publishing a specific version in Locize allows you to control exactly which set of translations is made available via the CDN. This is useful when you want to stage changes, coordinate releases, or ensure only reviewed translations are published. Steps to manually publish a version 1. Select your desired version: 2. Open the publish details: Click on \"CDN \\/ PUBLISH DETAILS\": 3. Publish the version: In the details view, you'll find a button to publish that version: Alternatively, you can also publish a version from the project's settings:"},{"title":"How to style text within Locize?","description":"Learn how to add bold, italics, links, and other styles to your translations in Locize. This guide covers best practices for styling text using React, locizify, and plain HTML\\/JavaScript, with tips for clean and safe localization.","href":"\\/docs\\/general-questions\\/how-to-style-text-within-locize","searchText":"How to style text within Locize? Want to add bold, italics, underlines, or links to your translations? Styling text in Locize depends on the technology and i18n format you use to render your content. General Tips Keep translations clean: Avoid mixing too much HTML or styling in your translation keys. Use placeholders or tags only where needed. Document your conventions: Make sure your translators know how to handle tags or placeholders. React (react i18next) With react i18next, you can safely use simple HTML elements and even React components inside your translations. See the official docs for more details. Locizify With locizify, you can use merged elements to include HTML inside your translations (with some limitations): Plain HTML\\/JavaScript If you’re using plain HTML or vanilla JavaScript, insert the translation as (be careful with user generated content to avoid XSS vulnerabilities): Summary How you style text in Locize depends on your frontend framework and rendering method. Always check the documentation for your i18n library and keep your translation keys as simple and maintainable as possible."},{"title":"How to translate a file and download\\/export the results?","description":"Step-by-step guide to translating files in Locize: import your file, add target languages, translate content, and download the results for use in your application or workflow.","href":"\\/docs\\/general-questions\\/how-to-translate-a-file-and-download-the-results","searchText":"How to translate a file and download\\/export the results? Locize is more than just an import\\/export tool for translations. It is designed to be an integrated part of your localization workflow, whether in your application code or CI\\/CD pipeline. However, you can also use Locize to quickly translate files and export the results for use elsewhere. Here you can find a list of all supported file types. This guide walks you through the process of importing a file, translating it, and downloading the translated results. 2. Add your target languages Add the languages you want to translate into. Click the \"ADD\" button in the languages section in your project dashboard: Select the desired language and click \"ADD\": 3. Import your file In the project dashboard, select your desired, version and language. Then click the \"IMPORT\" button: Select the file you want to import: You can also try to import the exported zip file from backups or the \"all\" exports from within the CAT \\/ Translation Editor. Click on \"REVIEW x IMPORT IN CAT\". If the namespace name does not match, try to rename the file and try again. Verify everything looks correct and click the \"SAVE\" button: 4. Translate your content Start translating. Make sure to click the \"SAVE\" button after making changes. Note: The machine translation feature is disabled during the trial. You may deselect the \"pending changes\" filter afterwards, to see all translations. 5. Export your translations You have several options to export your translations: Export all If no language or namespace is selected in the filter, clicking the \"EXPORT\" button lets you choose from various formats, such as . This returns a zip file containing all JSON files. Export a single language\\/namespace If a language and namespace are selected in the filter, clicking the \"EXPORT\" button lets you choose formats like . This returns a JSON file containing the German translations."},{"title":"I want to use the Locize CDN, but would like to have a fallback that uses local\\/bundled translations","description":"Learn how to combine the Locize CDN with local or bundled translation fallbacks for maximum reliability. This guide explains how to set up a CDN fallback using i18next-chained-backend and best practices for hybrid localization.","href":"\\/docs\\/general-questions\\/i-want-to-use-the-locize-cdn-but-would-like-to-have-a-fallback-that-uses-local-bundled-translations","searchText":"I want to use the Locize CDN, but would like to have a fallback that uses local\\/bundled translations The Locize CDN delivers translations globally and reliably. However, in some environments (such as highly regulated or restricted corporate networks) CDN access may be blocked or unreliable. To ensure your app always has access to translations, you can combine the power of the Locize CDN with a local or bundled fallback. This way, your app will use the CDN when available, but automatically fall back to local resources if the CDN cannot be reached. This approach is often preferable to always bundling all translations, as it gives you the best of both worlds: up to date translations from the CDN and guaranteed availability from your local bundle. How to Set Up a CDN Fallback with i18next If you use i18next, you can achieve this easily with the i18next chained backend plugin. This allows you to define multiple backends (e.g., Locize CDN first, then local resources as fallback). Example: For more detailed usage and advanced scenarios, see the backend fallback documentation."},{"title":"i18n vs. i18next","description":"Understand the difference between i18n (internationalization) as a process and i18next as a JavaScript library for implementing i18n in web applications. Learn how i18next helps you achieve global-ready software.","href":"\\/docs\\/general-questions\\/i18n-vs-i18next","searchText":"i18n vs. i18next What is i18n? i18n (short for \"internationalization\") is the practice of designing and developing software so it can be easily adapted for different languages, regions, and cultures, without major code changes. This means: Separating UI strings, date formats, currencies, and other locale specific elements from your code Using placeholders and resource files for translations Making your app ready for localization (l10n) What is i18next? i18next is a popular open source JavaScript library that helps you implement i18n in your web or JavaScript based applications. It provides: Easy JSON based translation management Pluralization and context support Language detection and fallback Integration with frameworks like React, Vue, Angular, and more How do they relate? i18n is the goal (making your app adaptable for any language or region) i18next is a tool that helps you achieve that goal in JavaScript projects Think of i18n as the process, and i18next as the toolkit that makes the process easier and more robust. Why use i18next? i18next saves you time and effort by providing all the features you need for internationalization out of the box. Instead of building your own translation and formatting logic, you can rely on a well tested, community supported solution. Learn more: i18n basics i18next documentation"},{"title":"i18next vs. Locize","description":"Compare i18next, the open-source JavaScript i18n library, with Locize, the cloud-based translation management system. Learn how they work together for seamless localization and translation workflows.","href":"\\/docs\\/general-questions\\/i18next-vs-locize","searchText":"i18next vs. Locize What is i18next? i18next is a popular open source JavaScript library for internationalization (i18n) and localization (l10n). It helps you: Add multi language support to web and mobile apps Translate UI strings and handle pluralization Format dates, numbers, and more for different locales Integrate with frameworks like React, Vue, Angular, and more What is Locize? Locize is a cloud based translation management system (TMS) that helps you: Manage and organize translations for any software project Collaborate with translators and reviewers in a dedicated UI Deliver translations via CDN or API, instantly updating your app Track versions, workflows, and translation progress Did you know? The creators of i18next are also the founders of Locize. This ensures seamless integration, deep expertise, and ongoing innovation across both projects. How do they work together? i18next and Locize are designed to complement each other: i18next handles the localization logic inside your app (loading translations, switching languages, formatting, etc.) Locize manages the translation content, workflow, and delivery You can use i18next locize backend to connect i18next directly to Locize, so your app always has the latest translations, with no manual file updates needed. Not using i18next? Locize works with any JavaScript i18n library that can accept HTTP loaded JSON messages. The generic locizer client handles the CDN side, with maintained example repos for react intl, next intl, FormatJS, polyglot, js lingui, and more. See the integration docs for the full list. Summary i18next : The in app engine for internationalization and localization Locize : The cloud platform for managing, collaborating on, and delivering translations Using both together gives you a powerful, scalable, and modern localization workflow for any project."},{"title":"Is it possible to integrate multiple projects in the same app\\/website?","description":"Learn how to integrate multiple Locize projects into a single app or website. This guide explains use cases, setup with i18next, and best practices for managing translations across projects.","href":"\\/docs\\/general-questions\\/is-it-possible-to-integrate-multiple-projects-in-the-same-app-website","searchText":"Is it possible to integrate multiple projects in the same app\\/website? Yes, you can! Locize allows you to combine as many projects as you need within a single app or website. This is useful for: Large apps with modular or shared components Organizations managing multiple brands or products Teams splitting translations by domain, customer, or environment How to Integrate Multiple Projects You can fetch translations from different Locize projects by using the correct API endpoints and project IDs. This gives you full flexibility to organize your translations as you see fit. Using i18next? With i18next, you can use the i18next chained backend to load translations from multiple Locize projects. Just add the i18next locize backend multiple times with different options: Tip: Make sure each project uses unique namespace names (e.g. project 1: , ; project 2: , ). The chained backend will use the first backend that returns data for a namespace. It does not merge keys from multiple sources. Caution: Avoid using multiple backends with or enabled, as this can lead to unexpected results if data is stale. Shared Frameworks or Core Modules If you have shared components (like a design system or core module) used across multiple apps, consider using separate i18next instances, each pointing to its own Locize project. This keeps translations organized and maintainable. Customer Specific Translations? If you need customer specific translations, we recommend using the Multi Tenant feature instead of combining multiple projects. This is more scalable and easier to manage."},{"title":"Is Locize only for developers and translators or is project management within the process too?","description":"Locize supports the entire localization workflow, including project management. Learn how developers, translators, and project managers collaborate in Locize to manage translations, workflows, and releases.","href":"\\/docs\\/general-questions\\/is-locize-only-for-developers-and-translators-or-is-project-management-within-the-process-too","searchText":"Is Locize only for developers and translators or is project management within the process too? Locize is designed for the entire localization workflow, not just for developers and translators, but also for project managers and other stakeholders involved in the process. Project Management in Locize Project management is a key part of getting translations ready for release. Locize helps everyone focus on their strengths: Developers : Integrate Locize with their codebase, automate the addition of new translation keys, and avoid manual file merges. Translators : Work in a dedicated UI, focus on high quality translations, and use built in tools like translation memory. Project Managers : Oversee the translation process, manage workflows, assign tasks, track progress, and ensure consistency. How Does It Work? Instead of uploading documents (like Word or PDF) for translation, Locize uses namespaces, which are technical sets of translations. You can: Import\\/Export translations in various formats (JSON, PO, YAML, XLIFF, etc.) Automatically add new segments via the API or i18n frameworks Start translating as soon as new content is detected Use translation memory to ensure consistency Order translations from integrated agencies Track the status of each segment and manage releases Best practice: Developers focus on code and source language quality, while project managers and translators handle the translation workflow and quality assurance, all within Locize."},{"title":"Is there any visibility on project’s level of completion that shows how translators are progressing?","description":"Locize provides full visibility into translation progress, with dashboards, completion percentages, segment status, and history tracking. Learn how to monitor and manage your localization workflow.","href":"\\/docs\\/general-questions\\/is-there-any-visibility-on-projects-level-of-completion-that-shows-how-translators-are-progressing","searchText":"Is there any visibility on project’s level of completion that shows how translators are progressing? Yes! Locize provides clear visibility into your project's translation progress, so you always know how close you are to completion. Progress Tracking Features Progress Overview: See completion percentages for each version, language, namespace, and project. Segment Status: Track which segments are translated, reviewed, or still pending. History: Monitor who translated each segment and when. Completion Alerts: Instantly see when a language or namespace reaches 100%. How Does It Work? If your translators work directly in Locize, all progress is tracked automatically and visible in the dashboard. If you import translations from external tools (e.g., XLIFF), progress updates as soon as you upload the new files and save. For Project Managers You can easily monitor: Overall project status Progress by language or namespace etc. This makes it simple to coordinate releases, spot bottlenecks, and ensure nothing gets missed."},{"title":"How to manage multiple projects, collective billing, and user inheritance","description":"Learn how to add multiple projects to a collective bill in Locize and manage user inheritance across projects.","href":"\\/docs\\/general-questions\\/multiple-projects-collective-billing-users","searchText":"Managing Multiple Projects with Collective Billing and User Inheritance If you need to manage several projects, you can streamline billing and user management using collective billing and user inheritance . Inheriting Users Across Projects Locize allows you to inherit users from your main\\/parent (collective billing) project to other projects. This can be managed in two ways: On the parent project : enable \"Inherit users on children\" to push users to all child projects automatically. On each child project : enable \"Inherit users from parent\" to pull users from the parent project. (If the parent has \"Inherit users on children\" enabled, this is forced on automatically.) User inheritance parent settings User inheritance child settings This also works for multi tenant setups, where tenant (child) projects can inherit users from the parent project. How Inherited Users Appear in the UI Once inheritance is enabled, the child project's Users page shows each user with a status badge: \"INHERITED\" badge : the user comes from the parent project through inheritance. \"OVERRIDDEN\" badge : the user was inherited but their role was customized in this specific child project. No badge : the user was directly added to this child project (not inherited). How User Inheritance Affects Billing This is the key point for cost optimization: Inherited users do NOT count toward a child project's user limit for billing purposes. Only users who are directly assigned to a project (or who have been overridden ) count toward that project's user limit. This means: A child project with 30 inherited users and 2 directly added users has a billed user count of 2 , not 32. This allows child projects (including tenant projects) to use lower tier plans (like Starter with 5 users) even when many users have access through inheritance. Overridden users count as direct users If you override an inherited user's role in a child project (e.g., changing them from admin to translator in that specific project), they become an overridden user and do count toward the child's user limit. To revert an overridden user back to inherited status (and stop them from counting), click the three dot menu (⋮) on that user and select \"INHERIT\" . Optimizing Costs with User Inheritance If your child projects (or tenant projects) have many directly assigned users who also have access via the parent, you can reduce costs by: 1. Enable inheritance : On the parent project, go to Users and enable \"Inherit users on children\". Or on each child, enable \"Inherit users from parent\". 2. Remove direct assignments : In each child project, look for users without the \"INHERITED\" badge. If they also exist on the parent project, remove them from the child; they'll still have access through inheritance. 3. Revert unnecessary overrides : For users with the orange \"OVERRIDDEN\" badge, ask whether they actually need a custom role in this specific project. If not, click \"INHERIT\" to revert them. 4. Downgrade child plans : After cleanup, if the remaining direct user count is low enough, you may be able to move child projects to a lower tier plan. Key Points Each project must be subscribed to a plan, but you can add multiple projects to one collective bill. User access can be inherited (and customized) across projects within a collective billing group. Inherited users do not count toward a child project's user limit for billing. Overridden users do count : revert them to \"inherit\" if the custom role isn't needed. Enable inheritance on the parent to automatically give all child projects access to the parent's users."},{"title":"Why are we (or our users) not receiving invitation or support emails?","description":"Troubleshoot issues with missing invitation or support emails from Locize. Learn about allow-listing, common mail server problems, and steps to ensure reliable email delivery.","href":"\\/docs\\/general-questions\\/not-receiving-emails","searchText":"Why are we (or our users) not receiving invitation or support emails? The Issue If invitations appears in the Locize but never arrive in your inbox, or if you aren't receiving replies from our support team, your organization's mail server is likely blocking our emails. This usually happens because corporate firewalls or spam filters (like Mimecast, Proofpoint, or Microsoft 365 Defender) may flag automated emails or emails sent via third party delivery services (like Amazon SES) as unauthorized. The Solution: \"Allow listing\" To ensure reliable delivery, please ask your IT or Internal Security department to allow list (whitelist) Locize. This tells your mail server that emails from us are safe and should be delivered. Technical Details for your IT Team: Please provide the following information to your IT department: Sender Domain: Secondary Domain (Notifications): Sending Service: Amazon SES (Simple Email Service) Region: (Ireland) IP Ranges: We recommend allow listing by domain ( ). Common Error: 5.7.1 \"Delivery not authorized\" If our support team receives a 5.7.1 error when replying to you, it is a definitive sign that your server has a policy blocking our domain. Forwarding this error to your IT team will help them identify the specific rule that needs to be adjusted. Still having trouble? If your IT team has confirmed that is allow listed and you still aren't receiving emails: 1. Check your Junk\\/Spam folders. 2. Verify that the user's email address in the Locize UI is spelled correctly. 3. Try inviting a user with a different email domain (e.g., a personal address) to test if the delivery is successful outside of your corporate network."},{"title":"Should I use versions or branches?","description":"Understand the difference between versions and branches in Locize. This guide explains when to use each for managing translation workflows, releases, and collaboration.","href":"\\/docs\\/general-questions\\/should-i-use-versions-or-branches","searchText":"Should I use versions or branches? Both versions and branches help you separate translation work, but they solve different problems. TL;DR Use versions when you want long lived “release lanes” (e.g., vs , or vs ) inside the same project. Use branches when you want a short lived, isolated workspace (e.g., a feature branch, a translation job for an agency) that can be merged back. Versions Versions live inside the same Locize project (same project ID), so they are not fully isolated . Typical use cases: Deployment stages (staging vs production) Product\\/app releases (v1 vs v2) Long running parallel development Versions are usually stable and long lived , and you typically don’t create\\/delete them every day. Branches Branches behave like separate projects (own project ID, own API keys) but they inherit the translation resources from their parent project. This is useful when you want: A safe, isolated place to work A clear view of what is overridden vs what comes from the parent To invite external people (e.g., translators\\/agencies) without risking changes in the parent project Branches typically match code repository branches or dedicated translation jobs. For translator workflows, see: Working with translators. Overridden values are marked with the state icon overridden and can be filtered by that state: How overrides work Overridden values are marked with the “overridden” state icon and can be filtered by that state. When you publish translations to our CDN (or export using the UI, CLI , or API ), the effective result is: Parent translations plus any values overridden in the branch You can also use the CLI branching features to create, sync and merge branches. Hint: Because a branch inherits translations from the parent, deleting a key\\/segment in the branch doesn’t remove the parent value; it will still be visible via inheritance. How to access translations from the CDN Branches have their own settings (project ID and API keys). To load translations from the CDN for a branch, use the branch project ID from the branch’s settings. What about pricing? Branches are free as long as you don’t exceed the number of words compared to the parent project. When you merge a branch back into the parent, normal modification costs apply for the changes that are merged."},{"title":"What do I have to consider if my translation texts may contain confidential information?","description":"Best practices for handling confidential translation content in Locize. Learn about private publishing, API key access, disabling machine translation, and data security.","href":"\\/docs\\/general-questions\\/what-do-i-have-to-consider-if-my-translation-texts-may-contain-confidential-information","searchText":"What do I have to consider if my translation texts may contain confidential information? If your translation content includes sensitive or confidential information, follow these best practices to maximize security and privacy in Locize: Recommended Settings Avoid public CDN publishing: Disable auto publish and bundle or self host your translations instead. Use private publishing: If you need CDN delivery, enable the private publish option. This restricts access to downloads via an API key, keeping translations non public. Disable machine translation: Turn off machine translation to prevent confidential data from being sent to third party MT or AI providers. Avoid external ordering services: Do not use translation ordering services for confidential content. Data Security All your data, including translation resources, is encrypted in transit (TLS) and at rest using authenticated encryption. By default, data is stored in Ireland. If you use the Standard CDN, published translations are delivered through BunnyCDN, an EU based provider, with edge caching across BunnyCDN's global network. If you use the Pro CDN, published translations are delivered through AWS CloudFront, with edge locations in the United States and worldwide. Only a few selected Locize employees have secure, limited access to these data stores if necessary. Summary: Prefer private or bundled\\/self hosted delivery for confidential translations Control access with API keys Be mindful of third party integrations and services"},{"title":"What is the regular way to update the translation memory?","description":"Learn how translation memory works in Locize. This guide explains automatic updates, fuzzy matching, TMX import, and best practices for keeping your TM current.","href":"\\/docs\\/general-questions\\/what-is-the-regular-way-to-update-the-translation-memory","searchText":"What is the regular way to update the translation memory? Locize makes translation memory (TM) management seamless and automatic: How It Works Namespaces = Translation Memory: Each namespace in your project acts as a live, up to date translation memory. By keeping your namespaces current, your TM is always accurate and ready to use. Automatic Updates: As you add, edit, or import translations, the TM is updated automatically, with no extra steps required. Fuzzy Matching: When you look up a segment, Locize shows all possible (fuzzy) matches, including links to the original source segments for easy reference. Import TMX: You can import TMX files directly into a namespace to enrich your translation memory with existing data. Best Practices Regularly sync your namespaces with your latest translations Use the TM lookup feature to leverage existing translations and ensure consistency Import TMX files when migrating from other tools or consolidating translation assets Summary: In Locize, your translation memory is always in sync with your project, with no manual maintenance required. Just keep your namespaces up to date, and your TM will take care of itself."},{"title":"Where do I find the published namespace\\/file history?","description":"Find out how to access published namespace\\/file history in Locize.","href":"\\/docs\\/general-questions\\/where-do-i-find-the-published-namespace-file-history","searchText":"Where do I find the published namespace\\/file history? This feature is only available with the PRO CDN type. Published namespace backups are automatic snapshots created each time a namespace is published (manually or automatically). These backups allow you to restore previous versions of your translations and are retained for 30 days. How to access published namespace backups 1. Select your desired version: 2. Select your desired language and namespace: On your desired language, click the \"FILE HISTORY (CDN)\" menu item on your desired namespace: 3. Select your desired namespace history version: Inspect the versions, by opening the url, or directly downloading a particular history version. Only previous\\/old namespace versions are listed as backups. The current version of the published translations can be found by clicking \"Show me the publish \\/ CDN details\"."},{"title":"Which integration option should I use?","description":"Choose the best integration option for your project: locizify, i18next, CLI, or API. This guide explains use cases, benefits, and how to get started with each.","href":"\\/docs\\/general-questions\\/which-integration-option-should-i-use","searchText":"Which integration option should I use? Choosing the right integration depends on your project type, technical needs, and how much control you want. Here’s a quick guide: 1. For Static Websites Recommended: locizify Why: Easiest setup, minimal code changes, and even non developers can use it. Great for marketing sites, landing pages, and simple web projects. 2. For Web, Mobile, Desktop, or Server Apps Recommended: i18next Why: Maximum flexibility and control. Supports advanced features like plurals, interpolation, context, and more. Works with all major frameworks (see supported frameworks, plugins). 3. For Automation & CI\\/CD Recommended: Locize CLI Why: Automate translation sync, upload, and download tasks in your build or deployment pipelines. Perfect for continuous localization workflows. 4. For Custom or Advanced Integrations Recommended: Locize API Why: Gives you full programmatic access. Build your own workflows, automation, or integrations beyond standard use cases. 5. For CI\\/CD Pipelines with GitHub Actions Recommended: Locize GitHub Actions Why: Two official actions: locize\\/download for fetching published translations at build time, and locize\\/sync for bidirectional sync with optional automatic AI\\/MT translation. 6. For AI Coding Assistants (Claude, Cursor, VS Code) Recommended: Locize MCP Server Why: Manage translations directly from your AI assistant: check coverage, report new keys, publish versions, manage branches. 22 tools covering the full translation lifecycle. Summary: Use locizify for static sites and simplicity Use i18next for apps and advanced features Use the CLI for automation and CI\\/CD Use GitHub Actions for CI\\/CD pipeline integration Use the MCP Server for AI coding assistant integration Use the API for custom solutions Still unsure? Contact us and we’ll help you choose the best option for your needs!"},{"title":"Why do I get “The passed json is nested too deeply.” when consuming the API?","description":"Understand the \"nested too deeply\" error from the Locize API. Learn about flat JSON requirements, correct and incorrect payloads, and how to structure your translation data.","href":"\\/docs\\/general-questions\\/why-do-i-get-the-passed-json-is-nested-too-deeply-when-consuming-the-api","searchText":"Why do I get “The passed json is nested too deeply.” when consuming the API? If you receive a 400 error with the message “Body not valid! The passed json is nested too deeply.” when calling the Locize API, it means your JSON payload is too deeply nested. Why Does This Happen? The Locize API expects flat JSON objects for translations. Deeply nested objects are not supported (except for special context cases). ❌ Incorrect (Too Deeply Nested) ✅ Correct (Flat JSON) Exception: Adding Context If you want to add context information for a translation, you can use a nested object for that key: Here, has a value and a context object with a description. Best Practices Always send translations as flat JSON (dot notation for nested keys) Only use nested objects when adding context for a specific key Double check your payload before sending to the API For more details, see the API documentation."},{"title":"Why do I see strange new keys marked as ONE, FEW, MANY, OTHERS?","description":"Learn why Locize and i18n frameworks generate keys for multiple plural forms (ONE, FEW, MANY, OTHERS), and how to manage pluralization in your translations.","href":"\\/docs\\/general-questions\\/why-do-i-see-strange-new-keys-marked-as-one-few-many-others","searchText":"Why do I see strange new keys marked as ONE, FEW, MANY, OTHERS? Are you seeing something like this? Some i18n formats, like i18next, handle languages with multiple plural forms. Locize automatically shows all needed plural form keys. For example, in the screenshot above: For the i18next v4 format, keys like and in English are added, and Locize automatically shows , , and for Russian. For the i18next v3 format, keys like and in English are added, and Locize automatically shows , , and for Russian. The i18n format depends on your i18n framework. If you're not using i18next, you can change the i18n format in your project settings:"},{"title":"Why does my namespace contain an array with a lot of null items?","description":"Understand why arrays with null items appear in your Locize JSON output, how numeric keys are interpreted, and best practices for avoiding unwanted arrays.","href":"\\/docs\\/general-questions\\/why-does-my-namespace-contain-an-array-with-a-lot-of-null-items","searchText":"Why does my namespace contain an array with a lot of null items? If you see arrays filled with values in your published JSON, it’s usually because of how Locize unflattens keys with numeric parts. By default, numeric key segments are interpreted as array indices. Why Does This Happen? Example: Numeric Keys Become Arrays This will be published as: Problem: Large Numeric Keys If you use large numbers as keys (e.g. error codes), you may get arrays with many items: This will be published as: How to Avoid Null Arrays Use non numeric keys to force an object instead of an array: This will be published as: Best Practices Avoid mixing nested and flat key formats Prefer string keys for objects, especially when using large numbers Review your publish format settings (see how to change it) Example: Mixing Formats In flat format: In nested format: How to change the publish format?"},{"title":"Why is my namespace suddenly a flat json?","description":"Learn why Locize may serve your namespace as flat JSON, how key naming affects output, and how to control the publish format for your translations.","href":"\\/docs\\/general-questions\\/why-is-my-namespace-suddenly-a-flat-json","searchText":"Why is my namespace suddenly a flat json? Locize can serve your translations as either nested or flat JSON, depending on the structure and naming of your keys. Why Does This Happen? If your keys follow a nested pattern (e.g. , ), Locize will return a nicely nested JSON structure: If you add a key that contains a space, comma, or question mark (e.g. ), Locize will switch to a flat JSON format for the whole resource: This is because keys with natural language or special characters cannot be reliably nested, so Locize automatically flattens the output to avoid ambiguity. Best Practices Stick to technical, dot separated keys (e.g. ) for consistent nested output Avoid using spaces, punctuation, or natural language in your keys if you want nested JSON If you always want flat output, you can set this in your project’s settings How to Change the Publish Format You can manually select the publish format (flat or nested) in your project settings: How to change the publish format?"},{"title":"Why is the pricing so complicated?","description":"Understand Locize pricing: how words, modifications, and downloads are billed, with examples and tips for managing your costs.","href":"\\/docs\\/general-questions\\/why-is-the-pricing-so-complicated","searchText":"function calcTotal (tierArray, amount) function calcBreakdown (tierArray, amount) const fmt = new Intl.NumberFormat('en-US') const fmtUSD = (v) => v.toLocaleString(undefined, ) const fmtUSDCompact = (v) => v.toLocaleString(undefined, ) function CostBreakdownLine ( ) { if (isFree) const breakdown = calcBreakdown(tierArray, amount) const total = breakdown.reduce((s, r) => s + r.cost, 0) return ( : ) } function TotalRow ( ) function NumberInput ( ) const FIXED_TIERS = Object.keys(tiers).filter((t) => t !== 'usageBased') const displayTierName = (val) => const [showCustom, setShowCustom] = useState(false) const [trialValues, setTrialValues] = useState( ) const [firstValues, setFirstValues] = useState( ) const [secondValues, setSecondValues] = useState( ) const cfg = tiers.usageBased const base = cfg.sub.usd const trialWordCost = calcTotal(cfg.words, trialValues.words) const firstWordCost = calcTotal(cfg.words, firstValues.words) const firstModCost = calcTotal(cfg.modifications, firstValues.modifications) const firstDlCost = calcTotal(cfg.downloads.pro, firstValues.downloads) const secondWordCost = calcTotal(cfg.words, secondValues.words) const secondModCost = calcTotal(cfg.modifications, secondValues.modifications) const secondDlCost = calcTotal(cfg.downloads.pro, secondValues.downloads) const set = (setter, field) => (v) => setter(prev => ( )) return ( Why is the pricing so complicated? Short answer: it depends on which plan you are on. Locize offers two fundamentally different pricing models. If you are on a fixed plan , pricing is straightforward - a flat monthly fee with defined limits, just like any other SaaS tool. If you are on the usage-based plan , there are more moving parts, but once you understand the three metrics it quickly becomes predictable. Fixed plans - simple and predictable On a fixed plan, your monthly bill is just your subscription price. No metering, no variable charges, no surprises. You get a defined set of limits (words, languages, downloads, and more) and that is what you pay - month in, month out. Plan Price\\/mo Words Languages Std. CDN downloads Full feature comparison on the pricing page . What happens if you exceed your limits? Fixed plans have hard monthly limits. When you get close, you have two options: Buy overage blocks - for Standard CDN downloads, you can purchase additional blocks on demand after receiving an email reminder. For the Enterprise plan you can also buy overage blocks for words. Block pricing is tiered: the more you have already bought, the lower the per-block cost. Upgrade your plan - if you are consistently bumping against limits, moving up a tier is the cleaner long-term choice. Pro CDN downloads and private downloads on fixed plans are charged automatically per use at the overage rates - no manual purchasing needed. The Free plan is the exception: instead of charging overages for standard downloads, it automatically unpublishes translations when the limit is reached. See full overage block pricing on the pricing page under \"Overages and Top-Ups on Fixed Plans\". Usage-based plan - pay for what you use The usage-based plan has no fixed limits. Instead, you pay a small monthly base fee ( \\/mo) and are billed for three usage metrics each month. This is where it gets a little more involved - but it is still predictable once you understand the mechanics. You are charged on your monthly subscription date . What you are billed for W Words Pay for words stored in the version with the most words (usually latest ). Counted across all languages . Calculated by splitting text by spaces and newlines ( examples ). M Modifications Any translation (key\\/value) that is added , updated , deleted , imported , or copied . Done via UI , API , or CLI . Counted even for empty values . D Downloads Each translation file\\/ namespace request served by the Locize CDN . Per file\\/ namespace , not per word. Standard CDN has a generous \\/month free quota. All unit prices decrease as usage increases - see tiered rates on the pricing page . Other optional billable items: AI Tokens, MT Characters, private downloads, SAML SSO, Backups. Why these three metrics? Words - reflects storage cost (how much content you are keeping alive in the system) Modifications - reflects processing cost (how actively you are editing and publishing) Downloads - reflects CDN cost (how often your app fetches translations, including private downloads ) These are the actual cost drivers on the infrastructure side. Charging for them means small, low-traffic projects pay very little while high-volume projects pay proportionally - rather than everyone paying for the same ceiling. Worked example A team with 3 languages and ~3,000 words per language (~200 keys at ~15 words\\/key), using 2 namespaces and Pro CDN for delivery. All prices in USD. Words are counted across all languages: 3,000 x 3 = 9,000 total. Downloads are per namespace request: 2 namespaces x 30,000 app loads = 60,000 downloads\\/month. During the trial Free period Modifications and downloads are free for the full 14-day trial. Words are billed - so it is a great time to import your existing translations. Base fee: First month Production App is live with typical CDN traffic and only a handful of translation edits. Base fee: Second month Growth Added a new language, cleaned up outdated keys. Slight increase in words and modifications. Base fee: Which plan is right for me? Choose a fixed plan if... You want a predictable monthly invoice Your project size is stable and well-defined You prefer setting a budget ceiling up front You are a small team or just getting started See fixed plan tiers Choose usage-based if... Your usage varies significantly month to month You need unlimited languages, users, or namespaces from day one You want costs to automatically scale down during quiet periods You run multiple projects with very different workloads See usage-based pricing Both models start with a 14-day free trial with full feature access - no credit card required. You can switch between models at any time. If anything is still unclear, share your expected setup - languages, namespaces, CI\\/CD workflow, CDN traffic - and we can help you estimate a realistic monthly cost. Reach out any time. ) } react ..\\/..\\/..\\/pricing\\/tiers.json en-US currency USD currency USD flex items-start gap-2 text-xs leading-relaxed font-semibold shrink-0 text-base-content\\/60 font-mono ml-1 inline-block px-1.5 py-0.5 rounded bg-green-100 text-green-700 font-semibold text-xs leading-relaxed font-semibold font-mono ml-2 mt-0.5 ml-4 space-y-0.5 font-mono text-base-content\\/75 first next font-mono font-bold border-t border-base-200 pt-0.5 rounded-lg px-2 py-2 text-xs font-mono text-center text-base-content\\/60 + mx-2 text-base font-bold flex items-center justify-between gap-2 text-sm text-base-content\\/80 w-28 px-2 py-1 border rounded text-xs text-right bg-base-50 border-base-200 font-mono number 0 usageBased $1-$2 $1-$2 $1-$2 - prose prose-lg not-prose overflow-x-auto rounded-xl border border-base-200 bg-base-50 min-w-full text-sm border-b border-base-200 text-xs text-base-content\\/50 font-semibold uppercase tracking-wide text-left p-3 text-right p-3 text-right p-3 text-right p-3 text-right p-3 border-t border-base-200 hover:bg-base-100\\/60 p-3 font-medium p-3 text-right font-mono Free $ p-3 text-right font-mono p-3 text-right font-mono p-3 text-right font-mono text-sm text-base-content\\/60 not-prose mt-2 link \\/pricing#plan=fixed link \\/pricing#plan=fixed&overages-and-top-ups Overages and Top-Ups on Fixed Plans grid gap-4 md:grid-cols-3 not-prose rounded-xl border border-base-200 bg-base-50 p-4 flex flex-col gap-2 flex items-center gap-2 mb-1 inline-flex h-7 w-7 items-center justify-center rounded-full bg-green-100 text-green-600 text-xs font-bold font-bold text-green-700 text-lg text-sm text-base-content\\/80 link \\/docs\\/general-questions\\/word-counter rounded-xl border border-base-200 bg-base-50 p-4 flex flex-col gap-2 flex items-center gap-2 mb-1 inline-flex h-7 w-7 items-center justify-center rounded-full bg-blue-100 text-blue-600 text-xs font-bold font-bold text-blue-700 text-lg text-sm text-base-content\\/80 rounded-xl border border-base-200 bg-base-50 p-4 flex flex-col gap-2 flex items-center gap-2 mb-1 inline-flex h-7 w-7 items-center justify-center rounded-full bg-yellow-100 text-yellow-600 text-xs font-bold font-bold text-yellow-700 text-lg text-sm text-base-content\\/80 \\/docs\\/namespaces \\/docs\\/namespaces link \\/docs\\/integration\\/cdn-types-standard-vs-pro text-sm text-base-content\\/60 not-prose mt-3 link \\/pricing#plan=usage&how-are-costs-calculated \\/docs\\/integration\\/api\\/#fetch-private-namespace-resources example link \\/docs\\/integration\\/cdn-types-standard-vs-pro text-sm text-base-content\\/60 not-prose mb-4 px-3 py-1.5 rounded-lg bg-base-200 text-sm text-base-content\\/80 hover:bg-base-300 transition font-medium Hide custom inputs Try your own values not-prose mb-6 grid gap-4 md:grid-cols-3 flex flex-col gap-3 p-4 rounded-xl border border-green-200 bg-green-50 font-semibold text-green-700 text-sm Words words Modifications modifications Pro CDN Downloads downloads flex flex-col gap-3 p-4 rounded-xl border border-blue-200 bg-blue-50 font-semibold text-blue-700 text-sm Words words Modifications modifications Pro CDN Downloads downloads flex flex-col gap-3 p-4 rounded-xl border border-yellow-200 bg-yellow-50 font-semibold text-yellow-700 text-sm Words words Modifications modifications Pro CDN Downloads downloads not-prose mb-6 grid gap-4 md:grid-cols-3 rounded-2xl border border-green-200 bg-gradient-to-br from-green-50 to-white shadow p-5 flex flex-col gap-3 flex items-center gap-2 font-bold text-green-700 ml-auto px-2 py-0.5 rounded bg-green-100 text-green-700 text-xs font-semibold text-sm text-green-700 space-y-2 list-none p-0 m-0 Words Modifications Pro CDN Downloads text-xs font-semibold font-mono border-t border-green-200 pt-2 rounded-2xl border border-blue-200 bg-gradient-to-br from-blue-50 to-white shadow p-5 flex flex-col gap-3 flex items-center gap-2 font-bold text-blue-700 ml-auto px-2 py-0.5 rounded bg-blue-100 text-blue-700 text-xs font-semibold text-sm text-blue-700 space-y-2 list-none p-0 m-0 Words Modifications Pro CDN Downloads text-xs font-semibold font-mono border-t border-blue-200 pt-2 rounded-2xl border border-yellow-200 bg-gradient-to-br from-yellow-50 to-white shadow p-5 flex flex-col gap-3 flex items-center gap-2 font-bold text-yellow-700 ml-auto px-2 py-0.5 rounded bg-yellow-100 text-yellow-700 text-xs font-semibold text-sm text-yellow-700 space-y-2 list-none p-0 m-0 Words Modifications Pro CDN Downloads text-xs font-semibold font-mono border-t border-yellow-200 pt-2 not-prose grid gap-4 md:grid-cols-2 rounded-xl border border-base-200 bg-base-50 p-5 font-bold text-base mb-2 text-sm text-base-content\\/80 space-y-1.5 list-disc pl-4 link text-sm mt-3 inline-block \\/pricing#plan=fixed rounded-xl border border-base-200 bg-base-50 p-5 font-bold text-base mb-2 text-sm text-base-content\\/80 space-y-1.5 list-disc pl-4 link text-sm mt-3 inline-block \\/pricing#plan=usage mt-4 link mailto:support@locize.com"},{"title":"Why is there such a high download amount?","description":"Find out why your Locize project may have a high download count, common causes, and solutions for optimizing translation delivery and reducing costs.","href":"\\/docs\\/general-questions\\/why-is-there-such-a-high-download-amount","searchText":"Why is there such a high download amount? What counts as 1 download? 1 download = 1 API or CDN request to fetch translations. A typical request fetches one namespace for one language, e.g.: So if your app loads 3 namespaces in 5 languages, that’s 15 downloads per page load (without caching). aws lambda google cloud functions azure functions etc): Download translations in your CI\\/CD pipeline (via cli or api) and package them with your serverless function. You're creating a new i18next instance or initializing i18next on each request Initializing i18next on every request will fetch translations each time, increasing downloads. Solution : Redesign your initialization to use a single i18next instance, or clone the i18next instance if needed. You're using next i18next with the i18next locize backend In some deployment environments (especially serverless), this can trigger downloads on every request. Solution : Bundle translations with your Next.js app using with dynamic imports, or download them in CI\\/CD via locize cli. If you use i18next locize backend at runtime, the server side singleton in next i18next v16 caches translations across requests, but in serverless environments, consider using it only on the client side. See the next i18next v16 blog post and the Pages Router guide for details. You're using remix i18next with the i18next locize backend Depending on your deployment, this may be due to serverless environments or frequent creation of new i18next instances. Solution : Follow this guide and this example to bundle translations with your Remix app. You've integrated the Locize CDN directly into your mobile app Solution : Download translations when packaging your app (via cli or api) and bundle them with your mobile app. If you want a \"live\" fallback and use i18next with react native, try react native caching with AsyncStorage. Other tips Consider using caching for browser usage or other alternative caching approaches to further reduce downloads."},{"title":"Why was there a support notice in my console for i18next?","description":"Between i18next v25.8.0 and v25.10.x, a console support notice was shown during initialization. It was removed in v26.0.0. Learn how to suppress it if you are still on an older version.","href":"\\/docs\\/general-questions\\/why-was-there-a-support-notice-for-i18next","searchText":"Why was there a support notice in my console for i18next? Between v25.8.0 and v25.10.x , i18next displayed a message linking to Locize when the library initialized: 🌐 i18next is made possible by our own product, Locize. Consider powering your project with managed localization (AI, CDN, integrations): https:\\/\\/locize.com 💙 The notice was removed in v26.0.0 . If you are still seeing it, upgrade to v26 or later. For the full story on why it was introduced, what we learned, and why we removed it, read our blog post: Why We Added a Console Notice to i18next, and Why We Removed It Still on an older version? If upgrading immediately isn't possible, you can suppress the notice by setting this at the top of your entry point before any imports: Or set the environment variable or in your pipeline or Dockerfile. Or if you are initializing i18next yourself, simply set the option to .:"},{"title":"Word Counter","description":"Learn how Locize counts words for billing and reporting, including rules, examples, and special cases for accurate word counting.","href":"\\/docs\\/general-questions\\/word-counter","searchText":"Word Counter This page explains how Locize counts words for billing and reporting. Other examples of how words are counted String Words : Number is 123.45 3 0 – 1 at 2 4 two in one 1 2 in one 1 two in 1 1 hello?world 1 hello ? world 2 ☂ ☃ ☀⚤ 0 © %company% 1 01\\/01\\/1980 1 21. 01. 2023 3 Monday, August 8, 2011 4 https:\\/\\/locize.com\\/blog\\/react i18next 1 Let’s look 2 Word(s) 1 Decouple software release from the translation work. 7"},{"title":"Getting started","description":"Step-by-step guide to integrating Locize into your website or app: project setup, i18n instrumentation, adding content, and translating with continuous delivery.","href":"\\/docs\\/getting-started","searchText":"Getting started Integrating Locize into your website \\/ application takes four steps. If you still got questions after reading the getting started guide, contact us. Step 1) SignUp and create a project Head over to our app and register. Create your first project on the dashboard after login. Create a user account Add a new project Step 2) Decide on an i18n instrumentation Next you will need to instrument your code to enable the internationalization of your website. For more details on that read the instrument your code section. Step 3) Add new \\/ existing segments You can add new segments or complete files using the web interface or the command line tool. Using locizify or i18next you can enable the option doing so new segments will automatically added to your project. Create content Step 4) Translate your content Start translating your content. You can translate manually in the editor, or enable automatic translation to let AI or machine translation generate first drafts automatically. Changes will be published to our CDN and available to your users without redeploying. The Different Views Next steps Enable automatic AI\\/MT translation: translate new keys automatically as they arrive Set up CI\\/CD with GitHub Actions: download or sync translations in your pipeline Connect your AI assistant via MCP: manage translations from Claude, Cursor, or VS Code Going to production: checklist for production readiness"},{"title":"Add a new project","description":"Step-by-step instructions for creating a new project in Locize. Learn how to set project name, source language, and i18n format for your localization workflow.","href":"\\/docs\\/getting-started\\/add-a-new-project","searchText":"Add a new project Watch the Getting Started video for a quick overview, or see the above showcase\\/demo video for more details. To get started, enter at least: Project name Company name Source language You can adjust other settings as needed. Note: The i18n format depends on your i18n framework. If you're unsure or not using a framework yet, just keep the default option."},{"title":"Add content","description":"Learn how to add content to your Locize project: integrate with your app, import files, add languages, and manage translation segments using the UI, CLI, or API.","href":"\\/docs\\/getting-started\\/add-content","searchText":"Add content You are a developer and like to integrate Locize directly to your app? There are a few options to integrate Locize into your code base: Instrumenting your code base Using our API Using the CLI Example with the cli (migrate command) upload content part of showcase\\/demo You got some files you like to import or want to add some segments manually? By default a \"latest\" version is created for your project. What are versions? You got some files you like to import? Choose the \"IMPORT\" button... Which file formats are supported? Add languages Make sure to add all desired languages. Also new languages can be added here. Alternatively, you can navigate to your settings page... ...and and add new languages there: You can also add a new language via the API. You want to add translation segments manually? Like before, you can add new namespace from your project overview or via settings page. What is a namespace? Now click on the created namespace or click the \"Translate\" button. You can open the namespace in the \"CAT View \\/ Translation Editor\". To add a new segment\\/text click the ADD button. Enter a segment key and a segment value and click ADD. Click the SAVE button to confirm your work."},{"title":"Create a user account","description":"Learn how to register a new user account in Locize. Step-by-step instructions for signing up, choosing a username, and logging in to start localizing your projects.","href":"\\/docs\\/getting-started\\/create-a-user-account","searchText":"Create a user account Enter your firstname and lastname, email address, choose a username and define a password. Having registered, you can login with your chosen username and password."},{"title":"Glossary","description":"Learn how to use glossaries in Locize to ensure consistent, high-quality translations. Import, manage, and apply terminology for your projects.","href":"\\/docs\\/glossary","searchText":"Glossary A glossary is a powerful tool for ensuring consistent and high quality translations. It is a lexicon that contains terminology to be used (or avoided) in translations, helping translators use the terms preferred by your organization and avoid forbidden words or phrases. Glossaries are especially useful for: Maintaining brand voice and terminology Avoiding mistranslations of key terms Speeding up the translation process by providing clear guidance glossary\\/lexica part of showcase\\/demo Enabling the glossary feature You can enable the glossary in your Locize project to provide terminology support for your translators. There are two main ways to add glossary terms: 1. Import a glossary file : Locize supports both and glossary file formats for easy import. 2. Manually add and define terms : You can also add terms directly in the UI and define their preferred or forbidden usage. Using the glossary Once enabled, the glossary integrates directly into the CAT \\/ Translation Editor. For every segment, you will see terminology suggestions based on the source text (suggested terms) and your translation (approved usage or alternatives): The terms are checked automatically every time you update a translation. If a forbidden term is used, Issue 230 will be raised to alert you and your team. Glossaries help ensure your translations are always on brand and consistent across all languages and projects. For tone, formality, and usage rules, see the Styleguide."},{"title":"Guides","description":"Browse guides, tips, and migration help for using Locize effectively. Step-by-step instructions for common localization tasks.","href":"\\/docs\\/guides","searchText":"Guides"},{"title":"Convince Your Boss Letter","description":"A ready-to-use letter template to help you convince your manager or decision maker to adopt Locize for localization. Highlights benefits, workflow improvements, and cost-effectiveness.","href":"\\/docs\\/guides\\/convince-your-boss-letter","searchText":"Convince Your Boss Letter Need help justifying the use of Locize? Copy and paste the letter below into an email to your manager or decision maker. Dear \\ Boss Name\\ , I’d like to propose that we use Locize for our localization needs. Locize is a leading localization as a service solution, trusted by developers and translators worldwide. Here’s why I believe Locize is the right choice for us: Separation of concerns: We’ve been treating localization as just extracting texts from code, but it’s much more. Translations shouldn’t live in our code repository. The localization team should have early and ongoing access, enabling them to start translating features as soon as they’re ready for shipping. Streamlined process: Our current localization workflow causes delays and confusion: some terms are outdated, some new translations arrive after release, and we often scramble before launches. With Locize, we can update or add translations without shipping a new software release. Cloud based management: Translations are managed in our Locize project and published to the Locize CDN for our application to consume. If we have concerns about production connectivity, we can download and bundle translations ourselves. Continuous collaboration: The localization team can work from day one and keep up with changes easily. Translations can be updated independently of app releases. Full transparency: We always know what’s translated, what’s machine translated, and what’s not. If we order translations from integrated providers, we can track open orders. Safe import\\/export: Even if we export and import translations, Locize’s tooling helps us merge and review all changes. Easy integration: I’ve already explored how we could integrate Locize, and it works seamlessly with our workflow. Cost effective: The subscription fee starts at just $5 per month. We can choose between usage based pricing (pay for what we use) or fixed plans for predictable monthly costs, whichever fits our needs best. See pricing details. I’m confident that Locize will help us manage localization more efficiently and effectively. I strongly recommend we give it a try: locize.com Did you know? The founders of Locize are also the creators of i18next, the leading open source internationalization framework that we’re already using. Please let me know if you have any questions or concerns. Otherwise, I hope we can move forward with this opportunity. Thanks, \\ Your Name\\"},{"title":"Find unused translations","description":"Learn how to identify and remove unused translation keys in your Locize projects. Improve localization quality, reduce clutter, and streamline your workflow with best practices and tools.","href":"\\/docs\\/guides\\/find-unused-translations","searchText":"Find unused translations Keeping your translation files clean and up to date is essential for efficient localization. Locize provides tools and workflows to help you identify and safely remove unused translation keys, reducing clutter and maintenance overhead. 2. Track Usage with a Script You can use the script to automatically update the \"last used\" timestamps on your reference (source) language keys. Best Practice: Use this script only during development or in staging environments. Avoid running it in production, as it generates additional HTTP requests and workload. See going to production guidelines. 3. Track Usage via the API Alternatively, you can update the \"last used\" date using the Locize API. Both the script and API approaches allow you to filter by \"not used for xy time\" in the Locize UI: This makes it easy to spot and review keys that haven’t been used recently. 4. Review and Clean Up Depending on your workflow, it’s generally safe to remove translation keys that haven’t been used in several months. Always review before deleting to avoid accidental data loss. See this video section for a demonstration of the process. Last used keys are also featured in our showcase\\/demo. Next Steps Regularly check for unused keys in your Locize project. Automate usage tracking in your development workflow. Consult the API documentation for advanced integration. For more tips, see our best practices guides."},{"title":"Going to production","description":"Essential steps and best practices for launching your app with Locize in production. Learn about API key security, environment setup, and optimizing translation delivery.","href":"\\/docs\\/guides\\/going-to-production","searchText":"Going to production Launching your app with Locize in production is fast and reliable, but there are a few critical steps to ensure security, performance, and a smooth workflow. Here’s what you need to know before going live: 2. Use saveMissing, Add, and Update Only in Development The saveMissing, add, and update features are designed for development and staging environments. Using them in production can generate unnecessary requests and may result in additional charges or account suspension. If you enable these features, ensure the publish mode for the version is set to auto publish to avoid 412 errors. 3. Use last used Tracking Only in Development The locize lastused module and the used API endpoint should only be used during development. Using them in production can overload the service with unnecessary requests. 4. Load Translations from the Locize CDN Loading translations from the Locize CDN offers several advantages: Realtime updates: Changes made in the Locize UI or API are instantly available via the CDN, saving time during development and production. No redeployments needed: Translators can fix typos or update content without requiring a new app deployment. If you must load translations from your own server, consider using the CDN at least during development for real time feedback. 5. Use Versions & Caching for Performance For optimal performance in production: Create a dedicated version for production in your project settings. Enable caching on this version. This caches translations at edge locations, reducing latency and improving load times for users worldwide. Subsequent requests will also be cached by the browser. Note: Configuring advanced caching (e.g., Cache Control max age) is only possible with the Pro CDN. See the caching documentation for details. Production Launch Checklist [ ] API key \\/ PAT is not exposed in production code [ ] saveMissing\\/add\\/update features disabled in production [ ] last used tracking disabled in production [ ] Translations loaded from Locize CDN [ ] Dedicated production version created [ ] Caching enabled (Pro CDN for advanced options) By following these steps, you’ll ensure a secure, efficient, and maintainable localization workflow in production."},{"title":"How to search","description":"Learn how to efficiently search for translations in Locize using exact, fuzzy, and quoted search techniques. Master the CAT view\\/Translation Editor for streamlined localization.","href":"\\/docs\\/guides\\/how-to-search","searchText":"How to search Efficiently finding the right translations is key to managing your localization workflow. Locize offers powerful search features in the CAT (Computer Assisted Translation) view \\/ Translation Editor, making it easy to locate, review, and update your content. 2. Fuzzy Search If your search term does not exactly match any entries, Locize will try to find similar results automatically (fuzzy search). This helps you find translations even if you’re unsure of the exact wording. To force a fuzzy search, add an asterisk ( ) at the end of your search term. This will broaden the results to include similar entries. 3. Quoted Search (Strict) If you want to search for an exact phrase and avoid fuzzy results, wrap your search text in double quotes ( ). This ensures only exact matches are returned. Where Can I Search? This search behavior works in the CAT view \\/ Translation Editor, making it easy to find translations wherever you are working. Tips & Best Practices Use exact search for precise results. Add an asterisk ( ) for broader, fuzzy matches. Use double quotes for strict, exact phrase searches. Try different keywords if you don’t find what you’re looking for. For more details on managing translations, see the CAT view \\/ Translation Editor documentation."},{"title":"Keeping track of new translations","description":"Best practices and tools for tracking new, changed, and untranslated segments in Locize. Learn how to use filters, warnings, and workflow tips to manage your localization process.","href":"\\/docs\\/guides\\/keeping-track-of-new-translations","searchText":"Keeping track of new translations You have to define as a team how your localization process should look like. Define a workflow that suits you best. Some general stuff Untranslated Generally, untranslated segments can be seen with the “untranslated” filter: Best is, to filter for the appropriate language and then click untranslated in the filter. The filter is available in CAT view \\/ Translation Editor. Last changed Another interesting filter is the last changed filter: Here you can filter for segments changed in the last couple of days. Best is, to filter for the reference language and then click changed last x days in the filter. This way you'll see which changes has been done in that period. The filter is available in CAT view \\/ Translation Editor. The filter groups are combined with an and conditions. For example having the translated filter in combination with the changed last x days filter. More comfortable with warning issue 302 Even better is to filter for warnings (mainly because of issue 302), this issue says that the reference language has been changed, but the target language has not: Additional stuff Fuzzy translations Translations created with the help of machine translation or generative AI services are marked with the fuzzy icon. Filter by those fuzzy translations is an easy starting point to review those generated translations. The fuzzy icon is cleared as soon as a translation is edited by a human or if it's manually cleared. It can be cleared in the CAT view \\/ Translation Editor on the right side: Or via bulk actions: Tags Using the tags feature can be a good way to design your custom translation workflow. A minimalistic example: Having a tag with the name TO BE REVIEWED every segment that should be reviewed can be tagged. i.e. when creating new segments, you can tag the segments in the target languages with the TO BE REVIEWED tag. This way a translator for a specific language can filter for its language and the TO BE REVIEWED tag. As soon as the segment is \"translated or reviewed\" the tag can be removed from that segment: Another minimalistic example: Having a tag with the name REVIEWED every segment that has been reviewed receives that tag.This way a translator for a specific language can filter for its language and the inverse REVIEWED tag: Make sure you toggle the has tag checkbox, first: Review workflow For more complicated “verifications” there is also the option of review workflows. Branched projects There is also the option of a completely separate localization process. If new translations need to be “done”, a kind of internal “order” can be made with the help of the branched projects. Use an order service You can use one of the integrated services to order the translations from a third party. Just go to your order settings and enable the service you like to use by providing the needed data. Fancy stuff Slack notifications You can use the slack integration to inform the translators. Each time a namespace is not completely translated anymore a slack notification is generated. Webhook You can use the webhook integration to POST to some API. Each time a namespace is not completely translated anymore a webhook event is sent to the configured API."},{"title":"Latency Optimization","description":"Discover best practices for minimizing latency and optimizing translation delivery in Locize. Learn about caching, production setup, and performance tips for a faster user experience.","href":"\\/docs\\/guides\\/latency-optimization-tips-for-optimal-performance","searchText":"Latency Optimization Tips for Optimal Performance Delivering fast, seamless localization is crucial for a great user experience. Latency, the delay between a user's request and the server's response, can impact how quickly translations load in your app. Here’s how to minimize latency and keep your users happy. How to Optimize Latency While you can’t eliminate latency entirely, you can apply these best practices to reduce its impact: 1. Create a Dedicated Production Version Set up a dedicated version of your translations for production use. This ensures stability and prevents accidental changes from affecting live users. 2. Disable Auto Publish for Production Do not enable auto publish for your production version. Instead, publish updates manually, via the API, or using the CLI. This gives you control over when changes go live and allows for proper testing. 3. Enable Cache Control (max age) Leverage HTTP caching by enabling Cache Control max age. This allows browsers and CDNs to cache translations, reducing the number of requests to the server and speeding up load times for end users. Note: Configuring is only possible with the Pro CDN. If you are using the standard CDN, this option is not available. See the caching documentation for details. Additional Tips Minimize the number of requests by bundling translations where possible. Monitor latency and cache hit rates to identify bottlenecks. Quick Checklist [ ] Dedicated production version created [ ] Auto publish disabled for production [ ] Manual\\/API\\/CLI publishing workflow in place [ ] Cache Control max age enabled By following these tips, you’ll ensure your localized content loads quickly and reliably for users around the world."},{"title":"Migrating an i18next project","description":"Step-by-step guide to migrating your i18next project to Locize. Learn about integration, best practices, and unlocking advanced translation management features.","href":"\\/docs\\/guides\\/migrating-an-i18next-project","searchText":"Migrating an i18next project Migrating your existing i18next project to Locize is a straightforward process that unlocks powerful translation management, collaboration, and automation features. This guide will walk you through the essential steps to get up and running with Locize in just a few minutes. Why migrate to Locize? Centralized translation management Real time updates and collaboration Seamless integration with i18next and popular frameworks 2. Migrate Your Existing Translations Easily transfer your current translation files to Locize using the Locize CLI: Replace and with your actual credentials. This command will upload all your existing i18next translation files to your Locize project. Next Steps Explore the Locize dashboard to manage your translations. Integrate Locize with your deployment workflow for continuous localization. Check out more guides and best practices. If you have any questions or need help, send us an e mail!"},{"title":"Migrating from ...","description":"Find step-by-step guides for migrating your translation data from other Translation Management Systems (TMS) to Locize, including Phrase and Transifex.","href":"\\/docs\\/guides\\/migrating-from","searchText":"Migrating from ... Sometimes you want to migrate your data from another Translation Management System to Locize, in the subpages you will find migration guides for the most common systems. Migrating from Phrase to Locize Migrating from Transifex to Locize Migrating from Crowdin to Locize Migrating from Tolgee to Locize Migrating from Lokalise to Locize Migrating from i18nexus to Locize Migrating from SimpleLocalize to Locize Migrating from Localazy to Locize"},{"title":"Migrating from Crowdin to Locize","description":"Step-by-step guide to migrating your translations from Crowdin to Locize. Learn how to export, import, and verify your localization files for a smooth transition.","href":"\\/docs\\/guides\\/migrating-from\\/migrating-from-crowdin-to-locize","searchText":"Migrating from Crowdin to Locize If you want to move your translations from Crowdin to Locize , this guide walks you through exporting your files, setting up a Locize project, and importing everything cleanly. Evaluating Locize? See our comparison with Tolgee to understand how our engineering first approach differs. 2) Create a Locize project 1. If you haven’t already, create an account and your first project 2. Add the languages you need 3. (Optional but recommended) Decide on namespaces and create them 3) Import your files into Locize You can import using any of these options: UI import CLI API 4) Verify & go live Spot check a few keys in each language (especially plural forms and interpolation placeholders). Confirm your reference language matches what your app expects. If you use i18next, consider setting up a workflow that keeps Locize and your repo in sync (CLI) or updates keys automatically (API)."},{"title":"Migrating from i18nexus to Locize","description":"Step-by-step guide to migrating your translations from i18nexus to Locize. Learn how to export, import, and verify your localization files for a smooth transition.","href":"\\/docs\\/guides\\/migrating-from\\/migrating-from-i18nexus-to-locize","searchText":"Migrating from i18nexus to Locize If you want to move your translations from i18nexus to Locize , this guide walks you through exporting your files, setting up a Locize project, and importing everything cleanly. Evaluating Locize? See our comparison with i18nexus to understand how our engineering first approach differs. 2) Create a Locize project 1. If you haven’t already, create an account and your first project. 2. Add the languages you need in Locize. 3. (Optional but recommended) Decide on namespaces and create them in Locize so your imported JSON files map to the correct namespaces. 3) Import your files into Locize You can import the JSON files you exported from i18nexus into Locize using any of these options: UI import : upload JSON files directly in the Locize dashboard. CLI : if you prefer to import programmatically or keep translations in sync with your repository. API : automate imports from scripts or CI pipelines. 4) Verify & go live Spot check a few keys in each language (pay special attention to plural forms and interpolation placeholders). Confirm your reference language in Locize matches what your app expects. If you use i18next in your app, use the Locize CLI or API to keep Locize and your repo in sync (pull translated JSON into your repo as part of your build\\/deploy)."},{"title":"Migrating from Localazy to Locize","description":"Step-by-step guide to migrating your translations from Localazy to Locize. Learn how to export, import, and verify your localization files for a smooth transition.","href":"\\/docs\\/guides\\/migrating-from\\/migrating-from-localazy-to-locize","searchText":"Migrating from Localazy to Locize If you want to move your translations from Localazy to Locize , this guide walks you through exporting your files, mapping your project structure to Locize namespaces, and importing everything cleanly. Evaluating Locize? See our comparison with Localazy to understand how our i18next native approach differs. 1) Export your localization files from Localazy 1. Log in to your Localazy account. 2. Open the project you want to migrate. 3. Go to the Download section. 4. Select the format you need (recommended: JSON for i18next projects, but XLIFF , CSV , and others are also supported). 5. Download each language file. 6. If you exported a ZIP, extract it to a local directory. Localazy also supports exporting via: CLI ( ) API 2) Map Localazy project structure to Locize namespaces Localazy organizes translations as flat key sets within a project. Locize uses namespaces to split translations into logical groups (e.g. , , ). Before importing, decide how to map your keys: Single namespace : if your Localazy project has a manageable number of keys, import everything into a single namespace (e.g. or ). Multiple namespaces : if you already prefix keys by domain (e.g. , ), split them into separate files per namespace before importing. This keeps your Locize project organized and leverages i18next namespace loading. 3) Import your files into Locize You can import using any of these options: UI import CLI API If you split your translations into multiple namespaces in step 2, import each namespace file separately. 4) Update your app config to point to Locize CDN If you are using i18next, replace your current backend configuration with the Locize backend plugin: Then update your i18next config: Your app will now load translations directly from the Locize CDN at runtime, with no file sync or redeploy needed. 5) Verify & go live Spot check a few keys in each language (especially plural forms and interpolation placeholders). Confirm your reference language matches what your app expects. If you use i18next, consider enabling so new keys are sent to Locize automatically during development. Test that your app loads translations correctly from the Locize CDN."},{"title":"Migrating from Lokalise to Locize","description":"Step-by-step guide to migrating your translations from Lokalise to Locize. Learn how to export, import, and verify your localization files for a smooth transition.","href":"\\/docs\\/guides\\/migrating-from\\/migrating-from-lokalise-to-locize","searchText":"Migrating from Lokalise to Locize If you want to move your translations from Lokalise to Locize , this guide walks you through exporting your files, setting up a Locize project, and importing everything cleanly. Evaluating Locize? See our comparison with Tolgee to understand how our engineering first approach differs. 2) Create a Locize project 1. If you haven’t already, create an account and your first project 2. Add the languages you need 3. (Optional but recommended) Decide on namespaces and create them 3) Import your files into Locize You can import using any of these options: UI import CLI API 4) Verify & go live Spot check a few keys in each language (especially plural forms and interpolation placeholders). Confirm your reference language matches what your app expects. If you use i18next, consider setting up a workflow that keeps Locize and your repo in sync (CLI) or updates keys automatically (API)."},{"title":"Migrating from Phrase to Locize","description":"Step-by-step guide to migrating your translations from Phrase to Locize. Learn how to export, import, and verify your localization files for a smooth transition.","href":"\\/docs\\/guides\\/migrating-from\\/migrating-from-phrase-to-locize","searchText":"Migrating from Phrase to Locize If you want to move your translations from Phrase to Locize , this guide walks you through exporting your files, setting up a Locize project, and importing everything cleanly. Evaluating Locize? See our comparison with Tolgee to understand how our engineering first approach differs. 2) Create a Locize project 1. If you haven’t already, create an account and your first project 2. Add the languages you need 3. (Optional but recommended) Decide on namespaces and create them 3) Import your files into Locize You can import using any of these options: UI import CLI API 4) Verify & go live Spot check a few keys in each language (especially plural forms and interpolation placeholders). Confirm your reference language matches what your app expects. If you use i18next, consider setting up a workflow that keeps Locize and your repo in sync (CLI) or updates keys automatically (API)."},{"title":"Migrating from SimpleLocalize to Locize","description":"Step-by-step guide to migrating your translations from SimpleLocalize to Locize. Learn how to export, import, and verify your localization files for a smooth transition.","href":"\\/docs\\/guides\\/migrating-from\\/migrating-from-simplelocalize-to-locize","searchText":"Migrating from SimpleLocalize to Locize This guide walks you through moving your translations from SimpleLocalize to Locize and switching your i18next configuration to use the native plugin. The migration preserves all your translation content. Your application code (the calls, namespaces, and language keys) does not change. Step 1: Export your translations from SimpleLocalize In SimpleLocalize, go to Downloads (or use the CLI): This produces JSON files organised by language and namespace, for example: If your SimpleLocalize project uses a flat single file format (one file per language rather than per namespace), the same structure applies, and you can import flat JSON files into Locize directly. Step 2: Create your project in Locize 1. Log in to locize.app 2. Create a new project (give it the same name as your SimpleLocalize project) 3. Add your languages (match the languages in your SimpleLocalize export) 4. Note your Project ID from the project settings page Step 3: Import translations using the i18next cli The handles the migration in one command: This uploads all namespaces and languages to your Locize project. Keys and values are preserved exactly. Alternatively, use the Locize web interface: go to your project, select a namespace, and use Import to upload each JSON file. Step 4: Install the Locize backend plugin Remove the SimpleLocalize dependencies: Install the Locize backend plugin: Step 5: Update your i18n configuration Before (SimpleLocalize): After (Locize): The is only needed in development (for ). In production, translations are fetched from the public CDN using the alone. Step 6: Replace saveMissing custom code (if applicable) If you had a custom with interval based batching in your SimpleLocalize setup, remove it entirely. The implements the function natively, so is all you need. Remove this pattern: Step 7: Verify Start your application in development mode. Visit a page that uses translations. You should see them loading from the Locize CDN. Check your Locize project dashboard to confirm namespaces and keys are present. To verify CDN delivery is working correctly, open your browser's network tab and confirm requests are going to or (based on your CDN type). Optional: Enable automatic translation on new keys One of the advantages of the Locize + setup is the ability to automatically AI translate new keys as they arrive. In your Locize project settings, enable Automatic Translation and configure your preferred AI provider. From that point on, any new key your developers add will be: 1. Automatically sent to Locize (via ) 2. Automatically translated into all configured target languages 3. Immediately available via CDN, with no manual step required See the automatic translation docs for setup details. Troubleshooting Keys are not loading : Check that your matches the Locize project, and that you added the correct languages in Locize. Missing keys not appearing in Locize : Confirm is set and that you are passing a valid in your development environment. The must have write access. Namespace mismatch : If your SimpleLocalize project used flat files (no namespace path), import into the namespace in Locize (the i18next default). Need help? Contact support@locize.com."},{"title":"Migrating from Tolgee to Locize","description":"Step-by-step guide to migrating your translations from Tolgee to Locize. Learn how to export, import, and verify your localization files for a smooth transition.","href":"\\/docs\\/guides\\/migrating-from\\/migrating-from-tolgee-to-locize","searchText":"Migrating from Tolgee to Locize If you want to move your translations from Tolgee to Locize , this guide walks you through exporting your files, setting up a Locize project, and importing everything cleanly. Evaluating Locize? See our comparison with Tolgee to understand how our engineering first approach differs. 2) Create a Locize project 1. If you haven’t already, create an account and your first project 2. Add the languages you need 3. (Optional but recommended) Decide on namespaces and create them 3) Import your files into Locize You can import using any of these options: UI import CLI API 4) Verify & go live Spot check a few keys in each language (especially plural forms and interpolation placeholders). Confirm your reference language matches what your app expects. If you use i18next, consider setting up a workflow that keeps Locize and your repo in sync (CLI) or updates keys automatically (API)."},{"title":"Migrating from Transifex to Locize","description":"Comprehensive guide for migrating your translations from Transifex to Locize. Follow export, import, and verification steps to ensure a seamless migration.","href":"\\/docs\\/guides\\/migrating-from\\/migrating-from-transifex-to-locize","searchText":"Migrating from Transifex to Locize If you want to move your translations from Transifex to Locize , this guide walks you through exporting your files, setting up a Locize project, and importing everything cleanly. Evaluating Locize? See our comparison with Tolgee to understand how our engineering first approach differs. 2) Create a Locize project 1. If you haven’t already, create an account and your first project 2. Add the languages you need 3. (Optional but recommended) Decide on namespaces and create them 3) Import your files into Locize You can import using any of these options: UI import CLI API 4) Verify & go live Spot check a few keys in each language (especially plural forms and interpolation placeholders). Confirm your reference language matches what your app expects. If you use i18next, consider setting up a workflow that keeps Locize and your repo in sync (CLI) or updates keys automatically (API)."},{"title":"Using Locize as a translator","description":"A practical guide for translators using Locize. Learn how to accept invitations, navigate projects, use the CAT view, and efficiently translate and review content.","href":"\\/docs\\/guides\\/using-locize-as-a-translator","searchText":"Using Locize as a translator Locize makes it easy for translators to contribute to projects with a streamlined, user friendly interface. Whether you’re new to Locize or have been invited to help with translations, this guide will walk you through the typical workflow and best practices. 2. Navigating the Project & Starting to Translate In the Project Dashboard, you can select click on any language or namespace you're interested in. Or simply click the TRANSLATE button. You’ll see the translation files and their completion status. To begin translating, you can choose between two main views using the buttons on the right: CAT View \\/ Translation Editor The CAT View \\/ Translation Editor provides an overview of all translations and highlights recent changes. It’s your main view to work on translations. Learn more about the CAT \\/ Translation Editor here. 3. Translating Segments Efficiently To focus on untranslated content, set a filter to show only untranslated segments. This reduces the list to just the segments that need your attention: You can either select machine translation and post edit it, or type your own translation into the input field, etc. To move to the next segment, use your mouse or keyboard shortcuts: Tip: Keyboard shortcuts may differ between Windows and Mac. Check the key bindings for your system. After translating, don’t forget to save your changes using the save button or the appropriate keybinding: 4. Staying Organized & Tracking Progress Locize offers additional features to help you keep track of new and updated translations. Explore more tips here. Summary & Next Steps Accept your invitation and register. Select your project and language. Use the CAT \\/ Translation Editor to translate efficiently. Filter for untranslated segments and use keyboard shortcuts to speed up your workflow. Save your work regularly. Explore more guides for advanced tips and best practices."},{"title":"Working with translators","description":"Explore the different ways to collaborate with translators in Locize. Learn about integrated order services, direct file exchange, project invitations, and branched projects for efficient localization.","href":"\\/docs\\/guides\\/working-with-translators","searchText":"Working with translators translators part of showcase\\/demo Use an order service You can use one of the integrated services to order the translations from a third party. Just go to your order settings order services and enable the service you like to use by providing the needed data. Using an integrated ordering service might be a good option to start with. Here you can see how this might look like. Send files You decided you like to have more control and a direct contact with your translators or translation agency. The benefits of doing so are clear you get more control over your deadline and the quality. But this also means more work for you. One option to get the work done is exporting the translations using the UI or API and send those to the translators. This is a traditional way but translators are used to it. But be aware sending files around creates always an overhead. Invite them to your project You can invite individuals to your project and limiting access to certain versions and languages. This option is the best case but might be limited to your own in house translators or people you already work with for a longer time. Check also this advice on how to best keeping track of new translations. Use branched projects (branches) You like to provide your translators with the benefits of using the Locize UI or like to avoid sending files around? With \"branched projects\" you can create a new branched project on Locize and share them with the translators. No need to grant access to your main project The created projects are connected with your main project import the translations back with one click Invite translators to those projects sharing one invitation link (no need for individual invitations per email) or create a personal invitation If you plan to introduce a new language, we recommend to add that new language code to your main project and then create a branch."},{"title":"History","description":"Track the history of your translations in Locize. See who made changes, when, and restore previous versions for quality control and collaboration.","href":"\\/docs\\/history","searchText":"History Tracking the history of your translations is essential for quality control, accountability, and collaboration. The history feature in Locize allows you to see exactly when and how each translation was changed, making it easy to audit changes, revert mistakes, and understand the evolution of your content. What does the history feature do? The history feature enables you to: Track all changes made to your translations See who made each change and when Prove when a content fragment was updated (for compliance or review) Restore previous versions if needed How to access translation history You can find the history tab in the CAT \\/ Translation Editor by selecting a key\\/segment and switching to the history tab on the right side. This makes it easy to review changes, compare versions, and maintain a clear record of your translation process."},{"title":"Integration","description":"Explore all the ways to integrate Locize into your localization workflow. Find guides for APIs, CLIs, plugins, webhooks, and more to streamline your translation process.","href":"\\/docs\\/integration","searchText":"Integration"},{"title":"API","description":"Comprehensive guide to the Locize REST API. Learn how to fetch, update, and manage translations programmatically for custom integrations and automation.","href":"\\/docs\\/integration\\/api","searchText":"function getRequestBodyExample (bodySchema, details, components) { if (!bodySchema) return undefined if (bodySchema.$ref) bodySchema = resolveSchema(bodySchema, components) if (details && details.requestBody && details.requestBody.content && details.requestBody.content['application\\/json']) if (bodySchema.example !== undefined) return bodySchema.example if (bodySchema.examples && typeof bodySchema.examples === 'object') if (bodySchema.type === 'array' && bodySchema.items) if (bodySchema.type === 'object' || bodySchema.properties) if (bodySchema.type === 'string') return '' if (bodySchema.type === 'boolean') return false if (bodySchema.type === 'integer' || bodySchema.type === 'number') return 0 return } function resolveSchema (schema, components) function MarkdownRenderer ( ) function capitalizeTagName (name) const [tryItCollapsed, setTryItCollapsed] = useState( ) const toggleTryItCollapsed = (key) => const = useData() const [liveSpec, setLiveSpec] = useState(spec) const [globalApiKey, setGlobalApiKey] = useState('') useEffect(() => , [spec, specUrl]) const tagMap = React.useMemo(() => { const map = if (liveSpec.tags && liveSpec.paths) { liveSpec.tags.forEach(tag => ) const listedRoutes = new Set() Object.entries(liveSpec.paths).forEach(([path, methods]) => { Object.entries(methods).forEach(([method, details]) => { const routeKey = method + ' ' + path for (const tag of details.tags || []) }) }) } return map }, [liveSpec]) const [expanded, setExpanded] = useState( ) const toggleExpand = (key) => useEffect(() => { if (typeof window === 'undefined') return function expandFromHash () { const hash = window.location.hash?.replace(\\/^#\\/, '') if (!hash) return const allEndpoints = [] if (liveSpec.tags && liveSpec.tags.length && tagMap) { liveSpec.tags.forEach(tag => ) } const match = allEndpoints.find(e => e.anchorId.toLowerCase() === hash.toLowerCase()) if (match) } expandFromHash() window.addEventListener('hashchange', expandFromHash) return () => window.removeEventListener('hashchange', expandFromHash) }, [liveSpec, tagMap]) const [tryItState, setTryItState] = useState( ) const handleTryItChange = (key, field, value) => const cdnDomains = [ , ] const [globalDomain, setGlobalDomain] = useState(cdnDomains[1].value) function buildPath (path, paramValues) { let out = path Object.entries(paramValues || ).forEach(([k, v]) => ) return out } const methodColor = method => function endpointRequiresAuth (details) function buildCurlCommand ( ) { const state = tryState || const verb = (method || 'GET').toUpperCase() const cmd = [`curl -X $ `] const escapeSingleQuotes = (s) => String(s).replace(\\/'\\/g, \"'\\\\''\") if (requiresAuth) let bodyText = null if (bodySchema) { cmd.push('-H \\'Content-Type: application\\/json\\'') if (typeof state.body === 'string' && state.body.trim() !== '') else } if (bodyText != null) cmd.push(`'$ '`) return cmd.join(' \\\\\\n ') } return ( \u003c> API Using an AI assistant? The Locize MCP server provides direct integration with Claude, Cursor, and other AI tools, with no API calls required. Getting Started You can use the API directly via HTTPS requests, or with our Command Line tool and locizer module . The API supports both public and private (API-key protected) endpoints. Depending on your CDN type , the API domain may differ. Tip: Store your API keys and Personal Access Tokens securely and never expose write keys in client-side code or public repositories. Authentication Protected endpoints require an Authorization: Bearer &lt;token&gt; header. Locize accepts two types of tokens: API Key (recommended): project-scoped, created in your project settings. Best for direct API usage, single-project integrations, and client-side SDKs. Personal Access Token (PAT) : user-scoped, created in \"My Profile\". Works across all projects you have access to. Primarily designed for MCP integration and simplified multi-tenant workflows. The server detects the token type automatically. Both are passed the same way in the Authorization header. Main Capabilities Fetch translations for any namespace, version, and language Fetch available languages for a project Report missing or used translations (for development workflows) Update or remove translations in bulk Add context or tags to translations Usage Notes All endpoints use standard HTTP verbs (GET, POST, etc). Most endpoints require your projectId (and sometimes an API key or Personal Access Token ). For large updates, batch your requests (max 1000 keys per request). For production, use only CDN endpoints or\\/and API keys with limited permissions. See the Going to production guide for best practices. API Endpoint Explorer Browse all available endpoints grouped by category. Click an endpoint for details and usage examples. Domain: 🌐 Applies to all endpoints Global API Key \\/ PAT: 🔒 Used for all endpoints that require authorization {liveSpec.tags && liveSpec.tags.map(tag => ( {tagMap[tag.name]?.map(( ) => { const key = method + ' ' + path const isExpanded = expanded[key] const summary = details.summary || `$ $ ` const anchorId = summary.toLowerCase().replace(\\/\\s+\\/g, '-').replace(\\/[^a-zA-Z0-9-]\\/g, '') const params = (details.parameters || []).filter(p => p.in === 'path' || p.in === 'query').sort((a, b) => ) let bodySchema = details.requestBody?.content?.['application\\/json']?.schema bodySchema = resolveSchema(bodySchema, liveSpec.components) const tryState = tryItState[key] || const domain = globalDomain const paramValues = params.reduce((acc, p) => ( ), ) const url = domain + buildPath(path, paramValues) async function handleTryIt (e) { e.preventDefault() setTryItState(s => ( )) const reqUrl = url const options = if (bodySchema && tryState.body) const apiKeyToUse = tryState.apiKey || globalApiKey if (apiKeyToUse) try catch (err) } const requiresAuth = endpointRequiresAuth(details) return ( {isExpanded && ( Parameters: {params.length > 0 && ( {params.map(p => { const schema = p.schema || let descriptions = [] if (schema.oneOf && Array.isArray(schema.oneOf)) if (schema.anyOf && Array.isArray(schema.anyOf)) if (schema.allOf && Array.isArray(schema.allOf)) if (p.description) descriptions = [...new Set(descriptions)] if (p.name === 'projectId' && descriptions.length === 0) return ( ( ) {descriptions.length > 1 && ( )} ) })} )} Responses: {details.responses && Object.entries(details.responses).map(([code, resp]) => { let example = null let contentType = null const contentTypes = resp.content ? Object.keys(resp.content) : [] if (contentTypes.length > 0) return ( : {contentTypes.length > 0 && ( Content type: )} ) })} Try it out {!!tryItCollapsed[key] && ( {params.length > 0 && ( {[...params].sort((a, b) => ).map(p => { let example = p.example if (example === undefined && p.schema) { if (p.schema.example !== undefined) else if (p.schema.$ref && liveSpec.components && liveSpec.components.schemas) } const placeholder = example !== undefined && example !== '' ? example : (p.description || '') const type = p.schema?.type || p.type || 'string' const required = !!p.required return ( : ) })} )} {bodySchema && ( Body (JSON): {(() => )()} )} Request: Curl: )} )} ) })} ))} ) } ..\\/..\\/..\\/..\\/components\\/Code.jsx react vike-react\\/useData react-markdown remark-gfm ..\\/..\\/..\\/..\\/src\\/useMDXComponents.jsx application\\/json application\\/json object object value object object object value object array object property1 value object property1 string boolean integer number value object prose max-w-none cdn CDN undefined - smooth start hashchange hashchange Standard CDN (api.lite.locize.app) https:\\/\\/api.lite.locize.app Pro CDN (api.locize.app) https:\\/\\/api.locize.app GET #27ae60 POST #2980ef PUT #f39c12 DELETE #e74c3c PATCH #8e44ad #888 GET \\/g, \" YOUR_API_KEY Authorization: Bearer ${escapeSingleQuotes(apiKeyToUse)} -H \\'Content-Type: application\\/json\\' string undefined { \"key\": \"value\" } CURL_JSON_EOF ${escapeSingleQuotes(url)} ${delim} \\\\\\n ${escapeSingleQuotes(url)} \\\\\\n mb-6 text-4xl font-bold tracking-tight text-base-content docs-callout mb-6 \\/docs\\/integration\\/mcp mb-3 text-3xl font-bold tracking-tight text-base-content list-disc pl-6 https:\\/\\/github.com\\/locize\\/locize-cli _blank noopener noreferrer https:\\/\\/github.com\\/locize\\/locizer _blank noopener noreferrer \\/docs\\/integration\\/cdn-types-standard-vs-pro docs-callout mt-4 \\/docs\\/integration\\/personal-access-tokens mb-3 text-3xl font-bold tracking-tight text-base-content mb-2 text-sm bg-base-200 px-1 py-0.5 rounded list-disc pl-6 \\/docs\\/integration\\/personal-access-tokens My Profile mt-2 text-base-content\\/70 text-sm bg-base-200 px-1 py-0.5 rounded mb-3 text-3xl font-bold tracking-tight text-base-content list-disc pl-6 mb-3 text-3xl font-bold tracking-tight text-base-content list-disc pl-6 \\/docs\\/integration\\/personal-access-tokens \\/docs\\/guides\\/going-to-production my-8 border-base-200 mb-3 text-3xl font-bold tracking-tight text-base-content mb-4 text-base-content\\/80 my-4 p-3 bg-base-200\\/60 rounded flex items-center gap-3 api-domain-select font-medium min-w-fit api-domain-select w-80 px-3 py-2 rounded border border-base-300 text-base font-normal bg-white text-base-content\\/60 text-sm ml-2 my-4 p-3 bg-base-200\\/60 rounded flex items-center gap-3 api-global-key font-medium min-w-fit api-global-key text API Key or Personal Access Token (applies to all endpoints) w-80 px-3 py-2 rounded border border-base-300 text-base font-normal bg-white text-base-content\\/60 text-sm ml-2 mb-12 - mb-2 text-2xl font-semibold text-base-content text-base-content\\/70 mb-2 pl-0 list-none - path query path path application\\/json Content-Type application\\/json Authorization Bearer content-type text\\/html border-blue-600 bg-blue-50\\/60 shadow-lg border-base-200 bg-white shadow border-blue-200 bg-blue-50\\/80 border-base-200 bg-base-100\\/80 font-bold font-mono text-sm rounded-lg px-4 py-1 bg-white border-2 mr-2 shadow-sm center font-mono text-sm text-sm-content flex-1 Requires authorization ml-2 text-orange-500 text-xl align-middle text-blue-600 text-base-content\\/40 ▼ ▶ px-6 pb-4 pt-1 mt-2 mb-1 text-lg font-bold text-slate-800 tracking-tight bg-none border-none bg-blue-50\\/40 rounded-b-2xl px-6 pb-6 pt-2 border-t-0 mb-4 text-sm-content\\/80 #888 projectId #888 * #888 #888 * #888 #888 #f8f8f8 #888 #f8f8f8 auto object mt-6 bg-blue-50\\/60 rounded-xl p-0 shadow border border-blue-100 flex items-center justify-between cursor-pointer px-6 py-4 select-none none 1px solid #cce3fa text-lg font-bold text-blue-700 #2980ef ▶ ▼ px-6 pb-6 pt-2 mb-4 space-y-3 path path string flex items-center gap-3 min-w-[140px] font-medium text-red-600 text-gray-800 ml-1 text w-90 px-3 py-2 rounded border border-red-400 bg-red-50 border-gray-300 bg-white text-base focus:outline-none focus:ring-2 focus:ring-blue-300 text-xs font-mono text-blue-600 ml-2 text-xs text-gray-500 ml-2 font-mono mb-4 flex items-start gap-4 min-w-[140px] font-medium mt-1 { \"key\": \"value\" } body w-full px-3 py-2 rounded border border-gray-300 font-mono text-base bg-white focus:outline-none focus:ring-2 focus:ring-blue-300 submit mt-2 bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-8 rounded-lg shadow transition disabled:bg-blue-300 disabled:cursor-not-allowed text-lg Loading... Send mt-8 text-gray-500 text-base mb-2 font-mono text-gray-800 font-semibold mb-2 text-sm text-gray-600 text-green-600 text-red-600 ml-4 text-gray-400 mt-6 bg-gray-50 p-4 rounded-lg text-base mt-2 1px solid #eee HTML Response 100% none white allow-scripts allow-same-origin mt-6 bg-gray-100 p-4 rounded-lg text-base mt-2 font-mono whitespace-pre break-all text-red-600 mt-4 font-semibold relative w-full text-gray-500 text-base mt-3 bash const anchorId = summary.replace(\\/\\s+\\/g, '-').replace(\\/[^a-zA-Z0-9-]\\/g, '') allEndpoints.push({ key: method + ' ' + path, anchorId }) }) }) } const match = allEndpoints.find(e => e.anchorId.toLowerCase() === hash.toLowerCase()) if (match) { setExpanded(e => ({ ...e, [match.key]: true })) setTimeout(() => { const el = document.getElementById(match.anchorId) if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' }) }, 100) } } expandFromHash() window.addEventListener('hashchange', expandFromHash) return () => window.removeEventListener('hashchange', expandFromHash) }, [liveSpec, tagMap]) \\/\\/ Try-it-out state: per endpoint const [tryItState, setTryItState] = useState({}) const handleTryItChange = (key, field, value) => { setTryItState(s => ({ ...s, [key]: { ...s[key], [field]: value } })) } \\/\\/ Domains for CDN const cdnDomains = [ { label: 'Standard CDN (api.lite.locize.app)', value: 'https:\\/\\/api.lite.locize.app' }, { label: 'Pro CDN (api.locize.app)', value: 'https:\\/\\/api.locize.app' } ] \\/\\/ Global domain state const [globalDomain, setGlobalDomain] = useState(cdnDomains[1].value) \\/\\/ Helper to build a path with parameter values function buildPath (path, paramValues) { let out = path Object.entries(paramValues || {}).forEach(([k, v]) => { out = out.replace( , v || ) }) return out } \\/\\/ Method color const methodColor = method => { switch (method.toUpperCase()) { case 'GET': return '#27ae60' case 'POST': return '#2980ef' case 'PUT': return '#f39c12' case 'DELETE': return '#e74c3c' case 'PATCH': return '#8e44ad' default: return '#888' } } \\/\\/ Helper: does endpoint require auth? function endpointRequiresAuth (details) { if (details.security && details.security.length === 0) return false if (liveSpec.security && liveSpec.security.length === 0) return false return true } \\/\\/ Helper to build curl command preview function buildCurlCommand ({ method, url, tryState, bodySchema, requiresAuth, globalApiKey, details }) { const state = tryState || {} const verb = (method || 'GET').toUpperCase() const cmd = [ ] \\/\\/ small helper: escape single quotes for header and url quoting const escapeSingleQuotes = (s) => String(s).replace(\\/'\\/g, \"'\\\\''\") \\/\\/ -- AUTH header (always show if required) if (requiresAuth) { const apiKeyToUse = state.apiKey || globalApiKey || 'YOUR_API_KEY' cmd.push( ) } \\/\\/ If there's a body schema we will include Content-Type and body let bodyText = null if (bodySchema) { cmd.push('-H \\'Content-Type: application\\/json\\'') \\/\\/ choose body: provided -> example from spec -> fallback if (typeof state.body === 'string' && state.body.trim() !== '') { bodyText = state.body } else { try { const example = getRequestBodyExample(bodySchema, details, (typeof liveSpec !== 'undefined' && liveSpec) ? liveSpec.components : undefined) bodyText = JSON.stringify(example ?? {}, null, 2) \\/\\/ eslint-disable-next-line no-unused-vars } catch (e) { bodyText = '{ \"key\": \"value\" }' } } } \\/\\/ append URL and body handling (heredoc preferred for safety) if (bodyText != null) { \\/\\/ generate a delimiter that's not present in the body const delimBase = 'CURL_JSON_EOF' let delim = delimBase let attempt = 0 while (bodyText.indexOf(delim) !== -1 && attempt \u003c 20) { attempt += 1 delim = } \\/\\/ use a quoted heredoc so the shell won't expand variables inside the JSON \\/\\/ place the heredoc token as part of the curl args; URL comes before it for clarity cmd.push( ) cmd.push( ) const cmdPrefix = cmd.join(' \\\\\\n ') return } \\/\\/ no body case: just URL cmd.push( ) return cmd.join(' \\\\\\n ') } return ( \u003c> \u003ch1 className='mb-6 text-4xl font-bold tracking-tight text-base-content'>API\u003c\\/h1> \u003cdiv className='docs-callout mb-6'> \u003cb>Using an AI assistant?\u003c\\/b> The \u003ca href='\\/docs\\/integration\\/mcp'>Locize MCP server\u003c\\/a> provides direct integration with Claude, Cursor, and other AI tools, with no API calls required. \u003c\\/div> \u003csection> \u003ch2 className='mb-3 text-3xl font-bold tracking-tight text-base-content'>Getting Started\u003c\\/h2> \u003cul className='list-disc pl-6'> \u003cli>You can use the API directly via HTTPS requests, or with our \u003ca href='https:\\/\\/github.com\\/locize\\/locize-cli' target='_blank' rel='noopener noreferrer'>Command Line tool\u003c\\/a> and \u003ca href='https:\\/\\/github.com\\/locize\\/locizer' target='_blank' rel='noopener noreferrer'>locizer module\u003c\\/a>.\u003c\\/li> \u003cli>The API supports both public and private (API-key protected) endpoints.\u003c\\/li> \u003cli>Depending on your \u003ca href='\\/docs\\/integration\\/cdn-types-standard-vs-pro'>CDN type\u003c\\/a>, the API domain may differ.\u003c\\/li> \u003c\\/ul> \u003cdiv className='docs-callout mt-4'> \u003cb>Tip:\u003c\\/b> Store your API keys and \u003ca href='\\/docs\\/integration\\/personal-access-tokens'>Personal Access Tokens\u003c\\/a> securely and never expose write keys in client-side code or public repositories. \u003c\\/div> \u003c\\/section> \u003csection> \u003ch2 className='mb-3 text-3xl font-bold tracking-tight text-base-content'>Authentication\u003c\\/h2> \u003cp className='mb-2'>Protected endpoints require an \u003ccode className='text-sm bg-base-200 px-1 py-0.5 rounded'>Authorization: Bearer &lt;token&gt;\u003c\\/code> header. Locize accepts two types of tokens:\u003c\\/p> \u003cul className='list-disc pl-6'> \u003cli>\u003cb>API Key\u003c\\/b> (recommended): project-scoped, created in your project settings. Best for direct API usage, single-project integrations, and client-side SDKs.\u003c\\/li> \u003cli>\u003cb>\u003ca href='\\/docs\\/integration\\/personal-access-tokens'>Personal Access Token (PAT)\u003c\\/a>\u003c\\/b>: user-scoped, created in \"My Profile\". Works across all projects you have access to. Primarily designed for MCP integration and simplified multi-tenant workflows.\u003c\\/li> \u003c\\/ul> \u003cp className='mt-2 text-base-content\\/70'>The server detects the token type automatically. Both are passed the same way in the \u003ccode className='text-sm bg-base-200 px-1 py-0.5 rounded'>Authorization\u003c\\/code> header.\u003c\\/p> \u003c\\/section> \u003csection> \u003ch2 className='mb-3 text-3xl font-bold tracking-tight text-base-content'>Main Capabilities\u003c\\/h2> \u003cul className='list-disc pl-6'> \u003cli>Fetch translations for any namespace, version, and language\u003c\\/li> \u003cli>Fetch available languages for a project\u003c\\/li> \u003cli>Report missing or used translations (for development workflows)\u003c\\/li> \u003cli>Update or remove translations in bulk\u003c\\/li> \u003cli>Add context or tags to translations\u003c\\/li> \u003c\\/ul> \u003c\\/section> \u003csection> \u003ch2 className='mb-3 text-3xl font-bold tracking-tight text-base-content'>Usage Notes\u003c\\/h2> \u003cul className='list-disc pl-6'> \u003cli>All endpoints use standard HTTP verbs (GET, POST, etc).\u003c\\/li> \u003cli>Most endpoints require your \u003cb>projectId\u003c\\/b> (and sometimes an API key or \u003ca href='\\/docs\\/integration\\/personal-access-tokens'>Personal Access Token\u003c\\/a>).\u003c\\/li> \u003cli>For large updates, batch your requests (max 1000 keys per request).\u003c\\/li> \u003cli>For production, use only CDN endpoints or\\/and API keys with limited permissions.\u003c\\/li> \u003cli>See the \u003ca href='\\/docs\\/guides\\/going-to-production'>Going to production guide\u003c\\/a> for best practices.\u003c\\/li> \u003c\\/ul> \u003c\\/section> \u003chr className='my-8 border-base-200' \\/> \u003csection> \u003ch2 className='mb-3 text-3xl font-bold tracking-tight text-base-content'>API Endpoint Explorer\u003c\\/h2> \u003cp className='mb-4 text-base-content\\/80'>Browse all available endpoints grouped by category. Click an endpoint for details and usage examples.\u003c\\/p> {\\/* Global Domain selector *\\/} \u003cdiv className='my-4 p-3 bg-base-200\\/60 rounded flex items-center gap-3'> \u003clabel htmlFor='api-domain-select' className='font-medium min-w-fit'>Domain:\u003c\\/label> \u003cselect id='api-domain-select' value={globalDomain} onChange={e => setGlobalDomain(e.target.value)} className='w-80 px-3 py-2 rounded border border-base-300 text-base font-normal bg-white' > {cdnDomains.map(opt => \u003coption key={opt.value} value={opt.value}>{opt.label}\u003c\\/option>)} \u003c\\/select> \u003cspan className='text-base-content\\/60 text-sm ml-2'>🌐 Applies to all endpoints\u003c\\/span> \u003c\\/div> {\\/* Global API Key input *\\/} \u003cdiv className='my-4 p-3 bg-base-200\\/60 rounded flex items-center gap-3'> \u003clabel htmlFor='api-global-key' className='font-medium min-w-fit'>Global API Key \\/ PAT:\u003c\\/label> \u003cinput id='api-global-key' type='text' value={globalApiKey} onChange={e => setGlobalApiKey(e.target.value)} placeholder='API Key or Personal Access Token (applies to all endpoints)' className='w-80 px-3 py-2 rounded border border-base-300 text-base font-normal bg-white' \\/> \u003cspan className='text-base-content\\/60 text-sm ml-2'>🔒 Used for all endpoints that require authorization\u003c\\/span> \u003c\\/div> {liveSpec.tags && liveSpec.tags.map(tag => ( \u003cdiv key={tag.name} className='mb-12'> \u003ch2 id={tag.name.replace(\\/\\s+\\/g, '-').toLowerCase()} className='mb-2 text-2xl font-semibold text-base-content'>{capitalizeTagName(tag.name)}\u003c\\/h2> \u003cdiv className='text-base-content\\/70 mb-2'> \u003cMarkdownRenderer>{tag.description}\u003c\\/MarkdownRenderer> \u003c\\/div> \u003cul className='pl-0 list-none'> {tagMap[tag.name]?.map(({ path, method, details }) => { const key = method + ' ' + path const isExpanded = expanded[key] \\/\\/ Use summary for anchor and heading if available const summary = details.summary || const anchorId = summary.toLowerCase().replace(\\/\\s+\\/g, '-').replace(\\/[^a-zA-Z0-9-]\\/g, '') \\/\\/ Parameters (path, query, body) const params = (details.parameters || []).filter(p => p.in === 'path' || p.in === 'query').sort((a, b) => { if (a.in === b.in) return 0 if (a.in === 'path') return -1 if (b.in === 'path') return 1 return 0 }) let bodySchema = details.requestBody?.content?.['application\\/json']?.schema \\/\\/ Resolve $ref in bodySchema bodySchema = resolveSchema(bodySchema, liveSpec.components) \\/\\/ Try-it-out state for this endpoint const tryState = tryItState[key] || {} \\/\\/ Build request URL const domain = globalDomain const paramValues = params.reduce((acc, p) => ({ ...acc, [p.name]: tryState[p.name] || '' }), {}) const url = domain + buildPath(path, paramValues) \\/\\/ Try-it-out handler async function handleTryIt (e) { e.preventDefault() setTryItState(s => ({ ...s, [key]: { ...s[key], loading: true, response: null, error: null, status: null, contentType: null, html: null } })) const reqUrl = url const options = { method: method.toUpperCase(), headers: {} } if (bodySchema && tryState.body) { options.headers['Content-Type'] = 'application\\/json' options.body = tryState.body } \\/\\/ Use endpoint-specific API key if set, else global const apiKeyToUse = tryState.apiKey || globalApiKey if (apiKeyToUse) { options.headers['Authorization'] = 'Bearer ' + apiKeyToUse } try { const res = await fetch(reqUrl, options) const contentType = res.headers.get('content-type') || '' const status = res.status let text = await res.text() let html = null if (contentType.includes('text\\/html')) { html = text text = null } setTryItState(s => ({ ...s, [key]: { ...s[key], loading: false, response: text, html, error: null, status, contentType } })) } catch (err) { setTryItState(s => ({ ...s, [key]: { ...s[key], loading: false, error: String(err) } })) } } const requiresAuth = endpointRequiresAuth(details) return ( \u003cli key={key} id={anchorId} className={ } > \u003cdiv className={ } onClick={() => toggleExpand(key)} > \u003cspan className='font-bold font-mono text-sm rounded-lg px-4 py-1 bg-white border-2 mr-2 shadow-sm' style={{ color: methodColor(method), borderColor: methodColor(method), minWidth: 64, letterSpacing: 1.2, textAlign: 'center' }} > {method.toUpperCase()} \u003c\\/span> \u003cspan className='font-mono text-sm text-sm-content flex-1'>{path}\u003c\\/span> {requiresAuth && \u003cspan title='Requires authorization' className='ml-2 text-orange-500 text-xl align-middle'>🔒\u003c\\/span>} \u003cspan className={ }>{isExpanded ? '▼' : '▶'}\u003c\\/span> \u003c\\/div> \u003cdiv className='px-6 pb-4 pt-1' onClick={() => toggleExpand(key)}> \u003ch3 id={anchorId} className='mt-2 mb-1 text-lg font-bold text-slate-800 tracking-tight bg-none border-none'>{details.summary ? details.summary :"},{"title":"CDN types: Standard vs. Pro","description":"Compare the features, caching, and security of Locize Standard CDN (BunnyCDN) and Pro CDN (AWS CloudFront). Choose the best CDN for your localization needs.","href":"\\/docs\\/integration\\/cdn-types-standard-vs-pro","searchText":"CDN types: Standard vs. Pro Locize offers two different Content Delivery Network (CDN) infrastructures to serve your translation files. You can choose the one that best fits your project's security, caching, and feature requirements. Feature Standard CDN (Default for new projects) Pro CDN (Professional) Infrastructure Provider BunnyCDN AWS CloudFront Cost Efficiency For Free (for a very generous amount of monthly downloads) On Demand Private Downloads ❌ No (Public only) ✅ Yes Published Namespace History ❌ No ✅ Yes Custom Caching ❌ Fixed (1 hour) ✅ Customizable Domains api.lite.locize.app (or in your tooling) api.locize.app (or in your tooling) Best For Smaller Public websites, smaller SPAs, Open Source projects Professional\\/Enterprise apps, Private content, Custom caching needs Standard CDN (BunnyCDN) The Standard CDN is the new default for all newly created projects. It is powered by BunnyCDN and provides a high performance, cost effective solution for most public facing applications. Key Characteristics Public Access Only: Translation files published to the Standard CDN are publicly accessible. You cannot restrict access using API keys or private publishing. Fixed Caching Policy: The caching duration (TTL) is fixed at 1 hour . You cannot define a custom max age. No Native Published Namespace History: This CDN type does not support the Published Namespace History feature. Development Workarounds for Caching Since the default cache is 1 hour, you might see old translations during active development. You can bypass the cache using the following methods: 1. Using Query Parameters Append to your fetch URL to force a fresh download: 2. Using i18next locize backend If you are using the official backend plugin, set the or option: Pro CDN (AWS CloudFront) The Pro CDN is the robust infrastructure that Locize has used since the beginning. It is based on Amazon CloudFront and is designed for projects requiring advanced control, privacy, and safety nets. Key Characteristics Private Downloads: Supports Private Publishing. You can restrict access to your translation files so they can only be downloaded with a valid API key or Personal Access Token. Custom Caching: You can fully configure the max age per version to optimize for latency or freshness according to your specific needs. Published Namespace Backups: Automatically retains backups of your namespaces. This allows you to roll back to previous versions if a mistake is published. Which one should I choose? Choose Standard if: Your project is a smaller public website, landing page, or open source project. Your translation data is not sensitive. You do not need to retain historical backups of translation files within the CDN. A 1 hour cache time is acceptable for your production environment. Choose Pro if: Security is a priority: You need to ensure your translation files are not publicly downloadable (e.g., internal enterprise tools, unreleased products). Risk Management: You rely on Published Namespace Backups to restore data in case of accidental overwrites. Performance Tuning: You need granular control over browser caching (e.g., setting long cache times for production efficiency). Cost consideration for private downloads Private namespace downloads are billed at a higher rate than standard or pro downloads. At high request volumes, the cost can add up quickly. If your application makes frequent authenticated requests (e.g. per tenant namespace delivery at scale), consider whether standard (public) CDN delivery would work for your use case instead. You can review the current rates on the pricing page. Changing your CDN Type You can switch your project between Standard and Pro at any time in your project settings. During your trial you can change it on the \"API, CDN, NOTIFICATIONS\" tab: And when subscribed you can change it on the \"PLAN, ADDONS, ...\" tab: Depending on your integration you may need to change the option in your tools (CLI, i18next locize backend, locizify, locizer, etc.) or change the API endpoint. What happens when you switch the CDN type The Standard CDN ( ) and Pro CDN ( ) are two completely separate infrastructures. Each project's published content lives on whichever CDN the project is currently set to, never both at once. This is why, before switching , requests to the \"other\" CDN's endpoint will return 404 . Example: if your project is on Pro CDN, calling returns 404 because nothing has ever been published there. When you change the CDN type in your project settings: 1. All versions with auto publish enabled are automatically republished to the new CDN. Wait a few moments for this to complete. 2. Versions without auto publish are NOT republished automatically. You'll need to trigger a manual publish for those after switching, otherwise their content won't appear on the new CDN. 3. The old CDN's content is NOT deleted. It stays in place and simply stops receiving new publishes. This means both the old and new CDN endpoints will serve content during the transition window. Zero downtime migration (Pro → Standard or Standard → Pro) Because the old CDN keeps serving its existing content after the switch, you can migrate without any downtime: 1. Switch the CDN type in your project settings. The system auto republishes your autoPublish versions to the new CDN. 2. Verify the new CDN endpoint returns your content (e.g. for Standard). 3. Trigger a manual publish for any non autoPublish versions, if applicable. 4. Deploy your application change to point to the new CDN: update the option in your tools (i18next locize backend, locize cli, locizify, locizer) or use the new endpoint directly. 5. Roll your traffic over. During this window, the old CDN endpoint still serves the previously published content, so the rollout can be gradual. 6. No cleanup needed on the old CDN; its content simply becomes stale and unused. Note for Pro → Standard: If your project uses private publishing on any version, that version cannot be published on the Standard CDN; the publish will be refused. Standard CDN supports public downloads only."},{"title":"CLI","description":"Learn how to use the locize-cli and i18next-cli command-line tools to manage, sync, and migrate translations in your projects. Supports many file formats and frameworks.","href":"\\/docs\\/integration\\/cli","searchText":"CLI The locize cli and i18next cli are open source command line tools for managing translations in your projects and integrating with locize. Note: If you use i18next in your project, the i18next cli offers a modern toolchain for extraction, linting, type generation, and direct Locize integration. If you do not use i18next, you can use locize cli directly. The locize cli supports a wide range of translation file formats (such as JSON, YAML, XLIFF, CSV, PO, RESX, Fluent, Properties, and more), configurable via command line arguments. This makes it suitable for many frameworks and localization setups beyond i18next. Typical Usage Install locize cli globally: Sync translations: Sync with automatic translation: Sync with automatic translation routed through the review workflow: Download translations: Migrate existing files: Extract keys with i18next cli: Sync with Locize via i18next cli: Learn More For full details, advanced configuration, and all available commands, see the locize cli README and i18next cli README. Video Demo CLI instrument and migrate command example (with i18next cli): Watch the video Read the guide CLI migrate command example (with locize cli): Watch upload content demo Showcase\\/demo"},{"title":"Figma Plugin","description":"How to install, configure, and use the Locize Figma plugin to send text content to Locize and fetch translations for validating your product designs.","href":"\\/docs\\/integration\\/figma-plugin","searchText":"Figma Plugin Learn how to install and use the Locize Figma plugin in order to start translating your Figma files in Locize the right away. The Locize Figma plugin allows you to send text content to your Locize project, directly from within Figma and to fetch translations from Locize to test your designs. Bridging the gap between translation and product design with our Figma integration creates an efficient workflow from end to end. Install the plugin You can find the Locize Figma plugin in Figma's plugin browser. Just click the install button on the top right corner of the page. Ofter the installation, you can access the plugin via the menu of Figma. Next to all your favorite plugins. Connect Figma with Locize To use the Locize Figma plugin, you have to connect Figma with Locize. If you do not have access to Locize yet, you need to be invited to a project by someone with admin role or you need to create a new Locize project. 1. On your Locize project's information card or on your settings page, grab your project id. 2. Go back to Figma, open the Locize plugin and paste in the project id. 3. Choose the appropriate version (usually latest). 4. If you also want to send missing translations from Figma to Locize, make sure you copy your API Key or create a new one on your Locize project's settings page. 5. If your chosen Locize version is configured with private publish mode, click the private checkbox. 6. Finally, confirm your settings by clicking the Save button. Send missing translations to Locize If you have not yet started with filling Locize with translations yet, this is a good option to start with. 1. In Figma, select one ore multiple layers. 2. In the Locize plugin window, open the Extract tab. 3. Click the Extract from current selection button. 4. The plugin tries to automatically scan your selection for possible translation content. 1. It will use the layer name as translation segment key. 2. It will use the frame name as namespace name or if not a single frame is selected, the page name. 5. You'll now see which resources are missing, and you have the possibility to send those missings to Locize. (This is only possible if you provided the API key in the plugin settings) Validate your product design with translated content Having some translated segments in Locize, you have the possibility to validate your design with that translations. 1. In Figma, select the layers or the frame you want to validate. 2. In the Locize plugin window, open the Translate tab. 3. Chose the desired language. 4. Click the Translate button. Step by step example 1. Create a new Locize project Follow this getting started section, if you have not yet started with Locize. You can skip this step, if you already use a Locize project. 2. Copy your project id and api key Like described here, run the Locize plugin in figma and copy your project id and api key in the Settings tab. 3. Send first texts to Locize Like described here, select something in your figma design. When clicking \"Extract from current selection\", you'll see it uses the layer names as segment key names for Locize and it uses the frame name (or page name) as namespace name for Locize. At the bottom of the Extract box, click the \"Yes\" button to send those texts to Locize. You can now translate the texts in all your other languages. Depending on your project settings it might also be the segments are already automatically translated thanks to the automatic translation. 4. Validate other languages Back to figma, you can now switch to the \"Translate\" tab, choose another language, and click the \"Translate\" button, like described here. You can see the Text components are updated accordingly and your layer names stay unchanged. Now you can add new languages in Locize or change the text in Locize and validate it in figma with the \"Translate\" tab. If you want to send new texts to Locize, just select another frame name and repeat step 3. FAQs Possible problems with special fonts. If you're using a special font which is not installed locally, the plugin might not work correctly. In this case you can try to fix this like described here."},{"title":"File formats","description":"See all translation file formats supported by Locize for import and export. Includes JSON, YAML, XLIFF, CSV, PO, RESX, Fluent, and more, with usage tips and examples.","href":"\\/docs\\/integration\\/file-formats","searchText":"File Formats Locize supports a variety of translation file formats for import and export, making it easy to integrate with your existing localization workflow. If you need a format that isn’t listed here, send us an email; we’re always working to extend our supported formats! Locize generally only handles translation content (keys and values) and does not preserve the original file structure. If you want to import a file and later export it with the original structure, this is not supported for every format. These file formats are used as translation containers for imports and exports. The originally used i18n format will always be respected; there is no conversion during import\\/export. Format Details & Examples JSON nested Will import\\/export in JSON format, nesting keys separated by : JSON flatten Will import\\/export in JSON format, flat (ignoring separation): CSV and XLSX Exports reference and target language in one file. Supported for imports and useful for sending translations to freelancers. For optimal import, reuse previously exported files including added translations. On import, ensure the first line contains the same language codes as in your Locize project. You might see a “ ignore ” text in your exported \"all\" format file. This marks keys missing in the reference language or plural forms not present for a specific language. YAML Alternative format to JSON. XLIFF 1.2 Standard translation exchange format. On import, ensure you have only one tag in the XLIFF file, and the attribute matches your namespace name. XLIFF 2.0 Well known translation exchange format. Used format on iOS. On import, ensure you have only one tag in the XLIFF file, and the attribute matches your namespace name. Android resource string Format used on Android. Strings resources Format used for example for OS X and iOS. Gettext po files Gettext standard format. TMX Used mostly as translation memory file. resx Files (.net) Localization files used in .net framework Fluent Mozilla's translation format Laravel PHP Laravel's translation format .properties (Java) .properties files .xcstrings Apple string catalog files On import try to select 1 namespace and \"all\" languages.Substitutions are currently not supported.Interpolation and pluralization formatting is not modified\\/converted automatically."},{"title":"GitHub Action","description":"How to use the official Locize GitHub Action to automate translation downloads in your CI\\/CD pipeline. Step-by-step setup and workflow examples.","href":"\\/docs\\/integration\\/github-action","searchText":"GitHub Actions Locize provides two official GitHub Actions for integrating translations into your CI\\/CD pipeline. Sync Action Bidirectional sync between your local translation files and Locize. Pushes new keys, removes deleted keys, and optionally triggers automatic AI\\/MT translation. Repository: locize\\/sync Example: sync with auto translate When is enabled, any new or updated keys synced to the reference language will be automatically translated into all target languages using the project's configured AI or MT provider. Example: sync, then publish See the Sync Action documentation for all options (branch targeting, format selection, dry run, etc.). Best Practices Store your Locize project ID and API key as GitHub secrets. Use download for build time bundling (SSG, SSR) to fetch published translations into your build. Use sync for keeping your local translation files and Locize in sync: push new keys, pull translations, trigger auto translation. Combine sync + publish for a complete translation CI\\/CD pipeline."},{"title":"GitHub Repository Dispatch Event","description":"How to trigger GitHub Actions workflows from Locize using the repository_dispatch event. Automate deployments and notifications with custom event payloads.","href":"\\/docs\\/integration\\/github-repository-dispatch-event","searchText":"GitHub Repository Dispatch Event Integrate Locize with GitHub Actions or GitHub Apps by triggering workflows using the endpoint. This allows you to automate tasks (like deployments or notifications) whenever a Locize event occurs in your project. Setup Steps 1. Configure Locize to send repository dispatch events to your GitHub repo. 2. Create or update your GitHub Actions workflow to listen for specific Locize events. By default, all events except will trigger workflows. To filter for a specific event (e.g., ), use the following workflow configuration: 3. Access the event payload in your workflow: The data sent via the parameter is available as . Example for : The object passed via matches the event structure described here. You can add conditional logic to your workflow to check for specific event data (e.g., only run jobs for a certain version). Authentication & Permissions The GitHub token used for this integration requires write access to the repository. You can provide either: A personal access token with scope (GitHub Help: Creating a personal access token). A GitHub App with both and permissions. Tip: For more details on event types and payloads, see the Locize webhook documentation."},{"title":"i18n Formats","description":"See all internationalization (i18n) formats supported by Locize, including i18next, ICU, fluent, vue-i18n, and more. Learn about features, syntax, and best practices.","href":"\\/docs\\/integration\\/i18n-formats","searchText":"i18n formats Locize supports a wide range of internationalization (i18n) formats to fit your project’s needs. Each format comes with specific features to help you maintain correct syntax and streamline your localization workflow. If you need a format that isn’t listed here, send us an email; we’re always working to extend our supported formats! The chosen i18n format will always be respected. There is no format conversion when importing or exporting file formats. Learn more about i18n formats in this blog post. : : : : : : : : i18next \\/ locizify ✅ ✅ ✅ i18next \\/ locizify ICU \\/ messageformat ✅ not necessary, solved directly in format ICU fluent ✅ not necessary, solved directly in format fluent vue i18n ✅ not necessary, solved directly in format vue i18n i18n.js \\/ ruby ✅ ✅ ✅ i18n.js polyglot.js ✅ not necessary, solved directly in format polyglot.js android ✅ ✅ ✅ android Feature Details Syntax Highlighting: Format specific syntax is highlighted for easier editing. Plural Conversion: Plurals are automatically generated as needed (where supported). Grouping: Segments are grouped by plurals and context (where supported). i18next \\/ locizify See V4 JSON format and V3 JSON format for details. More info ICU \\/ messageformat ICU documentation fluent Fluent documentation vue i18n vue i18n documentation i18n.js \\/ ruby i18n.js documentation polyglot.js polyglot.js documentation android Android localization guide"},{"title":"Pluralization in i18n formats","description":"How Locize handles pluralization for all supported i18n formats. Learn best practices, see examples, and troubleshoot plural forms in your localization workflow.","href":"\\/docs\\/integration\\/i18n-formats\\/pluralization","searchText":"Pluralization in i18n Formats Pluralization is a fundamental aspect of internationalization (i18n). Every language has its own rules for expressing quantities, and handling plurals correctly is essential for natural, high quality translations. Locize supports pluralization for all major i18n formats, making it easy to manage plurals in your localization workflow. Pluralization: Separate Keys vs. In Format Handling Some i18n formats require you to define separate translation keys for each plural form (e.g., , ). Others, like ICU MessageFormat or Fluent, solve pluralization directly within the value of a single key using special syntax, so you do not need to create multiple keys for each form. Summary: Requires separate keys: i18next, i18n.js, Android, Gettext Handled within the format (single key): ICU MessageFormat, Fluent, vue i18n, polyglot.js See the table below for details. Supported i18n Formats and Pluralization Locize supports pluralization for a wide range of i18n formats. For details on each format, see the main i18n formats page and file formats. Format Pluralization Support Separate Keys Required? Example\\/Docs : : : : : : i18next \\/ locizify ✅ Yes i18next pluralization ICU \\/ messageformat ✅ No ICU MessageFormat fluent ✅ No Fluent vue i18n ✅ No vue i18n pluralization i18n.js \\/ ruby ✅ Yes i18n.js pluralization polyglot.js ✅ No polyglot.js pluralization android ✅ Yes Android plurals Gettext ✅ Yes Gettext plural forms How Pluralization Works in Locize Locize automatically generates the required plural keys for each language and format (if required\\/necessary). The CAT view \\/ Translation Editor displays all necessary plural forms for each key. Plural rules are based on the Unicode CLDR plural rules. You can preview and edit all plural forms directly in the Locize UI. For more on why you might see keys like , , , , see this FAQ. Format Specific Examples i18next JSON (separate keys) ICU MessageFormat (single key) Gettext PO (separate keys) Android XML (separate keys) Fluent (single key) Best Practices for Pluralization Always use the pluralization features of your chosen i18n format. Avoid hardcoding plural forms in your code or translations. Test your app in languages with complex plural rules (e.g., Russian, Arabic). For more tips, see the i18next pluralization guide and Unicode CLDR plural rules. Troubleshooting & FAQ Why do I see keys marked as ONE, FEW, MANY, OTHERS? How do I change the i18n format for my project? How do I import\\/export plural forms? Blog: I18N in the Multiverse of Formats"},{"title":"Instrumenting your code: i18next, react-intl, Vue-i18n, LinguiJS, Polyglot, and more","description":"How to connect any JavaScript i18n library to Locize: i18next (most featured), locizify (zero-effort), and the locizer client for react-intl, next-intl, Vue-i18n, LinguiJS, FormatJS, Polyglot, ngx-translate, Transloco, and others. Code examples for each.","href":"\\/docs\\/integration\\/instrumenting-your-code","searchText":"Instrumenting your code Easily connect your application to Locize for seamless translation management and real time localization updates. Locize works with every major JavaScript i18n library , including i18next (deepest integration), react intl \\/ FormatJS, next intl, Vue i18n, LinguiJS, Polyglot, ngx translate, Transloco, and others. Below are the recommended ways to instrument your code for different environments and frameworks. Looking for a library by library overview? See Locize i18n libraries, a hub page that links to dedicated guides per library. i18next (Full Featured Integration) Best translation management for i18next. Locize works seamlessly with i18next, a popular internationalization framework with a wide range of integrations and plugins for almost every need. Learn more about i18next Watch a quick overview To connect i18next with Locize, use the i18next locize backend: Do not expose your write API key in production – only use it during development. Step by step React tutorial Code integration video (part of showcase\\/demo) Here you'll find a simple tutorial on how to best use react i18next, including basics and workflow optimizations. Other i18next Tutorials & Examples Angular + i18next tutorial jQuery + i18next tutorial Next.js + next i18next v16 (App Router + Pages Router) and examples Next.js App Router without next i18next and Pages Router guide Gatsby + i18next example and blog post Remix + i18next example and step by step tutorial Vue.js + i18next example and step by step tutorial. Other Options Client Side: Polyglot, FormatJS, React Intl, Vue I18n, JS Lingui, MessageFormat, ... For server side rendering (SSR) or serverless usage, we do not suggest using our Locizer script. Instead, download the translations in your CI\\/CD pipeline (via CLI or via API) and package them with your application, as described here. On the client side, you can use our locizer script to load translations from Locize and add them to your i18n framework in the browser: Sample for Polyglot: Sample for Vue I18n (Vue v3): The full example can be found here . Here you'll find a simple tutorial on how to best use vue i18n. Some basics of vue i18n and some cool possibilities on how to optimize your localization workflow. For more details, check out the locizer docs. Our samples: react intl next intl vue i18n svelte i18n formatjs polyglot js lingui ngx translate transloco Server Side Did you know internationalization is also important on your app's backend? In this tutorial blog post you can check out how this works. For JavaScript environments please watch out for the i18next integration options and plugins. On other environments you could use: Our API Our Locize cli Other Formats: XLIFF, Gettext, ... You can use the following modules to convert between formats: xliff android string resource gettext (.mo\\/.po) The simplest way is to use these in combination with our cli to build an automated production pipeline powered by grunt, gulp, npm script, ..."},{"title":"MCP Server","description":"Connect AI assistants like Claude, Cursor, and GitHub Copilot to your Locize translation projects via the MCP (Model Context Protocol) server.","href":"\\/docs\\/integration\\/mcp","searchText":"Locize MCP Server The Locize MCP (Model Context Protocol) server lets AI assistants (Claude, Cursor, GitHub Copilot, and others) interact directly with your translation projects. Server URL: Authentication The MCP server supports two authentication methods: OAuth 2.0 (recommended) : used automatically by Claude Desktop, Cursor, and other MCP clients that support it. No manual token management needed. The OAuth flow creates a Personal Access Token in your profile automatically. Access can be revoked at any time. Personal Access Token (PAT) : for CI\\/CD, scripts, or clients that don't support OAuth. Create one in your profile under Personal Access Tokens . Pass it as . See the PAT documentation for details on scopes and security. Available tools The MCP server exposes 22 tools organized by workflow: Discovery Tool Description List all projects accessible via your token. Call this first. Translation coverage per version, language, and namespace List branch projects of a parent project List tenant projects of a parent project Translation content Tool Description Fetch unpublished (editor state) translations with filtering by tags, timestamps, and pagination Fetch published (CDN) translations for a namespace Compare a target language against the reference language; returns missing and stale keys Add new keys (never overwrites existing). Auto batches at 1000 keys. If Automatic Translation is enabled, new keys on the reference language are translated into all target languages automatically. Update or delete translation keys. Set a value to to delete. Release workflow Tool Description Publish a version to the CDN. Returns a jobId for status tracking. Copy all translations from one version to another (e.g. latest → production) Copy a single language between versions Check or wait for async operations (publish, copy, merge) to complete Branch workflow Tool Description Create a translation branch from a version Merge a branch back into its parent project Project structure Tool Description Add a language to the project Remove a language and all its translations Replace the entire language list atomically Add a new version Delete a version and all its translations Rename a namespace across all languages Delete a namespace and all its translations Example prompts Once connected, you can ask your AI assistant things like: \"Find all missing German translations in the checkout namespace\" \"Publish the latest version of my project\" \"Add Japanese to all versions\" \"Create a branch for the v2 feature, translate it, then merge it back\" \"Show me which keys changed in English this week\" \"Report these new keys from my codebase to Locize\" \"What's the translation coverage for the production version?\" PAT scopes Tools require specific PAT scopes. If a tool returns a scope error, your token needs additional permissions. Scope Tools , , , , , , , , , , , , , , , , , , , Beyond PAT scopes PAT scopes are only the first gate. Your project level role and permissions still apply on top: Project role : your role on a given project (admin \\/ manager \\/ publisher \\/ user \\/ accountant) always wins when it is stricter than the PAT scope. For example, a PAT with scope called by a user whose project role is still cannot modify that project. Language \\/ version \\/ namespace scope : if your membership is restricted to specific languages, versions, or namespaces, and will reject requests outside that scope. users : the structural tools ( , , , , , , , , , , , ) are blocked for users marked translate only. Blocked \\/ revoked access : if your project membership is blocked or your PAT has been revoked, every tool call fails immediately with a 401. Parent project access : for tenant and branch projects, merging translations with the parent only happens if your PAT also has access to the parent project; otherwise you see the child only view. Technical details Transport: Streamable HTTP (Web Standard \\/ ) Auth: OAuth 2.0 (Authorization Code + PKCE with Dynamic Client Registration) or PAT Bearer token Endpoint: OAuth metadata: Stateless: Each request creates a fresh MCP server instance. No session management required. See also Why not just use AI to translate?: how Locize and AI tools complement each other Automatic Translation: combine saveMissing with AI auto translation for a fully automated workflow Personal Access Tokens: create and manage tokens for MCP authentication"},{"title":"Microsoft Teams","description":"How to receive real-time Locize notifications in Microsoft Teams. Step-by-step setup for webhooks, supported events, and integration tips.","href":"\\/docs\\/integration\\/microsoft-teams","searchText":"Microsoft Teams Receive real time notifications from Locize directly in your Microsoft Teams channel. This helps your team stay informed and react quickly to important localization events. How to Enable Microsoft Teams Notifications 1. Create an Incoming Webhook in Teams: Follow this official Microsoft guide to add an Incoming Webhook to your desired Teams channel. 2. Configure the Webhook: Enter a name for your webhook connection (e.g., \"Locize\"). Optionally upload an image. For example, use this Locize icon logo. 3. Copy the Webhook URL: After creating the webhook, copy the generated URL. 4. Add the Webhook URL to Locize: Go to your project's settings page in Locize (\"API, CDN, NOTIFICATIONS\" tab). Paste the webhook URL into the Microsoft Teams notifications configuration."},{"title":"Personal Access Tokens","description":"Learn how to create and manage Personal Access Tokens (PATs) for authenticating with the Locize API across all your projects.","href":"\\/docs\\/integration\\/personal-access-tokens","searchText":"Personal Access Tokens Personal Access Tokens (PATs) let you authenticate with the Locize API using a single token that works across all projects you have access to. They are primarily designed for the MCP server integration, but can also be used for multi tenant workflows or other scenarios requiring cross project access. While API keys remain recommended for direct API usage, PATs provide a convenient alternative when a single credential across projects is needed. Recommendation: For standard API usage, we still recommend using API keys. They are project scoped, easier to manage per project, and the preferred choice for most integrations. PATs are best suited for MCP and scenarios where cross project access from a single credential is possible in an easier way. Scope Single project All projects you can access Created in Project settings My Profile Permissions Role based (admin\\/user\\/readonly) with version\\/language\\/namespace restrictions Coarse scopes (read\\/write\\/manage\\/admin) combined with your project role Best for Client side SDKs, single project scripts, direct API usage (recommended) MCP integration, multi tenant workflows, cross project automation Plan limits Number of keys limited by plan tier Bound to user (not to project) When to use which: Use an API key (recommended) for direct API usage, single project integrations, and client side SDKs (e.g. i18next, locizify). Use a PAT for MCP server integration, multi tenant structures where you need to manage multiple tenants with a single credential, or other scenarios requiring cross project access. Creating a Personal Access Token 1. Go to My Profile in the Locize app. 2. In the Personal access tokens card, click Generate token . 3. Enter a descriptive name (e.g. \"CI pipeline\", \"MCP access\"). 4. Select the scopes your token needs (see below). 5. Optionally set an expiry date . 6. Click Create . Important: The token value is shown only once after creation. Copy it immediately and store it securely. You will not be able to see the full token again. Scopes Each scope grants access to a category of API operations. Scopes are additive: select only what your integration needs. Scope Allows Example operations read Fetching data Download translations, list namespaces\\/languages\\/versions\\/branches, view project stats write Modifying translations Update\\/create translations, report missing keys, manage namespaces manage Project structure changes Publish versions, create\\/merge\\/delete branches, copy versions, manage languages admin Administrative operations User management, project settings, billing, invitations Note: PAT scopes act as an additional gate on top of your project role. A PAT with scope cannot modify translations in a project where your role is , even though the scope would technically allow it. Both the scope and your project role must permit the action. Using a PAT Pass the token in the header, exactly like an API key. Public namespace downloads don't require authentication, but write operations and private downloads do: The server detects the token type automatically by its prefix. No other configuration changes are needed; PATs work with all existing API endpoints. IP and Origin Restrictions For additional security, you can restrict (like API Keys) where your PAT can be used from: IP restrictions: Limit API calls to specific IP addresses or CIDR ranges (e.g. your CI server's IP). Origin restrictions: Limit requests to specific HTTP origins. To configure restrictions, edit your token in My Profile Personal access tokens . Expiry You can set an optional expiry date when creating a PAT. After expiry, the token stops working immediately. Tokens without an expiry date remain valid until manually revoked. For automated workflows, consider setting an expiry and rotating tokens periodically. Revoking a Token To revoke a PAT: 1. Go to My Profile Personal access tokens . 2. Click the delete\\/revoke button on the token you want to remove. 3. Confirm the action. Revocation is immediate. Any integration using the revoked token will receive authentication errors. Security Best Practices Treat PATs like passwords. Never commit them to version control or expose them in client side code. Use minimal scopes. Only grant the scopes your integration actually needs. Most read only integrations only need . Set expiry dates. Especially for tokens used in CI\\/CD; rotate them regularly. Use IP restrictions when possible to limit token usage to known infrastructure. Rotate tokens if you suspect a leak. Revoke the old token and create a new one immediately. Use environment variables or secret management (e.g. GitHub Secrets, Vault) to store tokens in automated pipelines. Using PATs with the MCP server Personal Access Tokens are the authentication credential used by the Locize MCP server. When you connect via OAuth (e.g. from Claude Desktop or Cursor), a PAT is automatically created in your profile with the scopes you approved. You can see and revoke it at any time under My Profile Personal access tokens . For direct PAT usage with the MCP server, pass the token as a Bearer token: See the MCP server documentation for setup instructions with Claude, Cursor, and other AI assistants."},{"title":"Slack","description":"How to receive real-time Locize notifications in Slack. Setup instructions for channel integration, event types, and using Slack slash commands.","href":"\\/docs\\/integration\\/slack","searchText":"Slack Stay up to date with your Locize project by receiving real time notifications directly in your team’s Slack channel. This helps your team react quickly to important localization events and collaborate more efficiently. How to Enable Slack Notifications 1. Go to your project’s Settings in Locize. 2. Open the API, CDN, NOTIFICATIONS tab. 3. In the Notifications card, enable the Slack integration: 4. Choose the Slack channel where you want to receive notifications: Tip: To select a private channel, add the Locize Slack user to that channel first. Using Slack Slash Commands You can also interact with Locize from Slack using slash commands. Try to see all available options. For more details, visit the Locize Slack App Directory."},{"title":"Webhook","description":"How to set up and use Locize webhooks for real-time notifications and automation. Includes event types, best practices, and troubleshooting tips.","href":"\\/docs\\/integration\\/webhook","searchText":"Webhook Webhooks allow you to receive real time notifications from Locize when important events occur in your project. This enables automation, integration, and monitoring for your localization workflow. Best Practices Use HTTPS for your webhook endpoint. Validate incoming requests (e.g., with a secret or signature). Respond quickly (within 5 seconds) with a 2xx status code. Log received events for troubleshooting. If your endpoint fails several times in a row (non 2xx status), Locize will automatically disable the webhook. Event Types Event Name Description languageAdded A language was added to the project languageDeleted A language was removed from the project versionAdded A new version was created versionDeleted A version was deleted referenceLanguageChanged The reference language was changed orderCreated A translation order was created orderCompleted A translation order was completed invitationAccepted A user accepted an invitation to join the project versionPublished A version was published versionOverwrote A version was overwritten languageOverwrote A language was overwritten namespaceAdded A namespace was added namespaceDeleted A namespace was deleted namespaceUpdated A namespace was updated namespaceCompleted A namespace translation was completed namespaceNotCompletedAnymore New segments in a namespace need translation Get directly notified on a webhook url if something noticeable happens. To enable this service go to settings, select the services tab and configure your endpoint. Make sure you have a secure https endpoint. The following messages will be sent as json payload with a POST request. All messages will have the following structure: Warning: If the request to your endpoint fails several times in a row (status code not equal to 2xx), the webhook service is disabled automatically. Example Events languageAdded Triggered when a new language is added to the project. languageDeleted Triggered when a language is removed. versionAdded Triggered when a new version is created. versionDeleted Triggered when a version is deleted. referenceLanguageChanged Triggered when the reference language changes. orderCreated Triggered when a translation order is created. orderCompleted Triggered when a translation order is completed. invitationAccepted Triggered when a user accepts an invitation. versionPublished Triggered when a version is published. The versionPublished event will not be triggered when auto publish is enabled. For reacting to new translations, consider namespaceNotCompletedAnymore and namespaceCompleted. versionOverwrote Triggered when a version is overwritten. languageOverwrote Triggered when a language is overwritten. namespaceAdded Triggered when a namespace is added. namespaceDeleted Triggered when a namespace is deleted. namespaceUpdated Triggered when a namespace is updated. namespaceCompleted Triggered when a namespace translation is completed. namespaceNotCompletedAnymore Triggered when new segments in a namespace need translation."},{"title":"Introduction","description":"Start here for an overview of Locize: a localization management platform for developers and translators. Key features, continuous localization, and getting started.","href":"\\/docs\\/introduction","searchText":"Introduction This is the starting point for all Locize documentation. Here you'll find an overview of the platform, its key features, and how to get started. Welcome to Locize! Locize is a modern localization management platform that bridges the gap between development and translation. It helps teams deliver multilingual websites and applications efficiently, with continuous updates and seamless collaboration. Why Locize? Continuous localization: Instantly deliver translation updates to your users without redeploying your app. Developer friendly: Integrates with your code and CI\\/CD pipeline, supporting popular frameworks and i18n libraries. Collaboration: Translators, reviewers, and project managers work together in a dedicated UI. Automation: Detect missing keys, automate sync, and manage translations at scale. AI translation: Built in AI and MT with styleguide, glossary, and translation memory context. Bring your own key (OpenAI, Gemini, Mistral, DeepL) or use the built in Locize AI service. AI assistant integration: Connect Claude, Cursor, or VS Code to your projects via the MCP server. How Does It Work? 1. Connect your project: Integrate Locize with your website or app. 2. Instrument your code: Enable internationalization using your preferred i18n library. 3. Manage content: Add, edit, and organize translation segments. 4. Translate and deliver: Collaborate on translations and deliver updates via CDN or API. Get Started Ready to dive in? Follow our Getting Started guide for a step by step walkthrough, including account setup, project creation, code instrumentation, and more. Key sections Integration guides: API, MCP server, PATs, CDN Guides: Workflows, migration, unused key detection General questions: FAQ MCP Server: Connect Claude, Cursor, and other AI assistants Personal Access Tokens: User scoped credentials for API and MCP Styleguide: Define tone, formality, and usage rules for AI translation"},{"title":"Multi-Tenant","description":"Learn how to manage translations for multiple customers or brands in Locize using multi-tenant projects. Isolate environments, control access, and provide customized translations for each client.","href":"\\/docs\\/multi-tenant","searchText":"Multi Tenant Multi tenant localization allows you to efficiently manage translations for multiple customers or brands from a single main project, while giving each tenant their own isolated environment. This is ideal for SaaS platforms, white label solutions, or any scenario where you need to provide customized translations for different clients. multi tenant part of showcase\\/demo Why use multi tenant projects? Previously, multi tenant needs were handled using extra namespaces or custom locales (like ). Locize now provides a dedicated solution: Each customer gets their own project with restricted access; customers cannot see each other's data. You control who pays: cover the costs yourself or let customers pay for their own usage. How does it work? Navigate to the Multi Tenant page: There you can create a new tenant project: Tenant projects are based on the content of your main project. All existing and future translations are visible in the tenant project. Users of the tenant project can keep your provided translations or override them as needed. Overridden values are marked with the overridden state icon and can be filtered: When translations are published to the CDN (or exported via the UI, CLI, or API), the output combines your main translations with any overridden values from the tenant. 💡 Good to know: Merging & Overriding 1. Overridden values take precedence: If you modify a translation directly inside a tenant project, it creates an override. From that point on, the tenant will always use its custom value for that key. If you later update the same key in the parent project, the tenant will NOT reflect the parent's new value. To inherit the parent's translation again, you must delete the translation value in the tenant project. 2. Publishing the parent is not required for inheritance: The merging of parent and tenant translations is based on the current database values, not the published state. You do not need to explicitly \"publish\" the parent project for the tenant to inherit the changes. When the tenant translations are published (automatically or manually) the merge happens automatically. Accessing translations from the CDN Each tenant project has its own settings, users, API keys, and project ID. To load translations from the CDN, use the tenant project ID found in the settings page. Pricing Costs are the same as any other project: downloads and modifications are usage based. Word count is calculated only on overridden values; text inherited from the main project is not charged twice. You can cover tenant costs via your main subscription, or let customers subscribe and pay with their own credit card. Tenant Project Options Tenant projects can be configured with two key options that affect how languages and namespaces are managed: Option 1: can't deviate from parent Enabled: Tenant must use the same languages and namespaces as the parent project. Disabled: Tenant can have a different set of languages and namespaces than the parent. Option 2: can edit languages Enabled: Tenant administrators can add or remove languages in the tenant project. Disabled: Only users who are administrators in both the parent and tenant projects can add or remove languages. Effects of parent language changes Scenario \"can't deviate from parent\" \"can edit languages\" When a language is automatically added\\/removed in parent : : : : : : 1 Enabled (not possible) Language is automatically also added\\/removed in tenant 2 Disabled Disabled Language is not automatically added\\/removed in tenant 3 Disabled Enabled Language is not automatically added\\/removed in tenant Effects of parent namespace changes Scenario \"can't deviate from parent\" \"can edit languages\" When a namespace is automatically added\\/removed in parent : : : : : : 1 Enabled (not possible) Namespace is automatically also added\\/removed in tenant 2 Disabled Disabled Namespace is not automatically added\\/removed in tenant 3 Disabled Enabled Namespace is not automatically added\\/removed in tenant Note: When \"can't deviate from parent\" is enabled, the tenant always mirrors the parent for languages and namespaces. When \"can edit languages\" is enabled, tenant admins have full control over languages, and changes in the parent do not automatically propagate to the tenant. For scenarios 2 and 3, if you need to add or remove a language or namespace in a tenant, you can do so manually within the tenant project. User Inheritance for Tenants Tenant projects can inherit users from the parent project, so you don't need to add the same users to every tenant individually. Inherited users do not count toward the tenant's user limit for billing, which can allow tenants to use lower tier plans. Learn more: Managing Multiple Projects with Collective Billing and User Inheritance"},{"title":"Namespaces","description":"Learn how to use namespaces in Locize and i18next to organize, scale, and optimize your localization projects. Best practices, configuration, and usage examples.","href":"\\/docs\\/namespaces","searchText":"Namespaces Namespaces are a powerful feature in the i18next internationalization framework and Locize, allowing you to organize your translations into multiple files. This makes it easier to manage, scale, and optimize your localization projects, especially as your app grows. Why use namespaces? While small projects may work with a single translation file, larger projects benefit from splitting translations into multiple namespaces. Reasons include: Improved organization: Avoid losing track when you have hundreds of segments in one file Faster load times: Only load the translations needed for a specific page or feature Easier collaboration: Teams can work on different namespaces independently We recommend creating multiple, smaller namespaces for better maintainability. Semantic reasons Group related segments together for clarity and reuse. For example: common.json : Reusable UI elements like button labels ('save', 'cancel') validation.json : All validation messages glossary.json : Consistent terminology across your app (sample usage) Technical\\/editorial reasons Namespaces help you avoid loading all translations upfront, reducing initial load and improving performance. Common strategies include: Namespace per view\\/page Namespace per application section or feature set (e.g., admin area) Namespace per module for lazy loading in single page applications Configuration and usage Locize \\/ i18next You can configure i18next to use multiple namespaces and set a default namespace: Advanced options include: Calling the function with multiple namespaces to look up a key Setting fallback namespaces for missing keys More details: Locize \\/ i18next react i18next With react i18next, you can load and use specific namespaces in your components: More details: react i18next locizify You can access a different namespace by setting the attribute i18next options: Optionally you can set locizify to create a namespace per location\\/route. more details: locizify"},{"title":"Notifications","description":"Integrate Locize notifications with Slack, Microsoft Teams, webhooks, and GitHub to keep your team updated on translation changes, reviews, and project activity.","href":"\\/docs\\/notifications","searchText":"Notifications Stay up to date with your localization workflow by integrating Locize notifications into your favorite tools. Notifications help your team react quickly to translation changes, review requests, and project updates. Available notification integrations Slack: Receive real time updates and alerts directly in your Slack channels. Microsoft Teams: Get notifications in your Teams workspace to keep everyone informed. Webhook: Connect Locize to any system by sending notifications to a custom webhook endpoint. GitHub Repository Dispatch Event: Trigger GitHub Actions or workflows based on Locize events. Set up one or more of these integrations to streamline your localization process and keep your team in the loop."},{"title":"Review workflow","description":"Set up a review workflow in Locize to ensure translation quality. Learn how to enable, configure, and manage translation approvals before publishing.","href":"\\/docs\\/review-workflow","searchText":"Review Workflow A review workflow is essential for maintaining translation quality and ensuring that all changes are properly vetted before being published. Locize allows you to set up a review process so that translations are only updated after approval, helping teams collaborate efficiently and avoid mistakes. Enabling the review workflow You can enable review workflows for specific languages by navigating to your project settings page, in the \"EDITOR, TM\\/MT\\/AI, ORDERING\" tab and clicking the \"Review Workflow\" section in the \"Cat settings\" card. How the review workflow works Once enabled, every time someone changes a translation via the Locize UI, a review workflow is started. The actual value will not be changed until someone accepts one of the translation proposals. This ensures that only reviewed and approved translations go live. Starting a review via API You can also start a review workflow programmatically using the API. See the Update or remove translations endpoint for details on how to trigger a review from your integration or automation. Use on the update endpoint to create a review proposal instead of a direct write: Review workflow for automatic translations When you add a new key via the Locize UI and your project has the review workflow enabled for some languages, auto translations for those languages are automatically routed through review , with no extra configuration needed. When using the CLI, API, or MCP, automatic translations bypass the review workflow by default. You can route them through review by adding to your API call or CLI command. When enabled, auto translated values for languages with the review workflow active will appear as review proposals instead of being applied directly. Via CLI This will: 1. Push your reference language keys directly (no review for the source language) 2. Trigger automatic translation for target languages 3. Create review proposals for languages with review enabled (instead of direct writes) 4. Translations are only published after review approval in the Locize UI Via API Via MCP The MCP server tools and also support the parameter. Note: only affects languages that have the review workflow enabled in project settings. For languages without review enabled, auto translations are written directly as before. See the review workflow in action review workflow part of showcase\\/demo"},{"title":"Styleguide","description":"Use the Locize styleguide to define tone of voice, formality, target audience, and usage rules, applied automatically to all AI translation providers across your project.","href":"\\/docs\\/styleguide","searchText":"Styleguide The styleguide lets you define how translations should sound (tone, formality, target audience, and usage rules) in one place. These settings are automatically applied to all AI providers (Locize AI, OpenAI, Gemini, Mistral, Lara), so you configure once and every AI translation respects your brand voice. Setting up your styleguide Navigate to your project → Styleguide (in the project navigation). The styleguide has two sections: Style fields Configure the following fields for all languages, or switch to a specific language to override individual fields for that language only: Tone of voice : The overall character of your translations. e.g. \"Formal\\/Professional: Serious, precise, and authoritative.\" Level of formality : How formal the language should be. e.g. \"Informal: Use 'you', avoid jargon and full formal constructions.\" Target audience : Who the translations are written for. e.g. \"Open Source developer community\" or \"Gen Z consumers, non native English speakers.\" Usage rules (do's and don'ts) : Explicit examples of correct and incorrect phrasing. e.g. Do: \"You can manage your account here\". Don't: \"One may manage their account here.\" Localization rules : Region specific conventions to follow. e.g. \"Use metric units. Format dates as DD\\/MM\\/YYYY. Use local currency symbols.\" Misc : Any other guidance for translators and AI. Use the dropdown in the top right of the styleguide card to switch between \"For all languages\" (the base) and a specific language override. The base settings apply to all languages; per language settings are merged on top. Language mapping The \"Map languages\" card lets you map your project's ISO 639 1 language codes to full locale codes (ISO 639 1 + ISO 3166 1 alpha 2 region codes). For example, mapping → tells AI providers to translate for German as spoken in Germany, not Austrian or Swiss German. This improves AI translation accuracy for region specific vocabulary and conventions. Each language can be enabled or disabled independently. Styleguide in the CAT editor When working in the CAT editor, the active styleguide for the current target language is shown in the right sidebar under Styleguide . Translators can reference tone, formality, and audience requirements without leaving the editor. Per language overrides The base styleguide applies to all languages. To override specific fields for a particular language: 1. Open the Styleguide page 2. Use the dropdown to select the target language 3. Fill in only the fields you want to override for that language 4. Click Set Fields left empty in a language override fall back to the base setting. Availability: The styleguide feature is available on the Growth plan and above. See pricing → See also Glossary: define terms that should always be translated a specific way, complementing styleguide tone guidance Automatic Translation: how styleguide context feeds into automated translation workflows AI Localization: overview of all AI features in Locize"},{"title":"Tags","description":"Organize and filter your translations in Locize using tags. Learn how to configure, use, and manage tags for efficient project workflows.","href":"\\/docs\\/tags","searchText":"Tags Tags help you organize, mark, and filter your translations for better project management and workflow efficiency. In Locize, you can define and use tags to quickly find and group related translation keys or segments. Configuring tags You can configure your tags by navigating to your project settings page, in the \"EDITOR, TM\\/MT\\/AI, ORDERING\" tab and clicking the \"Tags\" section in the \"Cat settings\" card. You can define up to 8 tags, which you can use in your translations to mark and filter them. Using tags in the CAT interface \\/ Translation Editor Tags can be added, removed, and used to filter translations directly in the CAT (Computer Assisted Translation) interface \\/ Translation Editor. See tags in action"},{"title":"The different views","description":"Explore the four main views in Locize: project dashboard, CAT\\/translation editor, and InContext editor. Learn which view is best for each translation and management task.","href":"\\/docs\\/the-different-views","searchText":"The different views Locize provides four different views. Each view is optimized for a different job: administration and project wide setup, reviewing\\/translating at scale, focused translation work, or translating directly on your website with maximum context. Project Dashboard: admin & project configuration CAT \\/ Translation Editor: Computer Assisted Translation view, Translation Editor, review, and bulk actions InContext: translate in the context of your running website\\/app At a glance Feature \\/ task Project Dashboard CAT \\/ Translation Editor InContext Project settings & administration (e.g. user management) Yes Billing & payment history Yes Ordering & branches Yes Project health & metrics Yes Overview of all translations (all languages\\/namespaces) Yes Review workflow & visual diffs Yes Bulk actions (e.g. checks\\/issues, tags, mass translation) Yes Focused translation of one language\\/namespace Yes Extended translation helpers (glossary, translation memory, history, etc.) Yes Translate with website context (popup or iframe based InContext Editor) Yes Related docs: User management Review workflow Checks \\/ issues Tags Translation memory Glossary"},{"title":"CAT \\/ Translation Editor","description":"The CAT (Computer-Assisted Translation) \\/ Translation Editor in locize provides a comprehensive overview of all your translation segments across languages and namespaces. Use this editor to review, translate, bulk edit, and manage translations efficiently with features like visual diffs, bulk actions, search\\/filter, and integration with machine translation and translation memory.","href":"\\/docs\\/the-different-views\\/cat","searchText":"The CAT \\/ Translation Editor The CAT view \\/ Translation Editor acts as an overview of all your segments (all languages, all namespaces). This view is mainly useful to translate your segments and is especially useful to: Review your changes before saving with the help of visual diffs Accept\\/reject pending reviews Import\\/Export translations in various formats Translating \"simpler\" segments directly without using the CAT view \\/ Translation Editor Search\\/Filter your translations ( fyi: fuzzy marked translations are translations done with machine translation or translation memory ) Bulk actions By clicking on the arrows icon (BULK ACTIONS), you can switch from the filter section to the bulk section: This bulk section is mainly useful to do these actions: Bulk translating your content using your translation memory or machine translations (like Google Translate or DeepL) or generative AI translations (like Open AI, Gemini, Mistral AI or Lara) Translation can also be configured to be done automatically. To know more have a look at this . Run issue checks Set\\/Unset tags Search and replace text Delete translations These bulk actions are always applied based on your current filter\\/search criteria, so if you have no specific filter\\/search criteria it will be applied on the whole project (version). If a filter\\/search is \"active\", you'll see the matched segments number between arrows and this filter icon near the bulk actions: bulk action marked to be applied based on filter"},{"title":"InContext","description":"The InContext view in Locize allows you to edit translations directly within the context of your live website or application using an iframe. This feature helps translators see and update content as it appears to users, improving translation accuracy and efficiency.","href":"\\/docs\\/the-different-views\\/incontext","searchText":"InContext Correct translations often need more context. The best context is where the content is shown: your website. The InContext editor connects your running website or app directly to your Locize project, so translators can see and edit strings in their actual environment. There are two approaches: the popup editor on your website (recommended) and the InContext view inside Locize (iframe). Both require the locize script to be integrated into your page. An example video can be found here. The Locize popup on your website (recommended) The recommended approach opens the Locize editor as a draggable, resizable popup directly on your website. When active, you can click any text element on your page. The editor will highlight it and show the matching key\\/value for editing. To activate the popup, add to your URL, e.g. . A standard Locize user account is required. For SAML users, log in via SAML in a separate window\\/tab first. The InContext view in Locize (iframe) Alternatively, you can load your website via an iframe inside the Locize UI. This lets translators work entirely within Locize while seeing your website in context. When integrated correctly, you can click any text element on your website shown in the iframe. Locize will use that information to find the matching key\\/value on the left. If you need to navigate on your page, you can turn click interception on\\/off using the button next to your website URL. Make sure to select the language you want to work on at the top. Configuring URLs for the iframe approach Navigate to your project's settings: Select \"Set InContext editor urls\" in the menu: Set the desired url(s): Back to your project overview, navigate to the InContext Editor: Result: Setup Add the locize script to your page. This script is required for both the popup and the iframe approach. It parses your page content and communicates with Locize using the browser's postMessage API. With i18next This will show the popup only when is in the URL. To always show the popup: Using react i18next, bind the event to trigger a rerender each time you save changes in the editor: To match the integration to a specific Locize project, either configure i18next locize backend, or add: With locizify The locize script is already included in locizify = v4.1.0. Add to your URL to activate the popup. Without i18next (messageformat, fluent, ...) To match it to a specific project: Vanilla JavaScript How text matching works The script needs to match text on your page to translation keys in your Locize project. There are three ways this can happen: 1. Subliminal (default) : When using locizify or the , translations on your page automatically contain hidden metadata (via i18next subliminal) that maps text to its namespace and key. This is the most reliable method. 2. Data attributes : Annotate your HTML with and attributes to explicitly provide key and namespace information: 3. Raw text lookup : As a fallback, the script sends raw text to the editor, which performs an exact search and returns the match if found. Tips You can exclude elements from being parsed by the editor by adding the attribute. The popup remembers its position and size across page reloads (stored in localStorage). The script automatically detects URL changes in single page applications and updates the editor accordingly. You can use a custom query parameter name instead of by using and then ."},{"title":"Project Dashboard","description":"The Project Dashboard in Locize provides access to high-level project management features, including billing, user management, project settings, health metrics, ordering services, and more. It offers a centralized overview for managing all aspects of your localization projects.","href":"\\/docs\\/the-different-views\\/project-dashboard","searchText":"The Project Dashboard This view provides you with all the features not directly connected to the process of translating segments yourself. It shows you all relevant high level information. You have access to: Dashboard : translation coverage overview per language and namespace Billing : customer details, billing history, budget limits, plan management Project settings : user management, notifications (Slack, webhook, Microsoft Teams, GitHub dispatch), AI\\/MT provider configuration, automatic translation, CDN settings Ordering : translation services, pending orders Branches : translation CI\\/CD with branch and merge workflows Health metrics : project health and usage statistics Screenshots : visual context for translators Glossary : approved and forbidden terminology Styleguide : tone, formality, audience rules for AI translation Tenants : per customer translation overrides for SaaS Tags : organize and filter segments Backups : namespace backup snapshots etc..."},{"title":"Translation Memory","description":"Use translation memory in Locize to speed up and improve translation consistency. Learn about configuration, smart matching, and leveraging previous translations.","href":"\\/docs\\/translation-memory","searchText":"Translation Memory A translation memory (TM) is a database that stores sentences, that have previously been translated, in order to aid human translators. Smart translation memory In contrast to traditional translation memories the implementation inside Locize brings following benefits: better performance the translation memory runs directly in your browser and provides faster results by not having to roundtrip to the server the translation memory can be configured to use multiple projects so you can reuse translations from all your existing projects the translation management search works not only on exact language pairs but also shows results for languages of the same family, eg. en GB results while you search in en US every result has a link back to it's source project which makes maintaining the memory and keeping translation consistency a breeze Configuration of the translation memory You can configure your translation memory by navigating to your project settings page, in the \"EDITOR, TM\\/MT\\/AI, ORDERING\" tab and clicking the \"Translation Memories\" section in the \"Cat settings\" card. On new projects the service is enabled by default and the project itself is selected as translation memory source. In the settings you can add \\/ remove projects which should be used as translation memory source. The translation memory will be loaded on startup and will be cached for 24h in your browsers indexedDB. Using the translation memory On every segment on the right side you will see the results in the appropriate tab. Clicking it will enable a translation memory lookup for this segment. On every match you can accept the translation memory entry by just clicking it. Check this section in the video to see how the Translation Memory can be used. translation memory part of showcase\\/demo Are you working with multiple versions? Be aware that only the content of the published latest version of the referenced translation memory project is used."},{"title":"User management","description":"Learn how to invite and manage team members in Locize, assign roles and permissions, and control access to projects, versions, and languages.","href":"\\/docs\\/user-management","searchText":"User Management Overview User management in Locize allows you to invite and manage team members with fine grained permissions for each project. You can control access by version, language, or feature, ensuring everyone has the right level of access. Inviting Users On your project settings page, under the USERS tab, you can: Invite team members to a specific project Assign permissions for specific versions, languages, or features Adapt permissions at any time (admin role required) Create anonymous invitation links with predefined permissions to share with others Learn also about Managing Multiple Projects with Collective Billing and User Inheritance, including how inherited users affect billing and how to optimize costs. Role Permissions Each user can be assigned one of the following roles: Admin : Full access to all features and settings, including billing and user management. Accountant : Responsible for billing and accounting tasks only. Manager : All permissions except billing\\/accounting. Can be scoped to specific versions, languages, or namespaces. User : Can work on translations. Can be scoped to specific versions, languages, or namespaces. Publisher : Like the user role, but can also publish or overwrite versions. Overwriting requires permission to all languages and namespaces. Note: Scoping a permission to specific languages (excluding the reference language) removes the ability to add or remove keys. Only admins (and partially managers) can change team permissions at any time. Additional permission flags For User and Publisher roles, two optional flags fine tune what a team member can do: Can review ( ): grants permission to participate in the review workflow, i.e. approve or reject other users' translations. When scoped to specific languages, reviewing is limited to those languages. Admins and managers can always review; accountants never can. Translate only ( ): restricts the user to editing translation values. Deleting keys (and other key level structural changes) is blocked. Useful for external translators who should not be able to alter your project's key structure. These flags are visible on the user edit form for users and publishers only; admin\\/manager\\/accountant roles don't expose them. The same flags are honoured by the MCP server for AI assistant access. SAML Single Sign On (SSO) You can enable SAML SSO to allow users to access Locize through your chosen identity provider (IDP) in your project settings. You can configure it on the \"USERS\" tab: Or you can configure it in the \"PLAN, ADDONS, ...\" tab Setup steps: 1. Upload your IDP's metadata file. 2. Optionally define user attribute mappings. 3. Enter the appropriate IDP endpoints. Once configured, your users can log in via: SAML SSO integration will increase your monthly costs. SSO users cannot use the InContext popup approach. You must still invite individual users to your project(s). SSO users do not automatically receive project permissions. Audit Log Admins and managers can download a full audit log of security and access relevant changes inside a project. The log is available from the USERS tab of your project settings via the Download audit log action. Recorded events include: Team membership : user added, removed, role or permission changes. Invitations : invitation created, updated, or deleted (personal and open invitations). Project security settings : MFA enforcement enabled or disabled. SSO \\/ SAML provider settings : provider configuration created, updated, or deleted. API keys : API key created or deleted. Each entry records who performed the action, when, and the user or setting affected. The audit log is a paid feature; see pricing for availability per plan."},{"title":"Versioning","description":"Understand how to manage, stage, and release translations in Locize using versioning. Learn about semantic versioning, staging, and best practices.","href":"\\/docs\\/versioning","searchText":"Versioning Versioning is a key feature in Locize that helps you manage, stage, and release translations in a controlled way. By using versions, you can separate development, staging, and production resources, roll back changes, and support multiple app versions in parallel. versioning part of showcase\\/demo No Versioning For small projects or those with continuous deployment, you can use Locize without versioning; just work with the default latest set of resources. This is simple and effective when you don't need to stage or freeze translations. \"Rolling\" Versioning Larger projects often use staged versioning, such as: development (latest) → staging → production When you're ready to promote translations to the next stage, copy resources from latest to staging or production by creating a new version (e.g., naming it \"staging\"). Semantic Versioning Semantic Versioning is useful when you deploy multiple app versions and can't control when users upgrade (e.g., mobile apps). This lets you maintain translations for each app version: 1.0.0 → patch (bugfix) → 1.0.1 1.0.1 → minor (feature) → 1.1.0 1.1.0 → major (breaking) → 2.0.0 When deploying, create a new version based on your latest version and update your production code to use the new version. development → use latest published 1.0.0 → use 1.0.0 published 1.1.0 → use 1.1.0 published 1.1.1 → keep using 1.1.0 if no changes Most of the time, you don't need to create a new version for every bugfix. Avoid creating versions based on timestamps. Too many versions can make management difficult. Merging Versions To keep versions in sync, you typically have two main versions: latest : your current work in progress\\/development version production : your current production version There are two main options to sync versions: a) “OVERWRITE WITH DATA FROM” When you're ready to go live, use the \"OVERWRITE VERSION\" option in the versions menu to overwrite the production version with the content of the latest version. OVERWRITE is faster than COPY TO and does not incur modification costs. b) “COPY TO” Use \"COPY CONTENT FROM\\/TO VERSION\" on the latest version to copy changes to the production version. Only new or changed values are copied. You can review changes before saving. COPY TO is slower than OVERWRITE and incur modification costs. Check out this section in the video to see how this can be used. With the \"COPY TO\" option, you can also use \"expert mode\" for fine tuned control: Update your code Remember to update your locizify script to include targeted version: Or your i18next with Locize backend: Should I use versions or branches? Read about it here."},{"title":"What's inside?","description":"Discover all main features and tools that make Locize a complete localization platform. Click any feature to learn more.","href":"\\/docs\\/whats-inside","searchText":"const features = [ , , , , , , , , , , , , , , , , ] return ( What’s inside? Discover all main features and tools that make Locize a complete localization platform. Click any feature to learn more. ) } ..\\/..\\/..\\/components\\/index.js Automatic Translation \\/docs\\/automatic-translation Leverage machine translation to speed up your localization process, then refine with human review. CDN (Content Delivery Network) \\/docs\\/cdn Serve your translations globally with low latency and high reliability. Context \\/docs\\/context Add context to translation keys to help translators understand usage. Glossary \\/docs\\/glossary Define and enforce consistent terminology across your projects. Styleguide \\/docs\\/styleguide Define tone of voice, formality, target audience, and usage rules for AI translation. Screenshots \\/docs\\/context#screenshots Uploaded screenshots offer powerful visual context for translators. History \\/docs\\/history Track changes to your translations and revert to previous versions. Review Workflow \\/docs\\/review-workflow Collaborate with your team to review, approve, and manage translation quality. Tags \\/docs\\/tags Organize and filter your translation keys using custom tags. Translation Memory \\/docs\\/translation-memory Reuse previously translated content to save time and ensure consistency. User Management \\/docs\\/user-management Control access, roles, and permissions for your team members. Multi-Tenant \\/docs\\/multi-tenant Create tenant projects based on your main project, with isolated access and billing. Caching \\/docs\\/caching Optimize performance and control how translations are cached and delivered. Versioning \\/docs\\/versioning Manage different versions of your translations for development, staging, and production. Notifications \\/docs\\/notifications Stay informed about important events and changes in your projects. Backups \\/docs\\/backups Automatic backups of your translations. API & Integrations \\/docs\\/integration Connect Locize with your tools and workflows using our API, CLI, plugins, and more. brand-prose text-lg mb-6 grid grid-cols-1 md:grid-cols-2 gap-6 p-6 rounded-2xl border border-base-200 bg-base-100 shadow-sm hover:shadow-md transition-shadow text-xl font-semibold mb-2 brand-link text-base-content\\/80"}]}}</script>
    <script id="vike_globalContext" type="application/json">{}</script>
    <script src="/assets/entries/entry-client-routing.BLjDCphj.js" type="module" async></script>
    <link rel="modulepreload" href="/assets/entries/pages_docs_integration_mcp.Zp8Ulp_f.js" as="script" type="text/javascript">
    <link rel="modulepreload" href="/assets/chunks/chunk-owHItMDp.js" as="script" type="text/javascript">
    <link rel="modulepreload" href="/assets/chunks/chunk-CCU4pnpE.js" as="script" type="text/javascript">
    <link rel="modulepreload" href="/assets/chunks/chunk-DEHV6mVZ.js" as="script" type="text/javascript">
    <link rel="modulepreload" href="/assets/chunks/chunk-BKj2opCv.js" as="script" type="text/javascript">
    <link rel="modulepreload" href="/assets/chunks/chunk-CHjl1dcP.js" as="script" type="text/javascript">
    <link rel="modulepreload" href="/assets/chunks/chunk-C7GV2JPl.js" as="script" type="text/javascript">
  </body>
</html>

Server Config

{
  "mcpServers": {
    "locize": {
      "url": "https://mcp.locize.app"
    }
  }
}
Project Info
Created At
4 hours ago
Updated At
4 hours ago
Author Name
-
Star
-
Language
-
License
-
Category
Tags

Recommend Servers

View All
Tavily Mcp
@tavily-ai

JavaScript
a year ago