Repository navigation
docs: suggesting translations in context for community projects (pitch tolgee/tolgee-platform#3780, scope E) - #1144
Merged
Anty0 merged 40 commits intoOct 19, 2026
Conversation
…#1133) Two statements in the docs do not match the product. Both were found while verifying Tolgee feature availability against the platform source for a comparison page. ## Machine translation providers `platform/translation_process/machine_translation.mdx` listed four external providers. The product ships five: `MtServiceType` has `GOOGLE`, `AWS`, `DEEPL`, `AZURE` and `BAIDU`, and Baidu Translate has its own configuration section in the self-hosting docs (`tolgee.machine-translation.baidu`). Added Baidu, marked self-hosted only since it is configured with your own API key via server configuration. ## AI Translator context `platform/translation_process/ai_translator.mdx` said Tolgee Context is "available only in the Cloud version with SDK 5.9.0 and higher". It is not Cloud only. The SDK 5.9.0 requirement is the real constraint, so the note now states just that. ## Why this matters Both statements understate what Tolgee does, and a competitor comparison page repeated one of them because our own docs said it. The provider count in particular was used to score a competitor claim as wrong when the competitor was right. ## Not covered here Three further inaccuracies live on `tolgee.io/pricing`, which is not in this repo: - The AI translator is marked N/A on the Free plan. No such gate exists in the code; `LlmProviderController` has no `@RequiresFeatures` and there is no AI translator feature in the `Feature` enum. - Included MT credits for Team and Advanced disagree with the billing API (10,000 vs 200,000, and 1,000,000 vs 2,000,000). - The Advanced extra-seat price disagrees with the billing API (EUR 22 vs 16). Co-authored-by: Barus Urbanova <bara.skrivankova@gmail.com>
Anty0
force-pushed
the
jirikuchynka/community-sdk-suggestions-e
branch
from
September 24, 2026 09:50
5ddb2fc to
d8d92af
Compare
The docs home page title was the org slogan, rendered as "Painless localization | Tolgee". It now renders as exactly "Tolgee Docs" (tab title and og:title). Other pages keep their titles.
…us id (#1153) Part of the traffic source attribution work. Companion to tolgee/billing#325, which must be released before this does anything. ## PostHog persistence `persistence` was `'memory'`, so the anonymous distinct id died on every page load and no pre-signup journey could ever be stitched to an account. It is now `'localStorage+cookie'` with `cross_subdomain_cookie: true`, so tolgee.io and docs.tolgee.io share one id. `persistence_name: 'tg_marketing'` is load-bearing, not tidiness. The webapp initialises PostHog with the same project token, no `persistence_name`, and then calls `posthog.identify(userId)`. Without a store of its own, the marketing sites would read the app's **identified** person store: for anyone who has ever logged in on that browser the id sent as `p` would be their user id, and the backend would then ask PostHog to alias one customer's identified id onto another person. `capture_pageview: false` stays as it was, because `LayoutContent` already captures `$pageview` per route. ## The touch snippet `marketingTouch.ts` posts every external arrival to `POST /v2/public/session` and stores the returned opaque session id back into the `tg_sid` cookie. An arrival is external when the referrer is empty or off `tolgee.io`, or when the URL carries campaign params. Internal navigation posts nothing. It fires once per arrival per tab. The two-key `sessionStorage` fingerprint is what collapses a reload and a client-side route change into one arrival: `document.referrer` survives both, while `location.search` does not, so a fingerprint mixing them would re-report one visit as two on the first internal click. Its counterpart is `scripts/framer/marketing-touch.js` in the tolgee-company repo, which carries the same logic for the Framer site. They diverge in exactly three places, all forced by their hosts, and the file header on each says which. ## Two things to set before this has any effect - **`DOCUSAURUS_MARKETING_SESSION_ENDPOINT` must be set in the docs deploy environment** (to `https://app.tolgee.io/v2/public/session`). There is deliberately no fallback: `document.referrer` is empty on localhost, so a default would make every fresh tab in a preview build or a local dev server write a real session and touch row into the production billing database. - The token key now accepts `DOCUSAURUS_POSTHOG_TOKEN` with the existing misspelled `DOCOSAURUS_POSTHOG_TOKEN` as a fallback, so the deploy environment and this file can be corrected in either order. The same applies to the api host key. Nothing breaks if the environment keeps the old spelling. `initPosthog` is also now skipped entirely when the token or host is missing, instead of being called with `undefined`, which made every downstream check pass vacuously. ## Verification `npm run tsc` is clean for every changed file (the four errors it reports are pre-existing, in `Table.tsx`, `PricingChanges.tsx`, `SsoFieldsTable.tsx` and `PlaceholderConversions.tsx`), and `eslint` is clean on all of them. The browser checks (one POST on a direct load, none on an internal link, none on F5, one on a new campaign in the same tab, `p` present in the body) are still to run against a deploy preview.
Anty0
added a commit
to tolgee/tolgee-platform
that referenced
this pull request
Oct 9, 2026
#3780) (#3930) This is the **integration branch** for pitch #3780 (community SDK suggestions). The pitch's platform scopes were built on separate branches and have all been merged into this one; this PR goes to `main`. ## Deploy note — read before merging The backfill changeSet `1789914853000-1` appends `translation-suggestions.own-access` to every granular permission row (members, invitations, organization base permissions) whose scopes already imply `translations.view` — any of the 18 scopes frozen in `translationSuggestionsOwnAccessBackfill.sql` — and that does not carry it yet. - **Rolling deploy window.** Once the backfill has run, pods still on the previous release cannot read a backfilled row — the scope name is not in their `Scope` enum. For a user with granular permissions that means `GET /v2/projects/{id}` 404 and translations 500 from an old pod, and the members list 500 for the project owner. Everyone else is unaffected. The window closes when the rollout completes. **Deploy during quiet hours** (user's decision, 2026-09-22). - **Permission cache — longer than the deploy.** Nothing evicts `Caches.PERMISSIONS` when the backfill writes the rows, and `CacheProperties.defaultTtl` is **120 minutes**. On a multi-pod Redis deployment a granular member whose cached permission predates the backfill is refused own-delete — an action they could perform before this release — until that entry expires. Self-healing, but up to two hours, and it outlives the rolling deploy above. A single-node Caffeine cache is unaffected (it starts empty, after Liquibase). Evicting the permission cache after the migration turns this window off. - **Rollback.** The changeSet has a real `<rollback>` that strips the scope from every permission row and API key that holds it. ## Release note for this release Creating a suggestion on a project with suggestions **disabled** is now rejected with `suggestions_disabled` (HTTP 409 Conflict — the project's state, not the request, is what is wrong). Until now only the webapp enforced it, so API and SDK clients could create suggestions on a disabled project. Listing, accepting, declining and deleting stay allowed, so pending suggestions can still be cleaned up. Also: this release is the floor for the Tolgee browser extension that ships with the pitch — it asks for the suggestion scopes as a fixed list, and a server that does not know them refuses the whole authorization. ## What Foundation landed - New scope `translation-suggestions.own-access`, implying `translations.view` and implied by `translation-suggestions.manage`, granted by the VIEW, TRANSLATE and REVIEW roles (EDIT and MANAGE through manage) and by the community floor; selectable in advanced permissions. - Deleting your own suggestion requires that scope for every credential. A project API key or OAuth token that carries it can now delete its owner's suggestions, which no scoped credential could before. An author without it gets `operation_not_permitted` naming the missing scope. - Creating a suggestion on a project with suggestions disabled is rejected with `suggestions_disabled` (409). Listing, accepting, declining and deleting stay allowed. - `GET /v2/api-keys/current-permissions` returns `suggestionsMode` and `translationProtection`, so the in-context dialog can decide between Save and Suggest. - `docs/oauth/README.md` describes the new gate. ## What scope D landed (PR #3937, merged here) - **The backfill** above, so members with granular permissions keep deleting their own suggestions. It grants nobody more than they had: before the scope, every author could delete their own suggestion whatever their scopes. - The platform's suggestion list no longer offers **delete** on an own suggestion without the scope — it used to show a button that answers 403. `translation-suggestions.manage` still covers anyone's suggestion. - A user-facing message for the `suggestions_disabled` error in the webapp. - `GET /v2/api-keys/current-permissions` also returns **`userId`** (whose suggestions are mine — the browser extension's page proxy refuses `/v2/user` on purpose) and **`userScopes`**, the user's own expanded project scopes, *not* narrowed by the API key or OAuth grant. A scope in `userScopes` but not in `scopes` is one the credential lacks, which is what lets a client say "your account can do this, this sign-in cannot". - **OAuth: an unknown scope is dropped rather than refusing the request**, on both the authorization and the refresh. Without it, every scope a client learns from a newer Tolgee breaks sign-in against every older server. A request left with no supported scope is still `invalid_scope`, and on a refresh a scope this server knows but never granted is still refused. ### What it looks like Every screen this changes, before and after. Same fixture, same viewport; the "before" column comes from a worktree on `main`. The same shots, laid out side by side, are also at https://claude.ai/artifact/PuwZjocwwMrDwqc1EktHS8 (private — ask if you need access). **Advanced permissions gains a "Delete own" row.** It is what lets a member remove a suggestion they wrote; a moderator who can manage everyone's suggestions holds it implicitly, which is why it shows ticked and dimmed. | Before (`main`) | After | | --- | --- | |  |  | **Without the permission, the delete action is gone.** The same contributor looking at the suggestion they wrote, with granular permissions that do not carry `translation-suggestions.own-access`. Before, any author could delete their own suggestion whatever their permissions said, so the row always offered its menu; now there is no button at all, because deleting was the only thing that menu offered. | Before (`main`) | After | | --- | --- | |  |  | **With the permission, nothing changes for the author.** Everyone who could delete their own suggestion before keeps it through the backfill, so this is what the same contributor sees in practice.  **Suggesting into a project that stopped taking suggestions.** The server now refuses it; a tab opened before the switch is the only way to meet this, and it says so instead of failing namelessly.  Related: tolgee-js integration PR tolgee/tolgee-js#3539 · browser extension tolgee/chrome-plugin#44 (held until this is released) · docs tolgee/documentation#1144. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a dedicated permission for deleting your own translation suggestions. Project roles include it by default, and granular permissions can grant it separately. * Current-permissions responses now include the user’s project scopes, project suggestion settings, translation protection setting, and user ID. * **Bug Fixes** * Deleting your own suggestion now requires the dedicated permission; users with suggestion-management access can still delete any suggestion. * Suggestion creation is rejected when suggestions are disabled for a project. * OAuth authorization and refresh requests ignore unknown scopes when supported scopes remain. Requests with no supported scopes, or with known but ungranted scopes, still fail. <!-- end of auto-generated comment: release notes by coderabbit.ai --> ## Review fixes (9 Oct) - `660dd2702` (tip after rebase) — `fix: respond 409 when suggesting on a project with suggestions disabled`: `createSuggestion` throws `DisabledFunctionalityException` (409 Conflict) instead of `BadRequestException` (400); the error code `suggestions_disabled` is unchanged. The branch was also rebased onto current `main` (`ca0d93174`); every earlier commit is unchanged (`git range-diff` all `=`).
TolgeeMachine
added a commit
to tolgee/tolgee-platform
that referenced
this pull request
Oct 9, 2026
# [3.227.0](v3.226.3...v3.227.0) (2026-10-09) ### Features * suggestions in the in-context dialog for community members (pitch tolgee/tolgee-platform[#3780](#3780)) ([#3930](#3930)) ([1e04181](1e04181)), closes [#3937](#3937) [tolgee/tolgee-js#3539](tolgee/tolgee-js#3539) [tolgee/chrome-plugin#44](tolgee/chrome-plugin#44) [tolgee/documentation#1144](tolgee/documentation#1144)
…n and MCP clients (#1151) ## What this does Tolgee can now sign apps in with the user's account instead of a copied API key. The platform acts as an OAuth 2.1 authorization server, the Tolgee CLI, the Tolgee Tools browser extension and MCP clients use it. The docs said nothing about this yet. This PR adds the missing pages and updates the ones that only knew API keys. Platform docs are written for users, the CLI and JS SDK docs for developers. Simple English throughout. ## New pages - **Platform › Account Settings › Sign in with Tolgee (OAuth)**: which apps use it, what the consent screen asks (unverified app warning, local app notice, single project vs all projects, permissions), how long access lasts, how to end it, a comparison with API keys, common questions. - **Platform › Self-hosting › Sign-in for apps (OAuth)**: what is on by default after an upgrade, why `back-end-url` matters on a split-origin setup, how to register the browser extension, the switches `cli-enabled`, `cimd-enabled` and `cimd-allowed-hosts`, token lifetimes, the two metrics to watch. ## Updated pages - **MCP server** (about, setup, usage): signing in with a Tolgee account is now the first option, with Claude Code and VS Code steps. API keys stay as the second option. Notes on the tools that still need a PAT, and new troubleshooting rows with the real error codes. - **API keys and PAT tokens**: a tip pointing at the new sign-in page. - **CLI › Usage**: the "Logging in" section is rewritten around a bare `tolgee login`: `--no-browser`, CI behaviour, the project taken from the approval, `login --list`, the three `logout` forms, the credential priority order, where the store lives. **Introduction** and **Project configuration** got short notes. - **JS SDK › In-context translating**, **options**, **plugins**: the extension sign-in path, what a site must provide (`projectId`, `@tolgee/web` 7.2.0), how requests are relayed through the extension, the API key fallback. ## Depends on - tolgee/tolgee-platform#3944 (MCP client sign-in, CLI client registration, unverified-app consent screen). - tolgee/tolgee-cli#210 (`tolgee login` through the browser). - `@tolgee/web` 7.2.0 and Tolgee Tools 1.10.0 are already released. ## Screenshots Four new images under `static/img/docs/platform/oauth/`: the consent screen for the CLI, and the Tolgee Tools popup before and after signing in together with the consent screen it opens. They were taken against a local instance, so they show `localhost` and a demo project. ## Not in this PR - The configuration reference section. It is generated from a running server at release time and will pick up the new properties then. - A sentence about refusing sibling hosts of the instance domain. That change is not on the platform PR yet. ## Checks `npm run build` (with broken links set to throw), `npm run eslint` and `npm run prettier-check` pass locally.
Docs for tolgee/tolgee-platform#3973. ## Export page (`platform/projects_and_organizations/export.mdx`) - Rewritten dashboard section for the new layout: Languages and Format on top, the collapsible `Advanced settings` section and its one-line summary. - New sections: configure advanced settings, export only keys with specific tags (include/exclude, `*` wildcards), and reuse your last export setup (`Reset to defaults`, links override remembered values). - Fixed the outdated claim that only JSON and XLIFF are supported, and added a REST example for `filterTagIn` / `filterTagNotIn`. ## Content delivery (`platform/projects_and_organizations/content_delivery.mdx`) - Updated the create step for the new dialog and added a "Choose what gets published" section covering states, namespaces, format options and include/exclude tags. ## Screenshots New webp screenshots from a realistic demo project in `static/img/docs/platform/export/` and `static/img/docs/platform/content-delivery/`. The old `export.webp` and `add-content-delivery.png` showed the previous UI and were not used elsewhere, so they are removed. Merge together with or after the platform PR.
## What changed Two things in `.github/dependabot.yml`: - Ignore major bumps for everything. - Group the openapi-docs plugin and theme so they can only be bumped together. Patch and minor updates keep coming as before. ## Why Every major bump Dependabot opened in this repo needed a migration it cannot do on its own: - Tailwind 4 moves the PostCSS plugin to a separate package and needs a config rewrite. - ESLint 10 needs the flat config format. - React 19 is not supported by Docusaurus 3. - Bumping `@docusaurus/core` alone leaves the other `@docusaurus/*` packages behind, so the build breaks. They all failed CI, got closed, and came back the next month. There are 4 closed react-dom branches and 3 for eslint. Doing a major by hand, when there is a reason to, is the only way these land. The grouping rule fixes a worse problem. The openapi-docs plugin and theme must share a version. Bumping only the plugin (#1103, #1122) breaks every API reference page in the browser, and neither the build nor the deploy preview catches it, because the failure is client side. ## On security updates An `ignore` rule also applies to Dependabot security update PRs, so a wildcard would normally be too blunt. It is fine here: Dependabot security updates and Dependabot alerts are both switched off for this repository, so there is nothing for the rule to suppress. If either is turned on later, this rule should become a list of package names instead.
Documents the `=` exact-match prefix in scoped search, added in tolgee/tolgee-platform#3914. - New row `key:=cart.title` in the wildcard table, section renamed to cover whole-value matching. - Notes that `*` still works after `=` and how to find a value that itself starts with `=`. - API section mentions the `=` syntax next to `*`. Merge after the platform PR is released.
…#1157) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.44.1 to 8.71.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/typescript-eslint/typescript-eslint/releases">@typescript-eslint/parser's releases</a>.</em></p> <blockquote> <h2>v8.71.1</h2> <h2>8.71.1 (2026-10-05)</h2> <h3>🩹 Fixes</h3> <ul> <li><strong>eslint-plugin:</strong> [no-misused-promises] skip argument checks for calls without arguments (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12923">#12923</a>)</li> <li><strong>eslint-plugin:</strong> [no-unused-vars] report usedOnlyAsType for partially exported merged declarations (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12892">#12892</a>)</li> <li><strong>eslint-plugin:</strong> [require-array-sort-compare] use array argument type constraint (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12919">#12919</a>)</li> <li><strong>eslint-plugin:</strong> [no-unsafe-enum-assignment] skip identical types and bound deep type walks (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12957">#12957</a>)</li> <li><strong>eslint-plugin:</strong> [no-confusing-void-expression] don't autofix when declared return type is unknown (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12930">#12930</a>)</li> <li><strong>eslint-plugin:</strong> [prefer-optional-chain] check the constrained type (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12953">#12953</a>)</li> <li><strong>eslint-plugin:</strong> [no-unnecessary-type-parameters] count instantiated mapped type constraints (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12941">#12941</a>)</li> <li><strong>project-service:</strong> throttle cleanup when opening files (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12934">#12934</a>)</li> <li><strong>type-utils:</strong> match re-exports and global declarations in <code>TypeOrValueSpecifier</code> (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12943">#12943</a>)</li> </ul> <h3>❤️ Thank You</h3> <ul> <li>Diptajoy Mistry <a href="https://github.com/diptomistry"><code>@diptomistry</code></a></li> <li>Evyatar Daud <a href="https://github.com/StyleShit"><code>@StyleShit</code></a></li> <li>Josh Goldberg</li> <li>Josh Goldberg ✨</li> <li>Medhansh Poojari</li> </ul> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.1">GitHub Releases</a> for more information.</p> <p>You can read about our <a href="https://typescript-eslint.io/users/versioning">versioning strategy</a> and <a href="https://typescript-eslint.io/users/releases">releases</a> on our website.</p> <h2>v8.71.0</h2> <h2>8.71.0 (2026-09-28)</h2> <h3>🚀 Features</h3> <ul> <li><strong>eslint-plugin:</strong> [no-unsafe-enum-assignment] add rule (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12732">#12732</a>)</li> </ul> <h3>🩹 Fixes</h3> <ul> <li><strong>eslint-plugin:</strong> [switch-exhaustiveness-check] always sort literal cases in stable order (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12885">#12885</a>)</li> <li><strong>eslint-plugin:</strong> [unbound-method] respect <code>this: void</code> on class properties (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/7fce9127d">7fce9127d</a>)</li> <li><strong>eslint-plugin:</strong> [no-unnecessary-type-assertion] specialize generic assertion report message (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12832">#12832</a>)</li> <li><strong>eslint-plugin:</strong> [no-misused-promises] handle a return outside of any function (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12912">#12912</a>)</li> </ul> <h3>❤️ Thank You</h3> <ul> <li>Evyatar Daud <a href="https://github.com/StyleShit"><code>@StyleShit</code></a></li> <li>Fatih Çakır <a href="https://github.com/wfatih"><code>@wfatih</code></a></li> <li>Josh Goldberg</li> <li>Josh Goldberg ✨</li> <li>Zamiell <a href="https://github.com/Zamiell"><code>@Zamiell</code></a></li> </ul> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.0">GitHub Releases</a> for more information.</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md">@typescript-eslint/parser's changelog</a>.</em></p> <blockquote> <h2>8.71.1 (2026-10-05)</h2> <p>This was a version bump only for parser to align it with other projects, there were no code changes.</p> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.1">GitHub Releases</a> for more information.</p> <p>You can read about our <a href="https://typescript-eslint.io/users/versioning">versioning strategy</a> and <a href="https://typescript-eslint.io/users/releases">releases</a> on our website.</p> <h2>8.71.0 (2026-09-28)</h2> <p>This was a version bump only for parser to align it with other projects, there were no code changes.</p> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.0">GitHub Releases</a> for more information.</p> <p>You can read about our <a href="https://typescript-eslint.io/users/versioning">versioning strategy</a> and <a href="https://typescript-eslint.io/users/releases">releases</a> on our website.</p> <h2>8.70.1 (2026-09-21)</h2> <p>This was a version bump only for parser to align it with other projects, there were no code changes.</p> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.1">GitHub Releases</a> for more information.</p> <p>You can read about our <a href="https://typescript-eslint.io/users/versioning">versioning strategy</a> and <a href="https://typescript-eslint.io/users/releases">releases</a> on our website.</p> <h2>8.70.0 (2026-09-07)</h2> <p>This was a version bump only for parser to align it with other projects, there were no code changes.</p> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.0">GitHub Releases</a> for more information.</p> <p>You can read about our <a href="https://typescript-eslint.io/users/versioning">versioning strategy</a> and <a href="https://typescript-eslint.io/users/releases">releases</a> on our website.</p> <h2>8.69.0 (2026-08-31)</h2> <p>This was a version bump only for parser to align it with other projects, there were no code changes.</p> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.69.0">GitHub Releases</a> for more information.</p> <p>You can read about our <a href="https://typescript-eslint.io/users/versioning">versioning strategy</a> and <a href="https://typescript-eslint.io/users/releases">releases</a> on our website.</p> <h2>8.68.0 (2026-08-24)</h2> <p>This was a version bump only for parser to align it with other projects, there were no code changes.</p> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.68.0">GitHub Releases</a> for more information.</p> <p>You can read about our <a href="https://typescript-eslint.io/users/versioning">versioning strategy</a> and <a href="https://typescript-eslint.io/users/releases">releases</a> on our website.</p> <h2>8.67.0 (2026-08-10)</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/d57b8da272375b6a45270639894a793933208a91"><code>d57b8da</code></a> chore(release): publish 8.71.1</li> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/8695664c5ee3fbb8fd76907fc45e148579cc3162"><code>8695664</code></a> chore(release): publish 8.71.0</li> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/23d38ceeb8fb1237f55cb62fc2b54419e1fa1ed7"><code>23d38ce</code></a> chore(release): publish 8.70.1</li> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/7ee76085c22e923c0036b8e0733a3ca7dfd82b60"><code>7ee7608</code></a> chore(release): publish 8.70.0</li> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/9a6e546823e5d8f2dc015df2aa66c0230615e209"><code>9a6e546</code></a> chore(release): publish 8.69.0</li> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/8f4e00a4e8f3bdf93a5e5e8bc568ba1c15a4f896"><code>8f4e00a</code></a> chore(release): publish 8.68.0</li> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/55f6d5d4ca39d2fab93db97ced497b956017878d"><code>55f6d5d</code></a> chore: enable source maps (<a href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12677">#12677</a>)</li> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/20a261fb8e62351e88176b075090dc9276d26072"><code>20a261f</code></a> chore(release): publish 8.67.0</li> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/3b155bb1344fd7ce83086cf2f864a7e8f3b4a217"><code>3b155bb</code></a> chore: use typescript 7 for typechecking (<a href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12601">#12601</a>)</li> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/e51b11ba3ab31837762c675f62f0d4dcb1abc4fb"><code>e51b11b</code></a> chore(release): publish 8.66.0</li> <li>Additional commits viewable in <a href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.1/packages/parser">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1. Replace key-based limits with hosted words. 2. Explain how hosted words are counted and what happens at the limit. 3. Rename plan availability notices to the Translate, Optimise, Manage and Enterprise plans.
…#1158) The Subscriptions and Invoices pages in organization settings are now one Billing page, with `My subscription` and `Plans` tabs. The docs still pointed to the old pages. ## Changes - **Organization settings** - the billing section describes the two tabs and the `Cloud` / `Self-hosted` toggle. Invoices and the customer portal are now at the bottom of `My subscription`. The heading is "View and Manage Billing", but it keeps the old `#view-and-manage-subscriptions` anchor, so the link from the Machine Translation page and older links still work. - **Self-hosted licensing** - "Subscription page" is now "Billing page". To subscribe, it points to `Plans` → `Self-hosted`, and custom plans to `Your custom plans`. - **6 screenshots retaken** on a local platform + billing build from `main`: `subscriptions`, `Invoices-customer-portal`, `subscriptions-selfhosted`, `subscription_license_key`, `subscription_self-hosted_cancel`, `subscription_self-hosted_cancel_confirm`. - **5 unused images removed** - no page used them and they showed the old menu. ## Not in this PR - Screenshots on other pages (members, glossaries, translation memories, LLM providers, SSO) still show the old menu in the sidebar. The page content is still right, so I left them. - The usage list in organization settings ("Used keys", "Used seats") is out of date, but #1145 rewrites that part. ## Checked - `npm run build` passes (it fails on broken links and anchors). - Every text change was compared with the running app. The `/billing-self-hosted` link and the old `/subscriptions` and `/invoices` URLs redirect to the Billing page. --------- Co-authored-by: Barus Urbanova <bara.skrivankova@gmail.com>
- Move the Community Translation pages under Translation Process with kebab-case names, and rename the contributor page to translate-with-tolgee.mdx - Restructure Community Translation by owner and contributor point of view, with a self-contained lead, numbered procedures, the exposure of a public project, who may accept and publish, and the self-hosted requirements - Name the free Business plan for non-commercial open source with a mailto:sales@tolgee.io link - Fill in the released versions, the suggestions_disabled status (409), and the plugin and dialog labels as the products spell them - Build the in-context suggestions section on main's sign-in rewrite and link to oauth_sign_in.mdx instead of a second self-hosting section - Retake the advanced project settings screenshot with Public project and move it to the top of the section; add a suggest-only dialog screenshot
…y-sdk-suggestions # Conflicts: # js-sdk/in_context.mdx
Anty0
merged commit Oct 19, 2026
48b42ed
into
jirikuchynka/community-translations-docs
3 checks passed
1 of 3 tasks
Barush
added a commit
that referenced
this pull request
Oct 19, 2026
Documents Community Translation end to end: public projects and community contributors in the platform (pitch tolgee/tolgee-platform#3806), and suggesting translations in context through the Tolgee Tools browser plugin (pitch tolgee/tolgee-platform#3780). It includes the changes from #1144, which was built on top of this branch and is merged into it. The feature is released: | Part | Release | | --- | --- | | Public projects | Tolgee v3.206.0 | | `Community translation` switcher entry | Tolgee v3.207.0 | | `Community` tab, `Invite to Team` | Tolgee v3.215.0 | | Plugin sign-in on self-hosted (`tolgee.oauth2.browser-extension-enabled`) | Tolgee v3.230.0 | | Suggestions in the in-context dialog | `@tolgee/web` 7.3.0, Tolgee v3.227.0 | | Missing-permissions alert in the plugin | Tolgee Tools v1.11.0 | ## New pages - **`platform/translation_process/community-translation.mdx`**, the feature hub. It has a part for owners and members (making a project public and what that exposes, sharing it, reviewing suggestions, seeing who contributed, making it private again) and a part for contributors (what they can do, finding the projects they helped with). It also covers the self-hosted requirements: version floor, authentication and open registrations. - **`platform/translation_process/community-translation-in-context.mdx`**, for owners whose website uses the Tolgee JS SDK. It covers what to switch on in the project and on a self-hosted server, what to declare on the website (`apiUrl`, `projectId`, no `apiKey`), what contributors need, the `Translate with Tolgee` badge, and what contributors can do in the dialog. - **`platform/translate-with-tolgee.mdx`** is the page the badge links to, through the short link `/translate-with-tolgee` that `static/_redirects` points to it. It walks a first-time contributor through installing the plugin, signing in and Alt+clicking a string, and lists fixes for common problems. ## Updated pages - **`js-sdk/in_context.mdx`** gets a new section, "Suggesting Translations in Context". It covers the `Save` / `Suggest` / `Save & suggest` button, the per-field notes, partial failures, reviewing suggestions in the dialog, suggest-only permissions and troubleshooting. A short paragraph links the sign-in section to it. The page is based on main's version from #1151. - **`suggestions.mdx`** describes the two accept actions (`Accept only` and `Accept and decline others`) and the display of up to three suggestions with `Show all`. It notes that `Suggestions mode` off rejects new suggestions with `suggestions_disabled` (HTTP 409), and it documents the `Delete own` permission. It also corrects which permissions accepting and declining need. - **`project_settings.mdx`** gets a `Public project` section, and the Advanced screenshot is retaken and moved to the top of the section (see the review comments below). - **`members.mdx`** gets a `Community Contributors` section (the `Team` and `Community` tabs) and a community-permissions note. - **`sidebarPlatform.js`**: both community pages sit under Translation Process, and the contributor page sits under Get Started. ## Review comments addressed - The page moved to Translation Process. - The open-source offer now names the free Business plan for non-commercial open source and links to `mailto:sales@tolgee.io`. - The lead paragraph is rewritten as who, what, how and what's next, with no links, and says "anyone with a Tolgee account". - Sections are grouped by owner and contributor point of view. - The full public projects URL is given, with the self-hosted equivalent. - The page says where the organization switcher is and when `Community translation` appears. - The community projects screenshot is explained: logged in, what `My contributions only` filters, and that `Community translation` is not a real organization. - Accept options and the Team and Community tabs are bullets. - The Advanced project settings screenshot was missing `Public project` and sat at the bottom of the section. It is retaken with `Public project` on top and moved directly under the section heading. - `Read more` from the settings page links to the "Making a Project Public" anchor. - The `public project` links on the Members page go to the "Making a Project Public" anchor instead of the page top. ## Screenshots These are captured against a local Tolgee v3.236.0 and the `@tolgee/web` test app, or reused from main. - public toggle - Advanced settings - public projects page - community projects page - Community tab - the accept actions - the in-context dialog in suggest-only mode - the plugin's `Connect to Tolgee` popup and consent screen, reused from main's #1151 images ## Open - [x] The short link redirects to the page on the deploy preview (`/translate-with-tolgee` answers 301 to `/platform/translate-with-tolgee`). - [ ] Tolgee Tools v1.11.0 is a GitHub pre-release. Confirm it is live in the Chrome Web Store and Firefox Add-ons before release notes point at the missing-permissions alert. - [ ] Optional: replace `static/img/docs/platform/oauth/consent-screen-browser-extension.webp` on the contributor page with a capture made as a contributor. The current one shows a user with edit rights. The branch is up to date with `main`. Checked with `npm run build`, which throws on broken links and anchors. --------- Co-authored-by: Barush Urbanová <bara.skrivankova@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Docs for in-context suggestions, scope E of pitch tolgee/tolgee-platform#3780 (community translation v2.0, SDK and browser plugin).
Merged into #1130. This branch was built on #1130's branch, and the two were finished and reviewed together. Both are now delivered by #1130, whose description covers the combined result.
The feature is released:
@tolgee/web7.3.0tolgee.oauth2.browser-extension-enabled)What it delivers
platform/translation_process/community-translation-in-context.mdxis for owners of public projects. It covers what to switch on in the project and on a self-hosted server, what to declare on the website (apiUrl,projectId, noapiKey, an SDK new enough), what contributors need, theTranslate with Tolgeebadge, and what contributors can and can't do in the dialog.js-sdk/in_context.mdxgets a new section, "Suggesting Translations in Context". It covers theSave/Suggest/Save & suggestbutton and the per-field notes, partial failures, reviewing suggestions in the dialog, the suggest-only dialog (with a screenshot), and troubleshooting. It is built on main's sign-in rewrite from docs: sign in with a Tolgee account for the CLI, the browser extension and MCP clients #1151, which also documents plugin sign-in, so this PR no longer adds its own sign-in section.suggestions.mdxsays that withSuggestions modeoff, the API rejects new suggestions withsuggestions_disabled(HTTP 409) while existing ones stay manageable. It documents theDelete ownpermission, including for API keys and connected applications.platform/translate-with-tolgee.mdxis a page for contributors. TheTranslate with Tolgeebadge links to it through the short link/translate-with-tolgee, whichstatic/_redirectspoints to the page.oauth_sign_in.mdxfor turning the browser extension on, instead of adding a second section togetting_started.mdx.Pre-merge checklist, resolved
@tolgee/web7.3.0 for suggesting, 7.2.0 for sign-in, and v3.230.0 for self-hosted plugin sign-in.Accept,Accept only,Decline,Accept and decline others,Delete,Show more,Save,Suggest,Save & suggestConnect to Tolgee, the missing-permissions alert andSign in again,Sign-in not available on this site,Sign-in needs a newer Tolgee SDKDelete ownplatform/self_hosting/configuration.mdxis regenerated. It now comes from main at v3.236.1.Still open (tracked on #1130)
/translate-with-tolgeeanswers 301 to/platform/translate-with-tolgee).