 So, yeah, the microphone works. And I'll welcome you to my talk. It's about the tools for translators. And yeah, my name is Christian Lomaier. You probably know me by my Nick, C-L-O-P-H, or Glove. And yeah, I'm employed by the TDF as the release manager and also as infrastructure administrator. And I'll be around. Well, I still do see this slide. Some power saving, or? OK, yeah. And I'll hang around at the social events. And if you have personal questions, you can approach me and ask. So, but I think I'll need some more sit-up time to maybe create some power to the adapter. Just a few seconds or to adjust. So hopefully, you know it's stable. And yeah, what was? Yeah, feel free to approach me. I'm bad with names. So don't be offended if I don't remember what your name is. I'll forget the next day. So just approach me and ask what you have to ask. So I'll start with a short overview. And then I'll tell you how I go from a string in Poodle where it's unclear how it should be translated to finding the way where it is used in the code and by that finding out what it is supposed to do and then clarifying what the translation should be. So basic features of Poodle include a direct link to the unit that is to be translated. And please always, when you report a problem with Poodle, make sure to copy that link and reference it in your mail and just make sure that it's included in your mailing. Not only writing, I have the string problem with this source string. And then it's very hard to find out. For example, so if you only copy the link in the browser, that's right now filtered for strings that have suggestions. This changes. So if I click the link two days after you post it, it might be completely different page I get. But if you use the direct unit link, it's always the same unit that is linked to. Think of it as a permalink to a translation. Then there's also a report a problem link that will send to a host master list currently. So if there's a problem with the English string, like for example, a bad XML or just something unclear or contradicting information hosted to the host master list and then we'll fix it in the source code to have it updated on the next update of the templates. Next one is Poodle also offers the possibility to add a terminology. So it's a separate project in Poodle where you can define some strings that should always be translated the same way. So if you have, for example, file open, it should always be the same translation. You can add file there and open and it will show up whenever the strings appears in the source. And also you can add additional languages. If English is not your primary language, if you're more fluent in Spanish, for example, you can configure your account to display the Spanish strings in addition to the original source string. So it might be easier for you to translate from a different language instead of English. Or also to compare if there's some misunderstandings unclear translations, how they did it and maybe this gives you a hint about what the functionality should be. There was a part when we initially deployed Poodle, the version where you couldn't actually configure additional locales because we're back in Poodle, but this should be fixed. If you still have problems adding a definite scale to your account, please let us know. Then there's a category where people file the suggestions and you have the option to either accept or reject them and review them. And right now there's no way to send feedback to the user who wrote the suggestions to basically give him a hint about why his suggestions wasn't used. But this is something that will be fixed in the upcoming versions we will deploy. So then you can send basically instructions to the user to make better suggestions in the next time. And also we have special translations called a key ID. And when you install a development build for example a build from the Tinder box, the daily builds, you can choose, select the version to be the key ID language. It has the short code of QTZ. And this will then prefix a unique ID in front of every string that you can then use in the Poodle search interface to locate the string. So if you have a development version installed, you can easily point out which string it is. So you have your regular version in your own locale and see something that's not translated and it's not obvious where you would find that string in the Poodle interface or in what file it is. You just open your development version in the key ID language and just open the same dialogue or the same menu, look for the ID and then search with that in Poodle. Yeah, and also there's a feature you got with the change history at least for master project. So this will record any changes made to the string so you can see what was a previous translation if there's an understanding or a complaint about a string not being translated differently. You can see who it was and ask the person why he did it. Maybe there was a good reason for it. And yeah, right now when we will split off the five to projects, those that information will get lost unfortunately. So you only have the history on the master project and not in the individual release branch versions. Yeah, and additionally to the suggestions that come from the Poodle instance itself, we also use the remote translation memory that is called Amagama. And it also offers a web site where you can query individual strings to compare what is there. There have been some complaints that the data might be out of date and old strings are suggested and right now there's no way to delete strings from there. So it's planned to also use a Poodle local translation memory where only strings from our instance from LibreOffice are used. But right now it's using the remote one. So whenever there's something goes, I think it pops up asynchronously, this is something that was from Amagama. So now to be example, I wanted to show you on how to locate an unclear string and hopefully this would also help you if you encounter something that's unclear at the first look. Yeah, for example, I'm using the German project and there's a string checkout that is currently translated with the string upmilden which means lock off. But this sounds fishy because usually if it's lock off, why isn't the English string lock off? So that rings a bell and so I tried to find out is it the correct translation or does it mean something completely different because checkout could also be having a closer look at something and similar stuff. So first thing to do is to look at the constict information to see where the string comes from. In this case, it's from some of the low level mall use where there's not much difference in the industry's pages to kill you. Many strings are collected in one place that are not directly related to each other. But I showed you never there's a list and additional tool that might come handy that is called OpenGrog. But first look at the, on the context information you see that the file where the string comes from is the view.src and with that we can go to OpenGrog and search for the file path view.src and this will show two hits and from the info we have in Poodle it's already clear that it is was in the SFX project because that is also in the path. Maybe you can see it for the file name. Libo UI SFX2 source view.po. So it's clear that it's the top one and if you open it you see it's an alias string so it's the bt underscore checkout string that is the one that the actual code uses to refer to the string that is in this case checkout. So what we do is to just copy the bt underscore checkout and paste it in the search box and do another search to get us to the actual implementation. And we of course get the match where it is defined as the alias or the variable and the actual path to the implementation in this case, the second one. So if you click on the string with a line number it will also directly jump to the line number and then in this case I scrolled up a little you see at the bottom the line 1470 is marked with a little blue rectangle around this line where it's used. And if you look further up you can see it's about checking out specific versions of a doc that is for example in the remote file storage like Google Docs or a fresco system or something like that. So logging off in this case is clear that it's the wrong translation because it means picking a specific version of a file to work with. So it comes to another feature of Poodle meaning you can also add comments to make it clear that for other translators thrumbling upon the string that it's for a specific purpose. In this case I created the comment that it's not in the meaning of logging out but checking out a specific thing from the file system and I also marked the string fuzzy to make it easier to look for in the default categories that you can browse strings with. Of course you don't have to use the OpenGROC web interface if you're also familiar with the code and have a local git checkout already. You can also go use gitgrep on the repository and basically follow the same steps and probably a little faster depending on how your network connection works out. Yeah and do as you please so there are many ways to do it but once you have the source file where the string comes from you can also use the log functionality or the blame as it's called the annotation to see who actually did change a string or did add a string so you know who you could ask about a documentation for the functionality if it's for example a new calc function and it was added by let's say Peter, you can ask Peter. I'm a magician, I don't know how the function is supposed to work and you write a small wiki article that translators could use for example. So having the source not only helps for context by reading the code itself but also finding out who to ask if there's still need for clarification. Yeah and additional feature you could use is to use the included search functionality of Brutal for example if there's the view SRC might be a group of strings that belong together so you can click on the places link on the left hand side in the translation box to use a search on the view.src location and then put on the show a list of the other strings that are defined in this file. So this might already be enough to get an idea where to look for the functionality what it is supposed to do but mentioned earlier in this case it's a pretty genetic one you see it has strings for printing in there as well and probably it won't help for this specific example. There's also a big addition to the help translation that was done by Olivier because in help you only have the individual paragraphs and it might be hard to guess in what context is appears so what he did is to have a website where the help file is rendered in your browser and I did the corresponding linkage to Brutal so if you open a help string you have the additional string on the VM173 link and if you click on that a new tab or it defaults to open in a new window and then you get the corresponding help file where the string is used and this probably also is a big help especially for help and as you probably heard in the other talks help is something that will be changed more in the future because the help authoring extension became more usable and people just tried to improve help with other stuff adding images and stuff like that so help will change more in the future than it used to be. And then finally you might have known that in the last years there has been progress to convert the dialogues in the LibreOffice from the fixed layouting stuff to using glade based dialogues that resize automatically depending on how long a string is and if it's a string that appears in the UI file it's even easier, you don't even have to go to the code to open it to search for it but you can open it from your installed version of LibreOffice. On this example for Linux you would export the variable glade catalog search path to the point to the shared glade directory of the installation and then you can open the dialogue using the glade command. This is example I use the ASCII filter dialogue and what you get is the glade window where there's a preview of the dialogue and on the right hand side would be the details that are going to show but it would dial in further to see what ID is used. And this way you can see the stringing context and this is pretty easy to guess where it's used, how to go there from the UI which menus you need to click to get there and if need be if you have a layout problem in that dialogue you could directly modify the dialogue and check it out whether it works better after changing it and then create a corresponding patch for it. And this basically concludes my short introduction and I reserve some time for receiving feedback about PUTL, what things would like to have changed, what you like and questions regarding the talk are welcome of course as well.