• v1.0.0-Beta.13 997cfda993

    v1.0.0-Beta.13
    All checks were successful
    CI / check (push) Successful in 1m48s
    Release / release (push) Successful in 2m14s
    Docker Release / build-and-push (push) Successful in 4m11s
    CI / tests (push) Successful in 4m36s
    Pre-release

    k4wit0 released this 2026-09-02 12:18:15 +02:00 | 23 commits to main since this release

    Twenty languages that do not guess who you are

    Added

    • The plural forms for the fourteen languages that were still missing them —
      616 strings, written by hand. Every language is now at 100%: Arabic with all
      five of its categories including the dual, Polish and Russian with three
      each, and eleven more with their singular.

      This is the thing the base keys could not do. A count of one rendered the
      plural — "1 series", "1 sesji", "1 подходов" — on the screen of anybody who
      trained once in a month, and no test catches a sentence that is merely wrong
      in a language nobody on the team reads.

    • bun i18n:stale, the check the other three could not make: a translation of
      an English string that has since been rewritten. It is a complete, correct
      sentence in the right language, so nothing missing, nothing left in English
      and nothing empty all pass — and what is on screen answers a question that was
      asked a version ago. It reads git: if English moved after a language did, that
      language is behind. An acknowledgement in scripts/i18n-stale-ok.json names
      the English commit it was made against, so a cosmetic rewrite can be signed
      off without silencing the next real one.

    Changed

    • Five strings are back to their natural wording, and on record in
      scripts/i18n-identical.json as legitimately identical to English: the Dutch
      and Turkish singular of a set, and the Italian singular of a file. All three
      languages take the English loanword there, so the honest translation is the
      English word — and padding it out to get past the audit is answering the tool
      rather than the reader. That file exists for exactly this.

    • Every empty screen now speaks in the other eighteen languages. The bin, the
      photographs, the month with nothing in it, the session that recorded no sets,
      the progress screen before the first workout — all of them had been rewritten
      in English and Spanish and left as captions everywhere else, so a character
      drawn on the screen stood over a sentence describing a table. 321 strings
      across eighteen files.

    Fixed

    • Ten languages assumed the reader is a man. English says "you trained" and asks
      nothing about who you are; Arabic, Bengali, French, Greek, Hindi, Italian,
      Polish, Portuguese, Russian and Urdu cannot say it without agreement, and each
      had picked masculine and left it there. Every one is rewritten so the sentence
      no longer needs the agreement — never with a slash, which is a typographic
      apology rather than a fix.

    • The first screen of a new server greeted her as a man. Bem-vindo and
      Benvenuto on the account-creation screen, before there is an account with a
      gender to assume. Spanish had solved this long ago with "Te damos la
      bienvenida"; the other two now do the same, with the agreement on the noun.

    • lastgym bench measured every query on the progress screen except the one
      with a promise attached. The load path — the band the screen draws above
      everything else, and the only thing on it whose closing criterion names a
      number — was not in the list, so the command reported a comfortable total for
      a screen it had not finished timing.

    • The photographs screen blamed a photograph when the connection was what had
      failed. With no network the list never arrives, and the screen said "that
      photograph could not be loaded" — about a picture nobody had asked for yet. It
      now says what is actually true, which is a decision and not an accident:
      photographs live on the server and are never copied to the device, because
      they are fetched with credentials and drawn from a blob URL revoked as soon as
      they are on screen, so nothing of anybody's body lands in a cache on a phone.
      Seeing them needs a connection, and the screen says so.

    • The audit log read backwards in Arabic. Not the words — the direction. The
      screen substituted the two account names into the translation itself instead
      of letting t do it, which skipped the bidi isolates t puts around every
      value, and a Latin username inside an Arabic sentence then dragged the
      punctuation to the wrong side. Rows starting with a name anchored left while
      rows starting with an Arabic word anchored right, in the same list. Six other
      screens were substituting a date, a number or lastgym user the same way; all
      of them go through t now, and a test refuses the second interpolator rather
      than any particular string.

    • Persian and Urdu addressed one reader in two registers. Five strings in
      Persian and nine in Urdu used the formal شما and آپ while the fifty-odd around
      them used تو and تم — the same handful of keys in both files, and the same
      ones Bengali had, so one translation pass carried the register in. On the
      privacy screen the heading and its own first line disagreed.

    • The audit log named a gender for everyone in it. "{actor} opened the account
      {subject}" has no gender in English, and none in Spanish, Portuguese, German,
      Dutch, Hindi or Urdu either — their past tenses do not mark it. Arabic, Polish
      and Russian conjugate it, and Greek was writing "Ο/Η {actor}", the slash this
      work exists to avoid. Those four logs now read as events rather than sentences
      about people: "{actor}: opening of account {subject}". The register was already
      in each file — a refused sign-in has no actor to conjugate, so that one row had
      been written in the passive from the start.

    • Thirty-nine other strings assumed the gender of somebody who is not the
      reader: the coach, the administrator, the account being deleted. German said
      "Er hat keine Möglichkeit" of an administrator it has never met, French asked
      "mon coach a-t-il regardé ?", Urdu had the coach putting a routine in your
      account as a man. English uses singular "they" throughout and the translations
      had not followed.

      Role nouns are deliberately left as they are — Trainer, προπονητής, منتظم. A
      role noun is a language's unmarked word for the job, and the only ways to
      neutralise every one of them are doublets, which is the slash, or coinages
      nobody uses. That is a different question and it is not this one.

    • Arabic put plurals after a hundred. In Arabic 11 and above take the singular,
      so "{days} أيام" was wrong at every number the plural form exists to cover —
      twenty-two strings said "100 days" the way no Arabic speaker writes it.

    Downloads