A CLI tool to extract raw text from JSX/TSX files for internationalization (i18n).
Best paired with agentic ai tools like Cursor.
- Extracts text content from JSX elements
- Extracts text from specified JSX attributes (title, alt, placeholder, etc.)
- Supports TypeScript and JavaScript JSX files
- Configurable file extensions and attribute names
- Shows file path and line numbers for each extracted text
- Install dependencies:
npm install- Build the project:
npm run build- (Optional) Install globally:
npm install -g .# Use with npx (recommended)
npx i18n-scan <directory>
# If installed globally
i18n-scan <directory>
# Run locally during development
npm run dev <directory>
# Run built version locally
npm start <directory># Scan all .tsx and .jsx files in src directory
npm run dev ./src
# Scan with custom file extensions
npm run dev ./src --ext .tsx,.jsx,.ts,.js
# Scan with custom attributes
npm run dev ./src --attributes title,alt,placeholder,aria-label-e, --ext <extensions>: Comma-separated list of file extensions (default:.tsx,.jsx)-a, --attributes <names>: Comma-separated list of attribute names to extract (default:title,alt,placeholder)
[src/components/Button.tsx:5] Click me
[src/components/Button.tsx:6] Submit form
[src/components/Form.tsx:12] Enter your name
[src/components/Form.tsx:13] This field is required
npm run dev <directory>: Run from TypeScript sourcenpm run build: Compile TypeScript to JavaScriptnpm start <directory>: Run compiled version
-
JSX Text Content: Any text between JSX tags
<button>Click me</button> // Extracts: "Click me" <p>Hello world</p> // Extracts: "Hello world"
-
JSX Attributes: Text from specified attributes
<input placeholder="Enter name" /> // Extracts: "Enter name" <img alt="Profile picture" /> // Extracts: "Profile picture" <button title="Close dialog" /> // Extracts: "Close dialog"