Skip to content
Back to skills

Internationalization Helper

ASecurity

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.

  • 416 stars
  • 0 votes
  • 0 copies
  • 9 views
  • Added February 7, 2026
developmentjavascriptpythongojavarubybashreactvuedjangoflask

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned February 12, 2026

npx -y skills add aiskillstore/marketplace --skill internationalization-helper --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Internationalization Helper?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Internationalization Helper
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aiskillstore-internationalization-helper/badge)](https://www.skillsdirectory.com/skills/aiskillstore-internationalization-helper)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.
allowed-tools: Read, Grep, Glob, Write, Edit
---

# 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:

```javascript
// 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):**
```json
{
  "common": {
    "submit": "Submit",
    "cancel": "Cancel"
  },
  "welcome": {
    "message": "Welcome, {{name}}!"
  }
}
```

**Gettext format (.po):**
```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.invalid` not `errors.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:

```javascript
// 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:

```javascript
// 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-start` instead of `margin-left`

### 9. Generate Translation Template

Create template for new locale:

```bash
# Copy keys from base language, empty values
cp locales/en.json locales/de.json
# Mark for translation
```

### 10. 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 examples
- `templates/locale-file.json`: Translation file template

Files in this skill

  • SKILL.md3.6 KB
  • skill-report.json10.5 KB
  • templates/locale-file.json896 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.