Translating RoboHelp Projects

 

 

What's covered?

The subject of translation crops up regularly in the RoboHelp forums and it is a task I have not been personally involved in. Whilst my work did not require projects to be translated, I have read various articles about it. I decided to embark on writing this article when I saw a post on the RoboHelp forums. Jutta Geisler-Sanders does undertake translation of her projects and she had responded to someone seeking help and it prompted me to write the first draft.

Translating a project the first time may seem fairly straightforward. It gets more complex when the translator is not a RoboHelp user and more so when the subject matter is updated as you only want to translate the changes. The aim here is to look at the methods that can be used and the issues involved.

Jutta helped me by commenting on the first draft and all I had to do was rewrite it! Being serious, her comments helped me structure it in a different and I hope better way.

I am indebted to Jutta for her assistance. For those of you who do not speak German, Jutta is the German equivalent of Judith.

June 2019 - This page covers the steps for use with RoboHelp Classic versions up to and including RoboHelp 2019 Classic. The general principles will be the same in RoboHelp 2019.

July 2020 - The 2020 version of RoboHelp has a new translation feature that greatly simplifies translating a project. See the RoboHelp Tour for information.

Introduction

Essentially there are two methods of working:

  1. Have one project and in each topic you include the content in each language required, then use build tags and build expressions so that each output is for one of the required languages. This will be referred to as the Single Project method.
  2. Create a copy of the project for each language and translate the copies into the required languages. This will be referred to as the Multiple Project method.

Both methods have their issues whether this is the first time you are translating the help or the time has come to update it. Whether you are doing the job yourself or via an agency, you don't want to translate the whole help again. Let's look at both methods.

The Single Project Method

RoboHelp

In a small project, this might be viable in some scenarios.

The Translation

If you are personally undertaking the translation into every language and not translating the topic file names is not an issue, then you could use this method. Keep in mind though that in a big project, it might be easier to find your way around a large maze than work with what is described above.

If someone else is undertaking some or all of the translation work, it is unlikely they will be skilled in the use of RoboHelp so you have to think about how the work can be done. What format will you give them the topics in and what will they give you back. It will likely not be HTML in a RoboHelp friendly format. Also how will the TOC, the index and glossary get translated? The translator cannot work in RoboHelp so how do they get translated.

There are translation agencies who specialise in translating RoboHelp projects but they will not work with this method, principally because in your interests that they use specialised software that will not work this way. If you use an agency that does not specialise in translating RoboHelp projects, then you have all the same issues as if it is being done by someone in-house other than yourself.

When it comes to updating the help, then you have to find a way of identifying the changes, either to yourself or whoever is undertaking the changes. I have seen the suggestion that you generate a Word document from the first version of the help and another from the project that has been updated in the core language, then use Word's File Compare feature. Consider here how the translation will be given back to you and how well that content will work in RoboHelp. The method might not be as efficient as you would hope.

Overall

Whilst a RoboHelp project can be translated this way, most people will use the multiple project method for reasons explained below.

Keep in mind that the objective is to translate everything the user sees without changing the underlying HTML. If you don't believe how important and complex that can get, you will soon learn when you try!

The Multiple Project Method

I read that most people who have undertaken the task, find that this is the best solution and it is the method that Jutta uses. Each language is neatly in a self contained project. Here the main considerations are:

In-house Without Specialised Software

If you are doing all the translation yourself, about the only issue is identifying the changes. You could use Word's File Compare as described above or create your own solution.

If someone else in-house is going to be involved, then unless they can use RoboHelp, you will have to come up with a method of working so that things like the TOC, the snippets, the indexes, the glossaries and the LNG file get updated.

In-house With Specialised Software

This is pretty much the same as using an agency that specialises in RoboHelp projects and uses Trados or suchlike. The difference is that the translator, be that you or someone else, has to know how to use Trados or the chosen translation tool. Jutta's workflow with Trados is described below.

External

The advantage of using an external agency that specialises in working with RoboHelp projects is that you just give them the core language project and they give you back a project for each language. When an update is required, their software will tell them what has changed so you only get charged for translating the changes.

The disadvantage is you have to pay for that service!

If you use a translation agency that does not work with RoboHelp, you have many of the same problems as when the translation is done in-house. Someone has to get into all those nooks and crannies, the TOC, the snippets, the indexes, the glossaries and the LNG file. Then of course you have the problem when updates come along. They don't have the software that tracks the changes.

Filenames

A difference with the multiple project method is that you can, if you wish, also translate the topic HTML file names. They do appear in some searches and whether or not this is a necessary step will depend on your view.

What To Do?

The way forward is going to depend, as always, on budget and resources.

I suggest that what you do, is look at what has been covered and draw up a list covering how these factors will work in your organisation.

Other Considerations

Do try to get the translated content checked by native speakers of each language. Of course there will always be someone who speaks a language better than a native because they have had to study it rather than learn along the way and have not fallen into bad habits. Generally though, a native speaker is going to be the better option.

Jutta's Workflow

With Jutta's permission and assistance, the information she posted about working with a translation tool such as Trados has been edited and included below.

Click here for the additional information.

I use RoboHelp 11.0.4.291 and SDL TRADOS Studio 2015 Professional SR3 – 12.3.5262.0

I am the technical writer for software and I start the Robohelp project in German, it is then translated into serveral languages.

I use multiple projects with copies for each language because for some products we translate up into 8 other languages. For example product aaa_V9.0 is translated into 4 languages but next release aaa_V9.1 I may need to translate into 7 languages. It's straightforward to create another copy of the core language product for another language. I have used Robohelp and Trados this way for many years.

I create Responsive HTML5 and Microsoft HTML (CHM) help.

RoboHelp

  1. The folder with the RoboHelp project has the name "product_DEU" to quickly identify which project is in which folder.
  2. The core project name is also "product_DEU" so the RoboHelp project file is also "product_DEU.xpj". The important bit here is having the ending "_DEU", also for easy identification.

If an external translation agency is to be used, it is recommended that the standard language codes are used. Try abbreviations.com or wikipedia.

  1. I copy the whole folder including all sub folders and rename the new folder to "product_ENG" or "product_ITA" and so on.
  2. I open the RoboHelp project to be translated and rename the RoboHelp project <File Menu - Rename project> (in German <Datei - Projekt umbenennen>). It helps if your project name includes something to indicate the language. I change the name from "Product_DEU" to "Product_ENG" and so on.
  3. All RoboHelp's internal project files such as the XPJ and CPD files will be renamed by RoboHelp but the *.hhc (toc), *.hhk (index) and *.glo (glossary) will not be renamed. These will remain with their orginal language content and names. Instead RoboHelp will create a file for each of those files with the new name of the project. So "Product_DEU" will remain and a new "Product_ENG" will be created.
  4. Delete the new empty files and rename the old files with the new name "Product_ENG" and so on.
  5. Change the language in the project settings from the core language to whatever language you are translating to, in my case from German to English.
    <File > Project Settings or Project > Project Settings depending on RoboHelp version> (in German <Datei - Projekteinstellungen - Sprache>.
  6. If you have applied a language to individual topics rather than relying on the default, then select those topics or all topics in Topic List and apply the new language.
  7. See SDL Trados or Transit NXT for the next steps. Then come back here.
  8. After translation I export the "sub-folders" with the translated files and copy them back to the new RoboHelp folder for the relevant language.
  9. Open the RoboHelp project ".._ENG.xpj" and all files are in the new language and all links or hyperlinks are still fine.
  10. Pictures - If you use pictures in the help, you perhaps need to create new ones.
  11. If you have a title in the output window, you need to rename the title before you compile the new help.

SDL Trados or Transit NXT

I create a new Trados-project for every translation.
"Product_V92_DEU_ENG" or "Product_V92_DEU_ITA"

  1. I import all sub folders with the files "...*.htm" to the Trados project. Trados can easily read the *.htm file, I had to do nothing else.
    For *.htm files Trados use the filtersettings "XHTML 1.1 V1.2"
  2. I do NOT rename any htm file and the translator only see the text, not the link.
  3. To translate the table of content, index and glossary you need to translate the RoboHelp-project files
    *.hhc - content
    *.hhk - index
    *.glo - glossary
    For these files Trados needs a special filter, *.hhc and *.hhk are XML format files
    These filter settings are not standard in Trados and not in Transit NXT
    The filter settings for Trados are below and may help you to create filter settings for Transit NXT. If not, contact their support.
    In Trados the translater only see the words of the content or index and can't overwrite the link.
  4. Now go back to Step 9 above.

TRADOS - filtersettings for *.hhc + *.hhk + *.glo

For Trados you have to copy the settings below to a file with the ending <*.sdlftsettings>. In Trados you have to import them for each new project.

<?xml version="1.0" encoding="utf-8"?><SettingsBundle><SettingsGroup Id="Robohelp"><Setting Id="SnifferNamespaces">True</Setting><Setting Id="SnifferRootElements0">glossary</Setting><Setting Id="SnifferRootElements">True</Setting><Setting Id="SnifferXPaths">True</Setting><Setting Id="ElementData3IsInlinePlaceholder">false</Setting><Setting Id="ElementData2IsInlinePlaceholder">false</Setting><Setting Id="ElementData3IsInline">false</Setting><Setting Id="ElementData3Name">glossdef</Setting><Setting Id="ElementData3">True</Setting><Setting Id="ElementData0AttributeData0"><AttributeData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Sdl.FileTypeSupport.Native.Xml.FilterSettings"><Name>version</Name></AttributeData></Setting><Setting Id="ElementData0AttributeData">True</Setting><Setting Id="ElementData1IsInlinePlaceholder">false</Setting><Setting Id="ElementData2IsInline">false</Setting><Setting Id="ElementData2Name">glossterm</Setting><Setting Id="ElementData2">True</Setting><Setting Id="ElementData1AttributeData">True</Setting><Setting Id="ElementData0IsInlinePlaceholder">false</Setting><Setting Id="ElementData1IsInline">false</Setting><Setting Id="ElementData1Name">glossentry</Setting><Setting Id="ElementData1">True</Setting><Setting Id="ElementData2AttributeData">True</Setting><Setting Id="ElementData">True</Setting><Setting Id="ElementData0IsInline">false</Setting><Setting Id="ElementData0Name">glossary</Setting><Setting Id="ElementData0">True</Setting><Setting Id="ElementData3AttributeData">True</Setting><Setting Id="Xml_Translate_Rule_4">True</Setting><Setting Id="Xml_Translate_Rule_3">True</Setting><Setting Id="Xml_Translate_Rule_4Translate">yes</Setting><Setting Id="Xml_Translate_Rule_2">True</Setting><Setting Id="Xml_Translate_Rule_5XPathSelector">//section/@name</Setting><Setting Id="Xml_Translate_Rule_1XPathSelector">//glossentry</Setting><Setting Id="Xml_Translate_Rule_5Translate">yes</Setting><Setting Id="Xml_Translate_Rule_3XPathSelector">//glossdef</Setting><Setting Id="Xml_Translate_Rule_4XPathSelector">//item/@name</Setting><Setting Id="Xml_WithinText_Rule_">True</Setting><Setting Id="Xml_Translate_Rule_1">True</Setting><Setting Id="Xml_Translate_Rule_2XPathSelector">//glossterm</Setting><Setting Id="SnifferRootElements1">toc</Setting><Setting Id="Xml_Translate_Rule_5">True</Setting><Setting Id="SnifferRootElements2">index</Setting><Setting Id="Xml_Translate_Rule_">True</Setting><Setting Id="Xml_Translate_Rule_0XPathSelector">//glossary</Setting><Setting Id="Xml_Translate_Rule_0">True</Setting><Setting Id="FileTypeConfiguration_ComponentBuilderId">XML v 1.3.0.0</Setting><Setting Id="FileTypeConfiguration_ProfileData"><FileTypeInformation xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.sdl.com/filetypesupport"><Description></Description><Expression>(^[\d\D]*\.[gG][lL][oO]$)|(^[\d\D]*\.[hH][hH][cC] $)|(^[\d\D]*\.[hH][hH][kK]$)</Expression><FileDialogWildcardExpression>*.glo;*.hhc;*.hhk</ FileDialogWildcardExpression><FileTypeDefinitionId>Robohelp</FileTypeDefinitionId><FileTyp eDocumentName>Robohelp-Dokument</FileTypeDocumentName><FileTypeDocumentsName>Robohelp-Doku mente</FileTypeDocumentsName><FileTypeName>Robohelp</FileTypeName></FileTypeInformation></ Setting></SettingsGroup></SettingsBundle>

End of filter settings.

Donations

If you find the information and tutorials on my site save you time figuring it out for yourself and help improve what you produce, please consider making a small donation.

Topic Revisions

Date

Changes to this page

17 Jun 2019

Amended to cover applicable RoboHelp versions.

04 Apr 2017

New topic.