
Internationalization Helper
- 1 installs
- 404 repo stars
- Updated August 5, 2026
- aiskillstore/marketplace
internationalization-helper is a Claude Code skill that extracts hardcoded strings, manages translation files and checks locale coverage for multi-language apps.
About
internationalization-helper is a Claude Code skill for adding and managing internationalization (i18n) and localization in multi-language apps. A developer uses it to find hardcoded strings, extract them into translation files, detect the i18n framework, and check for missing translations across locales. It also covers pluralization, locale-aware date/number formatting and RTL support.
- Extracts hardcoded strings into translation files for i18n
- Detects the i18n framework and checks locale coverage
- Covers pluralization, locale formatting and RTL support
Internationalization Helper by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,914 of 2,245 Frontend Development skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
internationalization-helper capabilities & compatibility
- Capabilities
- string extraction · translation coverage · locale formatting · rtl support
- Use cases
- frontend · translation
What internationalization-helper says it does
Helps manage internationalization (i18n) and localization (l10n) in multi-language applications.
Compare locale files to find missing translations:
npx skills add https://github.com/aiskillstore/marketplace --skill internationalization-helperAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 404 |
| Last updated | August 5, 2026 |
| Repository | aiskillstore/marketplace ↗ |
What it does
Extract hardcoded strings and manage translation files for a multi-language app.
Who is it for?
Adding i18n to a multi-language app and finding untranslated strings
When should I use this skill?
Adding new languages, finding untranslated strings, or managing translation files
What you get
- translation files
- extracted i18n keys
- locale coverage report
By the numbers
- 10 numbered instruction steps
- 4 JS/React i18n frameworks listed
Files
Internationalization Helper
Helps manage internationalization (i18n) and localization (l10n) in multi-language applications.
When to Use
- User requests i18n support
- Adding new languages
- Finding untranslated strings
- Managing translation files
- User mentions "translation", "i18n", "l10n", "locale"
Instructions
1. Detect i18n Framework
JavaScript/React:
- react-i18next
- react-intl (FormatJS)
- i18next
- LinguiJS
Vue:
- vue-i18n
Python:
- gettext
- Django i18n
- Flask-Babel
Ruby/Rails:
- I18n gem (built-in)
Look for imports, config files, or translation directories.
2. Find Hardcoded Strings
Search for untranslated text:
// Bad: Hardcoded
<button>Submit</button>
<p>Welcome, {user.name}!</p>
// Good: Translated
<button>{t('common.submit')}</button>
<p>{t('welcome.message', { name: user.name })}</p>Search patterns:
- Strings in JSX/template tags
- Alert/error messages
- Form labels and placeholders
- Button text
- Validation messages
Exclude: code comments, console.log, test strings
3. Extract to Translation Files
React-i18next format (JSON):
{
"common": {
"submit": "Submit",
"cancel": "Cancel"
},
"welcome": {
"message": "Welcome, {{name}}!"
}
}Gettext format (.po):
msgid "submit_button"
msgstr "Submit"
msgid "welcome_message"
msgstr "Welcome, %(name)s!"4. Organize Translation Keys
Best practices:
- Namespace by feature:
users.profile.title - Group common strings:
common.buttons.save - Describe context, not content:
errors.login.invalidnoterrors.wrong_password - Consistent naming convention
5. Check Translation Coverage
Compare locale files to find missing translations:
en.json: 150 keys
es.json: 142 keys (missing 8)
fr.json: 150 keys ✓
Missing in es.json:
- users.profile.bio
- settings.privacy.title
[...]6. Handle Pluralization
Different languages have different plural rules:
// react-i18next
t('items', { count: 0 }) // "0 items"
t('items', { count: 1 }) // "1 item"
t('items', { count: 5 }) // "5 items"
// Translation file
{
"items_zero": "{{count}} items",
"items_one": "{{count}} item",
"items_other": "{{count}} items"
}7. Date, Time, Number Formatting
Use locale-aware formatting:
// Numbers
const price = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
}).format(29.99);
// Dates
const date = new Intl.DateTimeFormat('fr-FR').format(new Date());8. RTL (Right-to-Left) Support
For Arabic, Hebrew:
- CSS:
direction: rtl; - HTML:
<html dir="rtl"> - Logical properties:
margin-inline-startinstead ofmargin-left
9. Generate Translation Template
Create template for new locale:
# Copy keys from base language, empty values
cp locales/en.json locales/de.json
# Mark for translation10. Best Practices
- Keep translations in separate files
- Use keys, not source text as keys
- Provide context to translators
- Test with long strings (German often longer)
- Use ICU MessageFormat for complex strings
- Avoid concatenating translated strings
- Extract all user-facing text
Supporting Files
templates/i18n-config.js: Configuration examplestemplates/locale-file.json: Translation file template
{
"schema_version": "2.0",
"meta": {
"generated_at": "2026-01-16T23:42:32.923Z",
"slug": "crazydubya-internationalization-helper",
"source_url": "https://github.com/CrazyDubya/claude-skills/tree/main/internationalization-helper",
"source_ref": "main",
"model": "claude",
"analysis_version": "3.0.0",
"source_type": "community",
"content_hash": "05701ffbed65d4efff1a4492be10d20fa7339134777cc08bc056094dd8fad62a",
"tree_hash": "b532472a2fd9f1a9af3dd1bb086913edfc9210b8da444328fa045534f7b752ad"
},
"skill": {
"name": "internationalization-helper",
"description": "Extracts hardcoded strings for i18n, manages translation files, and ensures locale coverage. Use when working with multi-language apps, translations, or user mentions i18n, localization, or languages.",
"summary": "Extracts hardcoded strings for i18n, manages translation files, and ensures locale coverage. Use whe...",
"icon": "🌍",
"version": "1.0.0",
"author": "CrazyDubya",
"license": "MIT",
"category": "coding",
"tags": [
"i18n",
"localization",
"translation",
"internationalization",
"multilingual"
],
"supported_tools": [
"claude",
"codex",
"claude-code"
],
"risk_factors": [
"network",
"external_commands"
]
},
"security_audit": {
"risk_level": "safe",
"is_blocked": false,
"safe_to_publish": true,
"summary": "This skill is a pure documentation/prompt-based skill containing only instructions for internationalization tasks. The static scanner's 41 findings are all FALSE POSITIVES - the scanner misidentified SHA256 hashes as 'weak cryptographic algorithms,' GitHub URLs as 'network hardcoded URLs,' standard bash copy commands as 'external commands,' and i18n framework names as 'C2 keywords' and 'system reconnaissance.' This is a legitimate i18n guidance skill with no code execution capabilities.",
"risk_factor_evidence": [
{
"factor": "network",
"evidence": [
{
"file": "skill-report.json",
"line_start": 6,
"line_end": 6
}
]
},
{
"factor": "external_commands",
"evidence": [
{
"file": "SKILL.md",
"line_start": 45,
"line_end": 53
},
{
"file": "SKILL.md",
"line_start": 53,
"line_end": 67
},
{
"file": "SKILL.md",
"line_start": 67,
"line_end": 77
},
{
"file": "SKILL.md",
"line_start": 77,
"line_end": 80
},
{
"file": "SKILL.md",
"line_start": 80,
"line_end": 86
},
{
"file": "SKILL.md",
"line_start": 86,
"line_end": 91
},
{
"file": "SKILL.md",
"line_start": 91,
"line_end": 92
},
{
"file": "SKILL.md",
"line_start": 92,
"line_end": 93
},
{
"file": "SKILL.md",
"line_start": 93,
"line_end": 93
},
{
"file": "SKILL.md",
"line_start": 93,
"line_end": 100
},
{
"file": "SKILL.md",
"line_start": 100,
"line_end": 109
},
{
"file": "SKILL.md",
"line_start": 109,
"line_end": 115
},
{
"file": "SKILL.md",
"line_start": 115,
"line_end": 127
},
{
"file": "SKILL.md",
"line_start": 127,
"line_end": 133
},
{
"file": "SKILL.md",
"line_start": 133,
"line_end": 142
},
{
"file": "SKILL.md",
"line_start": 142,
"line_end": 147
},
{
"file": "SKILL.md",
"line_start": 147,
"line_end": 148
},
{
"file": "SKILL.md",
"line_start": 148,
"line_end": 149
},
{
"file": "SKILL.md",
"line_start": 149,
"line_end": 149
},
{
"file": "SKILL.md",
"line_start": 149,
"line_end": 155
},
{
"file": "SKILL.md",
"line_start": 155,
"line_end": 159
},
{
"file": "SKILL.md",
"line_start": 159,
"line_end": 172
},
{
"file": "SKILL.md",
"line_start": 172,
"line_end": 173
}
]
}
],
"critical_findings": [],
"high_findings": [],
"medium_findings": [],
"low_findings": [],
"dangerous_patterns": [],
"files_scanned": 3,
"total_lines": 400,
"audit_model": "claude",
"audited_at": "2026-01-16T23:42:32.923Z"
},
"content": {
"user_title": "Manage i18n and translation files automatically",
"value_statement": "Managing translations across multiple languages is time-consuming and error-prone. This skill streamlines i18n workflows by automatically extracting hardcoded strings and organizing translation files into proper structures.",
"seo_keywords": [
"i18n",
"internationalization",
"localization",
"translation",
"Claude",
"Claude Code",
"multilingual",
"react-i18next",
"gettext",
"multilingual apps"
],
"actual_capabilities": [
"Detects i18n frameworks in your codebase including react-i18next, gettext, and Rails I18n",
"Extracts hardcoded strings from JSX, templates, and source files",
"Creates organized translation key structures following best practices",
"Validates translation coverage across all locale files"
],
"limitations": [
"Does not perform automatic translation of strings",
"Requires manual review of extracted strings for accuracy",
"Limited to detecting supported i18n frameworks only"
],
"use_cases": [
{
"target_user": "Frontend developers",
"title": "Extract React strings",
"description": "Find hardcoded text in JSX and convert to translation keys for react-i18next projects."
},
{
"target_user": "Localization teams",
"title": "Audit translation coverage",
"description": "Compare locale files to identify missing translations and ensure complete language coverage."
},
{
"target_user": "Full-stack developers",
"title": "Add i18n to existing apps",
"description": "Add internationalization support to applications with hardcoded user-facing strings."
}
],
"prompt_templates": [
{
"title": "Extract hardcoded strings",
"scenario": "Finding untranslated text in React components",
"prompt": "Find all hardcoded strings in the src/components directory that need to be translated for i18n support."
},
{
"title": "Create translation keys",
"scenario": "Organizing extracted strings into translation files",
"prompt": "Convert these hardcoded strings into proper translation keys for a react-i18next project."
},
{
"title": "Check translation coverage",
"scenario": "Validating completeness across language files",
"prompt": "Compare all locale files in the translations directory and list any missing keys."
},
{
"title": "Set up i18n framework",
"scenario": "Configuring internationalization in a new project",
"prompt": "Help me set up react-i18next in my Next.js app with proper configuration and folder structure."
}
],
"output_examples": [
{
"input": "Find hardcoded strings in my React login form",
"output": [
"Found 5 hardcoded strings in LoginForm.jsx:",
"- Line 23: <h2>Log In</h2> → auth.login.title",
"- Line 34: <label>Email</label> → common.labels.email",
"- Line 42: <button>Sign In</button> → auth.login.submit",
"- Line 48: Invalid email or password → auth.errors.invalid_credentials",
"- Line 55: Forgot Password? → auth.login.forgot_password"
]
}
],
"best_practices": [
"Use descriptive key names that indicate context, not content",
"Group translations by feature or module for better organization",
"Always provide default values when using translation functions"
],
"anti_patterns": [
"Using source text as translation keys instead of semantic keys",
"Concatenating translated strings to form sentences",
"Hardcoding date, number, or currency formats"
],
"faq": [
{
"question": "Which i18n frameworks are supported?",
"answer": "React-i18next, react-intl, i18next, LinguiJS, vue-i18n, gettext, Django i18n, Flask-Babel, and Rails I18n."
},
{
"question": "Can it translate strings automatically?",
"answer": "No, this skill helps organize and structure translations but does not perform automatic translation."
},
{
"question": "How does it handle pluralization?",
"answer": "It recognizes pluralization patterns and creates appropriate keys like items_zero, items_one, items_other for different count values."
},
{
"question": "Will it modify my source code?",
"answer": "The skill provides guidance and examples but does not automatically modify code. You maintain full control over changes."
},
{
"question": "Can it work with existing translation files?",
"answer": "Yes, it can analyze existing locale files to check coverage and suggest improvements to key organization."
},
{
"question": "Does it support RTL languages?",
"answer": "Yes, it provides guidance for right-to-left languages including CSS direction properties and HTML dir attributes."
}
]
},
"file_structure": [
{
"name": "templates",
"type": "dir",
"path": "templates",
"children": [
{
"name": "locale-file.json",
"type": "file",
"path": "templates/locale-file.json",
"lines": 39
}
]
},
{
"name": "SKILL.md",
"type": "file",
"path": "SKILL.md",
"lines": 174
}
]
}
{
"common": {
"buttons": {
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"submit": "Submit"
},
"labels": {
"email": "Email",
"password": "Password",
"name": "Name"
}
},
"auth": {
"login": {
"title": "Log In",
"submit": "Sign In",
"forgot_password": "Forgot Password?"
},
"errors": {
"invalid_credentials": "Invalid email or password",
"account_locked": "Account has been locked"
}
},
"validation": {
"required": "{{field}} is required",
"email_invalid": "Please enter a valid email",
"password_min_length": "Password must be at least {{min}} characters"
},
"messages": {
"welcome": "Welcome, {{name}}!",
"items_count_zero": "No items",
"items_count_one": "{{count}} item",
"items_count_other": "{{count}} items"
}
}