Skip to content
Back to skills

Internationalization

ASecurity

i18n/l10n implementation for multi-language support. Use for translation setup, RTL support, and locale-aware formatting.

  • 33 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 10, 2026
developmentjavascripttypescriptjavabashreactnextjs

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned February 10, 2026

npx -y skills add lovedragonball/power-ranger-toolkit --skill internationalization --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Internationalization?

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

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

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
description: i18n/l10n implementation for multi-language support. Use for translation setup, RTL support, and locale-aware formatting.
---

# 🌍 Internationalization (i18n) Skill

## Setup

### Next.js (next-intl)
```bash
npm install next-intl
```

```typescript
// messages/en.json
{
  "home": {
    "title": "Welcome",
    "greeting": "Hello, {name}!"
  }
}

// messages/th.json
{
  "home": {
    "title": "ยินดีต้อนรับ",
    "greeting": "สวัสดี, {name}!"
  }
}
```

### React (react-i18next)
```bash
npm install react-i18next i18next
```

```typescript
import { useTranslation } from 'react-i18next';

function Welcome() {
  const { t } = useTranslation();
  return <h1>{t('home.title')}</h1>;
}
```

---

## Translation Best Practices

### Do's ✅
```json
{
  "items_count": "{count, plural, one {# item} other {# items}}",
  "greeting": "Hello, {name}!",
  "date_format": "{date, date, medium}"
}
```

### Don'ts ❌
```javascript
// Don't concatenate strings
const message = t('hello') + ' ' + name;  // ❌

// Do use interpolation
const message = t('greeting', { name }); // ✅
```

---

## Number & Date Formatting

```javascript
// Numbers
new Intl.NumberFormat('th-TH', {
  style: 'currency',
  currency: 'THB'
}).format(1234.56);
// "฿1,234.56"

// Dates
new Intl.DateTimeFormat('th-TH', {
  dateStyle: 'long'
}).format(new Date());
// "15 มกราคม 2569"

// Relative time
new Intl.RelativeTimeFormat('th', { numeric: 'auto' })
  .format(-1, 'day');
// "เมื่อวาน"
```

---

## RTL Support

```css
/* Use logical properties */
.container {
  /* Instead of margin-left/right */
  margin-inline-start: 1rem;
  margin-inline-end: 2rem;
  
  /* Instead of padding-left/right */
  padding-inline: 1rem;
  
  /* Instead of text-align: left */
  text-align: start;
}

/* RTL-specific styles */
[dir="rtl"] .icon-arrow {
  transform: scaleX(-1);
}
```

```html
<html lang="ar" dir="rtl">
```

---

## Locale Detection

```typescript
// Browser detection
const locale = navigator.language; // "th-TH"

// Accept-Language header
app.use((req, res, next) => {
  const locale = req.acceptsLanguages('th', 'en') || 'en';
  req.locale = locale;
  next();
});
```

---

## Translation Workflow

```
1. Extract strings → i18n keys
2. Create base locale (en.json)
3. Send to translators
4. Import translations
5. Test all locales
6. Handle missing translations
```

## Checklist

- [ ] Set up i18n library
- [ ] Create translation files
- [ ] Handle pluralization
- [ ] Format dates/numbers
- [ ] Support RTL if needed
- [ ] Add language switcher
- [ ] Test all locales
- [ ] Handle missing keys

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…