angular-i18n

A review of how an Angular app prepares its text, dates, numbers, and currencies for different languages and regions. It also covers right-to-left layouts, such as those used for Arabic or Hebrew.

In plain words
What is it for?
Use it to review translation-library setup, shared translation keys, locale-aware formatting, right-to-left support, and language switching.
Why use it?
It finds user-facing text that cannot be translated and formatting that may look wrong in another region. It also checks whether Angular and .NET use matching translation keys.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/agenticpawan/fullstack-pilot/angular-i18n
Any agent
npx skills add AgenticPawan/FullStack-Pilot --skill angular-i18n
Clone the repo
git clone --depth 1 https://github.com/AgenticPawan/FullStack-Pilot

Made for: Claude Code, Codex.

Per session 96 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,299 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00096 $0.01299
Opus 5 $0.00048 $0.00649
Sonnet 5 $0.00019 $0.00260
Haiku 4.5 $0.00010 $0.00130

Measured 2d ago against content hash 4002d6ec7070, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

angular-i18n scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

plugins/pilot-angular/skills/angular-i18n/SKILL.md · 151 lines

How it starts

The opening of the file, as written. The whole thing — 151 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Standard IDs

ID Severity What it checks
I18N-001 P1 Hardcoded UI strings with no i18n library wired
I18N-002 P1 Translation keys don't share a key space with the .NET DB-override table
I18N-003 P2 Dates/numbers/currency formatted with hardcoded locale instead of locale-aware
I18N-004 P2 No RTL layout support despite supporting a locale that requires it
I18N-005 P3 Locale switch requires a full page reload (advisory)

Check A — Hardcoded strings, no i18n library wired (I18N-001)

Detection

Grep templates for literal English text in labels/buttons/messages with no | translate pipe / i18n attribute / equivalent, and confirm a translation library (@angular/localize or a runtime library such as Transloco) is actually installed and configured. This is the same gap angular-dynamic-forms ADF-005 calls out for descriptor-driven forms — it applies to every other template too, not just dynamic forms.

BAD — hardcoded strings everywhere

<button>Approve</button>
<p>Your order has been confirmed.</p>

GOOD — every user-facing string resolved through the i18n pipe

<button>{{ 'orders.approve' | translate }}</button>
<p>{{ 'orders.confirmed' | translate }}</p>

Check B — Translation keys don't share a key space with the .NET DB-override table (I18N-002)

Detection

Compare the Angular translation key namespace against the .NET dotnet-localization DB-override table's Key column. If there's no documented shared convention (e.g., both sides use feature.subfeature.label dot-notation and the same key literally appears in both the Angular translation file and the DB override row for a shared string), an admin correcting a translation in the DB-backed override tool has no way to know whether it affects any given Angular string.

BAD — Angular and .NET translation keys evolved independently, no shared convention

// Angular: "customer_first_name"
-- .NET LocalizationOverrides table: Key = 'Customer.FirstNameLabel'
-- Same concept, no relationship between the two key strings.

Read the full file on GitHub · 151 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 151 lines · 96 tokens per session scan A 4002d6ec7070

Subscribe to this mod's changes

angular-i18n is a skill published in the GitHub repository AgenticPawan/FullStack-Pilot (2 stars, last pushed 1mo ago), licensed MIT. It adds 96 tokens to every session and 1,299 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

translate-a-sample

Translate the Azure SDK sample from python to C# and generate markdownn file for the sample. Parameters: C# SDK repository root; python SDK repository root; Package name: one of Azure.AI.Projects, Azure.AI.Projects.Agents or Azure.AI.Extensions.OpenAI; The name of sample file in Python SDK repository.

Azure/azure-sdk-for-net · 90 tokens

date-formatter

Converts dates between formats and handles timezone differences.

Azure/azure-sdk-for-net · 13 tokens

i18n-manage

Add, rename, or remove i18n translation keys in fundamental-ngx (updates FdLanguage interface, .properties files, and generated types).

SAP/fundamental-ngx · 36 tokens

lingui-best-practices

Implement internationalization with Lingui in React and JavaScript applications. Use when adding i18n, translating UI, working with Trans/useLingui/Plural, extracting messages, compiling catalogs, or when the user mentions Lingui, internationalization, i18n, translations, locales, message extraction, ICU…

platformplatform/PlatformPlatform · 78 tokens

enhanced-message-context

Provide additional context for messages based on the codebase and the context of the message to improve the quality of the translations.

platformplatform/PlatformPlatform · 29 tokens

contentful-cms

Creates Contentful content types, queries entries via GraphQL/REST, runs CLI migrations, and manages assets and locales. Use when building or modifying Contentful content models, writing queries, or migrating content.

monkilabs/opencastle · 46 tokens