-
Notifications
You must be signed in to change notification settings - Fork 440
feat(i18n): add Portuguese (Brazil) locale (pt-BR) #6943
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(i18n): add Portuguese (Brazil) locale (pt-BR) #6943
Conversation
|
Warning Rate limit exceeded@JonatanAtila has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 4 minutes and 0 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughAdds Brazilian Portuguese (pt-BR) locale across build config, UI selector, dynamic locale loaders, core settings, placeholder locale files, and a CODEOWNERS entry. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant UI as Language Selector
participant Loader as i18n Loader Maps
participant FS as Locale JSON files
Note over UI,Loader: User selects "pt-BR"
UI->>Loader: request loader('pt-BR')
Loader-->>UI: return loader function(s)
UI->>FS: invoke loader → import `@frontend-locales/pt-BR/main.json` (and nodeDefs/commands/settings)
FS-->>UI: return JSON (empty placeholders)
UI->>UI: apply translations / render
✨ Finishing touches🧪 Generate unit tests (beta)
Comment |
🎭 Playwright Test Results⏰ Completed at: 11/27/2025, 08:20:34 PM UTC 📈 Summary
📊 Test Reports by Browser
🎉 Click on the links above to view detailed test results for each browser configuration. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/i18n.ts (1)
26-89: pt-BR loader wiring looks consistent; double-check ESLint unresolved-module hintsThe new
'pt-BR'(and'zh-TW') entries are wired consistently acrosslocaleLoaders,nodeDefsLoaders,commandsLoaders, andsettingsLoaders, and the pt-BR paths match the new files undersrc/locales/pt-BR, so the runtime side looks good.ESLint’s
import-x/no-unresolvedwarnings on these lines suggest either:
- the corresponding
zh-TW/pt-BRJSON files aren’t visible to the resolver in your lint environment, or- the resolver/plugin doesn’t handle these hyphenated directory names well.
I’d recommend:
- Re-running the lint task locally to confirm it passes with the new files present, and
- If warnings persist, either updating the import resolver config or adding a targeted disable comment for these loader maps (similar to the desktop i18n file) so the rule doesn’t block CI on what is effectively a false positive.
apps/desktop-ui/src/i18n.ts (1)
31-93: Desktop i18n loaders correctly extended for pt-BRThe new
'pt-BR'(and'zh-TW') entries are added consistently across all loader maps and match the @frontend-locales alias pattern used for other languages. With the existingloadLocalelogic, pt-BR should load and register correctly when selected.If you ever revisit default-locale detection, you might consider using the full
navigator.language(e.g. recognizingpt-BR/zh-TWdirectly) instead of truncating to the base language, but that’s pre-existing and non-blocking.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (9)
.i18nrc.cjs(1 hunks)apps/desktop-ui/src/components/common/LanguageSelector.vue(1 hunks)apps/desktop-ui/src/i18n.ts(4 hunks)src/i18n.ts(4 hunks)src/locales/pt-BR/commands.json(1 hunks)src/locales/pt-BR/main.json(1 hunks)src/locales/pt-BR/nodeDefs.json(1 hunks)src/locales/pt-BR/settings.json(1 hunks)src/platform/settings/constants/coreSettings.ts(1 hunks)
🧰 Additional context used
📓 Path-based instructions (13)
**/*.{vue,ts,tsx}
📄 CodeRabbit inference engine (.cursorrules)
**/*.{vue,ts,tsx}: Leverage VueUse functions for performance-enhancing utilities
Use vue-i18n in Composition API for any string literals and place new translation entries in src/locales/en/main.json
Files:
src/i18n.tsapps/desktop-ui/src/i18n.tsapps/desktop-ui/src/components/common/LanguageSelector.vuesrc/platform/settings/constants/coreSettings.ts
**/*.{ts,tsx,js}
📄 CodeRabbit inference engine (.cursorrules)
Use es-toolkit for utility functions
Files:
src/i18n.tsapps/desktop-ui/src/i18n.tssrc/platform/settings/constants/coreSettings.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursorrules)
Use TypeScript for type safety
**/*.{ts,tsx}: Never useanytype - use proper TypeScript types
Never useas anytype assertions - fix the underlying type issue
Files:
src/i18n.tsapps/desktop-ui/src/i18n.tssrc/platform/settings/constants/coreSettings.ts
**/*.{ts,tsx,js,vue}
📄 CodeRabbit inference engine (.cursorrules)
Implement proper error handling in components and services
**/*.{ts,tsx,js,vue}: Use 2-space indentation, single quotes, no semicolons, and maintain 80-character line width as configured in.prettierrc
Organize imports by sorting and grouping by plugin, and runpnpm formatbefore committing
Files:
src/i18n.tsapps/desktop-ui/src/i18n.tsapps/desktop-ui/src/components/common/LanguageSelector.vuesrc/platform/settings/constants/coreSettings.ts
src/**/*.{vue,ts}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
src/**/*.{vue,ts}: Leverage VueUse functions for performance-enhancing styles
Implement proper error handling
Use vue-i18n in composition API for any string literals. Place new translation entries in src/locales/en/main.json
Files:
src/i18n.tssrc/platform/settings/constants/coreSettings.ts
src/**/*.ts
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
src/**/*.ts: Use es-toolkit for utility functions
Use TypeScript for type safety
Files:
src/i18n.tssrc/platform/settings/constants/coreSettings.ts
**/*.{ts,tsx,js,jsx,vue}
📄 CodeRabbit inference engine (CLAUDE.md)
Use camelCase for variable and setting names in TypeScript/Vue files
Files:
src/i18n.tsapps/desktop-ui/src/i18n.tsapps/desktop-ui/src/components/common/LanguageSelector.vuesrc/platform/settings/constants/coreSettings.ts
**/*.{ts,tsx,vue}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx,vue}: Useconst settingStore = useSettingStore()andsettingStore.get('Comfy.SomeSetting')to retrieve settings in TypeScript/Vue files
Useawait settingStore.set('Comfy.SomeSetting', newValue)to update settings in TypeScript/Vue files
Check server capabilities usingapi.serverSupportsFeature('feature_name')before using enhanced features
Useapi.getServerFeature('config_name', defaultValue)to retrieve server feature configurationEnforce ESLint rules for Vue + TypeScript including: no floating promises, no unused imports, and i18n raw text restrictions in templates
Files:
src/i18n.tsapps/desktop-ui/src/i18n.tsapps/desktop-ui/src/components/common/LanguageSelector.vuesrc/platform/settings/constants/coreSettings.ts
**/*.ts
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.ts: Define dynamic setting defaults using runtime context with functions in settings configuration
UsedefaultsByInstallVersionproperty for gradual feature rollout based on version in settings configuration
Files:
src/i18n.tsapps/desktop-ui/src/i18n.tssrc/platform/settings/constants/coreSettings.ts
src/**/*.{ts,tsx,vue}
📄 CodeRabbit inference engine (src/CLAUDE.md)
src/**/*.{ts,tsx,vue}: Sanitize HTML with DOMPurify to prevent XSS attacks
Avoid using @ts-expect-error; use proper TypeScript types instead
Use es-toolkit for utility functions instead of other utility libraries
Implement proper TypeScript types throughout the codebase
Files:
src/i18n.tssrc/platform/settings/constants/coreSettings.ts
src/**/*.{vue,ts,tsx}
📄 CodeRabbit inference engine (src/CLAUDE.md)
Follow Vue 3 composition API style guide
Files:
src/i18n.tssrc/platform/settings/constants/coreSettings.ts
**/*.vue
📄 CodeRabbit inference engine (.cursorrules)
**/*.vue: Use setup() function for component logic in Vue 3 Composition API
Utilize ref and reactive for reactive state in Vue 3
Implement computed properties with computed() function
Use watch and watchEffect for side effects in Vue 3
Implement lifecycle hooks with onMounted, onUpdated, etc.
Utilize provide/inject for dependency injection in Vue 3
Use Vue 3.5 style of default prop declaration with defineProps()
Organize Vue components in <script> <style> order
Use Tailwind CSS for styling Vue components
Implement responsive design with Tailwind CSS
Do not use deprecated PrimeVue components (Dropdown, OverlayPanel, Calendar, InputSwitch, Sidebar, Chips, TabMenu, Steps, InlineMessage). Use replacements: Select, Popover, DatePicker, ToggleSwitch, Drawer, AutoComplete, Tabs, Stepper, Message respectively
Implement proper props and emits definitions in Vue components
Utilize Vue 3's Teleport component when needed
Use Suspense for async components in Vue 3
Follow Vue 3 style guide and naming conventions
Never use deprecated PrimeVue components (Dropdown, OverlayPanel, Calendar, InputSwitch, Sidebar, Chips, TabMenu, Steps, InlineMessage)Never use
:class="[]"to merge class names - always useimport { cn } from '@/utils/tailwindUtil'for class merging in Vue templates
**/*.vue: Use TypeScript with Vue 3 Single File Components (.vuefiles)
Name Vue components in PascalCase (e.g.,MenuHamburger.vue)Files:
apps/desktop-ui/src/components/common/LanguageSelector.vue**/*.{vue,html}
📄 CodeRabbit inference engine (CLAUDE.md)
Never use
dark:ordark-theme:Tailwind variants - instead use semantic values fromstyle.csstheme, e.g.bg-node-component-surfaceFiles:
apps/desktop-ui/src/components/common/LanguageSelector.vue🧠 Learnings (6)
📓 Common learnings
Learnt from: CR Repo: Comfy-Org/ComfyUI_frontend PR: 0 File: src/CLAUDE.md:0-0 Timestamp: 2025-11-24T19:47:34.324Z Learning: Applies to src/**/{components,composables}/**/*.{ts,tsx,vue} : Use vue-i18n for ALL user-facing strings by adding them to `src/locales/en/main.json`📚 Learning: 2025-11-24T19:47:34.324Z
Learnt from: CR Repo: Comfy-Org/ComfyUI_frontend PR: 0 File: src/CLAUDE.md:0-0 Timestamp: 2025-11-24T19:47:34.324Z Learning: Applies to src/**/{components,composables}/**/*.{ts,tsx,vue} : Use vue-i18n for ALL user-facing strings by adding them to `src/locales/en/main.json`Applied to files:
src/i18n.ts.i18nrc.cjsapps/desktop-ui/src/i18n.tsapps/desktop-ui/src/components/common/LanguageSelector.vue📚 Learning: 2025-11-24T19:46:52.279Z
Learnt from: CR Repo: Comfy-Org/ComfyUI_frontend PR: 0 File: .cursorrules:0-0 Timestamp: 2025-11-24T19:46:52.279Z Learning: Applies to **/*.{vue,ts,tsx} : Use vue-i18n in Composition API for any string literals and place new translation entries in src/locales/en/main.jsonApplied to files:
src/i18n.ts.i18nrc.cjsapps/desktop-ui/src/i18n.tsapps/desktop-ui/src/components/common/LanguageSelector.vue📚 Learning: 2025-11-24T19:47:02.860Z
Learnt from: CR Repo: Comfy-Org/ComfyUI_frontend PR: 0 File: .github/copilot-instructions.md:0-0 Timestamp: 2025-11-24T19:47:02.860Z Learning: Applies to src/**/*.{vue,ts} : Use vue-i18n in composition API for any string literals. Place new translation entries in src/locales/en/main.jsonApplied to files:
src/i18n.ts.i18nrc.cjsapps/desktop-ui/src/i18n.tsapps/desktop-ui/src/components/common/LanguageSelector.vue📚 Learning: 2025-11-24T19:47:14.779Z
Learnt from: CR Repo: Comfy-Org/ComfyUI_frontend PR: 0 File: CLAUDE.md:0-0 Timestamp: 2025-11-24T19:47:14.779Z Learning: Applies to **/*.{ts,tsx,vue} : Use `const settingStore = useSettingStore()` and `settingStore.get('Comfy.SomeSetting')` to retrieve settings in TypeScript/Vue filesApplied to files:
src/i18n.tsapps/desktop-ui/src/i18n.ts📚 Learning: 2025-11-24T19:47:45.616Z
Learnt from: CR Repo: Comfy-Org/ComfyUI_frontend PR: 0 File: src/components/CLAUDE.md:0-0 Timestamp: 2025-11-24T19:47:45.616Z Learning: Applies to src/components/**/*.{vue,ts,js} : Use vue-i18n for ALL UI stringsApplied to files:
.i18nrc.cjsapps/desktop-ui/src/i18n.ts🪛 ESLint
src/i18n.ts
[error] 39-39: Unable to resolve path to module './locales/zh-TW/main.json'.
(import-x/no-unresolved)
[error] 40-40: Unable to resolve path to module './locales/pt-BR/main.json'.
(import-x/no-unresolved)
[error] 55-55: Unable to resolve path to module './locales/zh-TW/nodeDefs.json'.
(import-x/no-unresolved)
[error] 56-56: Unable to resolve path to module './locales/pt-BR/nodeDefs.json'.
(import-x/no-unresolved)
[error] 71-71: Unable to resolve path to module './locales/zh-TW/commands.json'.
(import-x/no-unresolved)
[error] 72-72: Unable to resolve path to module './locales/pt-BR/commands.json'.
(import-x/no-unresolved)
[error] 87-87: Unable to resolve path to module './locales/zh-TW/settings.json'.
(import-x/no-unresolved)
[error] 88-88: Unable to resolve path to module './locales/pt-BR/settings.json'.
(import-x/no-unresolved)
🔇 Additional comments (7)
src/locales/pt-BR/nodeDefs.json (1)
1-1: pt-BR nodeDefs placeholder is fineEmpty object is valid here and matches the new pt-BR nodeDefs loader; CI/i18n tooling can safely populate it later.
src/locales/pt-BR/commands.json (1)
1-1: pt-BR commands placeholder is fineStructure matches other locale command files; good starting point for generated translations.
src/locales/pt-BR/settings.json (1)
1-1: pt-BR settings placeholder is fineValid empty JSON; aligns with the new settings loader entry for pt-BR.
src/locales/pt-BR/main.json (1)
1-1: pt-BR main placeholder is fineEmpty main.json is acceptable as a bootstrap; English will remain the fallback until pt-BR strings are generated.
.i18nrc.cjs (1)
6-13: Config change aligns CLI output with new pt-BR localeAdding
'pt-BR'tooutputLocalesmatches the new runtime loader keys and will let the i18n CLI generate the corresponding directory; looks correct and consistent with the rest of the PR.apps/desktop-ui/src/components/common/LanguageSelector.vue (1)
52-64: pt-BR added to LOCALES consistently with the rest of the i18n stackIncluding
['pt-BR', 'Português (BR)']here keepsSupportedLocaleand the selector UI in sync with the new loaders and Comfy.Locale settings. The use ofst('settings.Comfy_Locale.options.pt-BR', 'Português (BR)')fits the existing pattern—once the settings/i18n pipeline defines that key, the fallback won’t be used.Just make sure
settings.Comfy_Locale.options.pt-BR(and the corresponding option incoreSettings.ts) is present so the label is properly translated across locales.src/platform/settings/constants/coreSettings.ts (1)
406-423: pt-BR option looks good; double-check default locale detection for regional codesThe new
{ value: 'pt-BR', text: 'Português (BR)' }entry is consistent with the existing locale options. One thing to verify:defaultValuestill usesnavigator.language.split('-')[0] || 'en', so for a browser locale ofpt-BRthis will resolve to'pt', which is not in the options list. If there isn’t a separate mapping from'pt'→'pt-BR'elsewhere, users with apt-BRbrowser may not get Brazilian Portuguese as the initial default and might end up with a non-matching setting value.Please confirm how
Comfy.Localeis consumed and whether'pt'is handled specially; otherwise it may be worth adjustingdefaultValueto prefer exact matches (likept-BR) before falling back to the base language code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
CODEOWNERS (1)
57-57: Consider adding the general translations team for continuity.The code ownership entry is correct and appropriate. However, for long-term maintainability, consider including the general translations team alongside the locale-specific maintainer to ensure continuity if the primary maintainer becomes unavailable.
Apply this diff to include backup maintainers:
-/src/locales/pt-BR/ @JonatanAtila +/src/locales/pt-BR/ @JonatanAtila @Yorha4D @KarryCharon @shinshin86
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
CODEOWNERS(1 hunks)
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/{components,composables}/**/*.{ts,tsx,vue} : Use vue-i18n for ALL user-facing strings by adding them to `src/locales/en/main.json`
📚 Learning: 2025-11-24T19:47:34.324Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/{components,composables}/**/*.{ts,tsx,vue} : Use vue-i18n for ALL user-facing strings by adding them to `src/locales/en/main.json`
Applied to files:
CODEOWNERS
📚 Learning: 2025-11-24T19:47:02.860Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-11-24T19:47:02.860Z
Learning: Applies to src/**/*.{vue,ts} : Use vue-i18n in composition API for any string literals. Place new translation entries in src/locales/en/main.json
Applied to files:
CODEOWNERS
📚 Learning: 2025-11-24T19:46:52.279Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: .cursorrules:0-0
Timestamp: 2025-11-24T19:46:52.279Z
Learning: Applies to **/*.{vue,ts,tsx} : Use vue-i18n in Composition API for any string literals and place new translation entries in src/locales/en/main.json
Applied to files:
CODEOWNERS
Bundle Size ReportSummary
Category Glance Per-category breakdownApp Entry Points — 3.18 MB (baseline 3.18 MB) • 🔴 +564 BMain entry bundles and manifests
Status: 3 added / 3 removed Graph Workspace — 949 kB (baseline 949 kB) • 🟢 -110 BGraph editor runtime, canvas, workflow orchestration
Status: 1 added / 1 removed Views & Navigation — 6.54 kB (baseline 6.54 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 1 added / 1 removed Panels & Settings — 298 kB (baseline 298 kB) • 🔴 +101 BConfiguration panels, inspectors, and settings screens
Status: 7 added / 6 removed UI Components — 139 kB (baseline 139 kB) • 🟢 -62 BReusable component library chunks
Status: 5 added / 5 removed Data & Services — 12.5 kB (baseline 12.5 kB) • ⚪ 0 BStores, services, APIs, and repositories
Status: 2 added / 2 removed Utilities & Hooks — 2.94 kB (baseline 2.94 kB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 1 added / 1 removed Vendor & Third-Party — 8.56 MB (baseline 8.56 MB) • ⚪ 0 BExternal libraries and shared vendor chunks
Other — 3.84 MB (baseline 3.84 MB) • 🔴 +291 BBundles that do not match a named category
Status: 20 added / 17 removed |
eb6adab to
906fa5e
Compare
Initialize settings.json for Brazilian Portuguese locale
Initialize main.json for Brazilian Portuguese locale
Initialize commands.json for Brazilian Portuguese locale
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/locales/pt-BR/commands.json(1 hunks)src/locales/pt-BR/main.json(1 hunks)src/locales/pt-BR/nodeDefs.json(1 hunks)src/locales/pt-BR/settings.json(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/{components,composables}/**/*.{ts,tsx,vue} : Use vue-i18n for ALL user-facing strings by adding them to `src/locales/en/main.json`
🪛 Biome (2.1.2)
src/locales/pt-BR/commands.json
[error] 1-1: Expected an array, an object, or a literal but instead found the end of the file.
Expected an array, an object, or a literal here.
(parse)
src/locales/pt-BR/main.json
[error] 1-1: Expected an array, an object, or a literal but instead found the end of the file.
Expected an array, an object, or a literal here.
(parse)
src/locales/pt-BR/nodeDefs.json
[error] 1-1: Expected an array, an object, or a literal but instead found the end of the file.
Expected an array, an object, or a literal here.
(parse)
src/locales/pt-BR/settings.json
[error] 1-1: Expected an array, an object, or a literal but instead found the end of the file.
Expected an array, an object, or a literal here.
(parse)
🔇 Additional comments (1)
src/locales/pt-BR/settings.json (1)
1-1: I'll verify the current state of the file and the project's locale handling to validate the review comment's concerns.
<function_calls>
#!/bin/bash1. Check exact content of the settings.json file
echo "=== Content of src/locales/pt-BR/settings.json ==="
cat -A src/locales/pt-BR/settings.json 2>&1 | head -202. Check file size
echo -e "\n=== File size ==="
wc -l src/locales/pt-BR/settings.json 2>&13. Verify with jq if it's valid JSON
echo -e "\n=== JSON validation with jq ==="
jq empty src/locales/pt-BR/settings.json 2>&14. Check other pt-BR locale files
echo -e "\n=== Other pt-BR locale files ==="
find src/locales/pt-BR -type f -name "*.json" 2>/dev/null | sort
</function_calls><function_calls>
#!/bin/bashVerify each pt-BR locale file's validity
echo "=== Validating all pt-BR locale files ==="
for file in $(find src/locales/pt-BR -type f -name "*.json" 2>/dev/null | sort); do
echo "File: $file"
echo -n " Content: "
cat "$file" | head -1
echo -n " JQ validation: "
if jq empty "$file" 2>&1; then
echo "✓ VALID"
else
echo "✗ INVALID"
fi
echo ""
done
</function_calls><function_calls>
#!/bin/bashSearch for CI/build configuration that might handle locale files
echo "=== Searching for CI configuration ==="
find . -type f ( -name ".github" -o -name ".yml" -o -name ".yaml" -o -name ".gitignore" -o -name "package.json" -o -name "tsconfig.json" ) 2>/dev/null | head -20echo -e "\n=== Checking for locale-related build scripts ==="
rg -l "locale|i18n|pt-BR" --type=json --type=yaml --type=ts --max-count=20 2>/dev/null | head -20
</function_calls><function_calls>
#!/bin/bashCheck for locale loading/parsing logic
echo "=== Searching for locale loading code ==="
rg -nC3 "locales|pt-BR|i18n.*load|import.*locale" --type=ts --type=js --max-count=50 2>/dev/null | head -100
</function_calls><function_calls>
#!/bin/bashFind how locales are structured - check other locale directories
echo "=== Directory structure of locales ==="
find src/locales -type d 2>/dev/null | sortecho -e "\n=== Comparing locale file structure across languages ==="
for lang_dir in $(find src/locales -maxdepth 1 -type d ! -name "locales" 2>/dev/null | head -5); do
echo "Language dir: $lang_dir"
ls -la "$lang_dir"/*.json 2>/dev/null | awk '{print $NF}' | head -5
echo ""
done
</function_calls>
Added additional code owners for the pt-BR translations.
christian-byrne
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@JonatanAtila Thanks for contributing and volunteering to help maintain the pt-BR locales. Really appreciated!
|
@JonatanAtila Just one thing to note: currently, we have a bug in the scripts that generate locales (for all languages). This is not related to your PR, it was a pre-existing bug. So until that is fixed (<1 week), the pt-BR locales won't be generated. Thanks for your patience. cc: @snomiao |

Finalmente o idioma em Portugues do Brasil verá a luz do dia (se tudo correr bem).
What has been done:
Added pt-BR to .i18nrc.cjs and settings
Included loaders in src/i18n.ts and apps/desktop-ui/src/i18n.ts
Now Portuguese (BR) is displayed in the language selector
Created empty main.json, commands.json, settings.json and nodeDefs.json files to be populated by CI
Checklist: the language appears in the dropdown list, selection occurs without errors, the fallback to English, in case technical terms have no translation, is working correctly.
I will maintain the pt-br translation and review for as long as necessary.