Agent skill

Inlang I18n

by aidenlx in aidenlx/zotlit

Define ZotLit UI messages in the Inlang Message Format and consume them through the generated JSON Language Pack facade.

AGPL-3.0Auto-check passedFrontend & Design

Install Inlang I18n

skills CLI
$ npx skills add aidenlx/zotlit --skill inlang-i18n -a claude-code

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

GitHub CLI
$ gh skill install aidenlx/zotlit inlang-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/aidenlx/zotlit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/inlang-i18n .claude/skills/inlang-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
inlang-i18n
GitHub stars
1k
Token cost
~1k tokens
SKILL.md length
315 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Define ZotLit UI messages in the Inlang Message Format and consume them through the generated JSON Language Pack facade.

  • Works in 3 steps: Add or edit the key in messages/en.json.… → Regenerate the facade when running… → Import the facade and keep named-input…
  • Editing messages/.json
  • SKILL.md covers Project layout, Adding or changing a message, Inlang Message Format and Locale behavior
  • Calls pnpm

What it does

Inlang I18n is an agent skill from aidenlx/zotlit. Define ZotLit UI messages in the Inlang Message Format and consume them through the generated JSON Language Pack facade. Use when editing messages/.json, adding interpolation or variants, changing locale resolution, or working with m. calls.

Its SKILL.md is about 1k 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 Internationalization. It works with Obsidian. The repository describes itself as: Bring your Zotero library into Obsidian. Create literature notes, insert citations, and annotate PDFs without leaving your vault. The licence is AGPL-3.0.

When your agent uses it

  • Editing messages/.json
  • Adding interpolation
  • Changing locale resolution

Example prompts

  • “/inlang-i18n”

Workflow steps

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

  1. Add or edit the key in messages/en.json. Use snake_case; keys prefixed
  2. Regenerate the facade when running package tools directly.
  3. Import the facade and keep named-input call shapes

What it can do on your machine

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

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    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

Inlang I18n loads about 1k tokens when it runs. Until then it costs about 64 tokens; SKILL.md has 315 words of instructions outside code blocks.

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

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 aidenlx/zotlit at commit 27f5752, republished under its AGPL-3.0 licence (© aidenlx). 315 words, ~1,014 tokens.

Download SKILL.mdSave it as .claude/skills/inlang-i18n/SKILL.md (or your agent's skills folder).
name
inlang-i18n
description
Define ZotLit UI messages in the Inlang Message Format and consume them through the generated JSON Language Pack facade. Use when editing messages/*.json, adding interpolation or variants, changing locale resolution, or working with m.* calls.
paths
messages/*.json

Inlang messages + JSON Language Packs

Use messages/{locale}.json as the source of truth. The Obsidian build compiles those sources into a typed message facade and bundled English Language Pack; the runtime interprets pack data synchronously.

Pair this skill with /i18n-ui-text when writing English UI copy.

Project layout

  • project.inlang/settings.json — Inlang project configuration, base locale, and locale list.
  • messages/{locale}.json — shared message sources.
  • apps/obsidian/scripts/generate-language-packs.ts — compiler entry point.
  • apps/obsidian/src/lib/i18n/generated/messages.ts — generated typed facade.
  • apps/obsidian/src/lib/i18n/generated/en.json — bundled English pack.
  • apps/obsidian/src/lib/i18n/runtime.ts — eval-free interpreter.
  • apps/obsidian/src/lib/i18n.ts — Obsidian Locale Alias resolution and startup.

Generated files are gitignored. Run:

sh
pnpm --filter @zotlit/obsidian generate:language-packs

Turbo runs generation before typecheck and tests. Vite regenerates at build start and watches the message sources, project settings, and generator.

Adding or changing a message

  1. Add or edit the key in messages/en.json. Use snake_case; keys prefixed docs_ belong only to the docs site and are excluded from plugin artifacts.
  2. Regenerate the facade when running package tools directly.
  3. Import the facade and keep named-input call shapes:
ts
import * as m from "@/lib/i18n/generated/messages";

m.welcome_view_name();
m.annot_view_filter_count({ shown: 3, total: 8 });

Input-free messages are functions with no arguments. Input-bearing messages take one object whose required properties come from input declarations.

Inlang Message Format

Simple messages
json
{
  "hello_world": "Hello world",
  "greeting": "Good morning {name}!"
}

Variables use {curlyBraces}. Escape literal braces with \\{ and \\} in JSON.

Variants

Wrap structured messages in an array:

json
{
  "item_count": [
    {
      "declarations": ["input count", "local category = count: plural"],
      "selectors": ["category"],
      "match": {
        "category=one": "There is one item.",
        "category=*": "There are {count} items."
      }
    }
  ]
}

Declarations run in source order:

  • input name declares a facade input.
  • local result = source: formatter derives a local value.
  • Formatter options are key=value; $inputName references another input.

Matching is evaluated in source order. Use literal matches where needed and * as the catch-all.

Supported formatters
FormatterRuntime
pluralIntl.PluralRules
numberIntl.NumberFormat
datetimeIntl.DateTimeFormat

Examples:

json
{
  "price": [
    {
      "declarations": [
        "input amount",
        "input currency",
        "local formatted = amount: number style=currency currency=$currency"
      ],
      "match": { "formatted=*": "Price: {formatted}" }
    }
  ],
  "event_date": [
    {
      "declarations": [
        "input date",
        "local formatted = date: datetime dateStyle=long timeZone=UTC"
      ],
      "match": { "formatted=*": "Date: {formatted}" }
    }
  ]
}

Use an explicit timeZone when output must be stable across environments.

Markup, unknown declarations, unknown expressions, and unknown formatters are rejected by the compiler.

Locale behavior

apps/obsidian/src/lib/i18n.ts resolves Obsidian language codes through the Locale Alias table. Canonical locale names follow Inlang (zh-CN); unmatched codes resolve to English. Startup always installs bundled English first. Downloaded Language Packs are pure JSON data and use the same generated facade.

© aidenlx, 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/inlang-i18n of aidenlx/zotlit.

Open the folder on GitHubat commit 27f5752

Compare with similar skills

Inlang 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.

Inlang I18n compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Inlang I18n this skillaidenlx/zotlit1k—~1kAutomated safety check: PassAGPL-3.0
PlanRafaelGB/Obsidian-ZettelFlow175—~651Automated safety check: PassMIT
Impeccablebestofjs/bestofjs3.1k26 repos~2.6kAutomated safety check: PassMIT
Chatbox i18n Translatorchatboxai/chatbox42k—~508Automated safety check: PassGPL-3.0
Internationalization Workflow with i18niOfficeAI/AionUi33k1 repos~1.9kAutomated safety check: PassApache-2.0
Enforce Rules For I18nmoeru-ai/airi50k—~1.5kAutomated safety check: PassMIT

Similar skills

  • Plan

    RafaelGB/Obsidian-ZettelFlow

    Stage 2 of the SDD pipeline — turn a ZettelFlow spec (in the GitHub issue body) into a technical plan posted as an issue comment (approach, files by layer, Obsidian score-rule impact, test strategy…

    175 GitHub stars~651 tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Impeccable

    bestofjs/bestofjs

    A skill your agent uses when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a…

    3.1k GitHub starsUsed in 26 repos~2.6k tokens
    Frontend & DesignAuto-check passed
  • 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 16 days ago
    Frontend & DesignAuto-check passed
  • Standards for keeping all user-facing text translatable: read the i18n config first, use namespaced keys, reuse shared strings and follow the key naming rules.

    33k GitHub starsUsed in 1 repo~1.9k tokens
    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
  • Claude Desktop Chinese Localization

    javaht/claude-desktop-zh-cn

    Adds missing Simplified and Traditional Chinese translations to the Claude Desktop Chinese patch across three layers, then checks how many mappings actually hit.

    7.5k GitHub stars~1.6k tokensUpdated 5 days ago
    Frontend & DesignAuto-check passed

More from aidenlx/zotlit

All 16 skills in this repo
  • I18n UI Text

    aidenlx/zotlit

    Obsidian house style for the wording of user-facing UI strings — command names, setting labels, button text, notices, modal copy.

    1k GitHub stars~2.8k tokensUpdated yesterday
    Auto-check passed
  • Obsidian CSS

    aidenlx/zotlit

    Style Obsidian plugin UI with Tailwind + native components. An agent skill from aidenlx/zotlit.

    1k GitHub stars~4.8k tokensUpdated yesterday
    Auto-check passed
  • Arkregex

    aidenlx/zotlit

    Typed regex authoring with arkregex in this repo. An agent skill from aidenlx/zotlit.

    1k GitHub stars~952 tokensUpdated yesterday
    Auto-check passed
  • Changelog Entry

    aidenlx/zotlit

    Write a user-facing changelog entry under apps/docs/content/changelog/.

    1k GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Discord Announcement

    aidenlx/zotlit

    Draft a Discord announcement from a changelog entry. An agent skill from aidenlx/zotlit.

    1k GitHub stars~604 tokensUpdated yesterday
    Auto-check passed
  • Obsidian Actions

    aidenlx/zotlit

    Patterns for registering commands (action modules) and building context menus (menu segments) in the Obsidian plugin.

    1k GitHub stars~2.6k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Inlang I18n

What does Inlang I18n do?

Define ZotLit UI messages in the Inlang Message Format and consume them through the generated JSON Language Pack facade. Inlang I18n is an agent skill from aidenlx/zotlit. Define ZotLit UI messages in the Inlang Message Format and consume them through the generated JSON Language Pack facade.

When should I use Inlang I18n?

Inlang I18n fits situations like: editing messages/.json; adding interpolation; changing locale resolution.

How do I install Inlang I18n in Claude Code?

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

How do I install Inlang I18n in Codex?

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

Can I use Inlang 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 aidenlx/zotlit --skill inlang-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/inlang-i18n, .gemini/skills/inlang-i18n, .github/skills/inlang-i18n and .opencode/skills/inlang-i18n in your project.

What does Inlang I18n need to run?

Going by SKILL.md and its folder, Inlang I18n needs the command-line tools its instructions call (pnpm).

Does Inlang 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 Inlang 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 Inlang I18n use?

Inlang 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 Inlang I18n use?

About 1k tokens (SKILL.md is roughly 4.1k 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 Inlang I18n?

Skills that share tags, products or a category with Inlang I18n: Plan (RafaelGB/Obsidian-ZettelFlow, 175 stars), Impeccable (bestofjs/bestofjs, 3.1k stars), Chatbox i18n Translator (chatboxai/chatbox, 42k stars) and Internationalization Workflow with i18n (iOfficeAI/AionUi, 33k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Inlang I18n?

aidenlx (a GitHub user) maintains it in aidenlx/zotlit, which has 1,029 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 10, 2026.

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