In a previous blog, we already spoke about Term Modifications, a nifty feature that allows Cattitude to “intercept” machine translations and search and replace certain words or phrases that for some reason keep giving the wrong results.
For example, if you’ve been translating a text on birds for a while, chances are your machine translation engine will constantly translate the word crane as the large wading bird. If your next project is then about caterpillars, the engine may still translate the word crane as bird, while the crane you need is more related to machines. Term Modifications solves this by searching and replacing the generated machine translations based on the currently selected franchise: when you’re translating your bird text, you will get your birds, whereas you will get machines when you’re translating other stuff.

Context vectors
Some engines allow you to set so-called context vectors. If your context vector is bird, the engine will be more inclined to generate translations related to birds, whereas if your context vector is technology, the engine will be more inclined to generate translations related to machines. This isn’t always ideal though. First, because this means you will need to start using multiple engine memories, which means more settings and more maintenance. Second, if you have only translated very little about machines, your leverage from the engine will be less, as you cannot optimally use your bird memory.

Now birds and machines are two entirely different fields, so it may seem logical to use separate engines for these concepts, despite the above disadvantages. But things become even more complicated if you translate for example games about birds and games about machines. Do we then need to split up our engines even further into Games – Birds and Games – Machines? We don’t want too much fragmentization.
This is where Term Modifications comes to the rescue. You couldn’t care less about what’s going on under the hood: it’s the result that counts and if searching and replacing a few words gives you exactly the translation you need, that’s all what a translator needs.
Fire and forget
However, we wanted to make this feature even more powerful. Sometimes engines can be very obstinate. For example, an engine may keep translating to unlock X as om X te ontgrendelen in Dutch (whereby X is a random word or phrase), no matter how often we tell the engine to translate to unlock X as om toegang te krijgen tot X, while the translation we want is om toegang te krijgen tot X. This can be caused for example by the fact that in the past, the translation om X te ontgrendelen was used very often in combination with many different wordings, making it very hard for the engine to “forget” this translation.
As you may see, we have a problem though. There’s no way we can simply change om X te ontgrendelen into om toegang te krijgen tot X, as the word order is different and there’s a random variable called X. Thus we decided to implement so-called regular expressions, also known as RegEx. To learn more about regular expressions, please visit https://www.regular-expressions.info/ To test regular expressions, please visit https://regex101.com/
By implementing the following RegEx, we can solve the above problem:
Search | Replace |
om\s(.+?)\ste\sontgrendelen | om toegang te krijgen tot $1 |

We want more
This was not enough however. We decided to take Cattitude further than any other tool. In this blog we’ll introduce our own use case, but I’m sure you can think of many ways to apply this to your own situation.
Some of the games we translate feature so-called player cards. These cards contain both a player name and a score. Some strings consist just of these player cards, but very often, the names of these cards are interspersed in explanations and the like, and often strings contain multiple card names.
In one game, the format of these cards is score ALG playername, whereas in other games, the format of these cards is playername (score ALG). ALG is just a Dutch abbreviation of ALGEMEEN (OVERALL), referring to the overall score of this player.
You can probably imagine the engine coming up with translations like Michael Jordan (99 ALG) while we really needed 99 ALG Michael Jordan and vice versa.
Cattitude now introduces the RegEx keyword #TERM# that refers to any term found in the translation. By implementing the following, we can now automatically convert all 99 ALG Michael Jordans to Michael Jordans (99 ALG) while preserving the card names that were already correct.
Search | Replace |
(\d{2})\sALG\s#TERM# | #TERM# ($1 ALG) |

As these Term Modifications can be defined for any franchise, we can use the following to convert all Michael Jordans (99 ALG) to 99 ALG Michael Jordans in another franchise which has the opposite problem, again while preserving the card names that were already correct.
Search | Replace |
#TERM#\s(\d{2}\sALG) | $1 ALG #TERM# |
Term Modifications itself was already a very revolutionary feature not to be found in any other CAT tool. Cattitude has now taken this not one, but even two steps further by expanding on this feature with RegEx and even RegEx keywords.