HR platforms love to talk about going global. Fewer of them talk about what happens when a performance review written in Portuguese has to retain its exact meaning in Spanish, French and Brazilian Portuguese, across four HR systems, twice a year, for every employee in the company.
If you work on internal tooling, HRIS integrations, or anything that touches people data across multiple markets, this is a data consistency problem before it's a language problem. A source article from M21Global on translating performance reviews for multinational teams lays out why literal translation breaks HR documents: rating scales lose their meaning, phrases like "exceeds expectations" don't map cleanly across cultures, and job title taxonomies drift between subsidiaries.
That's a content and localization problem. Here's the engineering side of it: how do you actually build a system that keeps HR terminology consistent across languages, instead of relying on whoever happens to translate the document that quarter?
The core problem is an unmanaged glossary
Most companies don't have a translation problem. They have an uncontrolled vocabulary problem. Terms like "Performance Improvement Plan", "stretch goals" or "calibration session" get translated differently every cycle because there's no single source of truth enforcing consistency.
If you're building or maintaining an internal HR tool, this is solvable the same way you'd solve any taxonomy drift problem: with a managed glossary that sits between your content and your translation layer.
A minimal schema looks like this:
{
"term_id": "pip_001",
"source_term": "Performance Improvement Plan",
"source_lang": "en",
"domain": "hr_performance",
"translations": {
"pt-PT": "Plano de Melhoria de Desempenho",
"pt-BR": "Plano de Desenvolvimento de Desempenho",
"es-ES": "Plan de Mejora del Rendimiento"
},
"do_not_translate": false,
"notes": "Always capitalize as a formal HR process name, not a generic phrase."
}
This is a trivial table in Postgres or a dedicated collection in whatever document store you already use. The important part isn't the storage, it's that every translation request references this table before falling back to a translator's judgement or a generic MT engine.
Wiring the glossary into a translation workflow
If you're using a CAT (computer-assisted translation) tool or an API-based MT provider, most support glossary injection natively. For example, with DeepL's API:
import deepl
translator = deepl.Translator(auth_key)
glossary = translator.create_glossary(
"hr_performance_pt_es",
source_lang="PT",
target_lang="ES",
entries={
"Plano de Melhoria de Desempenho": "Plan de Mejora del Rendimiento",
"Sessão de calibração": "Sesión de calibración",
"Avaliação 360": "Evaluación 360"
}
)
result = translator.translate_text(
review_text,
source_lang="PT",
target_lang="ES",
glossary=glossary
)
Azure Translator and Google's AutoML Translation support similar glossary mechanisms. The point is: don't send raw HR text to a generic translation endpoint and hope the model picks the right register. Force the terminology.
For anything that isn't a 1:1 term match (rating scale descriptions, for example, where the number and the label need to stay locked together), treat it as structured data, not free text:
{
"scale": "performance_rating",
"levels": [
{"value": 5, "label": {"en": "Exceptional", "pt-PT": "Excecional", "es-ES": "Excepcional"}},
{"value": 4, "label": {"en": "Exceeds Expectations", "pt-PT": "Supera as Expectativas", "es-ES": "Supera las Expectativas"}}
]
}
Never translate the rating label as part of the free-text review body. Pull it from this table at render time, in whatever language the reader needs. This alone removes the biggest source of the problem the source article describes: two employees with the same score reading different interpretations of what it means.
Translation memory matters more than MT quality here
HR review cycles are recurring and high-volume by nature. That makes this a textbook use case for translation memory (TM), not just machine translation. A TM stores previously translated segments and reuses them when the same or similar sentence appears again.
Tools like Phrase, Smartcat or even self-hosted options built on OpenNMT can maintain a TM alongside your glossary. Practical setup:
- Segment HR documents into sentence-level units (most CAT tools do this automatically with
.xliffimport). - Store every human-reviewed translation back into the TM after a cycle.
- On the next cycle, pre-fill anything above a 90%+ fuzzy match and route only new or changed segments to human review.
This cuts review cost significantly for annual cycles across large orgs, which is exactly the scenario the source article flags: "annual review cycles in large organisations generate high volume; in these cases, a consistent glossary and translation memory reduce cost without sacrificing quality."
Access control is an engineering requirement, not a legal afterthought
Performance reviews carry salary data, disciplinary history, and unannounced succession plans. If your pipeline routes this content through a third-party translation API, you need to treat it like any other PII pipeline:
- Strip or tokenize names before sending text externally, and rehydrate after translation returns. A simple approach:
import re
def anonymize(text, name_map):
for name, token in name_map.items():
text = text.replace(name, token)
return text
def rehydrate(text, name_map):
reverse_map = {v: k for k, v in name_map.items()}
for token, name in reverse_map.items():
text = text.replace(token, name)
return text
- Confirm whether your translation API vendor retains submitted text for model training. Most enterprise tiers (DeepL Pro, Azure Translator with the no-logging option) let you disable this explicitly.
- Log every access to the raw document, not just the API call, if you're routing through an external review step.
Where human review still wins
None of this replaces a second linguist reviewing high-stakes documents, which is the tier distinction the source article makes between its Standard and Estratégica service levels. Automate the plumbing: glossary enforcement, TM reuse, PII handling. Keep a human in the loop for anything feeding into a pay, promotion or termination decision.
The pipeline above gets you consistency and speed. It doesn't get you judgment about whether "exceeds expectations" lands the same way in São Paulo as it does in Lisbon. That part still needs a person who understands both cultures, not just both languages.
Top comments (0)