 Hello everybody, my name is Michal Cihars and I'm the author of a tool called WebLite, which is there to help you with the localization. I will first start with a simple question. How many of you do know WebLite and how much I should introduce it or I can go to the details. OK, so how many of you know WebLite? OK, good, almost everybody. So I will do just short interaction for those who don't know. It's a web-based localization tool. It was built to have great version control integration so that you can connect it directly to your version control repository, like Git or Mercury or even subversion if somebody still uses that. And it's focused on providing translator good context about what they are doing so that they can do proper translations. And another main focus is to be able to automate most of the workflow so that the developers don't have to care about how to get the localization into the repository. Or the translators don't have to care about that as well so that the process is fully automated. When you want to start using WebLite, you have to get the initial translation assuming you have already something into WebLite. The easiest approach is to start from the version control repository so that you just point WebLite at it and it will look into the source tree and it will try to find localizable files like getexpo files, Android, resource strings or whatever you are using. And we are trying to make best guess what you actually want to do with the files because there are some configuration options and some workflow differences so it still might need some manual tweaking but in most cases it should do the right thing automatically. We support something like 30 formats, it's still not everything that is being used in the world so we are still missing some proper formats like XLIF2 which is not really the same thing as XLIF1. There is Fluent which is used by Mozilla which is also not supported and there are about 20 of JSON variants which are not supported but we support only 5 of them right now. It's common problem that every framework tends to invent its own localization format and it's nice that you have something on your own but it usually ends up that you repeat the same mistakes as everybody else did before so you don't do them proper localization, you cannot add some context into the format then you start adjusting the format to handle it in some not so clean ways and that's where everybody should stop and start using something standard but it's not that usually especially in the web front end scenarios where there are a lot of new formats being used and they all repeat the same mistakes. So when you will start with importing project you will see something like this. This is a demonstration project so it's not really a real call but we can see there are some get-expo files, some Android strings so you just choose whatever you want to use and you end up with it being imported into a Blight. One of the first things which happens during the import and this is why it sometimes takes too long is that we have quite a lot of quality checks that try to detect common mistakes in the translations. They detect things like firmware strings and compile language is frequently used to build up messages or XML markup like placeholders in Android or Excel files and all these things are configurable by flags. So what happens when you have something wrong is you will get some thing to check. This time it's Python format. Maybe you can see that it's not present in the check translation but it was present in the source and the thing how the Blight looks into that is that it parsed the PO file and this particular thing I can think it's called typeflex in PO file. It's a Python format and then it can recognize that this should be actually the format string for Python because otherwise it might be also a format string for the language and its simple level is quite same but it's more complex for masking it can have different syntax so then it can do the proper detection for various extensions used in Python, C, JavaScript or whatever framework you are using. These flags are used to customize the checks and besides the ones which are already present in the translation files for formats that support it you can define them also on the Weblight site so you can do things like defining length of the strings how regular expression to do whatever checks you might want to do or defining other markup which can be like for example BB code or whatever it can be In this case we have added a flag in Weblight that defines maximum length of the string it defines and again it fires the checks here so you can extend it basically on a string level or define how a Weblight will behave on a string level The other thing which is important for translators is to know what actually are they translating in many cases it's not obvious what actual string is being used is it used as a button or is it labeled on some list and in many languages the translation would be different then so one of the things where this can be specified is in the translation file already get text is really good in that it has several ways to define additional context the JSON files are typically very bad in that because JSON doesn't support commands so you cannot edit that if the format doesn't have defined it so it depends on format how you use but you can always define additional context inside Weblight so then it's shown just next to the source string so that it's clear to translator then when this actual string is used and what the person actually stands for that really helps to make the translation proper later on this side but providing text is nice but it sometimes can take long to write all the strings but it's really helpful to provide screenshots for example for mobile applications it's really helpful to see what all is on the screen and how all the strings fit together so that's when Weblight can upload the screenshots it's shown just in the source information again and you can link all the strings to the screenshot you can upload any number of the screenshots and assign them to the strings this can be also automatic using OCR you just have to confirm the matches but mostly it works fine and then you have some screenshot management interface where you can put them and assign them to the strings I have shown already limiting the length of the text but that was counted in the characters and that's what would help you on a terminal but not in a proper UI because in UI you are using typical variable width fonts and the things get rendered differently and also depends whether you are using some Latin fonts where fonts letters are relatively narrow or you are using Chinese where letters are basically square shaped so it isn't that useful to have limiting in length of characters but actually it's usual to have limits in pixels so that the rendered text can be fit into the screen so one of the recent additions into Weblight was that we have fonts management so we can upload the fonts group them in some virtual groups the reason for this is that many applications use different fonts in different languages because you have different fonts for Arabic, for Chinese, for Latin letters and you need to switch them properly so there is additional layer of what we call font groups so you define basic font and you can then overwrite it per language and it then again can be configured through the flag so we are using font family called source that was defined on the previous screen we are defining the size and we say that it should fit into 35 pixels which it doesn't and the check shows here the rendered text and the border where it's supposed to fit in so we see in this case that we should use some shorter name for the font and not the full name to fit into the desired space and other things which is helpful in these situations and was introduced in last release or will be introduced in next release but it's already part in our sources is thing we call shaping if anybody has better name we can still change that it's way to group different lines of the same text the example here is day of months or day of week so you can use just one letter in case you are really tight in space then you have some short name and then you have the full name which you use in big screens or if you have a lot of space and shaping is a way to group these strings so that they can see the grouping is done by regular expressions so it's quite flexible but it's not that easy to configure but it turns out that this is really the only way to do it because there is no standard at all even within the same framework it depends on how the application author writes it and you use these strings so it really has to be as much flexible as possible and what happens then that you will see all these here in the shaping and it's also indicated in the things to check because it's some kind of important thing which you might want to look at but the workflow is not the same for all the projects that's why we introduce concept of addons these allow you to customize how the workflow works it brings additional automation it can help you integrate with third-party services and they also configure how the file formats are handled especially how the translation files are generated because in some cases you might want to infer some additional rules like you don't want to strings to be broken in a certain way but you want to have them unlimited with because your parser for the file is stupid and you cannot deal with that or different kinds of things this is set of addons you can use on JSON file format in this case the list of addons depends on the format and content of the repository because you have integration with get-tags like updating the linguas files and similar things it depends on what actually is in your repository store and depending on that you can install and configure the workflow to fit your needs one of the addons which is quite useful for big projects is component discovery in that case you don't have to manually configure a lot of components but you can define the mask again using the regular expressions it's not the most user friendly thing but it's quite flexible way so you just define that you have some structure with language and component name define parameters for the components and you will end up with component in the blade for every chapter of a book like in this case it's localization for the Debian Handbook and all these components can be created automatically with just single discoverers so that you don't have to manually deal with that but we want to also save the translator some work and we have thing called machinery that's our interface to machine translation and translation memory services in last year we have introduced built-in translation memory which still has some quite some errors to improve but we have something which is small as working but it's also interface to managed party services like Google or Microsoft and Dpal and whatever services you will realize it's quite easy to add integration with another thing so we receive contributions for another interfaces so we have support for some Chinese services which I even don't know how to configure properly and so on and besides doing this manually you have also option to use the machiners and add-on and then it's executed automatically when new strings appear on the repository it's gone through machine translation or translation memory and you can get translation automatically or suggestion for translations because with machine translation you probably want the human to review the strings later not to accept them automatically so that's option as well and this is how it shows up in the interface it shows lists from all the services there are some matches inside the play matches from third party services as well and they are sorted based on some quality which is determined by a to the source so we trust some of the machine services more than the others or by percent of matches in case of translation memory and that's the basic thing I wanted to show out and in the top, in the top description there was one question if somebody wants to get his project hosted on hosted weblight it might be the chance right now if nobody here wants to do that we can pick up one from our queue and do that online so that you can see how it actually works to being added on weblight and how you can start translating that so is there anybody here? no if you have a project that you want to have translated on weblight like Jason or JavaScript ok, then it probably won't work ok, so we want projects that actually want to use weblight not projects you want them to use weblight ok, I will we don't have any support for that there may be API to do that but it's not currently supported unless you have thousands of them it's quite easy to download the tmx files from Transifax and upload them into weblight yeah, that's true ok, so we have random matches from our queue something which is waiting there for one month which is not that nice so we will start with creating a project and the thing is called LK8000 never heard of that before hopefully it's something useful LK8000 so the most important part of important translation is choosing the name and specifying the version control repository let's see if nothing breaks it should now look in... what? ok, nice and it actually did something it did find out that there are some Android translation files so we are choosing that one and it shows now the summary of the project and as it's going to be public the last thing which I need to specify is license for this thing and let's look gpl2 we can keep rest of the settings on the different ones because that's what we want ah, it was fast we are now presenting a kind of localization guide that helps us to configure the web by propeller it tells to include more context like screenshots of flags to indicate something special in the strings there should be some guidelines for the translator so that they can know for example who to ask when the new thing will be released and so on where is some discussion for the project and so on and then there is version control integration so that you can configure the flow automatically but that's not something we need to do right now and why it's only English here let me check the source code ok, they don't have another translation yet so the only thing which is shown here is the source string and the only three strings so that's not probably the best project to choose let's move to another project this is how as we offer to all Libra projects the free hosting service because if you choose to use that with your project you can download start your instance and do it all on your own or you can use our hosting service and if you have open source project you can use it for free and this was a request that came from the creator of his program and he was really he really can't wait to have it done so I asked me how to do it right now and I realized that they completed the email that there is no compatible format yet and they are ready to patch so they asked for something to do before they do their work so I'm sorry for the bad showcase that I chose ok, we should have what? better on this better on this, ok you can the question was how to push changes back from the hosted service basically the R2 option or 3, you can do it manually it exports the repository which is underneath so you can just merge it as remote repository you can give it access to push directly to your upstream repository so it can push to GitHub or whatever you are using so we can do a pull request with the translations it supports it on GitLab and GitHub and Bitbucket I think so on these services we can do a pull request as well so that you can do whatever review you want to do on the language the thing is that the developers most don't know the language so it's just illusion that you are doing some review on that in most cases because when you get Arabic translation you see ok, this looks like Arabic but most people are able to do that not review whether it's done properly but you can do that if you want the translators can do themselves the question is that Arabic speaking people can you can do the review inside the webline but some people want to have a tight control what goes into the repository so they are doing some kind of review there as well so any other questions or should I try another demo yeah, the question was whether it's possible to customize the processing of translations with add-on yes, you can do that basically add-on is piece of Python code you can hook to several locations in the workflow so that you can customize it the thing when new string appears in the webline until the things get committed into the internal repository so you can do pretty much anything sorry? yeah, you can import it the three levels of translation memory you can import it to your personal translation memory so that only you see that you can import it into project translation memory so that everybody who is translating this particular project can use that and there is also global translation memory which is shared among the projects that's on hosted installation it's obtained you have to agree that you will contribute to that and then everybody can use that but you can in turn use translation memory from the others as well who have opted in for that so let's try another demo maybe it will be untis so again some kind of Android application so the setup is pretty much the same as what we did before it's just gpl where in tree this time takes longer so it will be problem of strings there and at least there is one translation as well so we now have English and German strings most of that are translated are some failed checks what has been there one of the things is unchanged translation then it's obviously it's name but we cannot know that so we can do dismissing that for all languages what happens in the background is that this sets a flag on this thing that it should ignore some check so if i reload it oh ok it didn't go again this is another thing which everybody can check that it tells you that the thing is translated as a question but originally it was not it was ending with a full stop and in German it's translated as a question that might not necessarily be a problem but it usually indicates that either the original string is wrongly phrased so that it should be a question as well or somebody should look at the translation whether it shouldn't be the same meaning as the original he is really like that in English it says that this will do something and in German it's asked are you sure that something will happen so it has a really different string and it indicates usually some problem in the source thing this is again similar thing with the strings and yeah this is not good cases so we have imported a project and people can start translating it if there would be some string to translate it's not right we can start new language for most formats it can be done automatically so let's translate this application into Czech you can go one by one but if you are working on the long text you might actually want to see a Zen mode which shows just one string next to each other it doesn't show that much of context but it's good for translating like new projects where you already know the area and you want to just focus on translating the strings but you can just write the translations and you don't have to look at two other things then it's way more effective than using the full interface and it just loads all the strings in the background until you scroll to the end okay that should be pretty much it it will, the question is how will it push the things back it will, yeah okay you can do changes on either side if a blade is properly linked to the git repository so that it gets notified when the repository changes it loads the translation from the git as well and it presents them in the interface in case there is conflict you will get a merge conflict notification and you have to deal with it manually but as long something different is being changed the things just get merged on a git level and you can use them on both sides what you can also do is download the translation file from the weblade you can also download in different format than the project is using do the translation offline and then upload it back and the weblade will merge it automatically even if the upstream has changed meanwhile it will merge the strings properly into the translation so it can work offline on both sides you can work on the repository site as well but you can also download the translation files for offline use and upload it back later if I go back to the check translation I can download it in files it can convert it into a bunch of standard formats which are useful you can also download the original file the nice thing here is that if you download the original file you get just the monolingual file so basically you get just ID and the translation so you don't actually see the surf strings there but all the download options are for bilingual translation file so that you have also the surf string there integrated so it's way better for offline translation than the original format and you can also download all the strings which need to be translated so you don't have to if there is just half of the strings missing you can also download the whole translation file just the one which needs translation and then anything you download here you can then upload back and it will get merged depending on how you can you can configure it depending on how sure you are with the translation so you can upload it and overwrite existing things or just replace the strings which are not translated here so the last time we have first APIs we can get all the information what you cannot do yet is push all the information that it's not possible to write some of the things but you can download everything from the API so you can list that these languages how much are they translated you can download the original files basically the same options as I have shown in the UI it's in the API as well thanks ok, they're back the question is how Webbyte integrates with different branches on Git you can have any number of components each can match to a branch for example if I look at PHP MyAdmin project you can see that they are translating 4.9, 5.0 and development branches so the translations are committed to each of them what happens in Webbyte is that when it sees the same string in all the components it will translate them in all of them you can switch this off but this is what happens by default so that the translator usually work on the one but the translations get automatically propagated to other branches as well what then needs to be handled is merging if you do some maintenance across the branches you need to handle the merging on the Git site then because the original translation files which are being changed are typically different in each branch and you cannot then merge them automatically so you need to use some tags with Git to skip Webbyte changes from the other branch but that's in more detail described in the documentation how to do this if you want all of them to get localized then yes what you can do then there is simplified interface for importing different branch so that you just choose if I think I can show it it looks like network is not working that well but there is interface where you can just choose additional branch to run slide and it will create the component for that automatically so you don't have to go through all the configuration step manually but you just select the branch from the one which is configured it works on component level so whatever you import it's translated this can be used not only for the branches but for example if you are translating Android and iOS application and you have the same strings it can be used to translate them at the same time as well so it's not only used for branches but for translating different flavors of one project for example it's based on the keys as well so so it's not only about the strings it depends on the format if you are using get text then in most cases they just serve string but if you are using key value based formats like with Android or iOS apps then it looks on the keys as well so it compares this as well yeah the message context if you are using that showing the changes per project and per language because currently it's that I can only see the changes in every language and I for example don't speak any Mandarin so I would like to filter that and the other feature have an overview of the translators and reviewers in the project so that when I'm adding a translation I know who is working on that language and can add them in the project ok so there are two questions first of them is when we will super browsing history for languages and projects is that correct yeah it's already there if you go from the project language page you can go to the history and to go as much deep as you want the thing is that you just need to go from that page you go to check translation of weblight it's look like I have problems with internet but never mind it this one should work I will probably show it later the other thing, the other question was about more detailed statistics of contributors in project yeah we don't have that right now you can dig it to some level in history so that's what will I show now if you go to the history and you can go browse all changes or you can also construct your manual but in the URL you can see it shows changes in project and for language so it's already there for getting up the contributors you can use reporting feature but it will just list to all the contributors in a project I think we don't have that from lower levels if you have a specific idea how it should work but you are not able to code it just make an issue on our GitHub because we are so happy the really users are able to tell us what they are looking for some languages have different regions where they are being used but they are exactly the same language for example, Netherlands the Netherlands touch in Belgium touch in Kursau touch in Uba so some people who are starting translations are importing already files they have an analysis for BE and later on to ask them and get split off so people make a translation for Netherlands, translation for Belgium but they actually mean the same translation could your system maybe give a warning for certain combinations of languages in areas that you might want to switch to only using an L whatever relevant for that language because in the end only one translation is desirable the question was just to repeat it the question was about doing translation for some language variants like Dutch and Dutch as spoken in Belgium the question is how to limit it because in some cases it's really intentional that people want to add this and we don't want to for some strict politics on this so the option is there and if you have some contributor who wants to translate into that crazy language I would say okay let him do that it might be useful for somebody in the end okay we are trying to do this for some languages but I think the rule for Dutch is not there so if you think it makes sense then please open up an issue because we have list of language definitions it's in separate repository and it might make sense to add this rule there for us it's in most cases we don't know the languages as well and Webley has definition for something like 500 languages right now whatever the question is about spell checking we were thinking about integrating language tool but we are not yet there so right now we are leaving it up to browser but we might eventually integrate with language tool that's certainly on the list because we want to have that for all users not just for those who might have some extension installed but it's one of the features which might be implemented I think I was in touch with him some time ago because I think the language tool is actually using Webley for localization as well so you can certainly download all the files and do whatever you want with them but I don't think we will add specific support for this because it's quite quite rarious case it's not like it would be costly to implement but I don't think anybody else would use it than you you mean like when the question is in different gender so that you need to ok ok what you can sort of do is use the shaping I've mentioned so you can group the things together but it will still be like you need to have the same amount of them as in the source language but the shaping can help you at least to group them together so that it will be presented as related strings you mean like this kind of variations I would guess that maybe 90% of the strings are identical so there is a wiki that translation is done or like we use these words we avoid these words and so on and that's usually done in different sorts of wikis or documents outside of things like this but if a tool provides a way to do that this is already supported in Getex itself if you make a translation file for example for tradition if you will translate only those different strings so that you can join both files together to create the correct translation ok so which one will it use have English as spoken in the US, in Australia and in the UK is it the one in English what is it is it part of the language the language name for example if you have say p no s underbarm and x and x then it first checks for specific strings if they are empty then it checks for Spanish strings we have feature request to do this kind of thing in Weblight as well but it's not yet implemented and I even don't see it nice approach to that because it relates to duplication of those things in both translations and then it's quite unsure to change the strings in the leaf translation whether they should be propagated to the parent one or not so you would have to ask the translator is this change just for your variant or should it be done on the parent level as well I think we are running out of time so thank you everybody for your attention if you want to discuss something more you can join us for a beer tonight if you want to do it in a more civilized way you can join us in a booth yesterday and you can find more information on our website thanks for your attention