Skip to content

fix(l10n): cleanup and unify bundle keys across 17 languages#266

Merged
nullvariant merged 1 commit into
mainfrom
fix/l10n-profile-terminology-complete
Feb 4, 2026
Merged

fix(l10n): cleanup and unify bundle keys across 17 languages#266
nullvariant merged 1 commit into
mainfrom
fix/l10n-profile-terminology-complete

Conversation

@nullvariant

@nullvariant nullvariant commented Feb 4, 2026

Copy link
Copy Markdown
Owner

User description

Summary

  • Removed ~24 unused keys from all 17 language bundle files
  • Added 6 missing keys (SSH/GPG validation messages)
  • Unified all files to exactly 93 keys
  • Fixed duplicate key issues (e.g., "Select Identity" appeared twice)
  • Keys use "Identity" terminology; localized values use appropriate "Profile" equivalents

Test plan

  • All 17 JSON files pass jq validation
  • All 17 files have exactly 93 keys
  • All keys match between English base and all other languages

🤖 Generated with Claude Code


PR Type

Enhancement, Tests, Documentation


Description

  • Unified UI terminology across the extension from "Profile" to "Identity" in code and UI labels

  • Cleaned up and standardized localization bundles across all 17 languages (Bulgarian, Chinese Simplified/Traditional, Czech, French, German, Hungarian, Italian, Japanese, Korean, Polish, Portuguese (Brazil), Russian, Spanish, Turkish, Ukrainian)

  • Removed ~24 unused/duplicate keys from all language bundle files

  • Added 6 new keys for SSH/GPG validation messages

  • Consolidated all language bundles to exactly 93 keys with consistent naming

  • Updated UI components (identityPicker.ts, identityManager.ts) to use "Identity" terminology

  • Updated test assertions to match new terminology

  • Updated documentation and changelog to reflect changes

  • Bumped version to 0.16.15


Diagram Walkthrough

flowchart LR
  UI["UI Components<br/>identityPicker.ts<br/>identityManager.ts"]
  L10N["17 Language Bundles<br/>Cleanup & Unify"]
  TESTS["Test Assertions<br/>Update Terminology"]
  DOCS["Documentation<br/>& Changelog"]
  VERSION["Version Bump<br/>0.16.14 → 0.16.15"]
  
  UI -- "Profile → Identity" --> L10N
  L10N -- "93 keys unified" --> TESTS
  L10N -- "Remove ~24 keys<br/>Add 6 keys" --> DOCS
  DOCS --> VERSION
Loading

File Walkthrough

Relevant files
Configuration changes
2 files
documentationInternal.ts
Update documentation hashes for modified files                     

extensions/git-id-switcher/src/ui/documentationInternal.ts

  • Updated document hash for CHANGELOG.md to reflect recent changes
  • Updated document hash for English README to match new content
  • Updated document hash for main README to reflect modifications
+3/-3     
package.json
Version bump for localization cleanup release                       

extensions/git-id-switcher/package.json

  • Bumped version from 0.16.14 to 0.16.15
+1/-1     
Enhancement
2 files
identityPicker.ts
Unify UI terminology from profiles to identities                 

extensions/git-id-switcher/src/ui/identityPicker.ts

  • Changed UI labels from "Manage Profiles" to "Manage Identities"
  • Changed quick pick title from "Select Profile" to "Select Identity"
  • Changed placeholder text from "Search profiles..." to "Search
    identities..."
  • Updated tooltip and button labels to use "Identity" terminology
+8/-8     
identityManager.ts
Update identity manager UI labels                                               

extensions/git-id-switcher/src/ui/identityManager.ts

  • Changed dialog title from "New Profile" to "New Identity"
  • Updated quick pick title to use "New Identity" terminology
+2/-2     
Tests
1 files
identityPicker.test.ts
Update test assertions for identity terminology                   

extensions/git-id-switcher/src/test/e2e/identityPicker.test.ts

  • Updated test descriptions to reference "Select Identity" instead of
    "Select Profile"
  • Updated test descriptions to reference "Manage Identities" instead of
    "Manage Profiles"
  • Updated assertion messages to match new terminology
+4/-4     
Localization
17 files
bundle.l10n.uk.json
Cleanup and unify Ukrainian localization bundle                   

extensions/git-id-switcher/l10n/bundle.l10n.uk.json

  • Removed duplicate and unused keys (~21 keys removed)
  • Unified terminology: replaced "ідентифікатор" (identifier) with
    "профіль" (profile) in localized values
  • Added 6 new keys for SSH/GPG validation messages
  • Consolidated 109 keys down to 88 keys with consistent naming
+47/-68 
bundle.l10n.bg.json
Cleanup and unify Bulgarian localization bundle                   

extensions/git-id-switcher/l10n/bundle.l10n.bg.json

  • Removed duplicate and unused keys (~21 keys removed)
  • Unified terminology: replaced "самоличност" (identity) with "профил"
    (profile) in localized values
  • Added 6 new keys for SSH/GPG validation messages
  • Consolidated 109 keys down to 88 keys with consistent naming
+47/-68 
bundle.l10n.hu.json
Cleanup and unify Hungarian localization bundle                   

extensions/git-id-switcher/l10n/bundle.l10n.hu.json

  • Removed duplicate and unused keys (~21 keys removed)
  • Unified terminology: replaced "identitás" (identity) with "profil"
    (profile) in localized values
  • Added 6 new keys for SSH/GPG validation messages
  • Consolidated 109 keys down to 88 keys with consistent naming
+48/-69 
bundle.l10n.pl.json
Cleanup and unify Polish localization bundle                         

extensions/git-id-switcher/l10n/bundle.l10n.pl.json

  • Removed duplicate and unused keys (~21 keys removed)
  • Unified terminology: replaced "tożsamość" (identity) with "profil"
    (profile) in localized values
  • Added 6 new keys for SSH/GPG validation messages
  • Consolidated 109 keys down to 88 keys with consistent naming
+47/-68 
bundle.l10n.cs.json
Cleanup and unify Czech localization bundle                           

extensions/git-id-switcher/l10n/bundle.l10n.cs.json

  • Removed duplicate and unused keys (~21 keys removed)
  • Unified terminology: replaced "identita" (identity) with "profil"
    (profile) in localized values
  • Added 6 new keys for SSH/GPG validation messages
  • Consolidated 109 keys down to 88 keys with consistent naming
+47/-68 
bundle.l10n.ru.json
Cleanup and unify Russian localization bundle                       

extensions/git-id-switcher/l10n/bundle.l10n.ru.json

  • Removed duplicate and unused keys (~21 keys removed)
  • Unified terminology: replaced "идентификатор" (identifier) with
    "профиль" (profile) in localized values
  • Added 6 new keys for SSH/GPG validation messages
  • Consolidated 109 keys down to 88 keys with consistent naming
+47/-68 
bundle.l10n.tr.json
Cleanup and unify Turkish localization bundle                       

extensions/git-id-switcher/l10n/bundle.l10n.tr.json

  • Removed duplicate and unused keys (~21 keys removed)
  • Unified terminology: replaced "kimlik" (identity) with "profil"
    (profile) in localized values
  • Added 6 new keys for SSH/GPG validation messages
  • Consolidated 109 keys down to 88 keys with consistent naming
+48/-69 
bundle.l10n.zh-TW.json
Cleanup and unify Traditional Chinese localization bundle

extensions/git-id-switcher/l10n/bundle.l10n.zh-TW.json

  • Removed duplicate and unused keys (~21 keys removed)
  • Unified terminology: replaced "身分" (identity) with "設定檔" (profile) in
    localized values
  • Added 6 new keys for SSH/GPG validation messages
  • Consolidated 109 keys down to 88 keys with consistent naming
+47/-68 
bundle.l10n.it.json
Italian localization: terminology unification and key cleanup

extensions/git-id-switcher/l10n/bundle.l10n.it.json

  • Replaced "identità" (identity) terminology with "profilo" (profile) in
    Italian translations across 21 key-value pairs
  • Removed 2 duplicate/unused keys: Select Git Identity and Failed to
    switch identity
  • Added 6 new keys for SSH/GPG validation messages
  • Reorganized keys to match unified 93-key structure across all language
    files
+47/-68 
bundle.l10n.fr.json
French localization: terminology unification and key cleanup

extensions/git-id-switcher/l10n/bundle.l10n.fr.json

  • Replaced "identité" (identity) terminology with "profil" (profile) in
    French translations across 21 key-value pairs
  • Removed 2 duplicate/unused keys: Select Git Identity and Failed to
    switch identity
  • Added 6 new keys for SSH/GPG validation messages
  • Reorganized keys to match unified 93-key structure across all language
    files
+47/-68 
bundle.l10n.ko.json
Korean localization: terminology unification and key cleanup

extensions/git-id-switcher/l10n/bundle.l10n.ko.json

  • Replaced "ID" terminology with "프로필" (profile) in Korean translations
    across 21 key-value pairs
  • Removed 2 duplicate/unused keys: Select Git Identity and Failed to
    switch identity
  • Added 6 new keys for SSH/GPG validation messages
  • Reorganized keys to match unified 93-key structure across all language
    files
+47/-68 
bundle.l10n.de.json
German localization: terminology unification and key cleanup

extensions/git-id-switcher/l10n/bundle.l10n.de.json

  • Replaced "Identität" (identity) terminology with "Profil" (profile) in
    German translations across 21 key-value pairs
  • Removed 2 duplicate/unused keys: Select Git Identity and Failed to
    switch identity
  • Added 6 new keys for SSH/GPG validation messages
  • Reorganized keys to match unified 93-key structure across all language
    files
+47/-68 
bundle.l10n.pt-BR.json
Brazilian Portuguese localization: terminology unification and key
cleanup

extensions/git-id-switcher/l10n/bundle.l10n.pt-BR.json

  • Replaced "identidade" (identity) terminology with "perfil" (profile)
    in Brazilian Portuguese translations across 21 key-value pairs
  • Removed 2 duplicate/unused keys: Select Git Identity and Failed to
    switch identity
  • Added 6 new keys for SSH/GPG validation messages
  • Reorganized keys to match unified 93-key structure across all language
    files
+47/-68 
bundle.l10n.es.json
Spanish localization: terminology unification and key cleanup

extensions/git-id-switcher/l10n/bundle.l10n.es.json

  • Replaced "identidad" (identity) terminology with "perfil" (profile) in
    Spanish translations across 21 key-value pairs
  • Removed 2 duplicate/unused keys: Select Git Identity and Failed to
    switch identity
  • Added 6 new keys for SSH/GPG validation messages
  • Reorganized keys to match unified 93-key structure across all language
    files
+47/-68 
bundle.l10n.zh-CN.json
Simplified Chinese localization: terminology unification and key
cleanup

extensions/git-id-switcher/l10n/bundle.l10n.zh-CN.json

  • Replaced "身份" (identity) terminology with "配置文件" (profile) in
    Simplified Chinese translations across 21 key-value pairs
  • Removed 2 duplicate/unused keys: Select Git Identity and Failed to
    switch identity
  • Added 6 new keys for SSH/GPG validation messages
  • Reorganized keys to match unified 93-key structure across all language
    files
+47/-68 
bundle.l10n.ja.json
Japanese localization: key cleanup and validation messages

extensions/git-id-switcher/l10n/bundle.l10n.ja.json

  • Removed 1 duplicate key: Select Git Identity
  • Added 6 new keys for SSH/GPG validation messages
  • Reorganized keys to match unified 93-key structure across all language
    files
  • Maintained existing "プロフィール" (profile) terminology already in use
+26/-47 
bundle.l10n.json
English base localization: key cleanup and validation messages

extensions/git-id-switcher/l10n/bundle.l10n.json

  • Removed 2 duplicate/unused keys: Select Git Identity and Failed to
    switch identity
  • Added 6 new keys for SSH/GPG validation messages
  • Reorganized keys to match unified 93-key structure across all language
    files
  • Reverted some English translations to use "identity" terminology in
    keys (values remain unchanged)
+30/-51 
Documentation
3 files
CHANGELOG.md
Changelog: document localization bundle cleanup release   

extensions/git-id-switcher/CHANGELOG.md

  • Added new version entry [0.16.15] - 2026-02-05 documenting
    localization bundle cleanup
  • Documented removal of ~24 unused keys from all 17 language files
  • Documented addition of 6 missing SSH/GPG validation message keys
  • Documented unification to exactly 93 keys across all language files
+11/-0   
README.md
English documentation: fix management screen terminology 

extensions/git-id-switcher/docs/i18n/en/README.md

  • Updated management screen reference from "Manage Profiles" to "Manage
    Identities" for consistency
+1/-1     
README.md
Main README: fix management screen terminology                     

extensions/git-id-switcher/README.md

  • Updated management screen reference from "Manage Profiles" to "Manage
    Identities" for consistency
+1/-1     

- Remove ~24 unused keys from all language files
- Add 6 missing keys (SSH/GPG validation messages)
- Unify all files to exactly 93 keys
- Fix duplicate key issues
- Keys use "Identity"; values use localized "Profile" equivalents

🖥️ IDE: [Cursor](https://cursor.sh)
🔌 Extension: [Claude Code](https://claude.ai/download)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Model-Raw: claude-opus-4-5-20251101
@qodo-code-review

Copy link
Copy Markdown

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

🔴
Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status:
Leaky error messages: User-facing localized error strings include raw error placeholders ({0}) (e.g.,
initialization/select/delete failures), which can surface internal details to end users.

Referred Code
"Failed to initialize Git ID Switcher: {0}": "Не вдалося ініціалізувати Git ID Switcher: {0}",
"(none)": "(немає)",

Learn more about managing compliance generic rules or creating your own custom rules

Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@sonarqubecloud

sonarqubecloud Bot commented Feb 4, 2026

Copy link
Copy Markdown

@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@qodo-code-review

Copy link
Copy Markdown

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
High-level
Re-evaluate the inconsistent terminology change

The PR creates a terminology inconsistency by changing the English UI to
"Identity" while changing all other languages to their equivalent of "Profile".
It is recommended to unify the term across all languages.

Examples:

extensions/git-id-switcher/l10n/bundle.l10n.json [4-34]
  "Select Identity": "Select Identity",
  "Search identities...": "Search identities...",
  "Current": "Current",
  "Switching...": "Switching...",
  "Switching identity...": "Switching identity...",
  "Switched to {0}": "Switched to {0}",
  "Already using {0}": "Already using {0}",
  "Current identity: {0} ({1})": "Current identity: {0} ({1})",
  "No identity selected. Click the status bar to select one.": "No identity selected. Click the status bar to select one.",
  "**Email:** {0}": "**Email:** {0}",

 ... (clipped 21 lines)
extensions/git-id-switcher/l10n/bundle.l10n.uk.json [4-34]
  "Select Identity": "Вибрати профіль",
  "Search identities...": "Пошук профілів...",
  "Current": "Поточний",
  "Switching...": "Перемикання...",
  "Switching identity...": "Перемикання профілю...",
  "Switched to {0}": "Перемкнуто на {0}",
  "Already using {0}": "Вже використовується {0}",
  "Current identity: {0} ({1})": "Поточний профіль: {0} ({1})",
  "No identity selected. Click the status bar to select one.": "Профіль не вибрано. Натисніть на рядок стану для вибору.",
  "**Email:** {0}": "**Email:** {0}",

 ... (clipped 21 lines)

Solution Walkthrough:

Before:

// English bundle (bundle.l10n.json)
{
  "Select Identity": "Select Identity",
  "Manage Identities": "Manage Identities",
  ...
}

// Ukrainian bundle (bundle.l10n.uk.json)
{
  "Select Identity": "Вибрати профіль", // "Select profile"
  "Manage Identities": "Керування профілями", // "Manage profiles"
  ...
}

After:

// Option 1: Unify to "Identity"
// English bundle
{ "Select Identity": "Select Identity", ... }
// Ukrainian bundle
{ "Select Identity": "Вибрати ідентифікатор", ... } // "Select identity"

// Option 2: Unify to "Profile"
// English bundle
{ "Select Profile": "Select Profile", ... }
// Ukrainian bundle
{ "Select Profile": "Вибрати профіль", ... } // "Select profile"
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies a critical inconsistency where the English UI uses "Identity" while all other languages use "Profile", which contradicts the PR's goal of unification and impacts user experience.

High
Possible issue
Avoid overly restrictive SSH path validation

Remove the overly restrictive validation that requires SSH keys to be located in
the ~/.ssh/ directory. Instead, simply verify that the key file exists at the
specified path.

extensions/git-id-switcher/l10n/bundle.l10n.json [69]

-"SSH key path must be under ~/.ssh/ directory": "SSH key path must be under ~/.ssh/ directory",
+"SSH key not found at specified path": "SSH key not found at specified path",
  • Apply / Chat
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that forcing SSH keys to be in the ~/.ssh/ directory is an unnecessary functional limitation, as valid SSH configurations can store keys in other locations.

Medium
General
Translate the untranslated localization key

Translate the Filter... localization key in bundle.l10n.uk.json to Ukrainian.

extensions/git-id-switcher/l10n/bundle.l10n.uk.json [86]

-"Filter...": "Filter..."
+"Filter...": "Фільтр..."

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 4

__

Why: The suggestion correctly identifies an untranslated localization key in a file being modified by the PR, which improves UI consistency for Ukrainian users.

Low
Translate UI text into Turkish

Translate the UI text "Filter..." to "Filtrele..." in the Turkish localization
file.

extensions/git-id-switcher/l10n/bundle.l10n.tr.json [86]

-"Filter...": "Filter..."
+"Filter...": "Filtrele..."

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 4

__

Why: The suggestion correctly identifies an untranslated UI string in a localization file and provides a valid Turkish translation, improving localization consistency.

Low
Translate UI text into Italian

Translate the UI text "Filter..." to "Filtra..." in the Italian localization
file.

extensions/git-id-switcher/l10n/bundle.l10n.it.json [86]

-"Filter...": "Filter..."
+"Filter...": "Filtra..."

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 4

__

Why: The suggestion correctly identifies an untranslated UI string in a localization file and provides a valid Italian translation, improving localization consistency.

Low
Translate UI text into French

Translate the UI text "Filter..." to "Filtrer..." in the French localization
file.

extensions/git-id-switcher/l10n/bundle.l10n.fr.json [86]

-"Filter...": "Filter..."
+"Filter...": "Filtrer..."

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 4

__

Why: The suggestion correctly identifies an untranslated UI string in a localization file and provides a valid French translation, improving localization consistency.

Low
  • More

@nullvariant nullvariant merged commit 26ec4b1 into main Feb 4, 2026
21 of 22 checks passed
@nullvariant nullvariant deleted the fix/l10n-profile-terminology-complete branch February 4, 2026 16:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants