Skip to content

docs: document msgctxt handling in PO format page#1111

Merged
Anty0 merged 3 commits into
mainfrom
jirikuchynka/po-msgctxt-v2
Jun 3, 2026
Merged

docs: document msgctxt handling in PO format page#1111
Anty0 merged 3 commits into
mainfrom
jirikuchynka/po-msgctxt-v2

Conversation

@Anty0
Copy link
Copy Markdown
Member

@Anty0 Anty0 commented May 26, 2026

Summary

  • Adds a new msgctxt and key names section to platform/formats/po.mdx explaining how Tolgee encodes the gettext msgctxt field into key names using the U+0004 separator.
  • Includes an example, a description of the UI chip rendering, and a link to the GNU Gettext documentation on contexts.
  • Mentions msgctxt in the existing Feature support paragraph.

Companion PRs

@netlify
Copy link
Copy Markdown

netlify Bot commented May 26, 2026

Deploy Preview for tolgee-docs ready!

Name Link
🔨 Latest commit d32a975
🔍 Latest deploy log https://app.netlify.com/projects/tolgee-docs/deploys/6a20185ad2499d0008eceb80
😎 Deploy Preview https://deploy-preview-1111--tolgee-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@Anty0 Anty0 requested a review from Barush May 26, 2026 14:59
Anty0 added a commit to tolgee/tolgee-js that referenced this pull request May 27, 2026
## Summary
- The in-context **KeyDialog** and the **ScreenshotWithLabels** tooltip
now use a new `<KeyName>` component that splits the key name on the
U+0004 separator (set by tolgee-platform when importing gettext `.po`
files with a `msgctxt`) and renders the `msgctxt` portion as a styled
chip in front of the `msgid`.
- Standalone implementation — no runtime dependency on
`@tginternal/editor` to keep this package's bundle independent of
release coordination.
- The platform-side change introducing the separator and the matching
chip visual lives in the companion tolgee-platform PR.

## Companion PRs
- tolgee-platform: tolgee/tolgee-platform#3694
- editor: tolgee/editor#8
- documentation: tolgee/documentation#1111

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added improved key name rendering with enhanced formatting that
visually distinguishes embedded metadata using dedicated styling
* Updated the UI across dialogs and tooltips to consistently leverage
the new key name display, improving visual clarity and presentation when
viewing keys with associated metadata

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/tolgee/tolgee-js/pull/3523?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Comment thread platform/formats/po.mdx Outdated
Comment on lines +52 to +54
Tolgee supports importing of basic `msgid` and `msgstr` fields, the plural `msgid_plural` and `msgstr[..]` arrays,
the optional `msgctxt` (see [msgctxt and key names](#msgctxt-and-key-names) below), and it imports the
`extracted comments` (`#.`) as the key descriptions. No other fields are supported.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Toto by možná mohl být list? Je to trochu messy na čtení ve větě.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed. Is it better like this? ^^

JanCizmar pushed a commit to tolgee/tolgee-platform that referenced this pull request Jun 3, 2026
Supersedes #3459
Fixes #3053

## Summary
- **Import:** the PO parser now captures the optional `msgctxt` field.
On import, Tolgee stores the pair `(msgctxt, msgid)` as a single key
name using the U+0004 EOT separator — the same convention GNU Gettext
uses internally in MO files — so two entries with the same `msgid` but
different `msgctxt` remain distinct keys.
- **Export:** the PO exporter splits the key name on U+0004 and writes
the `msgctxt` line back before `msgid`. Plural fallback now uses the
split `msgid` instead of the raw key name.
- **Parser cleanup:** header detection now requires both `msgid` and
`msgctxt` to be empty, so a malformed msgctxt-only entry can't be
misread as the header block. The legacy `PO_MSGCTXT_NOT_SUPPORTED` file
issue is no longer emitted (the enum value stays in place for
back-compat with previously stored issues).
- **UI display:** a new `<KeyName>` component renders the `msgctxt`
portion as a styled chip in front of the `msgid` across all key-name
display sites (translations grid, simple/list view, single-key page
breadcrumb, activity log, import dialogs, translation-memory rows and
tooltips, branching/merge header, screenshot label tooltips). The window
title intentionally still shows the raw key — the chip cannot render in
a `document.title` string.
- **UI edit:** the `<Editor>` component gains a `keyName` mode that
wires a new CodeMirror plugin (`KeyNamePlugin` from
`@tginternal/editor`) decorating the U+0004 with an atomic widget.
Display and edit are now visually identical — the previous
substitution-based workaround (`keyNameForEditing`/`keyNameFromEdited` +
`␄` visible-char) is removed.
- **Vite config:** added `@codemirror/state`, `@codemirror/view`,
`@codemirror/lint` to `resolve.dedupe` to avoid the "multiple instances
of @codemirror/state" runtime error introduced when `preserveSymlinks:
true` is combined with the linked `@tginternal/editor` worktree.

## Notes
- Re-importing a `.po` file that was imported before this change (when
msgctxt was silently dropped) will create new keys for the `(msgctxt,
msgid)` pairs instead of updating the existing `msgid`-only keys.
Accepted breakage — most users import once.
- An empty `msgctxt ""` collapses to a plain key without a chip,
matching gettext semantics.

## Companion PRs
- editor: tolgee/editor#8
- tolgee-js: tolgee/tolgee-js#3523
- documentation: tolgee/documentation#1111

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Full PO msgctxt support: import/export preserves and uses context to
disambiguate identical strings.
* Key display shows visual context indicators with a tooltip linking to
docs via a new KeyName component.
* Key editor gains a new "keyName" mode for viewing/editing keys with
context.
* Import ignores stray context-only entries to avoid header mis-parsing.

* **Tests**
* Added unit and end-to-end tests for msgctxt parsing, escaping,
import/export, fixtures and UI behavior.

* **Chores**
  * Editor package updated.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/tolgee/tolgee-platform/pull/3694?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Anty0 added 3 commits June 3, 2026 14:04
Adds a 'msgctxt and key names' section explaining how
Tolgee encodes the optional gettext msgctxt field into key
names using the U+0004 separator, with an example and a
link to the GNU Gettext documentation on contexts.
@Anty0 Anty0 force-pushed the jirikuchynka/po-msgctxt-v2 branch from 3165b98 to d32a975 Compare June 3, 2026 12:04
@Anty0 Anty0 enabled auto-merge (squash) June 3, 2026 12:06
@Anty0 Anty0 merged commit d80090d into main Jun 3, 2026
6 checks passed
@Anty0 Anty0 deleted the jirikuchynka/po-msgctxt-v2 branch June 3, 2026 12:12
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.

2 participants