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 fromStrings.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.resxis 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 Installation → Language: 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}.resxwith all keys translated - Added language to the
SupportedLanguageenum - 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