Agent skill
i18n-date-patterns
Implements internationalization (i18n) in React applications. Covers user-facing strings, date/time handling, locale-aware formatting, ICU MessageFormat, and RTL support. Use when building multilingual UIs or formatting dates/currency.
Install this agent skill to your Project
npx add-skill https://github.com/yonatangross/orchestkit/tree/main/plugins/ork/skills/i18n-date-patterns
Metadata
Additional technical details for this skill
- category
- document-asset-creation
SKILL.md
i18n and Localization Patterns
Overview
This skill provides comprehensive guidance for implementing internationalization in React applications. It ensures ALL user-facing strings, date displays, currency, lists, and time calculations are locale-aware.
When to use this skill:
- Adding ANY user-facing text to components
- Formatting dates, times, currency, lists, or ordinals
- Implementing complex pluralization
- Embedding React components in translated text
- Supporting RTL languages (Hebrew, Arabic)
Bundled Resources (load with Read("${CLAUDE_SKILL_DIR}/<path>")):
references/formatting-utilities.md- useFormatting hook API referencereferences/icu-messageformat.md- ICU plural/select syntaxreferences/trans-component.md- Trans component for rich textchecklists/i18n-checklist.md- Implementation and review checklistexamples/component-i18n-example.md- Complete component example
Canonical Reference: See docs/i18n-standards.md for the full i18n standards document.
Core Patterns
1. useTranslation Hook (All UI Strings)
Every visible string MUST use the translation function:
import { useTranslation } from 'react-i18next';
function MyComponent() {
const { t } = useTranslation(['patients', 'common']);
return (
<div>
<h1>{t('patients:title')}</h1>
<button>{t('common:actions.save')}</button>
</div>
);
}
2. useFormatting Hook (Locale-Aware Data)
All locale-sensitive formatting MUST use the centralized hook:
import { useFormatting } from '@/hooks';
function PriceDisplay({ amount, items }) {
const { formatILS, formatList, formatOrdinal } = useFormatting();
return (
<div>
<p>Price: {formatILS(amount)}</p> {/* ₪1,500.00 */}
<p>Items: {formatList(items)}</p> {/* "a, b, and c" */}
<p>Position: {formatOrdinal(3)}</p> {/* "3rd" */}
</div>
);
}
Load Read("${CLAUDE_SKILL_DIR}/references/formatting-utilities.md") for the complete API.
3. Date Formatting
All dates MUST use the centralized @/lib/dates library:
import { formatDate, formatDateShort, calculateWaitTime } from '@/lib/dates';
const date = formatDate(appointment.date); // "Jan 6, 2026"
const waitTime = calculateWaitTime('09:30'); // "15 min"
4. ICU MessageFormat (Complex Plurals)
Use ICU syntax in translation files for pluralization:
{
"patients": "{count, plural, =0 {No patients} one {# patient} other {# patients}}"
}
t('patients', { count: 5 }) // → "5 patients"
Load Read("${CLAUDE_SKILL_DIR}/references/icu-messageformat.md") for full syntax.
5. Trans Component (Rich Text)
For embedded React components in translated text:
import { Trans } from 'react-i18next';
<Trans
i18nKey="richText.welcome"
values={{ name: userName }}
components={{ strong: <strong /> }}
/>
Load Read("${CLAUDE_SKILL_DIR}/references/trans-component.md") for patterns.
Translation File Structure
frontend/src/i18n/locales/
├── en/
│ ├── common.json # Shared: actions, status, time
│ ├── patients.json # Patient-related strings
│ ├── dashboard.json # Dashboard strings
│ ├── owner.json # Owner portal strings
│ └── invoices.json # Invoice strings
└── he/
└── (same structure)
Anti-Patterns (FORBIDDEN)
// ❌ NEVER hardcode strings
<h1>מטופלים</h1> // Use t('patients:title')
<button>Save</button> // Use t('common:actions.save')
// ❌ NEVER use .join() for lists
items.join(', ') // Use formatList(items)
// ❌ NEVER hardcode currency
"₪" + price // Use formatILS(price)
// ❌ NEVER use new Date() for formatting
new Date().toLocaleDateString() // Use formatDate() from @/lib/dates
// ❌ NEVER use inline plural logic
count === 1 ? 'item' : 'items' // Use ICU MessageFormat
// ❌ NEVER leave console.log in production
console.log('debug') // Remove before commit
// ❌ NEVER use dangerouslySetInnerHTML for i18n
dangerouslySetInnerHTML // Use <Trans> component
Quick Reference
| Need | Solution |
|---|---|
| UI text | t('namespace:key') from useTranslation |
| Currency | formatILS(amount) from useFormatting |
| Lists | formatList(items) from useFormatting |
| Ordinals | formatOrdinal(n) from useFormatting |
| Dates | formatDate(date) from @/lib/dates |
| Plurals | ICU MessageFormat in translation files |
| Rich text | <Trans> component |
| RTL check | isRTL from useFormatting |
Checklist
Load Read("${CLAUDE_SKILL_DIR}/checklists/i18n-checklist.md") for complete implementation and review checklists.
Integration with Agents
Frontend UI Developer
- Uses all i18n patterns for components
- References this skill for formatting
- Ensures no hardcoded strings
Code Quality Reviewer
- Checks for anti-patterns (
.join(),console.log, etc.) - Validates translation key coverage
- Ensures RTL compatibility
Skill Version: 1.2.0 Last Updated: 2026-01-06 Maintained by: Yonatan Gross
Related Skills
ork:testing-e2e- E2E testing patterns including accessibility testing for i18ntype-safety-validation- Zod schemas for validating translation key structures and locale configsork:react-server-components-framework- Server-side locale detection and RSC i18n patternsork:accessibility- RTL-aware focus management for bidirectional UI navigation
Key Decisions
| Decision | Choice | Rationale |
|---|---|---|
| Translation Library | react-i18next | React-native hooks, namespace support, ICU format |
| Date Library | dayjs | Lightweight, locale plugins, immutable API |
| Message Format | ICU MessageFormat | Industry standard, complex plural/select support |
| Locale Storage | Per-namespace JSON | Code-splitting, lazy loading per feature |
| RTL Detection | CSS logical properties | Native browser support, no JS overhead |
Capability Details
translation-hooks
Keywords: useTranslation, t(), i18n hook, translation hook Solves:
- Translate UI strings with useTranslation
- Implement namespaced translations
- Handle missing translation keys
formatting-hooks
Keywords: useFormatting, formatCurrency, formatList, formatOrdinal Solves:
- Format currency values with locale
- Format lists with proper separators
- Handle ordinal numbers across locales
icu-messageformat
Keywords: ICU, MessageFormat, plural, select, pluralization Solves:
- Implement pluralization rules
- Handle gender-specific translations
- Build complex message patterns
date-time-formatting
Keywords: date format, time format, dayjs, locale date, calendar Solves:
- Format dates with dayjs and locale
- Handle timezone-aware formatting
- Build calendar components with i18n
rtl-support
Keywords: RTL, right-to-left, hebrew, arabic, direction Solves:
- Support RTL languages like Hebrew
- Handle bidirectional text
- Configure RTL-aware layouts
trans-component
Keywords: Trans, rich text, embedded JSX, interpolation Solves:
- Embed React components in translations
- Handle rich text formatting
- Implement safe HTML in translations
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
expect
Diff-aware AI browser testing — analyzes git changes, generates targeted test plans, and executes them via agent-browser. Reads git diff to determine what changed, maps changes to affected pages via route map, generates a test plan scoped to the diff, and runs it with pass/fail reporting. Use when testing UI changes, verifying PRs before merge, running regression checks on changed components, or validating that recent code changes don't break the user-facing experience.
github-operations
GitHub CLI operations for issues, PRs, milestones, and Projects v2. Covers gh commands, REST API patterns, and automation scripts. Use when managing GitHub issues, PRs, milestones, or Projects with gh.
chain-patterns
Chain patterns for CC 2.1.71 pipelines — MCP detection, handoff files, checkpoint-resume, worktree agents, CronCreate monitoring. Use when building multi-phase pipeline skills. Loaded via skills: field by pipeline skills (fix-issue, implement, brainstorm, verify). Not user-invocable.
storybook-mcp-integration
Storybook MCP server integration for component-aware AI development. Covers 6 tools across 3 toolsets (dev, docs, testing): component discovery via list-all-documentation/get-documentation, story previews via preview-stories, and automated testing via run-story-tests. Use when generating components that should reuse existing Storybook components, running component tests via MCP, or previewing stories in chat.
component-search
Search 21st.dev component registry for production-ready React components. Finds components by natural language description, filters by framework and style system, returns ranked results with install instructions. Use when looking for UI components, finding alternatives to existing components, or sourcing design system building blocks.
ai-ui-generation
AI-assisted UI generation patterns for json-render, v0, Bolt, and Cursor workflows. Covers prompt engineering for component generation, review checklists for AI-generated code, design token injection, refactoring for design system conformance, and CI gates for quality assurance. Use when generating UI components with AI tools, rendering multi-surface MCP visual output, reviewing AI-generated code, or integrating AI output into design systems.
Didn't find tool you were looking for?