add-locale

star 10.2k

Adds a new locale to RunCat365. Use when adding a new language, creating a Strings.{lc}.resx file, registering a CultureInfo, or extending SupportedLanguage.cs with a new entry.

runcat-dev By runcat-dev schedule Updated 6/7/2026

name: add-locale description: Adds a new locale to RunCat365. Use when adding a new language, creating a Strings.{lc}.resx file, registering a CultureInfo, or extending SupportedLanguage.cs with a new entry. argument-hint: <language name or BCP 47 code>

Add a New Locale to RunCat365

Modify 3 files to add support for $ARGUMENTS. French (fr) is used as an example.

Steps

1. Create RunCat365/Properties/Strings.{lc}.resx

Read RunCat365/Properties/Strings.resx for all keys and their English values. Use Strings.es.resx as the structural template.

  • File name: Strings.{lc}.resx (e.g. Strings.fr.resx)
  • Copy the XML header, schema, and <resheader> blocks verbatim from Strings.es.resx
  • Include every key from Strings.resx — no more, no less — with each <value> translated
  • Keep all attribute names, XML structure, and <comment> content in English; translate only <value> text
  • Verify every key from Strings.resx is present in the new file

2. Edit RunCat365/SupportedLanguage.cs

Keep the SupportedLanguage enum and every switch arm sorted alphabetically by enum identifier (e.g. French before German before Japanese). Insert the new language at its alphabetical position in each location below — do not append.

Add the language to the SupportedLanguage enum:

enum SupportedLanguage
{
    English,
    French,
    Japanese,
    Spanish,
}

Add the ISO code to GetCurrentLanguage() (arms ordered by enum identifier, so "fr" appears before "ja" even though the ISO codes aren't themselves alphabetical):

return culture.TwoLetterISOLanguageName switch
{
    "fr" => SupportedLanguage.French,
    "ja" => SupportedLanguage.Japanese,
    "es" => SupportedLanguage.Spanish,
    _ => SupportedLanguage.English,
};

Add the culture to GetDefaultCultureInfo():

return language switch
{
    SupportedLanguage.French => new CultureInfo("fr-FR"),
    SupportedLanguage.Japanese => new CultureInfo("ja-JP"),
    SupportedLanguage.Spanish => new CultureInfo("es-ES"),
    _ => new CultureInfo("en-US"),
};

Add the font to GetFontName() — use "Consolas" for Latin-script languages:

return language switch
{
    SupportedLanguage.French => "Consolas",
    SupportedLanguage.Japanese => "Noto Sans JP",
    SupportedLanguage.Spanish => "Consolas",
    _ => "Consolas",
};

Add the full-width flag to IsFullWidth() — use false for Latin-script languages:

return language switch
{
    SupportedLanguage.French => false,
    SupportedLanguage.Japanese => true,
    SupportedLanguage.Spanish => false,
    _ => false,
};

3. Update README.md

Add the new language to the InstallationLanguage: list, preserving the existing alphabetical order by English display name (e.g. French between English (default) and German). Match the existing two-space indentation under the - Language: bullet.

Checklist

  • Created Strings.{lc}.resx with all keys translated
  • Added language to the SupportedLanguage enum
  • Added ISO code to GetCurrentLanguage()
  • Added culture to GetDefaultCultureInfo()
  • Added font to GetFontName()
  • Added full-width flag to IsFullWidth()
  • Added the language to the Installation language list in README.md
  • Built in Visual Studio and verified UI with OS language set to the target language
Install via CLI
npx skills add https://github.com/runcat-dev/RunCat365 --skill add-locale
Repository Details
star Stars 10,152
call_split Forks 836
navigation Branch main
article Path SKILL.md
More from Creator