Using Weblate Component Linking to Share Translations Across Projects
Learn how Weblate’s component linking and shared translation memory let teams translate common UI strings once and propagate them across multiple projects, reducing duplicate work while preserving per‑component controls.
02 Aug 2026, 21:53 UTC

Problem: Duplicate translation work across related projects
When you maintain several Weblate projects that share common UI strings (e.g., button labels, modal text), translators often end up translating the same source text multiple times. This duplication increases effort, introduces inconsistency, and makes it harder to keep translations in sync when the source changes.
How Weblate component linking works
Weblate groups translations into projects and components. A component can be marked as linked to another component, which tells Weblate to store identical source strings only once and to propagate translations from the source component to all linked targets. When the Share translation memory toggle is enabled, the linked components also share a fuzzy‑match translation memory, allowing reuse of similar but not identical strings.
Linking does not merge the components; each retains its own access controls, review steps, and version‑control integration. Changes to the source component appear as pre‑filled translations in the linked components, which translators can accept or override.
Worked example: linking a common UI component
- Log in to your Weblate instance (e.g.,
https://weblate.example.com) with a user that has admin rights on the target project. - Create a project called
common-uiif it does not exist, and add a component namedbuttonsthat contains the source strings you want to reuse (e.g.,Save,Cancel,Close). - In the project that needs the strings (e.g.,
dashboard), create a component calleddashboard-buttons. - Open the component’s settings page (
Components → dashboard-buttons → Settings), scroll to the Linked components section, and add thecommon-ui/buttonscomponent. - Toggle the Share translation memory switch to On and save.
- Add a new source string to the base component, for example
Export. After saving, open thedashboard-buttonscomponent’s translation view for any language; the stringExportwill appear pre‑filled with the source text, ready for translation or approval.
Trade‑off: exact‑match propagation and manual overrides
Linking propagates only exact matches. If a linked component needs a context‑specific variation (e.g., Save vs. Save & Exit), you must edit the string in the linked component manually; the change will not affect the base component. Over time, unlinked components can drift from the base if their translations are not reviewed periodically.
To check that linking is active, you can query the Weblate API for the component’s links:
GET https://weblate.example.com/api/projects/dashboard/components/dashboard-buttons/?format=json
The response includes a linked_components array listing the base component and a boolean share_tm indicating whether translation memory sharing is enabled.
Actionable closing
Start by identifying a small set of truly shared strings (e.g., generic buttons, modal headers). Create a base component, link the relevant feature components, and enable translation‑memory sharing. Monitor the linked components for any strings that require overrides, and schedule a brief monthly review to catch drift. This approach reduces duplicate work while keeping each project’s translation workflow independent.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.