Accent CLI

raw JSON →
0.17.0 verified Wed Apr 22 auth: no javascript

The `accent-cli` package provides a robust command-line interface for seamless interaction with an Accent localization instance. It empowers developers to automate critical localization workflows, including synchronizing translation files, managing project configurations, and executing custom hooks directly from the terminal or within CI/CD pipelines. The current stable version is 0.17.0, and it follows a semantic versioning approach, with updates released to introduce new features, improve stability, and address bug fixes in alignment with the Accent platform's development. A key differentiator is its deep integration with the Accent platform, supporting various localization file formats such as JSON and `.strings`. It offers highly flexible configuration via a dedicated `accent.json` file, which supports powerful glob-pattern matching for file paths, and environment variables for sensitive data like API keys and URLs, providing secure and adaptable deployment options.

error Error: Missing Accent API Key. Please set ACCENT_API_KEY environment variable or 'apiKey' in accent.json
cause The Accent API key required for authentication is not provided, either as an environment variable or in the configuration file.
fix
Ensure that the ACCENT_API_KEY environment variable is set to your valid Accent API key, or add an "apiKey": "YOUR_API_KEY" entry to your accent.json file.
error Error: Command 'xyz' not found.
cause The command executed (e.g., `accent xyz`) is not a recognized or supported subcommand of `accent-cli` for the installed version.
fix
Verify the command name is spelled correctly. Use accent --help to list all available commands and their usage. If the command should exist, ensure you have the latest stable version of accent-cli or a version where the command is supported.
error Error: Invalid accent.json: Unexpected token [token] in JSON at position [position]
cause The `accent.json` configuration file contains a syntax error (e.g., missing comma, unclosed quote, invalid character) that prevents it from being parsed as valid JSON.
fix
Open your accent.json file and meticulously review its JSON syntax. Pay close attention to commas between properties, correctly balanced brackets and braces, and properly quoted string values. Utilize a JSON linter or an IDE with JSON validation to quickly identify and correct the syntax error.
gotcha Environment variables (e.g., `ACCENT_API_KEY`, `ACCENT_API_URL`, `ACCENT_PROJECT`) override corresponding values defined in the `accent.json` configuration file. This precedence can lead to unexpected behavior if not understood.
fix Always check your active environment variables if the configuration specified in `accent.json` appears to be ignored. Explicitly unset environment variables if you intend for `accent.json` values to take effect, or consistently manage configuration through a single source.
breaking As an active CLI tool, the syntax, arguments, or flags for specific commands can undergo changes between minor or even patch versions. Relying on undocumented or experimental flags may lead to breakage upon upgrade.
fix Before upgrading `accent-cli`, review the official documentation for any breaking changes related to command arguments or configuration. For automated scripts, consider pinning to a specific minor version (e.g., `^0.17.x`) and thoroughly testing upgrades in a staging environment.
gotcha Incorrectly formatted glob patterns in the `source` or `target` properties within `accent.json` can cause files to be missed during synchronization or incorrectly written to unintended locations. `accent-cli` uses the `node-glob` library, which has specific syntax rules.
fix Thoroughly test your glob patterns, especially for complex file structures. Consult the `node-glob` library documentation for advanced pattern matching. Use `accent --help [command]` for command-specific options that might assist in debugging file paths or dry runs if available.
gotcha The `hooks` feature allows executing arbitrary shell commands, which can introduce security vulnerabilities if the commands are not trusted or if they process untrusted input. Malicious commands could lead to data exposure or system compromise.
fix Carefully review all commands defined within the `hooks` section of your `accent.json`. Ensure that any commands are from trusted sources, do not process untrusted user input, and are executed with the minimum necessary permissions. Consider running `accent-cli` in a sandboxed or containerized environment for critical workflows.
npm install accent-cli
yarn add accent-cli
pnpm add accent-cli

This quickstart demonstrates how to execute `accent-cli` commands programmatically from a Node.js application using the `child_process.exec` function. It includes the creation of a temporary `accent.json` configuration file and a dummy localization file to simulate a project setup, runs the `accent sync` command, and then cleans up the generated temporary files and directories.

import { exec } from 'child_process';
import * as path from 'path';
import * as fs from 'fs';

// Define paths for dummy files
const configPath = path.join(process.cwd(), 'accent.json');
const dummyLocaleDir = path.join(process.cwd(), 'localization_test');
const dummyLocaleFilePath = path.join(dummyLocaleDir, 'en.json');

// Create a dummy accent.json for demonstration
const dummyConfig = {
  "apiUrl": process.env.ACCENT_API_URL ?? "http://localhost:3000",
  "apiKey": process.env.ACCENT_API_KEY ?? "sk_exampleapikey123", // Replace with a real key or env var in production
  "project": process.env.ACCENT_PROJECT ?? "a1b2c3d4-e5f6-7890-1234-567890abcdef",
  "files": [
    {
      "format": "json",
      "source": "localization_test/en.json",
      "target": "localization_test/%slug%/%document_path%.json"
    }
  ]
};
fs.writeFileSync(configPath, JSON.stringify(dummyConfig, null, 2));
console.log(`Created dummy accent.json at ${configPath}`);

// Create a dummy localization file
if (!fs.existsSync(dummyLocaleDir)) {
  fs.mkdirSync(dummyLocaleDir);
}
fs.writeFileSync(dummyLocaleFilePath, JSON.stringify({ "hello": "Hello from accent-cli!" }, null, 2));
console.log(`Created dummy localization/en.json at ${dummyLocaleFilePath}`);

console.log('Running accent-cli programmatically with `accent sync`...');

exec('accent sync', (error, stdout, stderr) => {
  if (error) {
    console.error(`Error executing accent sync: ${error.message}`);
    console.error(`stderr: ${stderr}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  if (stderr) {
    console.warn(`stderr (warnings/info): ${stderr}`);
  }
  console.log('accent-cli sync command executed successfully.');

  // Clean up dummy files and directory
  try {
    fs.unlinkSync(configPath);
    fs.unlinkSync(dummyLocaleFilePath);
    fs.rmdirSync(dummyLocaleDir, { recursive: true });
    console.log('Cleaned up dummy files and directory.');
  } catch (cleanupError) {
    console.error(`Error during cleanup: ${cleanupError}`);
  }
});