fix: review corrections for PR #86

- Remove .codex (Codex CLI artifact, not part of project)
- Restore CHANGELOG.md v0.23.17 entry (was deleted by contributor's fork)
- Restore version to 0.23.17 in package.json and package-lock.json
- Restore native translations for catFood, catLeisure, catEducation in ar, el,
  hi, ja, ru, sv, tr, uk, zh (PR had replaced them with English strings)
- Replace Portuguese seed names in migration 16 with English (housing, food,
  transport, personal_health, leisure, shopping_clothing, education,
  financial_other and all subcategory display names)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ulas Kalayci
2026-04-25 17:01:06 +02:00
parent bdd6e559d5
commit 95934bac23
14 changed files with 75 additions and 70 deletions
View File
+5
View File
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.23.17] - 2026-04-25
### Fixed
- Italian (it) locale: translated all missing strings in the recipes section (`nav.recipes`, `meals.savedRecipeLabel`, `meals.savedRecipePlaceholder`, `meals.saveAsRecipe`, `meals.recipeScaleLabel`, and all `recipes.*` keys) — contributed by @albanobattistella
## [0.23.16] - 2026-04-24
### Changed
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "oikos",
"version": "0.23.16",
"version": "0.23.17",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "oikos",
"version": "0.23.16",
"version": "0.23.17",
"license": "MIT",
"dependencies": {
"bcrypt": "^6.0.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "oikos",
"version": "0.23.16",
"version": "0.23.17",
"description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.",
"main": "server/index.js",
"type": "module",
+3 -3
View File
@@ -463,14 +463,14 @@
"trendNeutral": "- مثل {{month}}",
"validAmountRequired": "أدخل مبلغاً صحيحاً",
"dateRequired": "التاريخ مطلوب",
"catFood": "Food",
"catFood": "الطعام",
"catRent": "الإيجار",
"catInsurance": "التأمين",
"catMobility": "التنقل",
"catLeisure": "Leisure and Entertainment",
"catLeisure": "الترفيه",
"catClothing": "الملابس",
"catHealth": "الصحة",
"catEducation": "Education",
"catEducation": "التعليم",
"catMisc": "متنوع",
"catEarnedIncome": "دخل العمل",
"catInvestmentIncome": "دخل الاستثمار",
+3 -3
View File
@@ -463,14 +463,14 @@
"trendNeutral": "- ίδιο με {{month}}",
"validAmountRequired": "Παρακαλώ εισαγάγετε έγκυρο ποσό",
"dateRequired": "Η ημερομηνία είναι υποχρεωτική",
"catFood": "Food",
"catFood": "Τρόφιμα",
"catRent": "Ενοίκιο",
"catInsurance": "Ασφάλεια",
"catMobility": "Μεταφορές",
"catLeisure": "Leisure and Entertainment",
"catLeisure": "Ελεύθερος χρόνος",
"catClothing": "Ρουχισμός",
"catHealth": "Υγεία",
"catEducation": "Education",
"catEducation": "Εκπαίδευση",
"catMisc": "Διάφορα",
"catEarnedIncome": "Εισόδημα από εργασία",
"catInvestmentIncome": "Επενδυτικό εισόδημα",
+3 -3
View File
@@ -463,14 +463,14 @@
"trendNeutral": "- {{month}} जैसा",
"validAmountRequired": "वैध राशि दर्ज करें",
"dateRequired": "तारीख आवश्यक है",
"catFood": "Food",
"catFood": "भोजन",
"catRent": "किराया",
"catInsurance": "बीमा",
"catMobility": "परिवहन",
"catLeisure": "Leisure and Entertainment",
"catLeisure": "मनोरंजन",
"catClothing": "कपड़े",
"catHealth": "स्वास्थ्य",
"catEducation": "Education",
"catEducation": "शिक्षा",
"catMisc": "विविध",
"catEarnedIncome": "कमाई आय",
"catInvestmentIncome": "निवेश आय",
+3 -3
View File
@@ -463,14 +463,14 @@
"trendNeutral": "- {{month}} と同じ",
"validAmountRequired": "有効な金額を入力してください",
"dateRequired": "日付は必須です",
"catFood": "Food",
"catFood": "食費",
"catRent": "家賃",
"catInsurance": "保険",
"catMobility": "交通費",
"catLeisure": "Leisure and Entertainment",
"catLeisure": "娯楽",
"catClothing": "衣服",
"catHealth": "医療",
"catEducation": "Education",
"catEducation": "教育",
"catMisc": "その他",
"catEarnedIncome": "給与・報酬",
"catInvestmentIncome": "投資収入",
+3 -3
View File
@@ -463,14 +463,14 @@
"trendNeutral": "— как в {{month}}",
"validAmountRequired": "Введите корректную сумму",
"dateRequired": "Дата обязательна",
"catFood": "Food",
"catFood": "Продукты",
"catRent": "Аренда",
"catInsurance": "Страховка",
"catMobility": "Транспорт",
"catLeisure": "Leisure and Entertainment",
"catLeisure": "Досуг",
"catClothing": "Одежда",
"catHealth": "Здоровье",
"catEducation": "Education",
"catEducation": "Образование",
"catMisc": "Разное",
"catEarnedIncome": "Трудовой доход",
"catInvestmentIncome": "Инвестиционный доход",
+3 -3
View File
@@ -463,14 +463,14 @@
"trendNeutral": "- samma som {{month}}",
"validAmountRequired": "Ange ett giltigt belopp",
"dateRequired": "Datum krävs",
"catFood": "Food",
"catFood": "Specerier",
"catRent": "Hyra",
"catInsurance": "Försäkring",
"catMobility": "Transport",
"catLeisure": "Leisure and Entertainment",
"catLeisure": "Fritid",
"catClothing": "Kläder",
"catHealth": "Hälsa",
"catEducation": "Education",
"catEducation": "Utbildning",
"catMisc": "Diverse",
"catEarnedIncome": "Arbetsinkomst",
"catInvestmentIncome": "Investeringsinkomst",
+3 -3
View File
@@ -463,14 +463,14 @@
"trendNeutral": "- {{month}} ile aynı",
"validAmountRequired": "Lütfen geçerli bir tutar girin",
"dateRequired": "Tarih zorunludur",
"catFood": "Food",
"catFood": "Market",
"catRent": "Kira",
"catInsurance": "Sigorta",
"catMobility": "Ulaşım",
"catLeisure": "Leisure and Entertainment",
"catLeisure": "Eğlence",
"catClothing": "Giyim",
"catHealth": "Sağlık",
"catEducation": "Education",
"catEducation": "Eğitim",
"catMisc": "Diğer",
"catEarnedIncome": "Kazanç Geliri",
"catInvestmentIncome": "Yatırım Geliri",
+3 -3
View File
@@ -463,14 +463,14 @@
"trendNeutral": "— так само, як у {{month}}",
"validAmountRequired": "Будь ласка, введіть коректну суму",
"dateRequired": "Дата є обов'язковою",
"catFood": "Food",
"catFood": "Продукти",
"catRent": "Оренда",
"catInsurance": "Страхування",
"catMobility": "Транспорт",
"catLeisure": "Leisure and Entertainment",
"catLeisure": "Дозвілля",
"catClothing": "Одяг",
"catHealth": "Здоров'я",
"catEducation": "Education",
"catEducation": "Освіта",
"catMisc": "Різне",
"catEarnedIncome": "Трудовий дохід",
"catInvestmentIncome": "Інвестиційний дохід",
+3 -3
View File
@@ -463,14 +463,14 @@
"trendNeutral": "- 与 {{month}} 相同",
"validAmountRequired": "请输入有效金额",
"dateRequired": "日期为必填项",
"catFood": "Food",
"catFood": "食品",
"catRent": "租金",
"catInsurance": "保险",
"catMobility": "出行",
"catLeisure": "Leisure and Entertainment",
"catLeisure": "休闲",
"catClothing": "服装",
"catHealth": "健康",
"catEducation": "Education",
"catEducation": "教育",
"catMisc": "其他",
"catEarnedIncome": "劳动收入",
"catInvestmentIncome": "投资收入",
+40 -40
View File
@@ -606,14 +606,14 @@ const MIGRATIONS = [
);
INSERT OR IGNORE INTO budget_categories (key, name, type, sort_order) VALUES
('housing', 'Habitação / Casa', 'expense', 0),
('food', 'Alimentação', 'expense', 1),
('transport', 'Transporte', 'expense', 2),
('personal_health', 'Cuidados Pessoais / Saúde', 'expense', 3),
('leisure', 'Lazer e Entretenimento', 'expense', 4),
('shopping_clothing', 'Compras e Vestuário', 'expense', 5),
('education', 'Educação', 'expense', 6),
('financial_other', 'Serviços Financeiros e Outros', 'expense', 7),
('housing', 'Housing / Home', 'expense', 0),
('food', 'Food', 'expense', 1),
('transport', 'Transport', 'expense', 2),
('personal_health', 'Personal Care / Health', 'expense', 3),
('leisure', 'Leisure and Entertainment', 'expense', 4),
('shopping_clothing', 'Shopping and Clothing', 'expense', 5),
('education', 'Education', 'expense', 6),
('financial_other', 'Financial Services and Other', 'expense', 7),
('Erwerbseinkommen', 'Erwerbseinkommen', 'income', 0),
('Kapitalerträge', 'Kapitalerträge', 'income', 1),
('Geschenke & Transfers', 'Geschenke & Transfers', 'income', 2),
@@ -621,40 +621,40 @@ const MIGRATIONS = [
('Sonstiges Einkommen', 'Sonstiges Einkommen', 'income', 4);
INSERT OR IGNORE INTO budget_subcategories (key, category_key, name, sort_order) VALUES
('rent_mortgage', 'housing', 'Aluguel / Prestação', 0),
('condominium', 'housing', 'Condomínio', 1),
('utilities', 'housing', 'Luz / Água / Gás', 2),
('internet_tv_phone', 'housing', 'Internet / TV / Telefone', 3),
('renovation_maintenance', 'housing', 'Reforma / Manutenção', 4),
('cleaning', 'housing', 'Limpeza', 5),
('groceries', 'food', 'Supermercado', 0),
('restaurants_bars', 'food', 'Restaurante / Bares', 1),
('snacks_fast_food', 'food', 'Lanches / Fast Food', 2),
('bakery', 'food', 'Padaria', 3),
('fuel', 'transport', 'Combustível', 0),
('parking_tolls', 'transport', 'Estacionamento / Pedágio', 1),
('public_transport', 'transport', 'Transporte Público', 2),
('apps_taxi', 'transport', 'Aplicativos / Táxi', 3),
('maintenance_insurance', 'transport', 'Manutenção / Seguro', 4),
('pharmacy', 'personal_health', 'Farmácia', 0),
('health_insurance', 'personal_health', 'Plano de Saúde', 1),
('gym_sports', 'personal_health', 'Academia / Esportes', 2),
('beauty_cosmetics', 'personal_health', 'Beleza / Cosméticos', 3),
('travel', 'leisure', 'Viagens', 0),
('rent_mortgage', 'housing', 'Rent / Mortgage', 0),
('condominium', 'housing', 'Condominium fees', 1),
('utilities', 'housing', 'Electricity / Water / Gas', 2),
('internet_tv_phone', 'housing', 'Internet / TV / Phone', 3),
('renovation_maintenance', 'housing', 'Renovation / Maintenance', 4),
('cleaning', 'housing', 'Cleaning', 5),
('groceries', 'food', 'Groceries', 0),
('restaurants_bars', 'food', 'Restaurants / Bars', 1),
('snacks_fast_food', 'food', 'Snacks / Fast Food', 2),
('bakery', 'food', 'Bakery', 3),
('fuel', 'transport', 'Fuel', 0),
('parking_tolls', 'transport', 'Parking / Tolls', 1),
('public_transport', 'transport', 'Public transport', 2),
('apps_taxi', 'transport', 'Apps / Taxi', 3),
('maintenance_insurance', 'transport', 'Maintenance / Insurance', 4),
('pharmacy', 'personal_health', 'Pharmacy', 0),
('health_insurance', 'personal_health', 'Health insurance', 1),
('gym_sports', 'personal_health', 'Gym / Sports', 2),
('beauty_cosmetics', 'personal_health', 'Beauty / Cosmetics', 3),
('travel', 'leisure', 'Travel', 0),
('streaming', 'leisure', 'Streaming', 1),
('events', 'leisure', 'Eventos', 2),
('events', 'leisure', 'Events', 2),
('hobbies', 'leisure', 'Hobbies', 3),
('clothes_shoes', 'shopping_clothing', 'Roupas / Calçados', 0),
('electronics', 'shopping_clothing', 'Eletrônicos', 1),
('gifts', 'shopping_clothing', 'Presentes', 2),
('courses_college', 'education', 'Cursos / Faculdade', 0),
('school_supplies', 'education', 'Material Escolar', 1),
('languages', 'education', 'Idiomas', 2),
('loans_interest', 'financial_other', 'Empréstimos / Juros', 0),
('bank_fees', 'financial_other', 'Tarifas Bancárias', 1),
('insurance_other', 'financial_other', 'Seguros', 2),
('investments', 'financial_other', 'Investimentos', 3),
('taxes', 'financial_other', 'Impostos', 4);
('clothes_shoes', 'shopping_clothing', 'Clothes / Shoes', 0),
('electronics', 'shopping_clothing', 'Electronics', 1),
('gifts', 'shopping_clothing', 'Gifts', 2),
('courses_college', 'education', 'Courses / College', 0),
('school_supplies', 'education', 'School supplies', 1),
('languages', 'education', 'Languages', 2),
('loans_interest', 'financial_other', 'Loans / Interest', 0),
('bank_fees', 'financial_other', 'Bank fees', 1),
('insurance_other', 'financial_other', 'Insurance', 2),
('investments', 'financial_other', 'Investments', 3),
('taxes', 'financial_other', 'Taxes', 4);
INSERT OR IGNORE INTO budget_categories (key, name, type, sort_order)
SELECT category, category, CASE WHEN amount < 0 THEN 'expense' ELSE 'income' END, 1000