跳到主要内容
知仓学习社ZHICANG

i18n-localization

Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support.

不碰外部(只输出文字)无严重或高危命中sickn33/agentic-awesome-skills

它会碰到什么

扫了多少2 个文本文件,11 KB
它会碰到什么不碰外部(只输出文字)
命中总数0 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

i18n & Localization

> Internationalization (i18n) and Localization (L10n) best practices.


1. Core Concepts

| Term | Meaning |

|------|---------|

| i18n | Internationalization - making app translatable |

| L10n | Localization - actual translations |

| Locale | Language + Region (en-US, tr-TR) |

| RTL | Right-to-left languages (Arabic, Hebrew) |


2. When to Use i18n

| Project Type | i18n Needed? |

|--------------|--------------|

| Public web app | ✅ Yes |

| SaaS product | ✅ Yes |

| Internal tool | ⚠️ Maybe |

| Single-region app | ⚠️ Consider future |

| Personal project | ❌ Optional |


3. Implementation Patterns

React (react-i18next)

import { useTranslation } from 'react-i18next';

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

Next.js (next-intl)

import { useTranslations } from 'next-intl';

export default function Page() {
  const t = useTranslations('Home');
  return <h1>{t('title')}</h1>;
}

Python (gettext)

from gettext import gettext as _

print(_("Welcome to our app"))

4. File Structure

locales/
├── en/
│   ├── common.json
│   ├── auth.json
│   └── errors.json
├── tr/
│   ├── common.json
│   ├── auth.json
│   └── errors.json
└── ar/          # RTL
    └── ...

5. Best Practices

DO ✅

  • Use translation keys, not raw text
  • Namespace translations by feature
  • Support pluralization
  • Handle date/number formats per locale
  • Plan for RTL from the start
  • Use ICU message format for complex strings

DON'T ❌

  • Hardcode strings in components
  • Concatenate translated strings
  • Assume text length (German is 30% longer)
  • Forget about RTL layout
  • Mix languages in same file

6. Common Issues

| Issue | Solution |

|-------|----------|

| Missing translation | Fallback to default language |

| Hardcoded strings | Use linter/checker script |

| Date format | Use Intl.DateTimeFormat |

| Number format | Use Intl.NumberFormat |

| Pluralization | Use ICU message format |


7. RTL Support

/* CSS Logical Properties */
.container {
  margin-inline-start: 1rem;  /* Not margin-left */
  padding-inline-end: 1rem;   /* Not padding-right */
}

[dir="rtl"] .icon {
  transform: scaleX(-1);
}

8. Checklist

Before shipping:

  • [ ] All user-facing strings use translation keys
  • [ ] Locale files exist for all supported languages
  • [ ] Date/number formatting uses Intl API
  • [ ] RTL layout tested (if applicable)
  • [ ] Fallback language configured
  • [ ] No hardcoded strings in components

Script

| Script | Purpose | Command |

|--------|---------|---------|

| scripts/i18n_checker.py | Detect hardcoded strings & missing translations | python scripts/i18n_checker.py <project_path> |

When to Use

This skill is applicable to execute the workflow or actions described in the overview.

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

同名技能的其他版本

有 4 个不同仓库或目录里都有叫 i18n-localization 的技能。它们内容并不相同,别混用: