Tower of Babel or How to turn an elephant into a polyglot
CC Attribution 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Golub, Pavlo
So my talk may be about how the community handles i18n and l11n right now, how can we extend the translation experience with new online platforms (and some others). Which is absolutely harmless to nowadays processes. It just may be used together with old good tools, e.g. POEdit, KBabel etc. This is one of the interesting topics which is poorly lit at conferences and meetups. I'm talking about localization of PostgreSQL and other community software (possibly even commercial). Right now we're using to manage translations, but I had excellent experience with online translation tools, such as transifex.com and crowdin.com. Which is absolutely free for open-source. I've even created PostgreSQL organization already, so I'm the boss ;) So my talk may be about how the community handles i18n and l11n right now, how can we extend the translation experience with this new platform (and some others). Which is absolutely harmless to nowadays processes. It just may be used together with old good tools, e.g. POEdit, KBabel etc. There a lot of benefits, e.g. painless new language introducing, one translation memory for all products, ability to pay for translation (commercial soft), team collaboration (translators vs reviewers) etc. With online translation, you may involve new people in the community, e.g. new Ukrainian translation is in progress by high-school teenagers under my mentoring. But we also have GSoC project for students. Translation is easy mentoring and funny to do. Agenda: 1. Intro to l11n and i18n 2. Nowadays state of affairs 3. Demo of the localization process 4. Overview of the online platforms for open-source 5. Demo of the online localization process 6. Questions
 Hello everybody. My name is Pavel Agolub. I live in Ukraine and nowadays probably everyone knows where it is. Thanks to HBO TV series Chernobyl. I'm working on cybertech. And today I want to talk about translation, internalization and localization process and how it is done and in what way we may improve our processes. How I get it, how I get to it. This year we started to build our Ukrainian community and I think that task, translation of Postgres itself and infrastructure and others, programs may help in building our community. So here I am. We're a company, we do everything. We are headquartered in Austria. We have offices in Estonia, Switzerland and Uruguay. Our clients, some of them. Our services. So let's go. Some facts. 70, 72% of consumers say they want to buy or use products with information available on their own languages. If content is offered only in one language, usually it's English, it can address at most 30% of total online population. And to cover the whole earth, we need to use 7,000 languages. And but if we want to cover 80% of population, it's enough 83 languages. I'm using here wiki data, top 10 internet languages. I really like these precise numbers. Well it's not easy to have idea how it is. So I created a chart. So as you see, 25% of internet users are using English, then 20% Chinese, 8 Spanish, 5 Arabic, Portuguese. It means Portuguese, Brazilian and Portuguese, Portuguese, Malaysian, French, Japanese, Japanese, Russian, German and others languages are 22%. Why anybody want to translate product, especially post-opening source? First of all, you might want to your product in governance sector, in military sector, in healthcare. In this way, you must be translated. As for example, Postgres Pro translated their product to feed the requirements. So if you want to teach Postgres to your students, you also should translate it. Some corporations have restrictions on using untranslated applications. And some kind of licensing may require this. When you want to translate, you probably want to translate if you want to build local communities, new local communities. If you want to improve user adoption, especially for high school students, if you are not open source but enterprise, probably you want to open new market in countries. Or you want to build credibility. If people see application in native language, they feel more comfortable. So why anybody want localization? So localization help us spread the Postgres. It help us build in community. And this process may be done by non-developers without any knowledge about internal architecture or structure, without any knowledge of programming languages. And this is the excellent area for beginners because our Ukrainian localization is done by a team of four high school students with my mentorship. But it's working. What is internalization is? This is the process of designing a software. So then it can be adopted for various languages and regions without any engineering changes. So localization is the process of adopting already internationalized software for specific region or languages by translating text and adding specific content. So any application may be internationalized but not yet localized. And when we say about regions and languages, we mean that, for example, Canada has three languages, this English, French, and I forgot the third. For example, we have different languages for Australia, USA, and English. They are all English but with specific issues. Postgres and most of applications in our infrastructure uses GetText library. GetText is a library for internal localization. It supports many languages. I think that even Klingon may be imported here. It supports plurals, genders, and it supports context comments. So developers may leave. What exactly this string means to help translator to understand what exactly developer want to say. When we get text, our translators no need any sources. All strings are gathered to the PO file. It stands for portable object. It's just a text file. You may edit it with any editor. After work on this PO file, it's compiled to MO file. MO stands for machine object. It's a binary file. Then during work, application loads MO file into memory and then each translated string is searched by hash and is used. Just like an example, it's a PSQL. As we see, Fprintf want to have localized string. GetText is a macros for getText function call just to make it more narrow. So underscore means getText. GetText accepts string. Then if it's available in MO file, it finds it and replaces with the translation. We are using getText to generate PO files. This is POT, means template. When first we generate PO files, it's called POT, portable object template. Means that message strings are empty. Then if you want to introduce new translation, we rename it this file into PSQL under some score, whatever, UK if it's Ukrainian or a raw if it's Romanian. And working with it, filling these message strings using our simple text editor or special editors. So what is under the hood? Postgres uses getText library. Postgres are using getText function, which is macros for getText function. Then strings parsed on the source code and gathered into one PO file. Translators then work with these PO files. Then these PO files are compiled into MO files. And then these MO files are used in the viewing run. So what we have now? So the same top 10 internet languages. But now let's check what version of Postgres, how much of that languages is translated. So English is 100%. No problem. Chinese 90 plus, not bad. Spanish 100%. Arabic zero for all. Portuguese but this is not Portuguese. This Portuguese Brazilian version. So 86%. Indonesian, French, Japanese, Russian are 100% and German 99, not bad. Except for Arabic language. I have no idea if we have many customers or users in Arabic world. But I think that not. Yes? Oh, yes. Yes. Probably. Okay. We have Hebrew translated for 20%. Yes. RTL, yes. Okay, to start work with translation right now, these three links are enough. First is the wiki where described all this scenario I will show. The second is Babel Postgresql or where one can download any PO file for translation. Or if we are talking about new language, we will download PO file, rename it proper PO file name and we'll work with it. And PGSQL translator mailing list where all this is discussed and where patches may be proposed. However, we have also red mind ticketing system where also one may upload patches. So workflow is simple. We are going to Babel Postgresql. We choose language, choose release. It should be the last stable release. If we are starting from the scratch for the new language or it may be the master branch which is uploaded to the Babel Postgresql org after the beta process is starting for the new release. We download PO TO, PO file. If we have PO file, if our language is translated for some part, we download PO file. If we are starting from scratch, we are downloading PO T file, rename it, work with it. There are several editors. The most famous is PO edit. It's fine. We have a Babel Emacs sublime, but sublime is probably needs to be with some plugins. Then we review, check it and submit to mailing list or to red mine. And depends on how good our translation is, is it compatible, someone from committers may apply this patch. So let me show you how this... We are starting PO edit. Let's find that how our Babel Postgresql org looks like. It's just a table. As I said, the beta for 12th version is started. So we have master here. As you can see, it's absolutely white. White means that there is no or a little of translation. The yellow means that this particular file is translated for 90% or more. And green means that this file is translated completely. And the red wine, in the red color, for example, PG rewind for Japanese contains some errors and need to be fixed. Okay, so let's... How many? How many do you say? 8%? I think it's 6. How many do you have there? 27. 27, yes. It's 27. So the table won't be... Yes. Right now we have... But some languages are not well represented, for example, Hungarian, Africans, Netherlands. They have no idea how they appear here. So anyway, let's try to download... I don't know. Let it be PLTCL. Okay. So I save it. I save it like PO file and... Okay, let it be UK. So I save it. Then in PO edit, we should open it. And that's how user interface looks like. Oh, very bad. So we have a list of strings. Then we have a translation memo where we can enter our translation. And on the right, you can see that we may use translation suggestion from Microsoft being translation, I think. But in... I know that we may use Google as well. And in the Pro version of PID, probably we may use deepL translator and some others. So okay, let's... Processing parameter. So... I don't know. Oh, yes, maybe. No, no, no. Show preferences. Show preferences? No, show preferences. No. File preferences. Oh, yes. Maybe 18. Much better. Okay, so processing parameter. Yeah, okay. Something like this. And as you see, we have S, which will be replaced by some system argument when this function will be called. Okay, and we move to another. And this process, we may... until the end, then we save this file, then we try to compile it, put it, compile it automatically. So let's see if it... Yes, now you can see we have PO file and we have MO file because PID compiles it automatically. Then we may take this MO file, oh, PO file and send it to translator mailing list or send it to readmine ticket system. Okay. That process works well and it's professional enough and it's cool. Probably all translation we did for Postgres was done this way. But when we start with our young community, I understand that high school kids cannot use such a complicated process and they need something, something light or something more familiar with. And I remember that nowadays we have several translation environments, online translation environments, which may be used for this purpose. And some of these files are too big to be translated by one person in reasonable time. And we agreed on this that every day, every student will translate at least 10 strings. So we will finish till the September before the Postgres 12 will be released. So the proposed workflow is we will use crowding.com translation service. I registered a project there. So we go on this service, we choose language, we choose Postgres release, the same as on Bubble. We work with it online using only our own browser. Then after translation, someone, let me in this case, will review these strings. And after review, I download this PO file and upload it to RedMind ticket system or to Mail.in.list. So let me show how this should look like. Okay, so here we have crowding. Can you see it? It's better. This I logged in on my account. So this is admin view. The view for translator is a little bit simpler. But the main thing is the main idea is the same. So we have a home dashboard where our languages available are listed. We see that we see two numbers, persons, for example, for Ukrainian, 49 and 14. 49 means that 49% of all strings are translated. And the second one, 14, means that 14% of all strings are reviewed. So let's see how the user interface looks like. When we are choosing language, then we should choose the file on which we will work. As you can see, the structure of the system is much more similar to what we have in Postgres sources. That is because I uploaded these files using import from GitHub. And when you import using GitHub, crowding preserves all the structure of all catalogue folders, et cetera. But if someone wants to use just a list of files, then the information about source structure will be destroyed and we will see only a list of files. Okay, let's try it now. PgDump. Okay. So now we are in translation environment for in translation user interface. It's pretty the same as a PoE edit except that all strings are on the left side. And in the middle you have the information about string now translated. You see that some of the words are highlighted. If the world is highlighted, that means that this particular term is in glossary. And it should be translated as it says in glossary. Moreover, in glossary there is a short description of what this term means, of what this term is. Then we see context information. This is the source file and line and what format is it. Then here we have our edit where we should put our translation. And let's see untranslated something. Okay. So here we have untranslated table as you see glossary. It has description. It has translation. And here in the middle, at the bottom in the middle, there are three items. First, if there is some similar translations, if there is some similar translation, okay, if there is some similar translation, it will be shown here. It will be shown who was the translator, proposed it. And is it approved or not? Is it reviewed or not? You may delete it or it's for admin or for reviewer. Then we have TM means translation memory. Translation memory is the table or database which is used to store all translated strings and it looks in its table if this currently translated string is similar for one already translated and if it does, then it shows here. And for this particular, we see that it's perfect much, 100%. That means that this particular string already being translated and it is in translation memory. So we may use it and that's all. And the last but not least, we may use other languages to see how this string was translated in other languages. For example, if we are working with Ukrainian, we may use Russian, Czech or Polish or other Slavic languages to have idea how other translators translated this string and we may be more consistent with other translations. And on the right, we have comments for each string. So if translator have no idea what this means or he has some ideas or whatever, he or she may leave a comment for this particular string. If he or she translator thinks that this string is wrong, is incorrect or has some type or whatever, it just should mark it as an issue and reviewer and administrator will be notified and may check what exactly wrong with this particular string and check it, fix it or... Here we have translation memory, so let's try to find some table. Yes, we have table and we have plurals for tables and we have all tables, child tables, foreign tables. So if you're stuck with some word, you may go through the list of this translation memory and see in what context this term or word were used and decide how to translate it. And the last is glossary. So with the same as this floating window, that is the same on the right, so you may see what exactly terms from this particular string are in glossary. What do they mean and how they are translated. So that was translator. Let's view to proofreading mode. Proofreading mode... No, the proof, okay. As you can see, there a little bit, it's much simpler interface for reviewer. So you are going through all translated strings and if you are fine with it, you just mark it as approved, approved, approved. There are hot case for this. So if you think that something is wrong, you may change. And then save and then your version will be saved as translation and automatically will be marked as reviewed. Okay, so let's quit editor. After we worked on our file, we may download it. Let's save it. Yes, I want to replace locally. And the process is the same as for our old schema. We send it on a translator's mailing list or we add it to our red mind ticket system. Okay, as for administration, we crowd in has integration with GitHub and other source control systems. But since Postgres GitHub is only a mirror of the real control system, we cannot fully integrate it with the crowd in translation environment. However, I think that using files from Babel.Postgresql.org is much better approach since we may be sure that our files are consistent. So, for example, we may update, we may, admin may update crowd in translation files weekly from the Babel and be sure that there will be no forks between these files. What are the pros of online translation platform? First of all, you don't need special editors, you don't know, you don't need no third-party software, you don't need to know how to work with it. The second, it is the unified translation environment. So, every translator, every reviewer has the same user interface. And if someone is stuck, you may help him because you have the same user interface before you. For online translation environment, we have dashboard and notifications. As I said, if someone, translator or reviewer marked string as issue, or then all reviewers and administrators will be notified about it. You may be notified about completeness of some file translation. You may chat with each other inside this environment about some strings particular or files. It supports history of all translations, so at any moment we know who, when and how translated this particular string, how it changes all over the time. Of course, it has glossary, it's a huge help for everybody. Using glossary, your translation is consistent and you spend a much less time on it. Remembering, oh, how did I translate that specific term which I met only once and now need to remember. And of course, this environment has a system of suggestions. I mean, crowd-in may use Google, crowd-in may use Microsoft, translator, I mean. And crowd-in may use deep-l translator. However, deep-l is not free, so I don't know how to be here. But it's the best, I tried it. So it has instant saving, instant renewing on the same screen. So I understand that crowd-in is a paid platform for enterprise application. It's absolutely free for open source. So if you are open source project, you gain all functionality as for the most costly plan. So we may translate Postgres, we may translate PgAdmin, we may translate Petrony, we may translate whatever open source projects we have in one place and all these projects will share the same translation memory and the same glossary. So if it's... Okay, and role system, we have admins, translators and reviewers and for each project we may specify who will be in charge, who will be translator, we may grant some permission to translate and we may not. So not anybody may translate this file, for example. So before translator is capable of translating, it asks admin, may I translate this particular file for that particular language? And if administrator is agreed, then grant permission for translation. This... Oh... Oh... This is message from Louis Trindot and he asks, is it possible to translate Postgres to European, Portuguese localization? But this is our conversation about... What about... Oh, Thomas Wandra. A set. So you have notifications. Okay, new join request for Postgres QL project, Tzaki. He wants to participate in Hebrew translation. I would like to help translate Postgres QL in Hebrew and there will be a set, decline or chat. So... This is just like, you know, social platform. So some of them are employers of some companies and they translate on this side. Some of them are professional translators and they are looking for help or to be paid for this, just like it trans effects. So the crowd-in is interested to have as much as possible translators because then each translator has its own rank or, I don't know, karma or whatever. And the cooler you are, the more work you have and the more you pay it. So if you translate Open Source project, it will raise your karma and you become the most valuable translator on this platform. So another question. Yeah? Yeah. Yes, I think that it's even more convenient because this system supports not only PO format but X-LIF, DOC and some more. So probably we may just upload SGML or HTML or what we have to just be translated as is and unloaded back. But I didn't check this. I only worked with PO files. Okay, and the last, we may hire pro translators if we want or if our sponsors want to hire anybody. As I said, this is the social platform where translators are living and if someone thinks that paying someone to make translation to any particular language is okay, then it's fine, I think. Okay, cons, online translation. Of course, it should be online. Browser is not the fastest environment. Hot case may interfere with browser and extension you have. And of course, the free translation plan is only possible for Open Source. So if we want to translate Enterprise DB or PostgreSQL, we should pay money. Okay, questions? No questions? Then I'll show you what I discovered about PoEdit. Turns out that PoEdit in the latest version can connect to CrowdIn directly. So you may use whatever file you want from your CrowdIn account, CrowdIn project, set okay, and this file is translated. You work with it offline or online. And after you hit Ctrl S, save, all these translated strings are going to CrowdIn automatically. And I think this is fine. You download some file before your flight. You work in airplane. Then you land, Ctrl S, and all your translations are on server. Yes. Well, that is. Thank you.
 Hello everybody.  My name is Pavel Agolub.  I live in Ukraine and nowadays probably everyone knows where it is.  Thanks to HBO TV series Chernobyl.  I'm working on cybertech.  And today I want to talk about translation, internalization and localization process and  how it is done and in what way we may improve our processes.  How I get it, how I get to it.  This year we started to build our Ukrainian community and I think that task, translation  of Postgres itself and infrastructure and others, programs may help in building our  community.  So here I am.  We're a company, we do everything.  We are headquartered in Austria.  We have offices in Estonia, Switzerland and Uruguay.  Our clients, some of them.  Our services.  So let's go.  Some facts.  70, 72% of consumers say they want to buy or use products with information available  on their own languages.  If content is offered only in one language, usually it's English, it can address at most  30% of total online population.  And to cover the whole earth, we need to use 7,000 languages.  And but if we want to cover 80% of population, it's enough 83 languages.  I'm using here wiki data, top 10 internet languages.  I really like these precise numbers.  Well it's not easy to have idea how it is.  So I created a chart.  So as you see, 25% of internet users are using English, then 20% Chinese, 8 Spanish, 5 Arabic,  Portuguese.  It means Portuguese, Brazilian and Portuguese, Portuguese, Malaysian, French, Japanese, Japanese,  Russian, German and others languages are 22%.  Why anybody want to translate product, especially post-opening source?  First of all, you might want to your product in governance sector, in military sector, in  healthcare.  In this way, you must be translated.  As for example, Postgres Pro translated their product to feed the requirements.  So if you want to teach Postgres to your students, you also should translate it.  Some corporations have restrictions on using untranslated applications.  And some kind of licensing may require this.  When you want to translate, you probably want to translate if you want to build local communities,  new local communities.  If you want to improve user adoption, especially for high school students, if you are not open  source but enterprise, probably you want to open new market in countries.  Or you want to build credibility.  If people see application in native language, they feel more comfortable.  So why anybody want localization?  So localization help us spread the Postgres.  It help us build in community.  And this process may be done by non-developers without any knowledge about internal architecture  or structure, without any knowledge of programming languages.  And this is the excellent area for beginners because our Ukrainian localization is done  by a team of four high school students with my mentorship.  But it's working.  What is internalization is?  This is the process of designing a software.  So then it can be adopted for various languages and regions without any engineering changes.  So localization is the process of adopting already internationalized software for specific  region or languages by translating text and adding specific content.  So any application may be internationalized but not yet localized.  And when we say about regions and languages, we mean that, for example, Canada has three  languages, this English, French, and I forgot the third.  For example, we have different languages for Australia, USA, and English.  They are all English but with specific issues.  Postgres and most of applications in our infrastructure uses GetText library.  GetText is a library for internal localization.  It supports many languages.  I think that even Klingon may be imported here.  It supports plurals, genders, and it supports context comments.  So developers may leave.  What exactly this string means to help translator to understand what exactly developer want  to say.  When we get text, our translators no need any sources.  All strings are gathered to the PO file.  It stands for portable object.  It's just a text file.  You may edit it with any editor.  After work on this PO file, it's compiled to MO file.  MO stands for machine object.  It's a binary file.  Then during work, application loads MO file into memory and then each translated string  is searched by hash and is used.  Just like an example, it's a PSQL.  As we see, Fprintf want to have localized string.  GetText is a macros for getText function call just to make it more narrow.  So underscore means getText.  GetText accepts string.  Then if it's available in MO file, it finds it and replaces with the translation.  We are using getText to generate PO files.  This is POT, means template.  When first we generate PO files, it's called POT, portable object template.  Means that message strings are empty.  Then if you want to introduce new translation, we rename it this file into PSQL under some  score, whatever, UK if it's Ukrainian or a raw if it's Romanian.  And working with it, filling these message strings using our simple text editor or special  editors.  So what is under the hood?  Postgres uses getText library.  Postgres are using getText function, which is macros for getText function.  Then strings parsed on the source code and gathered into one PO file.  Translators then work with these PO files.  Then these PO files are compiled into MO files.  And then these MO files are used in the viewing run.  So what we have now?  So the same top 10 internet languages.  But now let's check what version of Postgres, how much of that languages is translated.  So English is 100%.  No problem.  Chinese 90 plus, not bad.  Spanish 100%.  Arabic zero for all.  Portuguese but this is not Portuguese.  This Portuguese Brazilian version.  So 86%.  Indonesian, French, Japanese, Russian are 100% and German 99, not bad.  Except for Arabic language.  I have no idea if we have many customers or users in Arabic world.  But I think that not.  Yes?  Oh, yes.  Yes.  Probably.  Okay.  We have Hebrew translated for 20%.  Yes.  RTL, yes.  Okay, to start work with translation right now, these three links are enough.  First is the wiki where described all this scenario I will show.  The second is Babel Postgresql or where one can download any PO file for translation.  Or if we are talking about new language, we will download PO file, rename it proper PO  file name and we'll work with it.  And PGSQL translator mailing list where all this is discussed and where patches may be  proposed.  However, we have also red mind ticketing system where also one may upload patches.  So workflow is simple.  We are going to Babel Postgresql.  We choose language, choose release.  It should be the last stable release.  If we are starting from the scratch for the new language or it may be the master branch  which is uploaded to the Babel Postgresql org after the beta process is starting for  the new release.  We download PO TO, PO file.  If we have PO file, if our language is translated for some part, we download PO file.  If we are starting from scratch, we are downloading PO T file, rename it, work with it.  There are several editors.  The most famous is PO edit.  It's fine.  We have a Babel Emacs sublime, but sublime is probably needs to be with some plugins.  Then we review, check it and submit to mailing list or to red mine.  And depends on how good our translation is, is it compatible, someone from committers  may apply this patch.  So let me show you how this...  We are starting PO edit.  Let's find that how our Babel Postgresql org looks like.  It's just a table.  As I said, the beta for 12th version is started.  So we have master here.  As you can see, it's absolutely white.  White means that there is no or a little of translation.  The yellow means that this particular file is translated for 90% or more.  And green means that this file is translated completely.  And the red wine, in the red color, for example, PG rewind for Japanese contains some errors  and need to be fixed.  Okay, so let's...  How many?  How many do you say?  8%?  I think it's 6.  How many do you have there?  27.  27, yes.  It's 27.  So the table won't be...  Yes.  Right now we have...  But some languages are not well represented, for example, Hungarian, Africans, Netherlands.  They have no idea how they appear here.  So anyway, let's try to download...  I don't know.  Let it be PLTCL.  Okay.  So I save it.  I save it like PO file and...  Okay, let it be UK.  So I save it.  Then in PO edit, we should open it.  And that's how user interface looks like.  Oh, very bad.  So we have a list of strings.  Then we have a translation memo where we can enter our translation.  And on the right, you can see that we may use translation suggestion from Microsoft being  translation, I think.  But in...  I know that we may use Google as well.  And in the Pro version of PID, probably we may use deepL translator and some others.  So okay, let's...  Processing parameter.  So...  I don't know.  Oh, yes, maybe.  No, no, no.  Show preferences.  Show preferences?  No, show preferences.  No.  File preferences.  Oh, yes.  Maybe 18.  Much better.  Okay, so processing parameter.  Yeah, okay.  Something like this.  And as you see, we have S, which will be replaced by some system argument when this function  will be called.  Okay, and we move to another.  And this process, we may... until the end, then we save this file, then we try to compile  it, put it, compile it automatically.  So let's see if it...  Yes, now you can see we have PO file and we have MO file because PID compiles it automatically.  Then we may take this MO file, oh, PO file and send it to translator mailing list or  send it to readmine ticket system.  Okay.  That process works well and it's professional enough and it's cool.  Probably all translation we did for Postgres was done this way.  But when we start with our young community, I understand that high school kids cannot  use such a complicated process and they need something, something light or something more  familiar with.  And I remember that nowadays we have several translation environments, online translation  environments, which may be used for this purpose.  And some of these files are too big to be translated by one person in reasonable time.  And we agreed on this that every day, every student will translate at least 10 strings.  So we will finish till the September before the Postgres 12 will be released.  So the proposed workflow is we will use crowding.com translation service.  I registered a project there.  So we go on this service, we choose language, we choose Postgres release, the same as on  Bubble.  We work with it online using only our own browser.  Then after translation, someone, let me in this case, will review these strings.  And after review, I download this PO file and upload it to RedMind ticket system or to  Mail.in.list.  So let me show how this should look like.  Okay, so here we have crowding.  Can you see it?  It's better.  This I logged in on my account.  So this is admin view.  The view for translator is a little bit simpler.  But the main thing is the main idea is the same.  So we have a home dashboard where our languages available are listed.  We see that we see two numbers, persons, for example, for Ukrainian, 49 and 14.  49 means that 49% of all strings are translated.  And the second one, 14, means that 14% of all strings are reviewed.  So let's see how the user interface looks like.  When we are choosing language, then we should choose the file on which we will work.  As you can see, the structure of the system is much more similar to what we have in Postgres  sources.  That is because I uploaded these files using import from GitHub.  And when you import using GitHub, crowding preserves all the structure of all  catalogue folders, et cetera.  But if someone wants to use just a list of files, then the information about  source structure will be destroyed and we will see only a list of files.  Okay, let's try it now.  PgDump.  Okay.  So now we are in translation environment for in translation user interface.  It's pretty the same as a PoE edit except that all strings are on the left side.  And in the middle you have the information about string now translated.  You see that some of the words are highlighted.  If the world is highlighted, that means that this particular term is in glossary.  And it should be translated as it says in glossary.  Moreover, in glossary there is a short description of what this term means, of what this term  is.  Then we see context information.  This is the source file and line and what format is it.  Then here we have our edit where we should put our translation.  And let's see untranslated something.  Okay.  So here we have untranslated table as you see glossary.  It has description.  It has translation.  And here in the middle, at the bottom in the middle, there are three items.  First, if there is some similar translations, if there is some similar translation, okay,  if there is some similar translation, it will be shown here.  It will be shown who was the translator, proposed it.  And is it approved or not?  Is it reviewed or not?  You may delete it or it's for admin or for reviewer.  Then we have TM means translation memory.  Translation memory is the table or database which is used to store all translated strings  and it looks in its table if this currently translated string is similar for one already  translated and if it does, then it shows here.  And for this particular, we see that it's perfect much, 100%.  That means that this particular string already being translated and it is in translation memory.  So we may use it and that's all.  And the last but not least, we may use other languages to see how this string was translated in other languages.  For example, if we are working with Ukrainian, we may use Russian, Czech or Polish or other Slavic languages  to have idea how other translators translated this string and we may be more consistent with other translations.  And on the right, we have comments for each string.  So if translator have no idea what this means or he has some ideas or whatever, he or she may leave a comment for this particular string.  If he or she translator thinks that this string is wrong, is incorrect or has some type or whatever,  it just should mark it as an issue and reviewer and administrator will be notified  and may check what exactly wrong with this particular string and check it, fix it or...  Here we have translation memory, so let's try to find some table.  Yes, we have table and we have plurals for tables and we have all tables, child tables, foreign tables.  So if you're stuck with some word, you may go through the list of this translation memory  and see in what context this term or word were used and decide how to translate it.  And the last is glossary.  So with the same as this floating window, that is the same on the right,  so you may see what exactly terms from this particular string are in glossary.  What do they mean and how they are translated.  So that was translator.  Let's view to proofreading mode.  Proofreading mode...  No, the proof, okay.  As you can see, there a little bit, it's much simpler interface for reviewer.  So you are going through all translated strings and if you are fine with it,  you just mark it as approved, approved, approved.  There are hot case for this.  So if you think that something is wrong, you may change.  And then save and then your version will be saved as translation  and automatically will be marked as reviewed.  Okay, so let's quit editor.  After we worked on our file, we may download it.  Let's save it.  Yes, I want to replace locally.  And the process is the same as for our old schema.  We send it on a translator's mailing list  or we add it to our red mind ticket system.  Okay, as for administration,  we crowd in has integration with GitHub and other source control systems.  But since Postgres GitHub is only a mirror of the real control system,  we cannot fully integrate it with the crowd in translation environment.  However, I think that using files from Babel.Postgresql.org  is much better approach since we may be sure that our files are consistent.  So, for example, we may update, we may, admin may update  crowd in translation files weekly from the Babel  and be sure that there will be no forks between these files.  What are the pros of online translation platform?  First of all, you don't need special editors, you don't know,  you don't need no third-party software,  you don't need to know how to work with it.  The second, it is the unified translation environment.  So, every translator, every reviewer has the same user interface.  And if someone is stuck, you may help him  because you have the same user interface before you.  For online translation environment, we have dashboard and notifications.  As I said, if someone, translator or reviewer marked string as issue,  or then all reviewers and administrators will be notified about it.  You may be notified about completeness of some file translation.  You may chat with each other inside this environment  about some strings particular or files.  It supports history of all translations,  so at any moment we know who, when and how translated this particular string,  how it changes all over the time.  Of course, it has glossary, it's a huge help for everybody.  Using glossary, your translation is consistent  and you spend a much less time on it.  Remembering, oh, how did I translate that specific term  which I met only once and now need to remember.  And of course, this environment has a system of suggestions.  I mean, crowd-in may use Google, crowd-in may use Microsoft, translator, I mean.  And crowd-in may use deep-l translator.  However, deep-l is not free, so I don't know how to be here.  But it's the best, I tried it.  So it has instant saving, instant renewing on the same screen.  So I understand that crowd-in is a paid platform for enterprise application.  It's absolutely free for open source.  So if you are open source project, you gain all functionality as for the most costly plan.  So we may translate Postgres, we may translate PgAdmin, we may translate Petrony,  we may translate whatever open source projects we have in one place  and all these projects will share the same translation memory and the same glossary.  So if it's...  Okay, and role system, we have admins, translators and reviewers  and for each project we may specify who will be in charge, who will be translator,  we may grant some permission to translate and we may not.  So not anybody may translate this file, for example.  So before translator is capable of translating, it asks admin,  may I translate this particular file for that particular language?  And if administrator is agreed, then grant permission for translation.  This...  Oh...  Oh...  This is message from Louis Trindot and he asks,  is it possible to translate Postgres to European, Portuguese localization?  But this is our conversation about...  What about...  Oh, Thomas Wandra.  A set.  So you have notifications.  Okay, new join request for Postgres QL project, Tzaki.  He wants to participate in Hebrew translation.  I would like to help translate Postgres QL in Hebrew and there will be a set,  decline or chat.  So...  This is just like, you know, social platform.  So some of them are employers of some companies and they translate on this side.  Some of them are professional translators and they are looking for help  or to be paid for this, just like it trans effects.  So the crowd-in is interested to have as much as possible translators  because then each translator has its own rank or, I don't know, karma or whatever.  And the cooler you are, the more work you have and the more you pay it.  So if you translate Open Source project, it will raise your karma  and you become the most valuable translator on this platform.  So another question.  Yeah?  Yeah.  Yes, I think that it's even more convenient because this system supports not only PO format  but X-LIF, DOC and some more.  So probably we may just upload SGML or HTML or what we have  to just be translated as is and unloaded back.  But I didn't check this.  I only worked with PO files.  Okay, and the last, we may hire pro translators if we want  or if our sponsors want to hire anybody.  As I said, this is the social platform where translators are living  and if someone thinks that paying someone to make translation  to any particular language is okay, then it's fine, I think.  Okay, cons, online translation.  Of course, it should be online.  Browser is not the fastest environment.  Hot case may interfere with browser and extension you have.  And of course, the free translation plan is only possible for Open Source.  So if we want to translate Enterprise DB or PostgreSQL, we should pay money.  Okay, questions?  No questions?  Then I'll show you what I discovered about PoEdit.  Turns out that PoEdit in the latest version can connect to CrowdIn directly.  So you may use whatever file you want from your CrowdIn account, CrowdIn project,  set okay, and this file is translated.  You work with it offline or online.  And after you hit Ctrl S, save, all these translated strings are going to CrowdIn automatically.  And I think this is fine.  You download some file before your flight.  You work in airplane.  Then you land, Ctrl S, and all your translations are on server.  Yes.  Well, that is.  Thank you.
Tower_of_Babel_-_Pavlo_Golub_0_47.png Tower_of_Babel_-_Pavlo_Golub_48_1775.png Tower_of_Babel_-_Pavlo_Golub_1776_2351.png Tower_of_Babel_-_Pavlo_Golub_2352_4931.png Tower_of_Babel_-_Pavlo_Golub_4932_12791.png Tower_of_Babel_-_Pavlo_Golub_12792_16043.png Tower_of_Babel_-_Pavlo_Golub_16044_18443.png Tower_of_Babel_-_Pavlo_Golub_18444_22583.png Tower_of_Babel_-_Pavlo_Golub_22584_22811.png Tower_of_Babel_-_Pavlo_Golub_22812_23387.png Tower_of_Babel_-_Pavlo_Golub_23388_24227.png Tower_of_Babel_-_Pavlo_Golub_24228_24311.png Tower_of_Babel_-_Pavlo_Golub_24312_24743.png Tower_of_Babel_-_Pavlo_Golub_24744_24923.png Tower_of_Babel_-_Pavlo_Golub_24924_26051.png Tower_of_Babel_-_Pavlo_Golub_26052_26147.png Tower_of_Babel_-_Pavlo_Golub_26148_26447.png Tower_of_Babel_-_Pavlo_Golub_26448_26663.png Tower_of_Babel_-_Pavlo_Golub_26664_26807.png Tower_of_Babel_-_Pavlo_Golub_26808_27479.png Tower_of_Babel_-_Pavlo_Golub_27480_27707.png Tower_of_Babel_-_Pavlo_Golub_27708_27803.png Tower_of_Babel_-_Pavlo_Golub_27804_28187.png Tower_of_Babel_-_Pavlo_Golub_28188_28331.png Tower_of_Babel_-_Pavlo_Golub_28332_28679.png Tower_of_Babel_-_Pavlo_Golub_28680_29435.png Tower_of_Babel_-_Pavlo_Golub_29436_30407.png Tower_of_Babel_-_Pavlo_Golub_30408_33815.png Tower_of_Babel_-_Pavlo_Golub_33816_33923.png Tower_of_Babel_-_Pavlo_Golub_33924_35471.png Tower_of_Babel_-_Pavlo_Golub_35472_35939.png Tower_of_Babel_-_Pavlo_Golub_35940_37211.png Tower_of_Babel_-_Pavlo_Golub_37212_37259.png Tower_of_Babel_-_Pavlo_Golub_37260_37343.png Tower_of_Babel_-_Pavlo_Golub_37344_37403.png Tower_of_Babel_-_Pavlo_Golub_37404_37499.png Tower_of_Babel_-_Pavlo_Golub_37500_45995.png Tower_of_Babel_-_Pavlo_Golub_45996_47411.png Tower_of_Babel_-_Pavlo_Golub_47412_47651.png Tower_of_Babel_-_Pavlo_Golub_47652_50387.png Tower_of_Babel_-_Pavlo_Golub_50388_50879.png Tower_of_Babel_-_Pavlo_Golub_50880_51803.png Tower_of_Babel_-_Pavlo_Golub_51804_51935.png Tower_of_Babel_-_Pavlo_Golub_51936_52031.png Tower_of_Babel_-_Pavlo_Golub_52032_52163.png Tower_of_Babel_-_Pavlo_Golub_52164_52403.png Tower_of_Babel_-_Pavlo_Golub_52404_65735.png Tower_of_Babel_-_Pavlo_Golub_65736_66935.png Tower_of_Babel_-_Pavlo_Golub_66936_68543.png Tower_of_Babel_-_Pavlo_Golub_68544_68785.png