Agent skill

I18n

by hackers-pub in hackers-pub/hackerspub

Fill in missing translations in web-next .po files, add i18n-aware UI labels to components, and ensure translation quality — consistent glossary terminology, correct punctuation/typography per…

AGPL-3.0Auto-check passedFrontend & Design

Install I18n

skills CLI
$ npx skills add hackers-pub/hackerspub --skill i18n -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install hackers-pub/hackerspub i18n --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/hackers-pub/hackerspub.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/i18n .claude/skills/i18n && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
i18n
GitHub stars
165
Token cost
~2.5k tokens
SKILL.md length
836 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Fill in missing translations in web-next .po files, add i18n-aware UI labels to components, and ensure translation quality — consistent glossary terminology, correct punctuation/typography per…

  • Works in 4 steps: Run cd web-next && pnpm extract to… → For each locale, read the mandatory… → Fill every empty msgstr "" with a… → …
  • Translating UI labels
  • Calls pnpm
  • Reviewing translations

What it does

I18n is an agent skill from hackers-pub/hackerspub. Fill in missing translations in web-next .po files, add i18n-aware UI labels to components, and ensure translation quality — consistent glossary terminology, correct punctuation/typography per language, proper formality levels, and placeholder preservation. Use when translating UI labels, reviewing translations, managing glossaries, or adding new translatable strings to components.

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Translation and Internationalization. The repository describes itself as: ActivityPub-enabled social network for hackers. The licence is AGPL-3.0.

When your agent uses it

  • Translating UI labels
  • Reviewing translations
  • Managing glossaries
  • Adding new translatable strings to components

Example prompts

  • “/i18n”

Requirements

  • Pre-approved tools (allowed-tools): Read, Edit, Write, Grep, Glob, Agent, AskUserQuestion

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Run cd web-next && pnpm extract to update .po files.
  2. For each locale, read the mandatory terminology in
  3. Fill every empty msgstr "" with a translation that follows all rules
  4. After translating, review existing non-empty msgstr entries for rule

What it can do on your machine

Read from SKILL.md and the folder at commit 45b039b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Edit
    • Write
    • Grep
    • Glob
    • Agent
    • AskUserQuestion

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

I18n loads about 2.5k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 836 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~98
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from hackers-pub/hackerspub at commit 45b039b, republished under its AGPL-3.0 licence (© hackers-pub). 836 words, ~2,512 tokens.

Download SKILL.mdSave it as .claude/skills/i18n/SKILL.md (or your agent's skills folder).
name
i18n
description
Fill in missing translations in web-next .po files, add i18n-aware UI labels to components, and ensure translation quality — consistent glossary terminology, correct punctuation/typography per language, proper formality levels, and placeholder preservation. Use when translating UI labels, reviewing translations, managing glossaries, or adding new translatable strings to components.
allowed-tools
Read, Edit, Write, Grep, Glob, Agent, AskUserQuestion

Translation & i18n skill

Fill in missing translations (msgstr "") in all web-next/src/locales/*/messages.po files and ensure every translation meets the quality standards below.

Adding translatable strings to components

Import from ~/lib/i18n/macro.ts. Always call useLingui() at the top of the component to get the translation helpers.

Simple text
tsx
import { useLingui } from "~/lib/i18n/macro.ts";

function MyComponent() {
  const { t } = useLingui();
  return <Button>{t`Save`}</Button>;
}

t works in JSX children, attributes, and any expression context:

tsx
<Button title={t`Reply`}>…</Button>
<TextFieldLabel>{t`Content`}</TextFieldLabel>
placeholder={t`Search a language…`}
aria-label={t`Language`}
Variable interpolation

Embed runtime values directly in the template literal:

tsx
const { t } = useLingui();
t`Failed to sign out: ${error.message}`
t`To follow ${displayName()}, enter your Fediverse handle.`
Translations with JSX elements (Trans component)

When a translation needs inline JSX (links, bold, components), use the <Trans> component from ~/components/Trans.tsx. Placeholder keys use SCREAMING_SNAKE_CASE:

tsx
import { Trans } from "~/components/Trans.tsx";
import { useLingui } from "~/lib/i18n/macro.ts";

function MyComponent() {
  const { t } = useLingui();
  return (
    <Trans
      message={t`Verified that this link is owned by ${"OWNER"} ${"RELATIVE_TIME"}`}
      values={{
        OWNER: () => <strong>{actor().name}</strong>,
        RELATIVE_TIME: () => <Timestamp value={verified()} />,
      }}
    />
  );
}
Pluralization

Use i18n._(msg…) combined with plural(). The # symbol is replaced with the count:

tsx
import { msg, plural, useLingui } from "~/lib/i18n/macro.ts";

function FollowerCount(props: { count: number }) {
  const { i18n } = useLingui();
  return (
    <span>
      {i18n._(
        msg`${
          plural(props.count, {
            one: "# follower",
            other: "# followers",
          })
        }`,
      )}
    </span>
  );
}
Accessing the current locale

Use i18n.locale for locale-aware formatting (e.g., Intl APIs):

tsx
const { i18n } = useLingui();
date.toLocaleString(i18n.locale, { dateStyle: "full" })

Extracting messages

Before translating, run the extraction command to ensure .po files are up to date with the latest source code:

sh
cd web-next && pnpm extract

This runs the extract script from web-next/package.json (lingui extract), which scans web-next/src/ for translatable strings (t`...`, msg`...`, plural(...)) and updates all web-next/src/locales/*/messages.po files. New strings appear as entries with empty msgstr "".

Run this before starting translation work to pick up any newly added or changed strings.

Workflow

  1. Run cd web-next && pnpm extract to update .po files.
  2. For each locale, read the mandatory terminology in web-next/src/locales/{locale}/glossary.txt and review nearby existing entries in messages.po for product voice and context.
  3. Fill every empty msgstr "" with a translation that follows all rules below.
  4. After translating, review existing non-empty msgstr entries for rule violations and fix them too.

Glossary enforcement

  • Always use the exact term from glossary.txt when the source text contains a glossary term.
  • If you encounter a term that should be standardized but is not in the glossary, ask the user via AskUserQuestion whether to add it.
  • If the user agrees, add the entry to every locale's glossary.txt in the format term → translation (one per line, sorted alphabetically).

Punctuation & typography

All languages
RuleCorrectWrong
Ellipsis… (U+2026)...
Em dash— (U+2014)--
CasingSentence caseTitle Case
en-US
  • Quotation marks: " " (curly double), ' ' (curly single)
  • Standard English punctuation rules
  • Use sentence case for buttons, links, labels, headings, tabs, menu items, placeholders, and other UI strings. Do not use title case unless the text is a proper noun, brand name, protocol name, acronym, or another term that is conventionally capitalized. For example, write Create note, Save draft, and Remote follow, not Create Note, Save Draft, or Remote Follow.
ja-JP
  • Quotation marks: 「」(single), 『』(double/nested)
  • Fullwidth punctuation: 。 、 ! ?
  • No space before/after punctuation
ko-KR
  • Quotation marks: 「」(single), 『』(double/nested)
  • Period: halfwidth . (not fullwidth 。 — this is Korean standard)
  • Comma, exclamation, question: , ! ? (halfwidth, Korean standard)
  • No space before punctuation
zh-CN
  • Quotation marks: 「」(single), 『』(double/nested)
  • Fullwidth punctuation: 。 、 ! ?
  • No space before/after punctuation
zh-TW
  • Quotation marks: 「」(single), 『』(double/nested)
  • Fullwidth punctuation: 。 、 ! ?
  • No space before/after punctuation

Formality & tone

LocaleStyle
ko-KR합쇼체(~합니다) 기본. 리듬감을 위해 가끔 해요체 허용.
ja-JPです/ます form for UI text
en-USNeutral, professional
zh-CN简体中文标准用语
zh-TW繁體中文標準用語
Show full SKILL.md (364 more words)Show less

CJK-Latin spacing

When Latin characters (English words, brand names, numbers) appear next to CJK characters, follow these language-specific rules:

LocaleRuleExample
ja-JPNo space — particles attach directlyGitHubリポジトリ, Markdownを使用
ko-KRSpace before Latin text; particles attach to LatinGitHub 저장소, Markdown을 사용
zh-CNSpace on both sides of Latin text启用了 ActivityPub 的社交网络
zh-TWSpace on both sides of Latin text啟用了 ActivityPub 的社交網路

Brand names & proper nouns

Never translate brand names or protocol names. Keep them as-is:

  • Hackers' Pub, GitHub, Mastodon, Misskey, Pixelfed
  • ActivityPub, Markdown, WebFinger

For “fediverse”, follow glossary — some languages use a localized term (ja-JP: フェディバース, ko-KR: 연합우주) while others keep the original.

Terminal punctuation by UI element

UI elementPunctuation
Button / action labelNo trailing punctuation in any language
Menu itemNo trailing punctuation
Description / help textEnd with period (en: ., ja: 。, ko: ., zh: 。)
Question / confirmationEnd with question mark (en: ?, ja: ?, ko: ?, zh: ?)
Title / headingNo trailing punctuation

For English UI elements, combine the punctuation rule with sentence case: Load more, Edit draft, and Permission denied are correct; title-case variants such as Load More, Edit Draft, and Permission Denied are not.

Escape sequences

  • Preserve \n line breaks from msgid exactly in msgstr.
  • Use \n\n for paragraph breaks (e.g., in email content).
  • Never convert \n to literal newlines or vice versa.

Gender-neutral language

  • en-US: Use “they/their” for third-person singular when gender is unknown. Prefer second person “you/your” where natural.
  • ja-JP: Use honorific “さん” for person references.
  • ko-KR / zh-CN / zh-TW: These languages are largely gender-neutral by default; avoid unnecessarily gendered terms.

Placeholder & syntax rules

  • Preserve all placeholders ({0}, {1}, #, etc.) exactly as they appear in msgid.
  • Preserve ICU MessageFormat syntax (plural, select, selectordinal) exactly—only translate the human-readable parts inside.
  • Never translate placeholder variable names or format specifiers.

Quality checklist

Before finishing, verify each translation:

  • Glossary terms match glossary.txt exactly
  • Punctuation follows the locale-specific rules above
  • CJK-Latin spacing follows the locale-specific rules
  • Brand names are kept as-is, not translated
  • Terminal punctuation matches UI element type
  • All placeholders from msgid are present in msgstr
  • ICU MessageFormat syntax is valid
  • Escape sequences (\n) are preserved
  • Formality level matches the locale convention
  • Gender-neutral language is used
  • Translation is concise and natural for UI context

© hackers-pub, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/i18n of hackers-pub/hackerspub.

Open the folder on GitHubat commit 45b039b

Compare with similar skills

I18n next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

I18n compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
I18n this skillhackers-pub/hackerspub165—~2.5kAutomated safety check: PassAGPL-3.0
Chatbox i18n Translatorchatboxai/chatbox42k—~508Automated safety check: PassGPL-3.0
Enforce Rules For I18nmoeru-ai/airi50k—~1.5kAutomated safety check: PassMIT
Translation ReviewDevolutions/UniGetUI26k—~1.3kAutomated safety check: PassMIT
Lingui Best PracticesB0und/WikiSpeedrun1332 repos~4.2kAutomated safety check: PassMIT
Ok Script I18nAliceJump/ok-end-field555—~828Automated safety check: PassAGPL-3.0

Similar skills

  • Chatbox i18n Translator

    chatboxai/chatbox

    Translates new or changed i18n keys from a Chatbox Pro diff, staged changes or a commit range, writing the locale JSON files directly with a built-in glossary.

    42k GitHub stars~508 tokensUpdated 15 days ago
    Frontend & DesignAuto-check passed
  • Review pending AIRI translations on Crowdin in a batch, then sync them into the repository.

    50k GitHub stars~1.5k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Translation Review

    Devolutions/UniGetUI

    Reviews UniGetUI .json language files for localization quality, detects parity issues, English-equal entries, wrong-script content, and cross-language outliers, then generates a dataset for…

    26k GitHub stars~1.3k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Lingui Best Practices

    B0und/WikiSpeedrun

    Implement internationalization with Lingui in React and JavaScript applications.

    133 GitHub starsUsed in 2 repos~4.2k tokens
    Frontend & DesignAuto-check passed
  • Ok Script I18n

    AliceJump/ok-end-field

    Maintain gettext translations for ok-script task UI and runtime messages.

    555 GitHub stars~828 tokensUpdated today
    Frontend & DesignAuto-check passed
  • I18next Localization

    i18next/i18next-cli

    Takes an app from hardcoded strings to a localized, continuously translated one with i18next (Locize optional): stack detection, config, wrapping strings in t(), key extraction, Locize sync, and AI…

    241 GitHub stars~1.6k tokensUpdated today
    Frontend & DesignAuto-check passed

More from hackers-pub/hackerspub

  • Graphql Schema Design

    hackers-pub/hackerspub

    GraphQL schema design and review. An agent skill from hackers-pub/hackerspub.

    165 GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Relay Best Practices

    hackers-pub/hackerspub

    Best practices for writing idiomatic Relay code. An agent skill from hackers-pub/hackerspub.

    165 GitHub stars~4.6k tokensUpdated today
    Auto-check passed
  • Relay Performance

    hackers-pub/hackerspub

    Performance best practices for Relay applications. An agent skill from hackers-pub/hackerspub.

    165 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Commit

    hackers-pub/hackerspub

    Make a commit in Git with an appropriate commit message for the currently staged changes.

    165 GitHub starsUsed in 1 repo~485 tokens
    Auto-check passed

Questions about I18n

What does I18n do?

Fill in missing translations in web-next .po files, add i18n-aware UI labels to components, and ensure translation quality — consistent glossary terminology, correct punctuation/typography per…. I18n is an agent skill from hackers-pub/hackerspub.po files, add i18n-aware UI labels to components, and ensure translation quality — consistent glossary terminology, correct punctuation/typography per language, proper formality levels, and placeholder preservation.

When should I use I18n?

I18n fits situations like: translating UI labels; reviewing translations; managing glossaries; adding new translatable strings to components.

How do I install I18n in Claude Code?

Run `npx skills add hackers-pub/hackerspub --skill i18n -a claude-code`. Or copy the skill folder (.agents/skills/i18n in hackers-pub/hackerspub) into .claude/skills/i18n in your project. Claude Code loads it when a task matches its description.

How do I install I18n in Codex?

Run `npx skills add hackers-pub/hackerspub --skill i18n -a codex`. Or copy the skill folder (.agents/skills/i18n in hackers-pub/hackerspub) into .agents/skills/i18n in your project. Codex loads it when a task matches its description.

Can I use I18n in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hackers-pub/hackerspub --skill i18n -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/i18n, .gemini/skills/i18n, .github/skills/i18n and .opencode/skills/i18n in your project.

What does I18n need to run?

Going by SKILL.md and its folder, I18n needs the command-line tools its instructions call (pnpm). Its frontmatter pre-approves these tools: Read, Edit, Write, Grep, Glob, Agent, AskUserQuestion.

Does I18n access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is I18n safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does I18n use?

I18n is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does I18n use?

About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to I18n?

Skills that share tags, products or a category with I18n: Chatbox i18n Translator (chatboxai/chatbox, 42k stars), Enforce Rules For I18n (moeru-ai/airi, 50k stars), Translation Review (Devolutions/UniGetUI, 26k stars) and Lingui Best Practices (B0und/WikiSpeedrun, 133 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains I18n?

hackers-pub (a GitHub organization) maintains it in hackers-pub/hackerspub, which has 165 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 9, 2026.

Source: hackers-pub/hackerspub on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.