 Welcome. It's Jenkins documentation office hours. This is the 10th of March. Today's topics we've got simplifying translation contributions with crowd in enterprise. Alex is going to share a presentation for us we're going to have a discussion based on contents of some things he's been doing for the last two years and other open source projects. Then we want to talk briefly about she called Africa contribute on and Elizabeth had a question about internships that we'd like to address here. Any other topics we need to put on the list. Um, so I don't know if you got a chance to review the PR I submitted. Oh yes troubleshooting PR. Yeah, good. I haven't reviewed it yet see now it will be okay. It will be later this week at the best before I can do it because I've got other other things that I have to do in review first. No problem show. But it fits it aligns with what Gavin had requested, and I think it makes sense. If time allows we may review it later today in the, in the Asia office office hours as well. I'm sorry later today is the wrong phrasing for you in Africa it'll be tomorrow, the middle of the night. All right. So, so I will, I hope that we get to it and, if not, I have hopes that I'll get to it over the weekend. All right. Thank you for doing it. No problem. Any other topics we need to add to the agenda. Okay, then let's take on the translation contributions topic. Alex, do you want to share your screen how would you like to approach it. Yeah, that would be great. If you okay so I'm going to stop sharing mine, and you can go ahead and share your screen. Okay, let's think. Right. That would be right. Think we have Jenkins here right now. Can everyone see this. Yeah, okay. Yeah. My issue with translating was always the way how to get started how to get into it because. Yeah. The plugins are always on, or mostly on GitHub, and if you want to contribute to GitHub you need some understanding when how to work with good, how to work with GitHub how to work with branches, how to open a pull request, and so on so I kind of see this as entry barrier. At least that used to be an entry barrier for me a few years ago. So I look for an alternative to translate plugins or software outside from Jenkins. I basically get started and crowd and enterprise was one of the first things that came into my mind. So, yeah, currently there are only, I think, two ways to translate Jenkins plugins, when they localized plugin where you have this small button here and you can fill this out and submit it but that actually doesn't really work anymore because this local server is offline or something, at least according to the repository on GitHub, which was last edited in 2020. So I assume it's either no longer maintained doesn't no longer work. Anyway, this way, you can only to contribute local translations. So, I think the active way to contribute translations in Jenkins is to go the way we are pull requests like we are GitHub, and that is where crowd and enterprise can help you to go around to skip the possible entry barrier. For this, my, my console column plugin. This is a bear clone of the console column plugin on Jenkins as opposed as a public repository everyone can check out if they want, which are integrated into crowd and enterprise for demonstration purposes. So, yeah. So enterprise is actually not self hosted to host it on crowded itself, but you have a domain like Jenkins dot crowded dot com. Currently, I have it on a different domain because this is the only open source enterprise setup I have. So I simply added a current enterprise Jenkins demonstration here. I think that is fine we just ignore everything else, but Jenkins. So, if someone goes to, let's say Jenkins or cloud.com or Jenkins are current.com and says, I want to translate, I want to help to contribute to this plugin. They can basically click on it. I want to provide the German translation, just picking my language here. Please don't mind if you don't understand it. We actually have the folder structure of the plugins and the file to can translate see the typical properties file you have in each folder, like you have in the typical repository, because if you switch back here source main resources. Yeah, because this is actually the folder tree of the repository we have in crowd in. So if I click on I want to translate column the properties. I have on the left side the string suit translate. This is the way how I translate. For example, I want to translate click to center the timeline on event. I click the string, I have it here this is the source string. I can enter my translation here, but currently I have integrated crowd is machine translation here. And I would say one machine strength, my crowd and machine translation suggests me for appropriate strings to translate. Actually, they're all quite accurate. And I would say, because then the timeline on event and if I want to pick machine translation and don't want to insert something on, I can basically click this one and save. So basically at Jordan handles the integration from GitHub, we are pull requests and everything else. So basically just need to do this. Yeah, and if I'm a project maintainer, let's say, so Alex, are you do you want you want questions during or do you want do you want to hold the questions till the end. You can ask me think it's better to now than later. Okay, so, so you did not do anything with GitHub here at all. And yet it's somehow found the plug in source code. No, I mean, first time you need to set this up like you need to tell it where to get the source code from. Right but but you as a user you as a contributor. No, I must use I did nothing. Okay, what you saw. And the and and then the machine translation that it offered you saved it. Would you then press some additional button that causes it to generate a poll request to propose that. Yeah, currently I have set up my integration to pull. I think every hour or every two hour to not flood my emails, but you can basically set it up to provide a poll request. If you approved it. If you looked over it hourly daily, whenever you want this this is something the, not the contributor but the plug in author or plug in maintainer and customize as long as they have access to that. So I as a maintainer would configure, I want to bundle two hours worth of work on the get plug in into a poll request and, and the, the person who is doing the translation in this case your German language would just sit there and do translations of strings and I then get poll requests for roughly two hours worth of work. Yeah. Okay, so that's elegant. And so you did that so that the person perform providing the translation is not doing pull requests at all. And yet to me as a maintainer, I receive pull requests and that's what I see. Yeah, but basically working. I mean, if you're working in between the pull requests. It's also possible, but mostly I go via the proof reading thing, for example, currently I'm in the translator of you or something like that that's called a translator of you. This is what the person sees who translate the plug in. But I as maintainer can basically switch from crowdsourcing to proof reading. So this is where I approve what people submitted. So can basically encapsulate the entire good part and do the entire thing here so people who translate things don't need to go to get up and respond to pull requests, if I have. If I request changes for example. Ah, okay so that this request changes is an important part out here. Okay, so here though. If, if I request changes from the GitHub pull request it may not be visible in crowd in but if I do the give my feedback through crowd in, then they see it as a as a contributor. Yeah. Okay, I mean you can still do it on GitHub, but it would be easier to do it crowd and because the people are already using crowd and so just keep them here. So this is the string I just just unsaid it click to the time and event. This is what I proposed from the machine translation. This is actually quite accurate and I would say, Okay, that's fine we approve this. Yeah, okay, ignore landings for now but yeah this is basically done. And this string is done. So if I go back to crowdsourcing. There's only things to do. So, these are the only strings left, I can basically filter out all things that are already translated. So people don't translate things twice thrice and so on. But you can always. This is already translated and already approved, but you can comment on it and say, Hey, this is not right this sounds wrong. The grammar is wrong. The spelling mistake. Let's go over it again. Thank you for the review for requests on GitHub you would basically do it here on crowd and and crowd in is taking the existing translation and presenting it to you as a contributor so it's so for instance the last console translation that's visible now had been translated previously and was extracted from the source code. You mean the machine translations. But the actual so let's let's the console console or let's, let's forgive my butchery of German label console or last console in German that German language translation came from the properties file in the GitHub repository. Yes. I would like to show as well how to integrate it or how I set it up. So mostly like for maintainers let's quit the editor for now. So this is like the management tab of the thing is integration project. That is what a maintainer could see if they set up their project. Currently I can view everything because I own the organization, but within crowd and you can also find grain permissions and contact and console who can access which part like you do and get up with repositories. Currently, project settings. No system. These are all the applications you can integrate with crowd and I have said, we are currently on GitHub, and this is the repository. Yeah, we are currently, we have currently integrated the master branch. I mean you can integrate any branch you can have dedicated translation branch. Yeah, so now I'm not quite understanding what, what does this repository represent so the, it's not your plugin being translated is this a separate working repository I'm not sure what, what the GitHub repository here is representing. The GitHub repository is representing the. Oh, okay that is okay when it says Jenkins crowd and enterprise integration that is the source code for the plugin. It's actually a background of that plugin with all get history does outsource on my private account so I don't have to mess with in Jenkins with it. Yeah. So basically that's how you integrated you can define any branch, for example, the master branch, which I. Yeah, currently I set up push sources that means, if you make a change it, it's pushed to a pull request on GitHub, but you can also set it up late, say like hey, I want to swing it every hour. Then it gets in hourly, for example. Yeah, I mean quality assurance that things is like where you can define on which base the pull request is created for example. There are two Asian characters setting special characters, spell checker, only if I currently ticked all, and only if all conditions are met, a pull request is proposed so like if someone insert something that doesn't match my expectations. No pull request is open. It's like a lot of configuration up and see a whole extensive API you could create a repository through like similar it's done with the, I think the repository permission update which at CD credentials to your repository. For example, could integrate a cloud and API and create a project repository, if a plugin author or maintainer opts in for that. So you could integrate into Jenkins without everything yourself. So, so the, the integration for you as a user, the workspace here would have one entry in the workspace per repository per Jenkins repository to which you were contributing translations. So there might be one for core and one for each plugin that you were contributing to is that correct. Yeah. Okay. Okay, I set it up would be a bit messy on Jenkins, because I mean currently I have only two projects using this instance but if you have like 100 that would definitely be a bit messy, but you can also create. I mean not an individual project but you can also get a group and group projects together. Okay. Because this is only one repository and would look a bit weird, but you could say, let's create a group and I have an API a library and another plugin consuming the API groups them all into one, and we display only one thing here. Okay, so I could, I could conceivably. I maintain six or seven plugins and I work on core I could create a group that would represent the plugins I maintain and I might create another group that rep. And then it would only present one here and then when I expand it I would see all seven of the repositories that kind of thing. For example, I mean, it doesn't matter how you create a group if you let's if you name the group my git plugins and have a separate plugins in there, or filter it by your good name, at least like grouping things together. I see. All right. The next thing is like, how to actually lock into crowded into crowded, like do I need to create a space and your account for that is also think often an interesting question, but currently I have set up authentication. No, that is the wrong thing. Currently I have set up authentication via GitHub so I don't need to create an account on current at all. I have a typical email and user name, if someone wants to sign up here. I'm, I'm, I'm signed in currently with all from GitHub. So I have them, because I'm a organization owner of this organization here, I automatically have automation so I didn't need to set up anything for me. So, so crowd in, and I see the URL is crowd in calm so they are hosting this service, and they're offering it at no charge to open source projects. Yes. Wow. Okay. The only thing you have to have to do is like if you create a project product must be open source, must follow a license and so on, like basic things that are already enforced in Jenkins. Yeah, so MIT license is certainly permissive enough for them and Jenkins is all open source. I think, I think any approved open source license is possible here. But the most thing is plugins are under MIT so it shouldn't be an issue here. And even if you don't have MIT they have a whole extensive list of licenses, they support. Okay. So now, when, when another user wants to contribute a localization to your plugin let's say I want to contribute an Italian translation. Okay, I'm not. So let's say I wanted to contribute an Italian translation. So, I would log in, and somehow I would see your repository or could attempt to contribute to it, or would I create my own project like you've done and then it would somehow submit to the upstream upstream repository that I forked. I would like to contribute Italian to my language to my thing that is currently not possible because I've only enabled German. Okay, if you take a look at target languages, we have a quite extensive list of supported languages here. So if you say mark wants to Italian, okay, let's say Italian update. And we have Italian here and you could get ahead and enable this one. You can only enable German for demonstration purposes like you saw the list there, several hundreds of languages you can actually contribute. And now you as a maintainer are choosing which languages you will accept into the plug in. Oh, yeah, I mean, okay, that way I'm handling it for a few other repositories, like if there is demand and someone says, Hey, I would like to contribute language, this one. Well, then I go ahead and enable it, because if you have a list of like 200 languages, it might be a bit too much to find your language. Well, and if I don't have a contributor I don't know why I would want a language enabled until they ask for it. So is as an example is traditional Chinese available as a language. Target languages. Yes, Chinese traditional. Okay, great. Excellent. Okay, so, so we've got we've got some contributors in Taiwan, who want to contribute or contributing Chinese. So try Portuguese as well as Portuguese available I assume it is or Brazilian it is and even better Brazilian Portuguese. Okay, you can even enable both ones and say, we have Portuguese and Brazilian one PT VR and PT. Excellent. Yeah, currently I'm handling it like that that I enable translations if there is demand to add one. Because in the end I still have to review it and look over them and merge the ours. So it wouldn't make much sense to enable 200 languages. Nobody contributes to. Yeah. Another thing that also works quite well is that the, I think that is the don't know how the file is named there is a file is Jenkins root directory that translate things, something in pearl written. Oh, translation tool that PL. Yeah. Right. Think that's all the few PRs that which generates. I think it generates strings that look like that one. Right. Yeah, basically, these are omitted. If you remember the string from a few minutes ago. That would be this one click to center timeline on event. That would be the string is but in a more human readable language, rather than having slashes in between. Right. Right. I see what you're saying your point is that well, see for me the translation to the pearl translation tool is is much, much more primitive than a web interface that you're presenting. Even for people who do development all the time they will generally put things into a web interface like that much more comfortably than into into a properties file. And you can, if you have already translated files from your plugin in different language you can also upload them on crowd and like you don't need to to set everything over and over again. That would be much pointless. But for example, for things for strings like that one or if you have some HTML and that or if you have variables in them. So probably is smart enough and figures that out for example, these are the variables which are automatically highlighted and says, do not translate variables. So if I say started by user only this one. And I leave out one and the other zero. It complains because I'm missing it out. Okay, so it's doing it's doing sanity checking. Yeah, of of my did I consume all the arguments. Yeah, that's what I enabled in the quality tap on the manager repository and crowd and so I mean you can save it anyway but you get one if you miss an argument. The same, the same applies to the. Yeah, here one. I can also pick on it have it all right. Yeah, so basically doesn't something of sanity checking if I leave out arguments. Yeah, I mean you can define your own arguments and crowd and as well but I didn't do that here it picked up these one on its own. So what is your perception I'm very impressed by the machine translation as a, as a native German speaker what's been your perception of their machine translation are they generally. Oh, okay so they're generally workable. I mean context wise they all say the same. Just if just different grammar and just different words. I mean this means this is actually something I learned from car started by user. That's the well we're at least two and that says the username. And that's not in the plug and this is just what I took to present that it actually works with as well. That one would work that one would work that one would work and that one would work as well. These are the machine translation generated by crowd and word database and actually understands what's going on here. Because these are all quite accurate. I would say we go with this one, because this is the same tense is this one. Yes, so they, they offer different verb tenses for you. And you as a German speaker I, I recognize the word but the others and verb tenses in German are certainly completely unfamiliar to me. Yeah, that would be the user. You go with this one, and can click save on it. And I'm already done with it. Yeah. Yeah, this is totally different. And if I click on it again I can see who translated which string. This is a question from my user, and everything can see who contributed which string to the crowd and project somewhat of a git history just does with all the good part. Excellent. So, so I've got I've got some lower volume plugins that I think I want to attempt this with just to get a sense of it, and then those lower volume plugins would you be willing to act as my native German speaker, by contributing a translator translation to the platform labeler, for example it's got maybe 20 strings for. Okay, that would help me at least get explore it because this. Ultimately we would have if every Jenkins plugin opt in we would have 1000 plus repositories, but even if it was just Jenkins core and the top 200 plugins. I think it would seem like still a very, a very attractive way to approach localization approach approach translation of properties of messages. Yeah, so I think currently we have in this repository. I think this one doesn't have as many words as others. Yeah, this one has only 80 words that's not a lot. With several thousand words for example this one I have 70,000 words to translate in 36 languages by several hundred contributors to definitely have people like proof reader who act, who frequently check in and read over what people submit a proof reader would be and like a pull request reviewer doesn't crowd in. Okay, so, so are you willing to open up fast async for a quick conversation about that so, so there are multiple roles and multiple layers of contribution that people can do where they could. They can not just submit translations they could review and comment on the translations of others. For example, these are the languages, I think that are the 20 basic languages crowded enables automatically if you select no languages. But let's say the blue bar is what you translate. Yeah, I was sent there and the green bar is what is approved. For example, let's take part of the German thing. Yes, okay, so this is one that needs. There is some yet to be approved. Yeah. Okay. 70,000 almost 80,000 strings are translated 100% and therefore 12% are approved. So if you were to contribute to this you would just open it up and you could offer your, your, your feedback on on proposed translations. Yeah, I could go. I think this several strings that would be this one. For example, not crowdsourcing we want to approve read. We want some feedback on yeah, could not find edit summary for inputs. That would be the appropriate German string that is proposed by this user seven months ago, and if I'm fine with it I would basically say, yep, that's fine. And on below I can also see the machine translations from crowded that for this string. Yeah, this. Yeah, go on. No, go ahead, excuse me. Okay, this one is an interesting one because we have a red one and the green one. This is green and because this is an edited string from the repository and GitHub. I updated the local here and crowd and notice that fetched it and proposed a somewhat of github history, because this is the old string and this is the new string. So we can also see if someone edits the edits the root strings here. Yeah. Okay, so, so that that text on the right is hinting to you, someone in the GitHub repository made a change that was probably not directly under control of crowd and, and this is trying to resolve that change is that what it's It's not trying to solve it. It's just notifying me that this translation could not be up to date with this string anymore. Because part of translation from seven months ago. This, this one was two months ago, and I changed changed the messages five months ago that this string could not match this anymore. But this doesn't apply here. So I approve it still. Okay, all right. And this is the sanity checking you meant before. For example, we have a spell check failure here because Colin doesn't actually know the word because that's the name of the repository is coming coming from make sense. And here we say here. First, let us are not capitalized the same way. Yeah, that used to apply but that doesn't apply anymore, because nbt is uppercase tier nbt is lower case tier. Yeah, no. And now okay so that one that one is a little bit surprising I'm not sure is nbt an acronym on the left. And I'm used to almost everything being capitalized all the time in German so that's no shock to me that, sorry, that's a terrible Americans way of phrasing how I observe German so you're in German you're capitalizing nouns and names and so on. Yeah, I mean for sake of reference I would say we go with the uppercase one because that is how it's actually called in this in the source code. And this is just a failure in the translation when I wrote it. Yeah, so I'd go ahead and and approve this but correct this one in the source strings as well. Oh, so what you've done here is you've detected an English language mistake. Yeah, and you fix it in the German because the translation should be correct but then you need to go back and also adjusted in the English language in the original string. Yeah, I see I don't I don't adjust it in the English language I just in the source language which current applies to all languages I have enabled in the project. I see. Okay. Yeah. Basically everything else like you can see argument detection is fine doesn't complain here. And that's because the world, but it's where the slow case would be uppercase in German. Yeah, would be would be uppercase in German so it complains. And that's because it's a noun, because it's a German, it's a German noun. Yeah. Okay, and I'm currently in the proofreading few I mean I could comment and say, Hey, let's upper cases, but also go ahead and quickly fix it. And that's it. Excellent. Thank you. Now I see that Zenobs raised her hand she has a question you know what what question did you have. Yeah, thank you so my question is relating to updates so I know in this scenario he explained that if someone actually submit a suggestion for language and it's updated after so what if you've already approved this and in the future there's no request or anything to translate the string but the string is updated in the source repository. Do you still just get a notification that there has been an update to some strings that has been translated before using this or like is there a kind of sink. So you're asking how to deal with previous, previous contributions like on GitHub via pull requests. How to deal with that. I think our question was was previously the message was do this then do that and now it's do that and then do this so it's changed. Oh so if the root message changes. Yes, the message has been modified. How is that presented to the user. I mean, if you are contributing to your repository, you actually get to get out of this for you first. You get notifications if things change if strings are added. Basically, these are all email notifications for me because I'm project maintainer, but if I would be a regular user I will get a notification that a string has changed that a string has been added. And yeah. Okay. So go back on it and reapply your changes and update the updated string. So as a as a contributor. In my world, I'm a, I'm a native speaker of a language, let's say Italian, and I then receive email periodically hey these projects that you're supporting have changed some messages would you like to update their translations is that the how it feels. I currently don't have such an email but you basically also get notification on crowded that news, either in your strings are added, or that strings are updated. Like, on GitHub, you get a, for example, an email for a commit that your commit has been pushed. Here you would get an email that is string has been updated. Excellent. Thank you. Yeah. So Alex, I think next step for me is I want to enable this for a few repositories and do some, some what I call lightweight tests with you, or with you and maybe one or two other native speakers I happen to know some French native speakers so I would love to have a German native speaker like you a French native speaker and, and see how the, how the interaction works, both for me as a maintainer and for my my French speaking translators to say, Oh, I like that better than the old way of doing it because we had some great French translations submitted as part of Hacktoberfest, but they did it all I think the old way. Right, they didn't get to use crowd in and I would I would love to hear their feedback on. Hey crowd in made it this much easier or no I was faster doing it the old way. Yeah, that sounds interesting. I mean, currently I just showed the way to go for John Slater not the way to set it up, because I think the way to set it up is definitely not something that is set in stone. But for example do it through the crowd and spec UI, like I showed before, go ahead and go via the GitHub button integrated via the repository, but you can also go ahead and integrate it via API calls. I mean, it is all possible. But if I did. For me part of the attraction is using crowd in's web interface. I'm not sure what would what would motivate me not to use crowd in's web interface that looks like it's, it's very effective very smooth and your user experience seems to be very positive in being able to contribute German language strings. That's for sure. I mean, one point when to not use interface when not to use the web interface would be like, for example you have many repositories to add to manage, and so on. For example, if you have several hundred repositories on the Jenkins project on crowd and it would be much more feasible to update repository maintenance approve readers via the API, then do it by hand. I see. Okay, that makes sense right so so if we if we develop the concept of French French French reviewers and German language reviewers. We would probably have enough people there that we wouldn't want to maintain that manual we want that maintained as code. Then we would use the API. I mean the repository permission update does somewhat of that, that's some sort of automation on that because you don't want to add people manually to the teams and get up to do it via the IRC what if I remember correctly. So, it would do something similar here. I mean for me as a translator obviously would prefer the web interface, but for management aspect, I think the API would obviously be easier to handle translation to like adding people removing people up to the team repository access. Yeah, but the integration from the APIs pretty much straightforward would select here at a new repository. Yeah, I think this couldn't it always loads of it because I'm already locked in with my GitHub. Oh, so it scans my entire GitHub account of private public repositories, and then I can select a repository here. I could do with all the web interface I don't need to get up here. And so, this now in terms of should this be done to my fork or to the Jenkins repository and I assume it should be done to the Jenkins CI repository rather than to my fork is that correct. Yes. Okay, the base repository you choose here is the base repository. PR is fired against. So if you choose your fork you have on your fork and would need to PR back to Jenkins. But if you just pick the Jenkins repository, like I did with this one on my account to have the PR straight on your Jenkins repository. I think that would be the way to go. Right now, I'm already locked into my account. I could select any repository here and also organizational repositories. Then I would set up the branches below which branch we should find a PR against that would be master or the default branch. That's basically it. And if I click save GitHub, a crowd and pushes crowd and that one alpha to the repository, which uses it for detection. So that's regex I'm using for the source file. This is a translation file. For example, this is my folder structure. And I want to include all properties file from here, I have this one, and the translation path is again this file, but the file name it chooses from above the two letter code shown and crowded properties. You can customize it here to but you can do it all through the web UI. This file just helps crowd into integrate your project. And that's it. It doesn't pollute your project with anything. It just needs this one file in the root repository. And if it files a PR that would be new crowd and updates because I didn't update it from this branch that's a default translation branch. And we have all the German commits we just did now. The way I set it up is to propose any language you translate. Even if the language is untranslated. It does still file the PR but you can configure configure it to only propose a PR if there is a translation in the file to not have these. Okay, yeah. So the example that's on screen right now is showing what I would assume is is not a healthy thing it's offering. It's allegedly showing German but in fact it's used the English words. This is just a PR under the column header underscore DE properties like indicating it would be German, but it is actually English and bear copy of the source string. Because I didn't configure differently, but obviously I think the better way to configure it would be to say, Hey, just open a PR if we have a translation here. Right. If there's nothing. Yeah, and I would basically label it, go ahead and merge it and then I have these files in the photo structure. Probably squashed it but yeah, and then I can check my plugin. And it created those files for you so columned up properties did not exist previously for the German, and it created them as part of the poll request. Yeah. Let's go ahead to the project home. So essentially the public page and German. It does only show the source files like I've only columned the properties in column header properties here. But if I edit these files. If I edit these files and save them. It creates these files in the PR according to my file pattern here. I see. Okay. The file name is the name of the file from before and the two letters to letters code is the language I translate to. It's another place or less you can name but this is the file for my Jenkins uses. So it does went with this one. And and that syntax when it says two letters code, it really means whatever the internationalization code is so the fact that Brazilian Portuguese is actually for or more letters is not a problem. If that's just a variable name that we see there. Yeah, that's just variable. I think excellent. Wow. I think you're going to be invited to offer some German translation for something that this is, I am thoroughly impressed. Yeah, and this is definitely a better way to then going via GitHub pull requests if you have no knowledge about it or get up for example, because basically don't need it. You can just go ahead, propose some translations likely engage with the proof readers if they have a recommendation how to make things different. And that's it. You basically don't work with get or get up at all. If I remember correctly there was one concern on the mailing list that someone said that license headers would be omitted, but that actually doesn't apply like we can see in my update PR. The license headers are untouched. Okay, so, so it retains the license from the original root file. Yeah, great copy the license from the root file. Yes. So my current demonstration these things also don't occur anywhere in translation and not shown at all to the translator, because they don't basically matter here but if you have them in the root translation file. They're also added to the translation file for the language, the PR targets that that looks very impressive to me thank you Alex thanks very much. No problem. Glad to be here. Thank you so it feels like next steps are more experiments, and we'll we'll address it now next week I'm out so we won't do office hours next week for Docs office hours but in two weeks, we could potentially have, have some initial checks on this kind of thing to see. Hey, how did it go and in the experiment with other plugins. Nice. Thank you. So, no label parameter plugin. I think it's called like that. Yes, yes, that's how to integrate it into crowded from a maintainer aspect with a web UI. Right. Can see how to set it up properly. Yeah, so no label parameter is a little more challenging for me because I'm a little less familiar with it but yes, something like that platform label is when I'm very familiar with, but no label parameter yes and any one of those. I'm hesitant to do get plugin right now just because of how many people use it, but, but once we've seen it work well with the smaller plugin. I'm, I'm open to that. Alex thank you thanks very much. Anything else that you wanted to highlight for us here. That's basically it I think we went over the user aspect much here. All right well so this is because we've got a recording of it, I'll post the recording and encourage people to, to look at it I'll set some bookmarks so they can start with already jump right into your demo portion. And we'll start the conversation on community dot Jenkins that I owe about the topic. Excellent. This is great well, we're going to reuse this the recording of this to do more conversations about how should we do translation better in the project. Thank you. All right. Alex if there's nothing else I wanted to steal we've got about eight minutes left before we run out of time here you're okay if I take back screen sharing and we look at other topics. So, so Z knob and Elizabeth you had topics, the troubleshooting PR anything else on it Z knob that we want to we want to worry about there, or just that it needs to be reviewed. Okay, great. All right, so then the next one was Elizabeth you had questions with regard to ensure internships. Could you share with us, you had highlighted. Before we started the recording of the meeting some of the things that are going on in your boot camp would you be willing Elizabeth to tell us a little bit more about the boot camp you're running and and help us understand that. Thank you very much. Good evening, everyone. So, and basically, the boots camp and the boot camp is a woman in tech boots camp and we had them 6600 applicants and we selected 319 girls in various technical fields which includes front end web, the back end web, the data science. Digital marketing, product design, blockchain and NFTs. Yeah, so those, these are the tracks. So, and these girls are actually from six different countries we have from US, from London, we have from Ghana, Côte d'Ivoire, Nairobi and Nigeria. So these are the countries that these girls does this participants are from. So what we are trying to do now, because the boot camp is for six weeks and after this six weeks, I do not just want these girls just go like that. I want them to gain hands on experience on life project and working and what it feels like to work with a team and work in an organization of a company. So this is, I'm actually seeking for internships for these girls, if not every one of them, at least a number of them. So I don't know how possible this could be. And I am also open to suggestions and partnerships that in this. Thank you. Thanks. Okay, so, so the, you've got a group of, of women from we're interested in tech from multiple countries that are in or have completed this six week camp on various topics. Yeah, and, okay. Sorry, go ahead. So, the boot camp is currently going on going. This is the third week, and it's for six weeks. So we have three weeks more to go before the boot camp finishes. It's a six weeks training, and it's virtual. It's online. Great. Okay, excellent. And then, now the, the idea then was, how could we help them know, identify where they go next in terms of their experiences they're exploring. So they want to gain more experience here, you've got it right there. And, and one way could be open source project involvement. Right. Yes. For me, there is okay funding is best but does your organization have a way to, I assume that these women paid something in order to join the camp, or is that that they are chosen and then you fund them while they while they're part of the camp. So the thing is, my organization, what we are, we have a goal and goal is to get as many women as possible into the tech world so we do not collect a dime for anybody, nobody pays for anything. This training is literally very free. So I, for now, I am actually paid the, like not pay. I give them stipends to the current facilitators and volunteers that work with me because currently I have not gotten any sponsors yet. So I pay from my pockets. Yeah, and I'm doing it and doing this out of passion. And I feel like subsequently, I'll get sponsors so these girls do not pay a dime at all. And even before the bootcamping commences, there is usually a contract that everybody signs and in that contract, it is clearly stated that you are not to pay any money to anybody. And if any member of the team access, access for money, you should reach out to either myself or the programs manager so it's totally free. It's entirely free. Okay, so what you're what you're saying is, you're providing free training to these people who participate in the camp and you've you've warned them you've alerted them. If anyone attempts to ask you for money as part of this program you reject them immediately and report to the report to the sponsors of the camp. Ah, okay, all right. Okay, so that that is fascinating. So then, then the ideas might be. Okay, we could we could certainly offer, for instance, well, let's see. I mean, yeah, are you okay Elizabeth if I give this some thought and we bring it for future conversation, because I think this needs some needs some more exploring about, okay, are there ways we could, we could ask people to fund the program you're running, right, are there ways we could ask organizations are there ways we could, we could persuade Jenkins contributors to help in some way with with the presentations you do to to them for instance back end. This is a very Jenkins thing right very much front and not so much you can ask Alex how we're not so great on front end all the time. He's, he's bringing us into the modern world with front end but but the front end is is Jenkins is Jenkins is not super strong in front end, just so we're clear. Interesting. Well, Elizabeth thank you for sharing that. Would you be okay if we carry this as a topic to be reviewed in two weeks. That's fine. Thank you very much for considering that topic. Excellent. Thank you very much. Oh, yes, you know, go ahead. Yeah, I just wanted to say that hope Jenkins is doing something about the front end part. Yes, yes, we are very much so well, Alex and Jan Faracic and Tim Jacob, and now I've got I've enlisted one more person. Adrienne Lechapantier and several others that we hope are all going to be helping with with getting better on the front end I'm not not disputing that we have lots of work to their good points you know. All right, that's that's good to hear. Also, and also Mark, I remember that during one of our meetings that we had in January, Zainab said something about us delving into products products management product design, I don't know if you can actually remember. I do. Yes. Okay, because I've never really heard about it, although I've not been attending meetings to go. I just thought to ask, and as I am actually one of the courses that these girls are currently taking product design. And, and that's yeah so so the design world is is is not certainly not my strength, but but I think there are certainly. There are certainly interesting people and people who are interested in design and how systems behave how products behave over web pages that kind of thing. So, so I'd propose we defer that topic as well, just because I'm running out of time now, but, but I think it's a good topic and Elizabeth let's bring it up in two weeks when we meet again. Sure. All right, everyone thank you very much sorry to have to end on this note I'm just out of time. Recording will be posted, probably within the next 24 to 48 hours and we'll start the discussions on community dot Jenkins.io. Thanks everybody. All right, bye.