Skip to content

EMI: feat: say what each My data row and export file is for - #370

Merged
juliantellez merged 2 commits into
mainfrom
emi-feat-my-data-and-export-words
Oct 21, 2026
Merged

juliantellez merged 2 commits into
mainfrom
emi-feat-my-data-and-export-words

Conversation

@juliantellez

Copy link
Copy Markdown
Contributor

What. This changes the words of the My data rows and the export screen in English, Spanish and Russian, so each row says what it does for her. Each export file now has a line that says what it holds and its format.

Why. The review by a native speaker (Polina) said that "One press, and it's gone for good" was too harsh, and that the export did not say what she gets. Step 25 changed the Russian only. This step moves English and Spanish to the same meaning.

flowchart LR
  A["Review by a native speaker"] --> B["Meaning of each row and file"]
  B --> C["English, Spanish and Russian catalogues"]
  C --> D["My data rows"]
  C --> E["Export tiles with a line for what each file holds"]
Loading

No canvas board exists for this step. The export tiles keep the existing look: the new line under each name uses the body small style and the secondary text colour of the settings rows.

My data, English (before, after)

My data, Russian (before, after)

Download data, English (before, after)

Download data, Russian (before, after)

I captured all pictures on the iPhone SE (3rd generation) simulator, from Metro on this checkout. The before pictures are from main at 6677b83. The after pictures are from this branch at 3f4ef5d. They are observed, not rendered. I made no export file on the phone and sent nothing anywhere.

Stack. Step 25, #363, merged before this branch was cut, so this pull request is based on main. Step 31, #369, is the sibling for Insights. This pull request touches none of its keys.

Issue. Closes #324, #324. This is the last step for the issue. It closes together with #363 (merged) and #369.

Draft text for review. Each line: the key, then English, Russian and Spanish, old and new.

  • settings.settings.answersLine. EN: "What you told us when you started" to "Your name and your answers from setup". RU: «Имя и ответы из первой настройки» (no change, step 25). ES: «Lo que nos contaste al empezar» to «Tu nombre y tus respuestas de la configuración inicial».
  • settings.settings.lock. EN: "Lock" to "App lock". RU: «Блокировка входа» (no change). ES: «Bloqueo» to «Bloqueo de la aplicación».
  • settings.settings.lockLine. EN: "On, with your face or your passcode" to "Face ID, Touch ID or your phone passcode". RU: «Включена: по лицу или по коду доступа» to «Face ID, Touch ID или код телефона». ES: «Activado, con tu cara o tu código de acceso» to «Face ID, Touch ID o el código de tu teléfono».
  • settings.settings.export. EN: "Export" to "Download data". RU: «Скачать данные» (no change). ES: «Exportar» to «Descargar datos».
  • settings.settings.exportLine. EN: "Two files, made on this phone" to "Save your records or make a report for your doctor". RU: «Сохранить записи или подготовить отчёт для врача» (no change). ES: «Dos archivos, creados en este teléfono» to «Guarda tus registros o prepara un informe para tu médico».
  • settings.settings.delete. EN: "Delete everything" to "Delete data". RU: «Удалить данные» (no change). ES: «Borrarlo todo» to «Borrar datos».
  • settings.settings.deleteLine. EN: "One press, and it's gone for good" to "Delete your records and settings". RU: «Удалить записи и настройки» (no change). ES: «Una pulsación, y desaparece para siempre» to «Borra tus registros y tus ajustes».
  • export.title. EN: "Export" to "Download data". RU: «Скачать данные» (no change). ES: «Exportar» to «Descargar datos».
  • export.what. EN: "Two files: one you can read or give to your doctor, and one another app can open." to "Save a report for yourself or your doctor, and a file with all your records. Both files are made together, and you can share each one on its own." RU: «Можно сохранить отчёт для себя или врача и файл для переноса записей в другое приложение.» to «Можно сохранить отчёт для себя или врача и файл со всеми записями. Оба файла создаются вместе, и каждым можно поделиться отдельно.» ES: «Dos archivos: uno que puedes leer o dar a tu médico, y otro que puede abrir otra aplicación.» to «Guarda un informe para ti o para tu médico, y un archivo con todos tus registros. Los dos archivos se crean a la vez, y puedes compartir cada uno por separado.»
  • export.forADoctor. EN: "For a doctor" to "Report for your doctor". RU: «Отчёт для врача» (no change). ES: «Para un médico» to «Informe para tu médico».
  • export.forADoctorLine (new). EN: "Your period dates and day entries, as a web page (.html)". RU: «Даты месячных и записи о самочувствии, страница для браузера (.html)». ES: «Tus fechas de periodo y tus registros diarios, como página web (.html)».
  • export.forAnApplication. EN: "For an application" to "Data file". RU: «Файл с данными» (no change). ES: «Para una aplicación» to «Archivo de datos».
  • export.forAnApplicationLine (new). EN: "Everything you logged, in a .json file other apps can open". RU: «Все ваши записи в файле .json, который открывают другие приложения». ES: «Todo lo que registraste, en un archivo .json que otras aplicaciones pueden abrir».
  • export.where. EN: "Nothing is sent anywhere. The files are made on this phone, and you decide who gets them." to "The files are made on your phone. You choose where to save them and who to send them to." RU: «Файлы создаются на вашем телефоне. Вы сами выбираете, где их сохранить и кому отправить.» (no change). ES: «No se envía nada a ninguna parte. Los archivos se crean en este teléfono, y tú decides quién los recibe.» to «Los archivos se crean en tu teléfono. Tú eliges dónde guardarlos y a quién enviarlos.»

Decisions.

  • The heading stays "Privacy" («Приватность»). Polina asks for «Ваши данные». Test 17.1 holds the heading equal to the dock word, and calls "Privacy" the word the operator chose. I tried "Your data" and 17.1 failed on 8 tests, so I put the word back. A change of the dock word and the heading is a decision for the operator.
  • lockLine: Polina wrote «Face ID или код телефона». An iPhone SE has Touch ID, so I added Touch ID. I removed "On": features/lock/LockGate.tsx opens the app without a prompt when the phone has nothing enrolled, so "On" is not true on every phone. I read features/lock/deviceLock.ts: it asks the phone with disableDeviceFallback: false, so the passcode is the way past a failed face or finger. The app ships for iOS only (no android folder), so the Apple names are true.
  • forAnApplicationLine: Polina wrote «Для переноса записей в совместимое приложение». No app is known to import the Emi file, so "transfer to a compatible app" is not true in the code. I used the nearest true line: the file is .json (features/export/files.ts), which other apps can open. For the same reason, export.what in Russian now says «файл со всеми записями» in place of «файл для переноса записей в другое приложение», which step 25 had shipped.
  • forADoctorLine: features/export/readableDocument.ts writes the cycles, the days and the settings into an .html page. The line names the period dates and the day entries, and the format. Polina asked for the formats.
  • export.what adds that both files are made together and each one can be shared on its own. Polina asked whether she can take one file. ExportScreen.tsx makes both files with one press and gives each file its own Share button.
  • export.where: features/export/expoDestination.ts writes the files to the cache folder on the phone, and the share sheet she opens is the only way out. The app uploads nothing.
  • The storage words from step 7 («в зашифрованном виде на этом телефоне») are not changed. tests/copy/storageWords.test.tsx passes.
  • No line on these screens shows the bare period count from step 25. The export count export.held already has plural forms.
  • Not changed, and not part of this step: settings.answers.goalsChosen and settings.answers.feeling (Your answers screen, feeling follows the first run question of Onboarding: work out cycle and period length from her dates, and ask about irregular cycles only when it applies #326), settings.delete.line (step 6 for The delete screen says there is a server account, but onboarding says there is no account #319 set it), the assurance card «Только вы можете читать свои дни.» (step 14 added the page that explains it).
  • Changed test contracts: 23.6 pinned the old English of answersLine, deleteLine, export.what and export.where. It now pins the new English, holds the two new keys in the same language checks (no Emi, no refused word, not left in English), and checks the line under each export tile. The BDD steps file pins the same new English, and SCREEN-2 reads the new answers line. New test tests/copy/myDataAndExportWords.test.tsx renders both screens in the three languages, checks every row and tile line in order, and checks that the old words are gone.

Checks.

  • make check: every stage before the tests passed. Workspace tests 124 and 1873 passed. Mobile tests 3671 passed and 1 failed: 10.7, the known local noise, because ~/.npmrc prints the "always-auth" and "email" warnings. In an earlier run 6.2 (timing ratio) also failed while Metro was busy, and it passed in the final run.
  • npm run test:behaviour: 98 passed.
  • The claims gate (tools/pipeline/forbiddenClaims.ts), the naming tests 23.2 to 23.6, the storage words test and the pinned strings pass.
  • Mutation check: I removed the line under each export tile from ExportScreen.tsx. The new test failed (3 failed, 7 passed). I restored the file, and it passed (10 passed).
  • The pictures brand/screens/privacy and brand/screens/export-screen are generated again with their npm scripts.
  • grep -c itvrepos package-lock.json prints 0.

@juliantellez
juliantellez merged commit bec090b into main Oct 21, 2026
1 check passed
@juliantellez
juliantellez deleted the emi-feat-my-data-and-export-words branch October 21, 2026 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Rewrite the Russian copy on Insights, History and the data screens

1 participant