Skip to content

Commit 5d1310d

Browse files
Copilotgeorge-gca
andauthored
fix: correct i18n locale normalization and address code review feedback
Agent-Logs-Url: https://github.com/george-gca/expiring_products/sessions/5e766290-e7d8-4409-9762-df7fc2438a1c Co-authored-by: george-gca <31376482+george-gca@users.noreply.github.com>
1 parent 7384d6a commit 5d1310d

8 files changed

Lines changed: 18 additions & 16 deletions

File tree

src/components/EditItemModal.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ export default function EditItemModal({ show, item, category, onClose }: EditIte
1818
const [discarded, setDiscarded] = useState(0);
1919

2020
const total = opened + consumed + discarded;
21-
const invalid = total > item.quantity;
21+
const exceedsAvailableQuantity = total > item.quantity;
2222

2323
async function handleSubmit(e: React.FormEvent) {
2424
e.preventDefault();
25-
if (invalid) return;
25+
if (exceedsAvailableQuantity) return;
2626

2727
// Each operation may change the item's quantity in the DB, so we pass a
2828
// synthetic item with the remaining quantity to avoid using stale data in
@@ -55,7 +55,7 @@ export default function EditItemModal({ show, item, category, onClose }: EditIte
5555
</div>
5656
<form onSubmit={handleSubmit}>
5757
<div className="modal-body">
58-
{invalid && <div className="alert alert-danger">{t('quantity_exceeded')}</div>}
58+
{exceedsAvailableQuantity && <div className="alert alert-danger">{t('quantity_exceeded')}</div>}
5959
<div className="mb-3">
6060
<label className="form-label">{t('opened_items')}</label>
6161
<div className="input-group">
@@ -83,7 +83,7 @@ export default function EditItemModal({ show, item, category, onClose }: EditIte
8383
</div>
8484
<div className="modal-footer">
8585
<button type="button" className="btn btn-secondary" onClick={onClose}>{t('close')}</button>
86-
<button type="submit" className="btn btn-primary" disabled={invalid}>{t('edit')}</button>
86+
<button type="submit" className="btn btn-primary" disabled={exceedsAvailableQuantity}>{t('edit')}</button>
8787
</div>
8888
</form>
8989
</div>

src/components/LanguageToggle.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ export default function LanguageToggle() {
66
const { language, setLanguage } = useSettingsStore();
77

88
function toggle() {
9-
const next = language === 'en-us' ? 'pt-br' : 'en-us';
9+
const next = language === 'en-US' ? 'pt-BR' : 'en-US';
1010
setLanguage(next);
1111
i18n.changeLanguage(next).catch(console.error);
1212
}
1313

1414
return (
1515
<button className="btn btn-outline-info" onClick={toggle}>
16-
{language === 'en-us' ? 'PT-BR' : 'EN-US'}
16+
{language === 'en-US' ? 'PT-BR' : 'EN-US'}
1717
</button>
1818
);
1919
}

src/i18n/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ const language = useSettingsStore.getState().language;
88

99
i18n.use(initReactI18next).init({
1010
resources: {
11-
'en-us': { translation: enUs },
12-
'pt-br': { translation: ptBr },
11+
'en-US': { translation: enUs },
12+
'pt-BR': { translation: ptBr },
1313
},
1414
lng: language,
15-
fallbackLng: 'pt-br',
15+
fallbackLng: 'pt-BR',
16+
load: 'currentOnly',
1617
interpolation: { escapeValue: false },
18+
initImmediate: false,
1719
});
1820

1921
export default i18n;

src/i18n/locales/pt-br.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
"import_data": "Importar dados",
1313
"item_name": "Nome",
1414
"medicines": "Medicamentos",
15-
"no_items": "Não há items aqui.",
16-
"no_items_to_export": "Não há items para exportar.",
15+
"no_items": "Não há itens aqui.",
16+
"no_items_to_export": "Não há itens para exportar.",
1717
"opened_items": "Itens abertos",
1818
"options": "Opções",
1919
"products_to_expire": "Produtos a vencer",

src/store/settingsStore.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { create } from 'zustand';
22
import { persist } from 'zustand/middleware';
33

4-
export type Language = 'en-us' | 'pt-br';
4+
export type Language = 'en-US' | 'pt-BR';
55

66
interface SettingsState {
77
language: Language;
@@ -11,7 +11,7 @@ interface SettingsState {
1111
export const useSettingsStore = create<SettingsState>()(
1212
persist(
1313
(set) => ({
14-
language: 'pt-br',
14+
language: 'pt-BR',
1515
setLanguage: (language) => set({ language }),
1616
}),
1717
{ name: 'expiring-products-settings' }

src/test/components/ItemCard.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ vi.mock('react-i18next', () => ({
1717
// Mock settingsStore
1818
vi.mock('../../store/settingsStore', () => ({
1919
useSettingsStore: (selector: (s: { language: string }) => unknown) =>
20-
selector({ language: 'en-us' }),
20+
selector({ language: 'en-US' }),
2121
}));
2222

2323
const baseItem: Item = {

src/test/components/SettingsTab.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ vi.mock('../../store/itemsStore', () => ({
1818

1919
vi.mock('../../store/settingsStore', () => ({
2020
useSettingsStore: (selector?: (s: { language: string; setLanguage: () => void }) => unknown) => {
21-
const state = { language: 'en-us', setLanguage: vi.fn() };
21+
const state = { language: 'en-US', setLanguage: vi.fn() };
2222
return selector ? selector(state) : state;
2323
},
2424
}));

src/utils/dateUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { Language } from '../store/settingsStore';
77
* @returns Luxon-compatible locale string
88
*/
99
export function appLocaleToLuxonLocale(language: Language): string {
10-
return language === 'en-us' ? 'en-US' : 'pt-BR';
10+
return language === 'en-US' ? 'en-US' : 'pt-BR';
1111
}
1212

1313
export function isExpired(isoDate: string): boolean {

0 commit comments

Comments
 (0)