--- date_last_completed: --- The Translation Workbench of Invantive Studio translates the texts of an application language by language, with the English source, the machine translation and up to two other languages side by side. It replaces the route through "Applications", the language and "Translations", which shows one language at a time and says nothing about what is still missing. ## Opening the workbench Select an application in the tree, or anything under it, and press "Translation Workbench" in the "Development" group of the ribbon, or `Ctrl+Alt+D,T`. The same entry stands on the context menu of the application in the tree, on that of a row in the list of applications, and on the tool bar of the pane which shows one application, beside "Selective Copy...". A window opens for that application; a second request for the same application brings the window which is already open to the front rather than opening another. The window is not a dialog: it stays open beside the tree while other work goes on, and it closes with Invantive Studio. On opening, the window reads the languages, the figures, the first rows, every text of the application and the glossaries. The step being read stands in the middle of the still empty list and the percentage at the right of the band of figures; the list fills once the last read is in. Apply or Refresh pressed meanwhile is carried out as soon as the window is ready. Opening the workbench needs the function right "Translation Workbench". Changing a translation needs the right of the translation screen as well; without it the window opens for reading, the title says so and the actions are disabled with the reason in their tool tips. ## The window The first strip names what is being translated. The source language is the language of specification of the application and cannot be changed here. The target language is one of the languages of the application which are usable in the user interface. "Machine Translations" names the application which holds the machine translations - for `repos/itgen/trunk` that is `repos/itgen/deepl` - and up to two further languages can be shown beside the target for reference. An application which holds machine translations itself has none of its own, and the box then says "(none)". The two strips below it decide which keys are shown. The first filters on the key itself: all keys, the translated ones, the untranslated ones, or the untranslated ones with or without a machine proposal; a pattern on the resource code; the moment of the last change; and whether the keys whose text is the same in every language are hidden. The second filters on the text in one of the text columns and ends with "Apply" and "Reset", which act on both strips. "Length" limits the list to the keys whose text in the column chosen at "in" has at least the number of characters in the left box and at most the number in the right one; an empty box sets no limit, and a key without a text in that column is left out. This puts the short texts first, or the long ones on their own. "Changed Since" limits the list to the keys whose source or translation was changed at or after the date and time chosen in it, in UTC, the clock of the column "Updated (UTC)". The limit applies only while its box is ticked; ticked, it starts at the beginning of the current day in UTC. `Enter` in any of the boxes of the two strips does what "Apply" does. "Reset" empties the boxes, unticks "Changed Since" and puts "in" back on the source. Under the strips a band gives the figures of the target language: how many keys the application has, how many are translated and what share that is, how many have only a machine translation and how many are shipped in English. At the right of the figures a small bar and a percentage say how far the work in the background has come; where the window is narrow only the percentage is shown. Beside them stands what this session is getting done: how long the window has been open, how many translations were added and how many changed, how many that is a minute and how long the keys of the filter which are left would take at that rate. A small picture to the left of those figures holds one bar per whole minute over the last quarter of an hour; pressing it opens the last hour at a size where the values can be read, with a line every ten translations a minute. The list itself holds one row per resource code, with the source text, the translation, the machine translation, the reference languages, the status of the row, when it was last changed and by whom. Rows are read two hundred at a time as the list is scrolled. A click on a column header sorts on the server, so the order covers every key of the filter and not only the rows already read. The widths and the order of the columns are kept per user and are the same for every application; "Reset Layout" puts them back as the window was delivered. A term of a glossary of the application is underlined with a dotted line wherever it stands: in the source text the term itself, in the translation and in the machine translation the translation of that term. Resting the pointer on a term in one of the three boxes under the list shows what the glossary says about it, and the right button there opens that term for changing or adds the selected text as a new one. ## Translating Only the column with the target language can be changed. An empty translation stays empty: the machine translation stands in its own column, headed "Machine Translation", and is taken over only when "Use Machine Translation" asks for it, so that nothing is ever saved which nobody read. A text taken over from the machine translation, from the source or from a similar key arrives without the whitespace the repository would eat, so that what stands in the box is what is saved. - `Enter` commits the text and moves to the next row, which saves the row just left. - `Shift+Enter` breaks a line inside the text. - `Esc` gives the previous text back: in a cell of the list being typed, the text before the typing, and elsewhere in the list and the boxes the text the row had, as "Revert" does. - "Use Machine Translation", or `Ctrl+Enter`, takes the machine proposal over into the translation. - "Use Source", or `Ctrl+Shift+C`, copies the source text into the translation, for a name or a code which stays the same. - "Clear", or `Ctrl+Delete`, empties the translation; leaving the row then asks whether the translation may be removed, after which the machine proposal is shown again. In a cell of the list being typed, `Ctrl+Delete` stays with the cell. The key combinations work in the list and in the boxes under it, not in the filters above the list, and do nothing where their button is switched off. A key combination which takes a text over first ends the typing in a cell of the list. Up to and including release 27.0 the tooltips name them, but they are not bound, and neither are `Ctrl+Shift+G` and `Ctrl+Shift+Q`. The right button on a row of the list offers the same two actions on that row - "Use Source" and "Use Machine Translation" - and beneath them "Open Source Text", "Open Target Text" and "Open Machine Translation", which open that text in the window the product shows a translation in, with its audit, its history and its rights. An action for a text which is not there is shown switched off with the reason in its tool tip. Beside the caption of the machine translation stands the key under which the store was searched for the row being translated, `MD5: bubs_f357…`. The machine translations are kept under the English sentence rather than under the resource code, so an empty machine translation means either that the sentence was never sent to the pipeline or that it has changed since it was; the key is what tells the two apart. The list carries a column for each of the two reference languages, and a column stands only where a language is chosen for it in the strip above; choosing none takes the column away and gives its width to the source and the translation. The header of a column which carries a language names that language and follows the boxes above the list, the reference column naming which of the two references it shows. A translation never ends in a line break. A text carried from somewhere else nearly always brings one - a cell of the list on the clipboard ends in one, and so does a line of a text file - which is invisible where it came from and an empty second line in the box it lands in. What is pasted into the translation box loses it, and so does a translation which reaches the row by any other route, at the moment the row is saved. The line breaks inside a text of several lines are kept. A row is saved when it is left, never while it is being typed. A translation is written only when it carries the same placeholders as its source: every `{0}`, every `{res:…}`, every `&1` and every `{{variable}}` of the source must be in the translation, in any order, since a Dutch sentence may put them in another order than an English one. When one is missing the row is not saved: the status reads "Not saved", the line under the translation says which placeholder is missing, and the text stays in the cell. Closing the window saves the row in the boxes as leaving it does, and so does closing Invantive Studio while the window is open. When that row cannot be saved, the window stays open, and Invantive Studio with it, until the translation is corrected or reverted; only when Windows shuts down or Task Manager ends the program does the window close regardless, and the translation which could not be saved is lost. Under the list the whole text of the active row is shown in three boxes - the source, the translation and the machine translation - because a cell of a list is too narrow for a sentence. The three boxes are written in a larger font than the rest of the window. The two actions which take a text over stand under the box they take it from, at either end of the row: "Use Source" at the left and "Use Machine Translation" at the right, with the three which do something else between them. A button offers itself only while it can do something: "Use Machine Translation" is switched off on a row for which the machine store holds nothing, "Clear" on a translation which is empty already and "Revert" on a row which has not been changed, each shown in grey and saying in its tool tip why. "Add to Glossary" is switched off until a text is selected, since a term is added from that selection; `Ctrl+Shift+G` and the menu on the boxes add one as well. Beside the caption of the translation stands who last wrote it and when. A line straight under the translation, above the buttons, says whether the placeholders match and how long the text is; only the first 2,000 characters of a translation reach the products. Where a check found something the line is coloured, the translation box is framed in the same colour, and the caption of the translation says how many findings there are and of what level, so that it is visible from the box being typed in. When a row could not be saved, the line starts with "Not saved:" and the reason, counted as an error, until the translation is changed again. ## Similar source texts and earlier versions Beside the boxes stand two panels which follow the row the cursor is on. "Similar Source Texts" lists the keys whose English text resembles the one being translated, with the translation each of them carries and how alike the two texts are as a percentage. A double-click takes that translation over into the row being translated. The right button offers the same and offers "Edit", which opens that translation in the edit window of the product, over the workbench and without changing which rows it shows. What the edit window writes is taken over into the workbench at once. Keys which carry word for word the same translation are one line, which says how many further keys stand behind it, and the line stands for the closest of them. A short text is listed only where another text is nearly the same, which keeps every label of three or four letters from resembling every other one. Where nothing is listed the panel says why. The lines are coloured by how close they are. A key whose English text is word for word the same is in the colour of ordinary text, a key from 75 % onwards in light grey, and the rest in the grey of a button which is switched off. A text which differs only in capitals or punctuation also scores 100 %, but stays light grey. When the key being translated has no translation yet and a key with word for word the same English text has one, that translation stands in grey behind the empty translation box, after "100% match available:". It is a suggestion and not a translation: nothing is saved until one click on that line of the panel takes it over. The second panel lists the earlier texts of the translation in the target language, newest first, with the moment each became valid and who wrote it. A translation which exists was written at some point, so the panel always holds at least that one line, also where the repository keeps no history of the row. ## Quality checks "Check Quality", or `Ctrl+Shift+Q` anywhere in the window, runs its checks over the source text and the translation of every key of the application that has a translation in the target language, whatever the filter, and lists what it found in a window of its own. The checks cover the placeholders, a translation which is still the source text, an empty translation, the end of the sentence, the whitespace, the capitalisation, the length, the terms of the glossary, the numbers, the accelerator, the mark-up, the brackets and quotes, the line breaks, the consistency with other keys, a repeated word and the references to other resource codes. The findings stand in a list which names the severity, the code and the name of the check, the resource code, the source text which was judged and, under "Explanation", what exactly was found. Each finding is drawn in the colour of its level, the same colours the line under the text boxes uses, and the level is named in the first column as well. A double-click or "Correct in Workbench" on the right button puts the cursor on that key in the workbench and leaves the list open, so the next finding is one click away. "Export" writes the list to a tab separated file. Only the placeholder check stops a translation from being written; the rest report and the translator decides, because a rule which is right for one language can be wrong for another. Of the eighteen checks seventeen run; the check for the same translation of different source texts is switched off, and the window offers no way to switch checks on or off. ## What the workbench does not do The workbench does not send anything to a machine translation service: it reads the machine translations which the daily pipeline has already written. It does not add a language to an application and does not add a resource code; both are done where they were always done.