localization
Manages resource file translations and key naming conventions for multi-language .NET applications.
Install
mkdir -p .claude/skills/localization && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/15086" && unzip -o skill.zip -d .claude/skills/localization && rm skill.zipInstalls to .claude/skills/localization
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Instructions for managing localization and resource files in the AppProject .NET template. Covers adding translation keys to .resx files, resource key naming conventions, placeholder formatting, and maintaining consistency across en-US, pt-BR, and es-ES translations. Use when the user needs to add or edit translations, resource keys, or localization support.Key capabilities
- →Add translation keys to all three .resx files
- →Preserve existing comments in .resx files
- →Follow alphabetical order within each group of keys
- →Use existing grouping/tabbing patterns for keys
- →Use `{{}}` for placeholder values in .resx files
- →Use `StringResource.GetStringByKey()` in Blazor and C# code
How it works
The skill provides instructions for managing localization in .NET projects by guiding the addition of translation keys to .resx files across three languages. It enforces naming conventions, alphabetical order, and specific placeholder formatting.
Inputs & outputs
When to use localization
- →Adding new translation keys
- →Updating UI field labels
- →Ensuring consistency in resource files
About this skill
Localization & Resource Management
Overview
The template supports three languages:
en-US(English) —Resource.resxpt-BR(Brazilian Portuguese) —Resource.pt-BR.resxes-ES(Spanish) —Resource.es-ES.resx
Location: src/AppProject.Resources/
Both API and frontend consume resources via StringResource.GetStringByKey().
Resource Key Naming Conventions
Page Titles
<Module>_<EntityName>SummaryPage_Title
<Module>_<EntityName>FormPage_Title
Column Titles (grids)
<Module>_<EntityName>SummaryPage_<ColumnName>Column_Title
Fieldset Titles
<Module>_<EntityName>FormPage_<FieldsetName>Fieldset_Title
Field Labels
<Module>_<EntityName>FormPage_<FieldsetName>Fieldset_<FieldName>Field_Label
ID Display Field
<Module>_<EntityName>FormPage_<FieldsetName>Fieldset_IdField_Text
Validators
<Module>_<EntityName>FormPage_<FieldsetName>Fieldset_<FieldName>Field_Required
<Module>_<EntityName>FormPage_<FieldsetName>Fieldset_<FieldName>Field_InvalidLength
Menu Items
NavMenu_<Module>_Title
NavMenu_<Module>_<EntityName>_Text
Exception Messages
ExceptionCode_<Module>_<EntityName>_<ValidationName>
Permission Names
Permission_<Module>_<Action>_Name
Permission_<Module>_<Action>_Description
Adding New Resource Keys
When adding new keys, you MUST:
- Add to ALL three
.resxfiles — never leave translations missing - Preserve existing comments — each
.resxhas comment markers separating groups - Follow alphabetical order within each group
- Use the existing grouping/tabbing pattern — forms separated, validations and menu together
- Use
{{}}instead of{}for placeholder values that should be treated as literal text by the parser
Example Entry (Resource.resx — English)
<data name="General_CountryFormPage_Title" xml:space="preserve">
<value>Country</value>
</data>
<data name="General_CountryFormPage_GeneralFieldset_Title" xml:space="preserve">
<value>General</value>
</data>
<data name="General_CountryFormPage_GeneralFieldset_NameField_Label" xml:space="preserve">
<value>Name</value>
</data>
<data name="General_CountryFormPage_GeneralFieldset_NameField_Required" xml:space="preserve">
<value>Name is required.</value>
</data>
<data name="General_CountryFormPage_GeneralFieldset_NameField_InvalidLength" xml:space="preserve">
<value>Name must have a maximum of 200 characters.</value>
</data>
Example Entry (Resource.pt-BR.resx — Portuguese)
<data name="General_CountryFormPage_Title" xml:space="preserve">
<value>País</value>
</data>
<data name="General_CountryFormPage_GeneralFieldset_NameField_Label" xml:space="preserve">
<value>Nome</value>
</data>
<data name="General_CountryFormPage_GeneralFieldset_NameField_Required" xml:space="preserve">
<value>Nome é obrigatório.</value>
</data>
Example Entry (Resource.es-ES.resx — Spanish)
<data name="General_CountryFormPage_Title" xml:space="preserve">
<value>País</value>
</data>
<data name="General_CountryFormPage_GeneralFieldset_NameField_Label" xml:space="preserve">
<value>Nombre</value>
</data>
<data name="General_CountryFormPage_GeneralFieldset_NameField_Required" xml:space="preserve">
<value>El nombre es obligatorio.</value>
</data>
Placeholder Formatting
When you need to reserve future placeholder values in .resx files:
- Use
{{Value}}instead of{Value}— prevents the parser from trying to interpolate - Example:
The price is {{Price}}→ stored literally until template replaces it
Using Resources in Code
Blazor Components
@StringResource.GetStringByKey("General_CountryFormPage_Title")
With Interpolation
@StringResource.GetStringByKey("General_CountryFormPage_GeneralFieldset_IdField_Text", this.Model.Id)
In C# Code
StringResource.GetStringByKey("ExceptionCode_General_Country_DuplicateName")
Reusable Component Resource Keys
These keys are used by framework components and should NOT be duplicated:
| Key | Component | Purpose |
|---|---|---|
DataGridControl_NewButton_Text | DataGridControl | "New" button label |
DataGridControl_AddButton_Text | DataGridControl | "Add" button label |
DataGridControl_EditButton_Text | DataGridControl | "Edit" button label |
DataGridControl_OpenButton_Text | DataGridControl | "Open" button label |
DataGridControl_DeleteButton_Text | DataGridControl | "Delete" button label |
ModelFormControl_SaveButton_Text | ModelFormControl | "Save" button label |
ModelFormControl_ExecuteButton_Text | ModelFormControl | "Execute" button label |
ModelFormControl_CancelButton_Text | ModelFormControl | "Cancel" button label |
ModelFormControl_CloseButton_Text | ModelFormControl | "Close" button label |
Dialog_Confirm_Delete_Message | Shared | Delete confirmation message |
Language Selector
The frontend uses Blazored.LocalStorage to persist the selected language. The LanguageSelector.razor component handles switching.
Checklist
- Keys added to
Resource.resx(English) - Keys added to
Resource.pt-BR.resx(Portuguese) - Keys added to
Resource.es-ES.resx(Spanish) - Comments preserved in all
.resxfiles - Alphabetical order maintained within groups
- Placeholder values use
{{}}format - No duplicate keys
When not to use it
- →When leaving translations missing in any .resx file
- →When using `{}` instead of `{{}}` for placeholder values
- →When duplicating reusable component resource keys
Limitations
- →The skill is specific to the AppProject .NET template.
- →Requires adding keys to `en-US`, `pt-BR`, and `es-ES` .resx files.
- →Placeholder values must use `{{}}` format.
How it compares
This skill provides a detailed, rule-based approach to managing localization files, ensuring consistency across multiple languages and specific formatting for placeholders, which is more structured than ad-hoc translation management.
Compared to similar skills
localization side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| localization (this skill) | 0 | 5mo | No flags | Beginner |
| dotnet-localization | 0 | 5mo | No flags | Intermediate |
| microsoft-code-reference | 7 | 5mo | Review | Beginner |
| microsoft-skill-creator | 6 | 5mo | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
dotnet-localization
rudironsoni
>-
microsoft-code-reference
github
Look up Microsoft API references, find working code samples, and verify SDK code is correct. Use when working with Azure SDKs, .NET libraries, or Microsoft APIs—to find the right method, check parameters, get working examples, or troubleshoot errors. Catches hallucinated methods, wrong signatures, and deprecated patterns by querying official docs.
microsoft-skill-creator
MicrosoftDocs
Create agent skills for Microsoft technologies using Learn MCP tools. Use when users want to create a skill that teaches agents about any Microsoft technology, library, framework, or service (Azure, .NET, M365, VS Code, Bicep, etc.). Investigates topics deeply, then generates a hybrid skill storing essential knowledge locally while enabling dynamic deeper investigation.
connection-properties
dotnet
Specialized agent for creating and improving Connection Properties in Aspire resource and README files
agui-dotnet-feature-workflow
ag-ui-protocol
>
microsoft-docs
SilverPham08091998
Understand Microsoft technologies by querying official documentation. Use whenever the user asks how something works, wants tutorials, needs configuration options, limits, quotas, or best practices for any Microsoft technology (Azure, .NET, M365, Windows, Power Platform, etc.)—even if they don't men