<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://crowdin.github.io/crowdin-cli/blog</id>
    <title>Crowdin CLI Blog</title>
    <updated>2026-02-23T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://crowdin.github.io/crowdin-cli/blog"/>
    <subtitle>Crowdin CLI Blog</subtitle>
    <icon>https://crowdin.github.io/crowdin-cli/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Context Enrichment with AI Agents]]></title>
        <id>https://crowdin.github.io/crowdin-cli/blog/2026/02/23/context-enrichment</id>
        <link href="https://crowdin.github.io/crowdin-cli/blog/2026/02/23/context-enrichment"/>
        <updated>2026-02-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Learn how to enrich your project's context with AI Agents using Crowdin CLI.]]></summary>
        <content type="html"><![CDATA[<p>Context is one of the most powerful ways to improve <a href="https://crowdin.com/blog/translation-accuracy" target="_blank" rel="noopener noreferrer">translation accuracy</a>. Without it, translators are left to guess the meaning of short strings, UI labels, and ambiguous phrases - leading to inaccurate translations, longer review cycles, and frustrated localization teams.</p><p>The new Crowdin CLI <a href="/crowdin-cli/commands/crowdin-context">context management</a> commands make it easy to manage string context at scale, directly from your terminal.</p><p>In this post, we'll walk through a practical workflow: download your strings, enrich them using an AI agent with the help of <a href="https://github.com/crowdin/skills" target="_blank" rel="noopener noreferrer">Crowdin Skills</a>, and push the result back to Crowdin.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-workflow">The Workflow<a href="#the-workflow" class="hash-link" aria-label="Direct link to The Workflow" title="Direct link to The Workflow">​</a></h2><p>A string like <code>Name</code> or <code>Post</code> means something very different depending on where it appears in your app. Is it username or post title? Is it a label or a button? Without context, translators must guess - and guesses lead to mistakes.</p><p>The context enrichment workflow with Crowdin CLI is straightforward:</p><ol><li><strong>Download</strong> strings context to a local file</li><li><strong>Enrich</strong> the context using an AI agent</li><li><strong>Upload</strong> the enriched context back to Crowdin</li></ol><p>Let's walk through each step.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-0-install-crowdin-skills">Step 0: Install Crowdin Skills<a href="#step-0-install-crowdin-skills" class="hash-link" aria-label="Direct link to Step 0: Install Crowdin Skills" title="Direct link to Step 0: Install Crowdin Skills">​</a></h2><p><a href="https://github.com/crowdin/skills" target="_blank" rel="noopener noreferrer">Crowdin Skills</a> is a collection of agent skills that teach your AI agent how to work with Crowdin - including how to correctly fill string context.</p><p>Install all Crowdin skills with a single command:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">npx skills </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> crowdin/skills</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This installs two skills relevant to context enrichment:</p><ul><li><code>crowdin-context-cli</code> - documents the <code>context download</code> and <code>context upload</code> CLI commands so the agent understands the full workflow and the JSONL format.</li><li><code>context-extraction</code> - teaches the agent how to write good context descriptions: which strings need context (ambiguous short words, plurals, UI labels with inline formatting), how to write concise 1–3 sentence descriptions that explain the UI element type and placement, and what <em>not</em> to touch in the file.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-1-download-strings-context">Step 1: Download Strings Context<a href="#step-1-download-strings-context" class="hash-link" aria-label="Direct link to Step 1: Download Strings Context" title="Direct link to Step 1: Download Strings Context">​</a></h2><p>The <a href="/crowdin-cli/commands/crowdin-context-download"><code>context download</code></a> command exports your project's strings to a local <code>.jsonl</code> file, ready for AI enrichment.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin context download</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>By default, this creates a <code>crowdin-context.jsonl</code> file in the current directory. You can also customize the output path with the <code>--to</code> option. You don't need to execute this command manually. There is no need to execute this command manually. The agent can do it for you when you ask it to.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>JSONL is a line-delimited format that is easy to parse and write. It is a good format for AI agents to work with. There are many IDE extensions available, such as <a href="https://marketplace.visualstudio.com/items?itemName=gabor.jsonl-gazelle" target="_blank" rel="noopener noreferrer">JSONL Gazelle</a> for VS Code. It allows you to view the JSONL file content in a more readable format.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="filtering-strings">Filtering Strings<a href="#filtering-strings" class="hash-link" aria-label="Direct link to Filtering Strings" title="Direct link to Filtering Strings">​</a></h4><p>You rarely need to enrich all strings at once. The command supports a range of filters so you can focus on exactly what matters:</p><table><thead><tr><th>Filter</th><th>Description</th><th>Example Command</th></tr></thead><tbody><tr><td>By file</td><td>Process strings from specific source files</td><td><code>crowdin context download -f "src/ui/**"</code></td></tr><tr><td>By label</td><td>Target strings with specific labels</td><td><code>crowdin context download --label needs-context</code></td></tr><tr><td>By context status</td><td>Only download strings that are missing context</td><td><code>crowdin context download --status empty</code></td></tr><tr><td>By date</td><td>Only strings created after a specific date</td><td><code>crowdin context download --since 2026-01-01</code></td></tr><tr><td>By branch</td><td>Only strings from a specific branch</td><td><code>crowdin context download -b main</code></td></tr></tbody></table><p>These filters are especially useful when running context enrichment as part of a CI/CD pipeline or when incrementally updating context for new strings.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-2-enrich-context-with-ai-agents">Step 2: Enrich Context with AI Agents<a href="#step-2-enrich-context-with-ai-agents" class="hash-link" aria-label="Direct link to Step 2: Enrich Context with AI Agents" title="Direct link to Step 2: Enrich Context with AI Agents">​</a></h2><p>Your AI agent already knows your codebase, so it can write the best description possible for your strings. Once you have your <code>crowdin-context.jsonl</code> file, it's time to let the agent do the heavy lifting.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>Just <strong>ask your agent</strong> to enrich the context. It will use the Crowdin CLI to download and upload context, and the <code>context-extraction</code> skill to write good descriptions.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-3-upload-enriched-context">Step 3: Upload Enriched Context<a href="#step-3-upload-enriched-context" class="hash-link" aria-label="Direct link to Step 3: Upload Enriched Context" title="Direct link to Step 3: Upload Enriched Context">​</a></h2><p>Once your AI agent has enriched the <code>crowdin-context.jsonl</code> file, upload it back to Crowdin with the <a href="/crowdin-cli/commands/crowdin-context-upload"><code>context upload</code></a> command:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin context upload</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Use the <code>--from</code> option if you used a custom path with <code>--to</code> during download.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="additional-commands">Additional Commands<a href="#additional-commands" class="hash-link" aria-label="Direct link to Additional Commands" title="Direct link to Additional Commands">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="check-context-coverage">Check Context Coverage<a href="#check-context-coverage" class="hash-link" aria-label="Direct link to Check Context Coverage" title="Direct link to Check Context Coverage">​</a></h3><p>The <a href="/crowdin-cli/commands/crowdin-context-status"><code>context status</code></a> command gives you a quick overview of how much of your project has context filled in:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin context status</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">✔️  Fetching project info    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Context Status </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> Project </span><span class="token string" style="color:#e3116c">"Demo"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">ID: 00000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Total strings:       </span><span class="token number" style="color:#36acaa">3484</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">With AI context:     </span><span class="token number" style="color:#36acaa">50</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1.44</span><span class="token plain">%</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Without AI context:  </span><span class="token number" style="color:#36acaa">3434</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">98.56</span><span class="token plain">%</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">With manual context: </span><span class="token number" style="color:#36acaa">3484</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">100.00</span><span class="token plain">%</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Use <code>--by-file</code> to see a breakdown per source file - useful for spotting which files need the most attention.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="reset-ai-generated-context">Reset AI-Generated Context<a href="#reset-ai-generated-context" class="hash-link" aria-label="Direct link to Reset AI-Generated Context" title="Direct link to Reset AI-Generated Context">​</a></h3><p>The <a href="/crowdin-cli/commands/crowdin-context-reset"><code>context reset</code></a> command removes AI-generated context from strings while preserving any manually written context:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin context reset --all</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can scope the reset to specific files, labels, or branches using the same filtering options available on the other commands. The <code>--all</code> flag is required when no filter is specified, as a safety measure against accidental bulk resets.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary">​</a></h2><p>This post showed how to enrich your project's string context using Crowdin CLI and an AI agent. The workflow: install <a href="https://github.com/crowdin/skills" target="_blank" rel="noopener noreferrer">Crowdin Skills</a>, download strings to a local JSONL file, ask your agent to fill in context, then upload the result back to Crowdin. Use context status to check coverage and context reset to remove AI-generated context when needed.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Share your feedback</div><div class="admonitionContent_S0QG"><p><a href="https://github.com/crowdin/crowdin-cli/discussions/992" target="_blank" rel="noopener noreferrer">Visit our GitHub discussions</a> to share your feedback on the context commands.</p></div></div>]]></content>
        <author>
            <name>Andrii Bodnar</name>
            <uri>https://github.com/andrii-bodnar</uri>
        </author>
        <category label="tutorial" term="tutorial"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Crowdin CLI 4.0]]></title>
        <id>https://crowdin.github.io/crowdin-cli/blog/2024/05/28/cli-v4</id>
        <link href="https://crowdin.github.io/crowdin-cli/blog/2024/05/28/cli-v4"/>
        <updated>2024-05-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Learn how to manage your project's localization files from the command line. Synchronize your source language files and translations with your Crowdin project.]]></summary>
        <content type="html"><![CDATA[<p>Today we are happy to announce Crowdin CLI <strong>4.0</strong>! 🥳</p><p><img loading="lazy" alt="social-card image" src="/crowdin-cli/assets/images/social-card-089827b45a604d4b938169e43c27f144.png" width="939" height="646" class="img_ev3q"></p><p>It has been almost five years since the release of Crowdin CLI 3.0. During this time, we have received extensive feedback from our users and worked diligently to improve the tool. As a result, we've made many changes and improvements.</p><p>The new version of Crowdin CLI introduces a lot of new features and enhancements. We've added new commands, updated existing ones, and significantly improved the overall user experience.</p><p>This post is intended to highlight the most important changes and help you migrate from CLI 3.x with ease. It is not a comprehensive guide, but rather a list of the most important changes.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="requirements">Requirements<a href="#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements">​</a></h2><p>As part of this release, the minimum Java version has been updated to <strong>17 LTS</strong>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-commands">New commands<a href="#new-commands" class="hash-link" aria-label="Direct link to New commands" title="Direct link to New commands">​</a></h2><ul><li><a href="/crowdin-cli/commands/crowdin-config"><code>crowdin config</code></a></li><li><a href="/crowdin-cli/commands/crowdin-project"><code>crowdin project</code></a></li><li><a href="/crowdin-cli/commands/crowdin-language"><code>crowdin language</code></a></li><li><a href="/crowdin-cli/commands/crowdin-branch-clone"><code>crowdin branch clone</code></a></li><li><a href="/crowdin-cli/commands/crowdin-branch-merge"><code>crowdin branch merge</code></a></li><li><a href="/crowdin-cli/autocompletion"><code>crowdin completion</code></a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-command-options">New command options<a href="#new-command-options" class="hash-link" aria-label="Direct link to New command options" title="Direct link to New command options">​</a></h2><table><thead><tr><th><div style="width:150px">Command</div></th><th>Option/Description</th></tr></thead><tbody><tr><td><code>init</code></td><td><kbd>--quiet</kbd> option to skip interactive input prompts</td></tr><tr><td><code>string add</code></td><td><kbd>--branch</kbd> option to specify the branch to which the new string should be added</td></tr><tr><td><code>string list</code></td><td><kbd>--directory</kbd> and <kbd>--scope</kbd> options to filter strings by directory and scope</td></tr><tr><td><code>pre-translate</code></td><td><kbd>--file</kbd> option to specify the file(s) in the Crowdin project to pre-translate</td></tr><tr><td><code>pre-translate</code></td><td><kbd>ai</kbd> method and <kbd>--ai-prompt</kbd> parameter to allow pre-translation via AI</td></tr><tr><td><code>file upload</code></td><td><kbd>--type</kbd> and <kbd>--parser-version</kbd> options to specify the file type and parser version respectively</td></tr><tr><td><code>file upload</code></td><td><kbd>--context</kbd> option to provide a context about the whole file</td></tr><tr><td><code>file list</code></td><td><kbd>--verbose</kbd> option to show more information about the files</td></tr><tr><td><code>language list</code></td><td><kbd>--all</kbd> option to list all languages for the current account</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="command-updates">Command updates<a href="#command-updates" class="hash-link" aria-label="Direct link to Command updates" title="Direct link to Command updates">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pre-translate">Pre-translate<a href="#pre-translate" class="hash-link" aria-label="Direct link to Pre-translate" title="Direct link to Pre-translate">​</a></h3><p>We've made significant changes to the <a href="/crowdin-cli/commands/crowdin-pre-translate"><code>pre-translate</code></a> command. The command now requires the <kbd>--file</kbd> parameter for file-based projects. The <kbd>--file</kbd> parameter determines which files to pre-translate. Previously, the command relied on the current configuration, and it was only possible to pre-translate the files that matched the configuration patterns. Now you can specify any file(s) in the Crowdin project to pre-translate.</p><p>Tip: Use the <a href="/crowdin-cli/commands/crowdin-file-list"><code>file list</code></a> command to get the file paths in the current project.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="string">String<a href="#string" class="hash-link" aria-label="Direct link to String" title="Direct link to String">​</a></h3><ul><li>The <a href="/crowdin-cli/commands/crowdin-string-edit"><code>string edit</code></a> command changes:<ul><li>Moved <kbd>id</kbd> to a parameter instead of a command option.</li><li>Now <kbd>--identifier</kbd> is used as an option to edit and not to find the needed string.</li></ul></li><li>The <a href="/crowdin-cli/commands/crowdin-string-delete"><code>string delete</code></a> command changes:<ul><li>Moved <kbd>id</kbd> to a parameter instead of a command option. Now only 1 string can be removed at a time.</li><li>Removed the <kbd>--text</kbd> and <kbd>--identifier</kbd> options. Only ID is used as a string identifier.</li></ul></li><li>The <code>comment</code> command has been replaced with the <a href="/crowdin-cli/commands/crowdin-comment-add"><code>comment add</code></a> command.</li></ul><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin string add Download --file main/src/strings.xml --identifier "download"</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin string add Download --file src/strings.xml --branch main --identifier "download"</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin string edit --id 12 --text new</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin string edit 12 --text new</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin string delete --id 12</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin string delete 12</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="list">List<a href="#list" class="hash-link" aria-label="Direct link to List" title="Direct link to List">​</a></h3><ul><li>The <code>list branches</code> command has been replaced with the <a href="/crowdin-cli/commands/crowdin-branch-list"><code>branch list</code></a> command.</li><li>The <code>list sources</code> command has been replaced with the <a href="/crowdin-cli/commands/crowdin-config-sources"><code>config sources</code></a> command.</li><li>The <code>list translations</code> command has been replaced with the <a href="/crowdin-cli/commands/crowdin-config-translations"><code>config translations</code></a> command.</li><li>The <code>list project</code> command has been replaced with the <a href="/crowdin-cli/commands/crowdin-file-list"><code>file list</code></a> command.</li><li>The <code>list languages</code> command has been replaced with the <a href="/crowdin-cli/commands/crowdin-language-list"><code>language list</code></a> command.</li></ul><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin list branches</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin branch list</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin list project</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin file list</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin list sources</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin config sources</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin list translations</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin config translations</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin list languages</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin language list</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>The default language code for the <code>language list</code> command output has been changed from <code>two_letters_code</code> to <code>id</code>.</p><p>This change makes it more convenient, as the <code>id</code> is used consistently for the <code>--language</code> parameter across various commands.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="glossary">Glossary<a href="#glossary" class="hash-link" aria-label="Direct link to Glossary" title="Direct link to Glossary">​</a></h3><p>The <kbd>--name</kbd> option has been removed from the <code>upload</code> and <code>download</code> commands, and the <kbd>&lt;id<!-- -->&gt;</kbd> parameter is now used instead:</p><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin glossary download --id &lt;id&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin glossary download --name &lt;name&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin glossary download &lt;id&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin glossary upload &lt;file&gt; --name &lt;name&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin glossary upload &lt;file&gt; --id &lt;id&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Tip: Use the <a href="/crowdin-cli/commands/crowdin-glossary-list"><code>glossary list</code></a> command to get the <code>id</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="tm">TM<a href="#tm" class="hash-link" aria-label="Direct link to TM" title="Direct link to TM">​</a></h3><p>The <kbd>--name</kbd> option has been removed from <code>upload</code> and <code>download</code> commands, and the <kbd>&lt;id<!-- -->&gt;</kbd> parameter is now used instead:</p><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin tm download --id &lt;id&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin tm download --name &lt;name&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin tm download &lt;id&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin tm upload &lt;file&gt; --name &lt;name&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin tm upload &lt;file&gt; --id &lt;id&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Tip: Use the <a href="/crowdin-cli/commands/crowdin-tm-list"><code>tm list</code></a> command to get the <code>id</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="screenshot">Screenshot<a href="#screenshot" class="hash-link" aria-label="Direct link to Screenshot" title="Direct link to Screenshot">​</a></h3><p>The <kbd>--name</kbd> option has been replaced with the <kbd>&lt;id<!-- -->&gt;</kbd> parameter for the <code>delete</code> command because there can be multiple screenshots with the same name:</p><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin screenshot delete &lt;name&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin screenshot delete &lt;id&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Tip: Use the <a href="/crowdin-cli/commands/crowdin-screenshot-list"><code>screenshot list</code></a> command to get the <code>id</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="init">Init<a href="#init" class="hash-link" aria-label="Direct link to Init" title="Direct link to Init">​</a></h3><p>The <code>generate</code> alias has been removed:</p><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin generate</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin init</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="lint">Lint<a href="#lint" class="hash-link" aria-label="Direct link to Lint" title="Direct link to Lint">​</a></h3><p>The <code>lint</code> command has been replaced with the <a href="/crowdin-cli/commands/crowdin-config-lint"><code>config lint</code></a> command:</p><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49"> crowdin lint</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa"> crowdin config lint</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bundle">Bundle<a href="#bundle" class="hash-link" aria-label="Direct link to Bundle" title="Direct link to Bundle">​</a></h3><p>The <code>download bundle</code> command has been replaced with the <a href="/crowdin-cli/commands/crowdin-bundle-download"><code>bundle download</code></a> command.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="exit-codes">Exit codes<a href="#exit-codes" class="hash-link" aria-label="Direct link to Exit codes" title="Direct link to Exit codes">​</a></h2><p>This release also includes more exit codes (previously we only had <code>0</code> for success and <code>1</code> for failure).</p><p>See the <a href="/crowdin-cli/exit-codes">official documentation</a> for more details.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="environment-variables">Environment variables<a href="#environment-variables" class="hash-link" aria-label="Direct link to Environment variables" title="Direct link to Environment variables">​</a></h2><p>Previously, it was necessary to specify the environment variables in the configuration file in order to load the configuration from them.</p><p>Now the CLI can automatically pick up the environment variables if they are set in the shell. The supported environment variables are:</p><ul><li><code>CROWDIN_PROJECT_ID</code></li><li><code>CROWDIN_PERSONAL_TOKEN</code></li><li><code>CROWDIN_BASE_PATH</code></li><li><code>CROWDIN_BASE_URL</code></li></ul><p>Thanks to this change, it's now easier to work with the CLI in CI/CD environments, especially in the no-configuration-file use case.</p><p>Visit the <a href="/crowdin-cli/configuration#environment-variables">Configuration File</a> article for more details.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="deprecations-and-backward-compatibility">Deprecations and backward compatibility<a href="#deprecations-and-backward-compatibility" class="hash-link" aria-label="Direct link to Deprecations and backward compatibility" title="Direct link to Deprecations and backward compatibility">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="download-targets">Download targets<a href="#download-targets" class="hash-link" aria-label="Direct link to Download targets" title="Direct link to Download targets">​</a></h3><p>The deprecated <code>download targets</code> command has been removed. The configuration file no longer supports the <code>targets</code> section as well. Use <a href="/crowdin-cli/commands/crowdin-bundle">Bundles</a> instead.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="task-command">Task command<a href="#task-command" class="hash-link" aria-label="Direct link to Task command" title="Direct link to Task command">​</a></h3><p>Removed backward compatibility for file numeric id in the <a href="/crowdin-cli/commands/crowdin-task-add"><code>task add</code></a> command. Now only file path is supported:</p><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">crowdin task add --file 12 --language uk</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">crowdin task add --file src/strings.xml --language uk</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="command-output-updates">Command output updates<a href="#command-output-updates" class="hash-link" aria-label="Direct link to Command output updates" title="Direct link to Command output updates">​</a></h2><p>In this release, we've also reviewed and improved the output of many commands to make them more informative and user-friendly. Changes include <code>list</code>, <code>add</code>, <code>upload</code>, <code>download</code>, <code>delete</code>, and other commands for various resources.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>Need help or have questions? <a href="https://github.com/crowdin/crowdin-cli/discussions/781" target="_blank" rel="noopener noreferrer">Let's discuss it</a>!</p></div></div>]]></content>
        <author>
            <name>Andrii Bodnar</name>
            <uri>https://github.com/andrii-bodnar</uri>
        </author>
        <author>
            <name>Yevheniy Oliynyk</name>
            <uri>https://github.com/yevheniyJ</uri>
        </author>
        <category label="release" term="release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Files Management]]></title>
        <id>https://crowdin.github.io/crowdin-cli/blog/2024/01/23/files-management</id>
        <link href="https://crowdin.github.io/crowdin-cli/blog/2024/01/23/files-management"/>
        <updated>2024-01-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Learn how to manage your project's localization files from the command line. Synchronize your source language files and translations with your Crowdin project.]]></summary>
        <content type="html"><![CDATA[<p>Crowdin CLI allows you to manage your project's localization files from the command line. You can easily synchronize your source language files and translations with your Crowdin project.</p><p>There are several commands you can use to manage your files. The CLI provides high-level commands that are easy to use and low-level commands that give you more flexibility and control.</p><p>The high level commands are <a href="/crowdin-cli/commands/crowdin-upload"><code>crowdin upload</code></a> and <a href="/crowdin-cli/commands/crowdin-download"><code>crowdin download</code></a>. These commands are easy to use and they rely mostly on the configuration file.</p><p>The low-level commands include <a href="/crowdin-cli/commands/crowdin-file-upload"><code>crowdin file upload</code></a>, <a href="/crowdin-cli/commands/crowdin-file-download"><code>crowdin file download</code></a>, and <a href="/crowdin-cli/commands/crowdin-file-delete"><code>crowdin file delete</code></a>. These commands are more like a lightweight wrapper over the <a href="https://developer.crowdin.com/api/v2/" target="_blank" rel="noopener noreferrer">Crowdin API</a>. They give you more flexibility and control over the file management process.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-upload-and-download-commands">The <code>upload</code> and <code>download</code> commands<a href="#the-upload-and-download-commands" class="hash-link" aria-label="Direct link to the-upload-and-download-commands" title="Direct link to the-upload-and-download-commands">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h3><p>These commands are usually being used along with the configuration file.</p><p>For example, you have a project with the following structure:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── locales</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   ├── en</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   │   └── messages.xml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   └── fr</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   │   └── messages.xml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   └── de</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   │   └── messages.xml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   └── uk</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│       └── messages.xml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── </span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Let's create a simple configuration file:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin init -s </span><span class="token string" style="color:#e3116c">"locales/en/*.xml"</span><span class="token plain"> -t </span><span class="token string" style="color:#e3116c">"locales/%two_letters_code%/%original_file_name%"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This command prompts you for the project identifier and API token. It will then create a configuration file with the following content:</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">"project_id"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"&lt;your-crowdin-project-id&gt;"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">"api_token"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"&lt;your-personal-access-token&gt;"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">"base_path"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"."</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">"base_url"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://api.crowdin.com"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">"preserve_hierarchy"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">files</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">"source"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"locales/en/*.xml"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">"translation"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"locales/%two_letters_code%/%original_file_name%"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Let's take a closer look at some of the configuration options.</p><p>The <code>source</code> and <code>translation</code> configurations represent the patterns for the source and translation files. The <code>source</code> configuration is a <a href="https://en.wikipedia.org/wiki/Glob_(programming)" target="_blank" rel="noopener noreferrer">glob</a> pattern pointing to the source files. The <code>translation</code> configuration is a path to the translation files (existing ones or where to put downloaded translations). The <code>%two_letters_code%</code> and <code>%original_file_name%</code> are the placeholders that will be replaced by the language code and the original source file name, respectively.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>Visit the <a href="/crowdin-cli/configuration">Configuration</a> page to learn more about the configuration file.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="upload-content">Upload content<a href="#upload-content" class="hash-link" aria-label="Direct link to Upload content" title="Direct link to Upload content">​</a></h3><p>Let's <strong>upload</strong> the source files and existing translations to Crowdin:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin upload sources</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">crowdin upload translations -l fr</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>We can also check the translation and proofreading progress before downloading the translations:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin status</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="download-content">Download content<a href="#download-content" class="hash-link" aria-label="Direct link to Download content" title="Direct link to Download content">​</a></h3><p>When the translations are ready, we can <strong>download</strong> them:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin download translations</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The above command will download all the translations to the path specified in the <code>translation</code> configuration.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>You can also use short aliases: <code>crowdin push</code>, <code>crowdin pull</code>.</p></div></div><p>To download the source files from Crowdin, run the following command:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin download sources</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-file-command">The <code>file</code> command<a href="#the-file-command" class="hash-link" aria-label="Direct link to the-file-command" title="Direct link to the-file-command">​</a></h2><p>The <a href="/crowdin-cli/commands/crowdin-file"><code>file</code></a> command is a low-level command that allows you to manage your files with more flexibility and control.</p><p>This command does not require a <code>files</code> section in the configuration file, or a configuration file at all. You can specify all the necessary parameters in the command itself.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="upload-content-1">Upload content<a href="#upload-content-1" class="hash-link" aria-label="Direct link to Upload content" title="Direct link to Upload content">​</a></h3><p>Let's use the same project structure as in the previous example and try to <strong>upload</strong> the source files and existing translations to Crowdin:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"> upload locales/en/messages.xml -d messages.xml</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The command above will take the file <code>locales/en/messages.xml</code> and upload it to Crowdin as <code>messages.xml</code> in the root directory. The <code>-d</code>/<code>--dest</code> option stands for <code>destination</code> and allows you to specify the path to the file in Crowdin. If you omit the <code>-d</code> option, the file will be uploaded to the root directory with the same path as the source file.</p><p>You can upload strings to string-based projects as well:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"> upload locales/en/messages.xml --branch main --cleanup-mode --update-strings</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The <code>--branch</code> option is required for string-based projects. The <code>--cleanup-mode</code> and <code>--update-strings</code> options are optional. Use the <code>--update-strings</code> option to update strings with the same identifiers and the <code>--cleanup-mode</code> option to remove strings that are not present in the uploaded file.</p><p>To <strong>upload translations</strong> you need to specify the <code>-l</code>/<code>--language</code> option:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"> upload locales/fr/messages.xml -d messages.xml -l fr</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The <code>-d</code>/<code>--dest</code> option is the path to the file in Crowdin where the translations should be uploaded. <code>-l</code> - <a href="https://developer.crowdin.com/language-codes/" target="_blank" rel="noopener noreferrer">Crowdin language code</a>.</p><p>Visit the <a href="/crowdin-cli/commands/crowdin-file-upload"><code>crowdin file upload</code></a> page to see all the options available.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="download-content-1">Download content<a href="#download-content-1" class="hash-link" aria-label="Direct link to Download content" title="Direct link to Download content">​</a></h3><p>Using the <code>crowdin file download</code> you can download either the source files or translations. Let's try to download the source file from Crowdin:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"> download messages.xml -d locales/en/messages.xml</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The above command will download the <code>messages.xml</code> file from Crowdin and store it in the <code>locales/en/messages.xml</code> path.</p><p>To download translations, you need to specify the <code>-l</code>/<code>--language</code> option:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"> download messages.xml -d locales/fr -l fr</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The <code>-d</code>/<code>--dest</code> option here is the path to the file on your local machine where the translations should be stored. <code>-l</code> - <a href="https://developer.crowdin.com/language-codes/" target="_blank" rel="noopener noreferrer">Crowdin language code</a>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>You can also use language code placeholders in the <code>--dest</code> option. For example, <code>locales/%android_code%</code>.
Available codes: <code>%two_letters_code%</code>, <code>%three_letters_code%</code>, <code>%locale%</code>, <code>%android_code%</code>, <code>%osx_code%</code>, <code>%osx_locale%</code>.</p></div></div><p>Visit the <a href="/crowdin-cli/commands/crowdin-file-download"><code>crowdin file download</code></a> page to see all the available options.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>The <code>file</code> commands can easily be used without the configuration file. For example:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crowdin </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"> upload locales/en/messages.xml </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d messages.xml </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -i </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">your-project-id</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -T </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">your-personal-access-token</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  /</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="further-reading">Further Reading<a href="#further-reading" class="hash-link" aria-label="Direct link to Further Reading" title="Direct link to Further Reading">​</a></h2><ul><li><a href="/crowdin-cli/configuration">Configuration</a></li><li><a href="/crowdin-cli/advanced">Advanced Usage</a></li><li><a href="/crowdin-cli/ci-cd">CI/CD Integration</a></li><li><a href="/crowdin-cli/faq">FAQ</a></li></ul>]]></content>
        <author>
            <name>Andrii Bodnar</name>
            <uri>https://github.com/andrii-bodnar</uri>
        </author>
        <category label="tutorial" term="tutorial"/>
    </entry>
</feed>