Головне
- Вибір мови змінював налаштування, але не завжди надійно перемальовував застосунок цією мовою — це оновлення виправляє причину, а не симптом.
- Фінальне, спрощене рішення: застосунок тепер керує мовою через єдиний механізм, який читає сама iOS, тож більше немає ризику, що половина екрана одна мовою, а половина — іншою.
- Дорогою аудит експорту виявив 402 ключі перекладу, які застосунок реально використовує, але яких не було в жодному неанглійському файлі мови — тепер вони заповнені для всіх восьми мов.
- Того ж дня з'явився новий теплий темний режим «dark rose», а в Налаштуваннях — перемикач вигляду (Система/Світла/Темна).
- Усе це вийшло в білдах TestFlight 15, 16 і 17.
Про що це оновлення
Привіт, я Сергій, засновник Mommy Refuel. Через два дні після того, як я додав шість нових мов і вибір мови при першому запуску, я сів це перевірити — і виявив, що вибір мови насправді не робив того, що обіцяв. Це оновлення про те, як я виправив це по-справжньому, плюс новий темний режим, що вийшов поруч. Розповідаю реальну послідовність подій, включно з невдалою першою спробою, бо краще ви знатимете, що насправді сталося, ніж прочитаєте охайний підсумок, який пропускає момент, коли перше виправлення було не зовсім правильним.
Баг: вибір мови не завжди справді її змінював
Вибір мови коректно записувався в налаштування, але нічого насправді не казало запущеному застосунку перечитати свій текст новою мовою — тож інтерфейс міг лишитися точно таким самим. Моє перше виправлення, того ж ранку, додало LocalizationManager, який при запуску перепризначає текстовий бандл застосунку так, щоб він брав рядки з обраної мови, плюс живий режим, який на льоту підміняв бандл і перемальовував видимий екран. Перевірене в симуляторі при перемиканні українська → німецька → англійська, воно працювало, і я випустив його як білд 15.
Але це виправлення використовувало одразу два окремі механізми: мою власну підміну бандла для тексту та окреме перевизначення локалі в SwiftUI, поряд із системним налаштуванням (AppleLanguages), яким сама iOS користується для частини вбудованої поведінки. Коли ці два розходилися — наприклад, моє перевизначення казало «українська», а системне налаштування досі казало «англійська» — частина екрана відображалася однією мовою, а частина іншою. Це гірший баг, ніж той, з якого я почав, бо він непослідовний, а не просто неправильний.
Справжнє виправлення: одне єдине джерело правди
Чесне рішення полягало в тому, щоб прибрати складність, а не додавати ще одну. Я повністю видалив кастомну підміну бандла й перевизначення локалі в SwiftUI, тож тепер застосунок пише лише в AppleLanguages — єдине налаштування, з якого читають і видимий текст, і власний механізм розпізнавання рядків самої системи. Двом механізмам більше нема як розійтися, бо він тепер один. Ціна цього — зміна мови тепер повністю застосовується при наступному відкритті застосунку, а не миттєво посеред сесії, і це насправді звичайна поведінка iOS (так завжди працювало Налаштування → Мова); тепер застосунок прямо про це й каже.
402 переклади, яких тихо бракувало
Поки я був у коді локалізації, я запустив власний інструмент експорту Xcode як аудит, і він виявив дещо гірше за баг вище: приблизно 438 текстових ключів, які застосунок реально використовує в коді, взагалі не мали запису в більшості файлів мов — включно з українською. Такі речі, як «Діти», «1 дитина», підрахунок тижнів і текст тижневого звіту, мовчки поверталися до англійської на кожному неанглійському телефоні, і так було відколи ці функції вийшли. Я переклав 422 реальні текстові ключі для всіх восьми неанглійських мов і додав їх у кожен файл мови; 13 ключів були суто форматними (без тексту для перекладу), а 3 рядки про кризові ситуації й безпеку свідомо лишаються англійською до професійного перегляду — та сама політика, що й завжди. Після цього я повторно запустив експорт, щоб переконатися, що пробілів більше не лишилося.
Останній повний прохід по всіх мовах вручну знайшов ще одну помилку: підпис вкладки «Timeline» німецькою залишався англійською, тоді як усі інші мови мали власне слово. Виправлено.

Новий темний режим і спосіб його обрати
Того ж ранку я переробив темну тему застосунку в теплий вигляд «dark rose», повністю побудований на наявній системі колірних токенів, тож кожен екран перетемнюється автоматично, без окремої роботи для кожного. Фон піднімається до теплого графіту замість майже-чорного, акцентний колір перемикається з бордового на м'який рожевий, щоб не губитися на темному фоні, а панель вкладок отримує щільніший, структурованіший вигляд із теплим виділенням активного пункту. Світлий режим лишився недоторканим.
Поруч із цим у Налаштуваннях з'явився явний пункт «Вигляд» — Система, Світла чи Темна — за тим самим принципом, що й налаштування мови, і він застосовується миттєво й повністю, без перезапуску (на нього не поширюється те саме обмеження часу запуску iOS, що й на мову). Також я виправив сам рядок мови так, щоб він показував правильну рідну назву для кожної з восьми мов застосунку, а не лише для англійської й української.

Де і коли
- 09:30 — Випущено новий теплий темний режим «dark rose», побудований на наявній системі колірних токенів; світлий режим не змінено (ad137fb).
- 09:35 — Перше виправлення перемикання мови: LocalizationManager перепризначає бандл застосунку й перемальовує екран наживо (c3ae0fa). Вийшло як білд 15.
- 09:44 — У Налаштування додано пункт «Вигляд» (Система/Світла/Темна); рядок мови тепер показує правильну рідну назву для всіх восьми мов (8bb1219).
- 09:51 — Білд піднято до 15 (v2.0.1) для TestFlight, з повною локалізацією, живим перемиканням мови, темним режимом, Запасами/Витратами й виправленням DAU (9d06eef).
- 10:02 — Номер білда для iOS піднято ще раз для TestFlight (73e024c). Білд 16.
- 10:18 — Аудит експорту виявляє 402 реальні ключі перекладу, яких бракувало в усіх восьми неанглійських мовах; перекладено, додано, перевірено формат (061a664).
- 10:28 — Виправлення причини: мова тепер керується лише через AppleLanguages, єдиний механізм, який читають і інтерфейс, і iOS; усунено баг двох механізмів із ранкового першого виправлення (6158c87).
- 10:51 — Повна перевірка якості по всіх восьми мовах знаходить і виправляє останню помилку: підпис вкладки «Timeline» німецькою (602e173).
- 11:04 — Білд піднято до 17 для TestFlight, з виправленням причини мовного бага й заповненими перекладами (8e5fd94).
Що далі
Я краще прилюдно покажу, як виправляю таку помилку, ніж вдаватиму, що білд 15 одразу був правильним. Білди з 15 по 17 вийшли в TestFlight того ж тижня; реліз в App Store з цією роботою вийде окремо, з моїм власним завантаженням. Наступне в перекладах: провести кризові й безпекові рядки новіших мов через професійний людський перегляд, щоб чесно зняти англійський запасний варіант, а не лишати його на машинному чорновику.

Питання, які ставлять мами
Зміна мови застосунку тепер застосовується миттєво?
Видимий текст оновлюється одразу для більшості екрана, але повністю зміна застосовується при наступному відкритті застосунку — так само працює зміна мови в самій iOS, і Налаштування тепер прямо про це кажуть.
Чи вплинув баг локалізації на мої нотатки чи дані?
Ні. Це була суто проблема відображення — якою мовою показувався текст, — і ніяк не стосувалася того, як ваші дані зберігаються, рахуються чи захищаються.
Застосунок тепер повністю перекладений усіма мовами?
402 ключі, яких бракувало і які виявило це оновлення, заповнені для всіх восьми неанглійських мов. Невелика кількість рядків про кризові ситуації й безпеку свідомо лишається англійською скрізь, крім англійської й української, до професійного перегляду.
Як увімкнути темний режим?
Перейдіть у Налаштування → Вигляд і оберіть Темний (або Система, щоб слідувати налаштуванню телефону). Застосовується миттєво.
На якому білді має бути все це?
Білд 17 або новіший у TestFlight містить і виправлення мови, і заповнені переклади, і новий темний режим разом.
Доступність може залежати від встановленої версії застосунку. Статуси підтверджені засновником на момент публікації.



