Commit Graph
88 Commits
Author SHA1 Message Date
Antoine Clausse 09c564fbc4 [web] Cleanup plans-2026-phase-1 - phase 5: unused files in pricing pages (#36688)
* Remove unused Pug files related to Pricing

* `make cleanup_unused_locales`

* Remove unused `descriptionMobile`

* `make cleanup_unused_locales`

* Remove dead CSS

* Remove non-EN dead keys

* Remove "ai-assist" dead CSS

* Remove "ai-assist" listeners

* Remove `plans-new-tabs` and related

* Remove dead SCSS variables

* Remove more dead CSS (mobile)

GitOrigin-RevId: 08c452f66fe5b4d5bca4bb8cf2171254f960bc71
2026-09-17 12:05:47 +00:00
Olzhas Askar e9206d2b95 Merge pull request #36312 from overleaf/oa-unhardcode-homepage
[web] Unhardcode homepage

GitOrigin-RevId: 7ae0b66b5db57998ad1bd1988766d45e096620f7
2026-09-17 12:02:34 +00:00
Olzhas Askar b4880f691e Merge pull request #36346 from overleaf/oa-fix-counts
[web] Fix counts

GitOrigin-RevId: b1ec87eb19d41c897b205d2ff178ab2b600fb987
2026-09-17 11:51:17 +00:00
Olzhas Askar f513b1aa52 Merge pull request #36302 from overleaf/oa-teardown-trial-ineligible-cta
[web] Teardown trial ineligible cta

GitOrigin-RevId: 4d114943bc2839b29b6eae3a133d6c235f98ffcc
2026-09-17 11:50:24 +00:00
Olzhas Askar 58d76ff1a0 Merge pull request #36247 from overleaf/oa-wider-panel
[web] Wider checkout panel

GitOrigin-RevId: ea9edafa4e11b0b04d5a74c664781c3dd0cc5e87
2026-09-17 11:50:20 +00:00
Olzhas Askar 49747e61c9 Merge pull request #36163 from overleaf/oa-cookie-banner
[web] Rephrase the cookie banner

GitOrigin-RevId: 229cf5ead3d6a9f7c8fa1b8dda45508b06b23c42
2026-09-17 11:47:40 +00:00
Olzhas Askar d29eefaa64 Merge pull request #35478 from overleaf/oa-paywall-ctas
[web] Paywall CTAs

GitOrigin-RevId: 26703fe008926db67473a43ef64addca0e23accd
2026-09-17 11:30:50 +00:00
Olzhas Askar f9a1952228 Merge pull request #35300 from overleaf/oa-fix-locale-issues
[web] Fix locale issues

GitOrigin-RevId: 393f362bc57739af9facfccf04cab7c2509a9002
2026-09-17 11:26:06 +00:00
Olzhas Askar 18b3bb7503 Merge pull request #35043 from overleaf/oa-babelfish-2
[web] Babelfish all language files

GitOrigin-RevId: 3889f38b80c511f3cda1f47b9ecf4d8b7d2cdfb6
2026-09-17 11:20:29 +00:00
Olzhas Askar dd48dfa093 Merge pull request #35158 from overleaf/oa-compile-timeout-final
[web] Compile timeout CTA

GitOrigin-RevId: f64c651332a32c293da1f3256cf9443413878d63
2026-09-17 11:16:42 +00:00
Antoine Clausse 0d004926e6 [web] Cleanup plans-2026-phase-1 - phase 1: frontend (#34619)
* Remove `plans-2026-phase-1` from frontend in subscriptions module

* Remove `plans-2026-phase-1` from general frontend

* Remove empty `AiErrorAssistantPaywall`

* Simplify `UpgradeNotification`

* Update translations

* Fix tests

* Remove `OverleafAssistPaywall`

* Remove unused locales

GitOrigin-RevId: 4cf04bbde134a3f7b778a0695d388f31d9765343
2026-06-18 08:06:01 +00:00
Antoine ClausseandClaude Opus 4.7 9dde7d3d71 [web] Add ESLint rules for locale JSON (#34221)
* Remove double spaces

* Enforce curly apostrophes

* Enforce French typographic spaces in fr.json

Add vitest test enforcing French spacing rules per
https://typographisme.net/post/Les-espaces-typographiques-et-le-web:
  - NNBSP (U+202F) before ? ! ;
  - NBSP (U+00A0) before :
  - NBSP (U+00A0) around guillemets « »

Fix 38 fr.json values that were using NBSP (or no space) before ? ! ;.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Extend French typography test to numbers and percent signs

Add rules per https://typographisme.net/post/Les-espaces-typographiques-et-le-web:
  - NNBSP (U+202F) between digit groups (thousands separator)
  - NBSP (U+00A0) between a number and a following word/unit
  - NBSP (U+00A0) before %

Fix 9 fr.json values where a regular space was used instead of NBSP between
a number and a following word (e.g. "1 résultat", "10 jetons", "7 jours").

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Use point médian for inclusive writing in fr.json

Replace parenthetical gender/plural markers like "sûr(e)", "abonné(e)",
"licence(s)" with the point médian "·" (e.g. "sûr·e", "abonné·e",
"licence·s") per modern French écriture inclusive.

Add a vitest rule rejecting "word(suffix)" patterns where suffix is 1-3
letters and there is no space before the opening parenthesis.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Simplify inclusive-writing check to "(e)" substring match

The previous regex (matchAll without the /g flag) would have thrown at
runtime. Drop matchAll entirely and use includes('(e)').

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Add point médian to participles in fr.json

Apply inclusive writing (·e) to past participles agreeing with the
addressed user ("affilié·e", "invité·e", "connecté·e", "abonné·e", etc.).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Use inclusive forms in fr.json

* Change "de Overleaf" to "d’Overleaf"

* Fix tests

* Check for consecutive spaces, not just double spaces

* Update comment about guillemets

* Add ESLint rules for locale JSON conventions

Add three rules to @overleaf/eslint-plugin that run against locale JSON
files via @eslint/json:

- no-consecutive-spaces-in-locales
- no-straight-apostrophes-in-locales
- french-typography-in-locales

Wire them up in services/web/eslint.config.mjs against `locales/*.json`
(and `locales/fr.json` for the French-typography rule).

* Add `@eslint/json` so JSON files can be parsed

* Scope JS/TS-specific config to JS/TS files only so that built-in rules aren't applied to JSON files

* Disable `no-irregular-whitespace` in french-typography-in-locales.js

* Make the rules fixable

* Improve regexes: user `\s` instead of custom matchers

* Add sorted-keys-in-locales ESLint rule

Mirrors scripts/translations/sort.js as a fixable ESLint rule:
require top-level keys in locale JSON files to be sorted alphabetically.
The autofix re-serializes the file with sorted keys.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Add no-unused-locale-keys ESLint rule

Mirrors scripts/translations/cleanupUnusedLocales.js as a fixable ESLint
rule applied only to en.json. Shells out to `find` + `cat` once per
process (cached) to grep all candidate source files for key references,
then reports any en.json key that isn't found. The autofix re-serializes
en.json without the unused keys.

Hardcoded ALWAYS_USED set covers keys built at runtime (month names,
third-party-datastore notifications) that the regex scan can't see.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Add locale-variables-match-en ESLint rule

Mirrors scripts/translations/checkVariables.js as an ESLint rule applied
to non-en locale JSON files. Reads en.json (cached) and reports any
member whose `__name__` placeholders differ from the base.

GLOBALS (e.g. __appName__) are allowed as extras; IGNORE_NESTING_FOR
preserves the script's per-key exceptions.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Replace some double linebreak (@overleaf/no-consecutive-spaces-in-locales)

* Add no-orphan-locale-keys ESLint rule

Detect translation keys in non-en locale files that aren't present in
en.json. Mirrors the `--sync-non-en` flag of cleanupUnusedLocales.js.
The autofix re-serializes the locale file without the orphan keys,
sorted alphabetically.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Add tests for the locale JSON ESLint rules

Cover the four single-file rules:
  - no-consecutive-spaces-in-locales
  - no-straight-apostrophes-in-locales
  - sorted-keys-in-locales
  - french-typography-in-locales (including the inclusive-writing
    suggestion for "(e)")

The three cross-file rules (no-unused-locale-keys, no-orphan-locale-keys,
locale-variables-match-en) read from disk and aren't covered here; they
need integration tests via fixtures.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Drop bin/lint_locales — checks are now covered by ESLint rules

The four checks in bin/lint_locales are duplicated by the new
@overleaf/eslint-plugin rules:

  - sort.js --check                  → sorted-keys-in-locales
  - cleanupUnusedLocales.js --check  → no-unused-locale-keys
                                     + no-orphan-locale-keys
  - checkVariables.js                → locale-variables-match-en
  - single-quote grep                → no-straight-apostrophes-in-locales

`yarn lint` runs the ESLint rules against locales/*.json, so the
lint_locales script and Makefile target are redundant.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Remove Locales.test.mjs

* Delete scripts replaced by @overleaf/eslint-plugin rules

Remove the three locale scripts now superseded by ESLint rules:

  - scripts/translations/sort.js                   → sorted-keys-in-locales
  - scripts/translations/cleanupUnusedLocales.js   → no-unused-locale-keys
                                                   + no-orphan-locale-keys
  - scripts/translations/checkVariables.js         → locale-variables-match-en

Also drop the matching Makefile targets (sort_locales,
cleanup_unused_locales), update AGENTS.md / copilot-instructions.md to
point at `yarn lint --fix` instead, and prune the deleted entries from
the esm-check-migration allowlist.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Delete redundant scripts/translations/sort-locale-file.js

Single-file sort utility — superseded by `yarn lint --fix path/to/file.json`
via the sorted-keys-in-locales ESLint rule. No callers in repo.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Update comments and messages

* Add test file pattern to ESLint configuration

* Reorder "Backend specific rules" so `no-extraneous-dependencies` doesn't fail on test files

* Make french-typography fixes idempotent and catch edge cases

Apply Copilot's review feedback on PR #34221:

  - autoFix() now uses `\\s*`/`\\s+` instead of `\\s?`/`\\s` so it
    collapses any run of mixed whitespace into the correct NBSP/NNBSP,
    making the fix idempotent and order-independent.
  - The `:` lint regex now captures optional whitespace and reports
    when it isn't NBSP (catches `"Liste :"` with a regular space).
  - The `%` lint regex now matches the missing-space case (`"10%"`)
    via `\\s*` instead of requiring one char between digit and `%`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Remove sort-locale-file.js from pre-commit

* Revert no-unused-locale-keys ESLint rule; Restore lint_locales scripts

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
GitOrigin-RevId: 8351fab074e6e7f77920b70237df1cd1c781e053
2026-06-10 08:06:44 +00:00
0e4fe4090a [web] Migrate manual plurals to i18next _plural convention (#33989)
* Add tests on plurals

* Update `collabs_per_proj` and its pluralisations

* Update `n_user` and its pluralisations

* Update `showing_x_results` and its pluralisations

* Update `show_x_more_projects` and its pluralisations

* `bin/run web npm run extract-translations`

* Populate `_plural` keys in non-en locales

For 2-form languages (da, de, es, fi, fr, it, nl, no, pt, sv, tr), copy
the existing bare-key value into the new `_plural` sibling to prevent
i18next from falling back to English for count!=1.

Also remove orphan singular keys (`collabs_per_proj_single`,
`showing_1_result*`) left over from the previous commits.

Bare-key values remain in their original plural form pending translator
review — count=1 will still render the plural form in non-en until
translators flip those to singular. Multi-form (cs, pl, ru) and
single-form (ja, ko, zh-CN, zh-TW) locales are unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Flip non-en bare-key values to singular form

Per review, the i18next v3 plural convention uses the bare key for count=1
(singular) and `_plural` for count!=1. The non-en bare-key values were
left as the original plural form by the previous commit so the `_plural`
siblings could be copied from them; this commit flips the bare values to
the singular form per language.

Languages where singular and plural noun forms coincide (Finnish, Swedish,
Turkish) are unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Apply suggestions from code review

Co-authored-by: Olzhas Askar <olzhas.askar@gmail.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Olzhas Askar <olzhas.askar@gmail.com>
GitOrigin-RevId: 628513ca792c2dcce023247e52b7320e2741cc54
2026-06-02 08:07:17 +00:00
Olzhas Askar b5a73efaeb Merge pull request #34060 from overleaf/oa-timeout-cta
[web] Compile timeout CTA

GitOrigin-RevId: c1dd014150964ffec1b556943f572d3e5a8069ce
2026-06-01 08:04:24 +00:00
Olzhas Askar 014ac37704 Merge pull request #33814 from overleaf/oa-adjust-tooltip
[web] Adjust tooltip

GitOrigin-RevId: a180fb9872c9fc85b5ea7e3821e8e8c8393bab9d
2026-05-22 08:05:50 +00:00
Olzhas Askar 7c0595f9a9 Merge pull request #32063 from overleaf/oa-group-plans
[web] Rename group plans

GitOrigin-RevId: 8a3097dc1724709b5d7b163e0f9d968c21d63831
2026-04-30 08:05:10 +00:00
Olzhas Askar f4f6c493ac Merge pull request #32445 from overleaf/oa-greasy-translations
[web] Greasy translations

GitOrigin-RevId: e7bd350bac5d27bf1561ea25bce69ed255fe98cd
2026-03-31 08:07:53 +00:00
Jakob Ackermann 17e01526b4 [web] fix typo in i18n key (#31713)
* [web] fix typo in i18n key

* [web] sort locales

GitOrigin-RevId: 9736eae24cdbd7aabd995087de368c667b25b849
2026-02-24 09:07:18 +00:00
Davinder Singh 34173eda46 Change subscription page title to "Your subscriptions" (#29377)
* adding plural translations for the languages that were easy to test with the help of AI

* adding remaining translations

* adding your_subscriptions

* running make sort_locales

* fixing nl.json to make it formal You

GitOrigin-RevId: 7510e2f8eee87fd2a256ece434cc59e6877893e6
2025-11-11 09:05:44 +00:00
Olzhas Askar d11674a51f Merge pull request #28540 from overleaf/oa-punctuation
[web] Notification punctuation

GitOrigin-RevId: ba20f0049a5f72f3ba03917d9fe76b220adffcf0
2025-09-23 08:07:49 +00:00
CloudBuild 1c6ee3f930 auto update translation
GitOrigin-RevId: 4e2e3d1e7ca70f76f13f905753ba1ca2c945b72f
2025-05-27 08:05:55 +00:00
CloudBuild c4c8f521ff auto update translation
GitOrigin-RevId: 07588ad1e4cbc9028cf0de125b4c6c222e1b0ecc
2025-05-19 08:05:37 +00:00
CloudBuild 670ed44963 auto update translation
GitOrigin-RevId: 2a2199f74cf1e0c2506ba336624cd858e2f24d3e
2025-04-07 08:05:15 +00:00
CloudBuild f2030789d1 auto update translation
GitOrigin-RevId: 6363d21d4903cb8f4cdcca28ec1b1baca39406b1
2025-04-07 08:05:11 +00:00
CloudBuild e08e58485e auto update translation
GitOrigin-RevId: 034ad5d613a28540d777f88c75e7284bc7eb7c3e
2025-03-31 08:05:01 +00:00
CloudBuild ab19677a6c auto update translation
GitOrigin-RevId: 9ba894868c164a34d5420369c798d837a06fd450
2025-03-24 10:51:34 +00:00
CloudBuild e8462f4250 auto update translation
GitOrigin-RevId: d8edcccce86a3892bebf2b4ab2d769275a231325
2025-03-24 10:51:30 +00:00
CloudBuild b5031fdee5 auto update translation
GitOrigin-RevId: ba3022ee74dee8356611c970a9cd880930023d34
2025-03-10 09:05:27 +00:00
CloudBuild 1aec79d726 auto update translation
GitOrigin-RevId: 3e637f00e1a54160e992e6c9cfc277e554677301
2025-02-07 09:06:45 +00:00
CloudBuild 958d889cbe auto update translation
GitOrigin-RevId: 9d4df12b84ae4e63c54b8039c8e35eab506d8fa5
2025-01-22 09:05:25 +00:00
CloudBuild ae34c4b8cc auto update translation
GitOrigin-RevId: fc3c6ea47100bc446d4a6290c2ba530083d9b717
2025-01-17 09:05:32 +00:00
CloudBuild 46ae397fb9 auto update translation
GitOrigin-RevId: e49cdfd8b712f54ddba599595e4f7f582e4da67c
2024-11-22 09:06:19 +00:00
CloudBuild a92a1f5a24 auto update translation
GitOrigin-RevId: d0c96096d7a9b3d690852a3ddce37f1403674e2b
2024-11-21 09:05:38 +00:00
Antoine Clausse 485bccebef [web] Update loading spinner in IDE for BS5 (#21970)
* Update `LoadingPane` with `LoadingSpinner`

* Remove unused file no-open-doc-pane.tsx

* Remove translation `open_a_file_on_the_left`

GitOrigin-RevId: 9045443de6aaf19b1d4bf82cd2be3ba91ee53bf1
2024-11-21 09:04:31 +00:00
CloudBuild 776647d62a auto update translation
GitOrigin-RevId: 96e1603b6e71d6cfbf5e9cdb47a9fe46be7e35e3
2024-11-08 09:06:32 +00:00
CloudBuild f575654201 auto update translation
GitOrigin-RevId: 1b2ca8e9513e9fdaf11ef954084409669a3e32a0
2024-08-05 08:04:46 +00:00
CloudBuild 6adade191f auto update translation
GitOrigin-RevId: 1d8ec2514af0da765314e63720f22b23cdd6ccd1
2024-06-19 08:05:18 +00:00
CloudBuild 6980a44f8b auto update translation
GitOrigin-RevId: bae1485e0792582f6a3bee3a791c193c8c7a5bee
2024-06-17 08:04:34 +00:00
CloudBuild d0d2850bae auto update translation
GitOrigin-RevId: 356c7f9f2475e4715c99516f581d5aa20aebef70
2024-05-20 08:04:31 +00:00
CloudBuild fb05c0bb82 auto update translation
GitOrigin-RevId: 1850bdf3c1c7cd7c3e4b60ed895278602f4be0f9
2024-05-02 08:04:04 +00:00
CloudBuild 7df6023705 auto update translation
GitOrigin-RevId: a89040b92e4d27733bdb249f4a831e7ab835b26b
2024-04-22 08:04:20 +00:00
CloudBuild 407a1f640b auto update translation
GitOrigin-RevId: 488ec9d5d551ab5d6bf8df73f86ae4a3d66a3008
2024-04-17 08:05:14 +00:00
CloudBuild cc58fd3d1d auto update translation
GitOrigin-RevId: 273a60a7aed838808a2578379999ce7cc2da23f5
2024-02-23 09:03:23 +00:00
CloudBuild 353fdac850 auto update translation
GitOrigin-RevId: d02dcfa56747d36fcb85c5b1110add29881b421c
2024-01-08 09:05:58 +00:00
CloudBuild cbe87e89b9 auto update translation
GitOrigin-RevId: ba1315cb8dd3c81580ba4a24016d9916356cb8be
2023-12-08 09:05:10 +00:00
CloudBuild 28d4275538 auto update translation
GitOrigin-RevId: f4342745e173db023168bba2f7211428cc60ea85
2023-11-27 09:04:35 +00:00
CloudBuild a59e63846d auto update translation
GitOrigin-RevId: 3c0387f987795a9a835d204bec9a1f26751e31fd
2023-10-26 08:03:55 +00:00
Alf Eaton 0124712cd2 Restore escaped standalone ampersands in translations (#15373)
GitOrigin-RevId: 8f505ea4906d9adfddfd72b7609c0c3e465f6b56
2023-10-24 08:03:18 +00:00
CloudBuild 6892733122 auto update translation
GitOrigin-RevId: 4269d99512f0f232e4cc31c726b5559877793301
2023-10-16 08:04:33 +00:00
CloudBuild 497471d88a auto update translation
GitOrigin-RevId: b71f7bb3db83af3f070d226279d26ab0c32361eb
2023-10-09 08:04:42 +00:00