From 01bbaeb763d74b269053383e7c8c8c2410841ddc Mon Sep 17 00:00:00 2001 From: Amigo <49749100+aamigo@users.noreply.github.com> Date: Fri, 21 Jun 2019 16:34:36 +0200 Subject: [PATCH] Updated 035 Translation Mananger in JCB explained (markdown) --- 035-Translation-Mananger-in-JCB-explained.md | 54 +++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/035-Translation-Mananger-in-JCB-explained.md b/035-Translation-Mananger-in-JCB-explained.md index c7cc5c6..0f79e77 100644 --- a/035-Translation-Mananger-in-JCB-explained.md +++ b/035-Translation-Mananger-in-JCB-explained.md @@ -1 +1,53 @@ -Hi everyone We again have a great announcement to make [00:00:06](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h00m06s) JCB has again been expanded To now include a language translation Feature We are very grateful one of the contributors have Extended the code base for this We obviously Working together to insure that it remains stable Those of you that been following The process on GitHub [00:00:34](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h00m34s) Will know that As much time and effort Put into this So I would like to give you a quick explanation Of how this will work those of you that are already using JCB or ACB depends on We are asking ACB Advanced Component Builder JCB Joomla component Builder It is Actually a English component [00:01:00](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h01m00s) And It builds the English Language file for you So every where in your fields When you create a field There are areas in the in the field That says that it's translatable Translatable not translatable translatable And if you enter those values here JCB on the fly would take this description for example [00:01:33](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h01m33s) and will convert it into a language placeholder and will add it to the language file The English language file The British one Now This is all being done automatically For every area of the JCB Compiler Even in templates and views That's now your front end [00:01:56](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h01m56s) If you create you know site views And even templates and layouts You can Just adding These placeholders these Jtext with the actual English language string in it Then the passer will automatically grab that text and add it to the language file So So currently JCB is building A complete English [00:02:25](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h02m25s) Language File for you And that means it's Already able to translate it But it has not had the feature for you to add Multiple other languages And so that is really what has been the request The request is Isn't there a way we could [00:02:46](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h02m46s) Actually Translate This language strings And then when JCB compiles the component it will automatically add these other languages And so The The suggestion was That we basically Add an area where you can Create as many languages as you like Obviously in accordance with the conventions [00:03:10](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h03m10s) Your language tags Need to be in in accordance with the correct prefixes used in Joomla So I think we could add a link here Maybe on this page some point just to take you somewhere where you can find all the information to To use the correct Tagging For your language file And here you could obviously add the language name So you can create as many languages as you like [00:03:39](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h03m39s) Then When you compile a component JCB obviously like I have explained Grabs all the strings from everywhere And Adds to the British English translation file now let me show you some of that Happening in the code So here in the Get Class We have a function called setLangStrings [00:04:07](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m07s) It basically gets the content from wherever JCB is handing it And it parses it To see whether it has Either this language string or that one Then it does some gymnastics here to grab all the actual strings into an array then it parses this array Once it has it And it converts it To a language string And it adds it back [00:04:34](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m34s) Into the content and returns the content and then With this We call it an object array It is adding the language string And the language key To the langContent array So that's a first thing we have this langContent array It's all over the place and it just gets bulkier and bulkier Now the lang is basically the target [00:05:04](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m04s) It's the area Which this lang strings belong to either the site or the Cite system or the admin or the admin system area So there are four areas where the site this language string all there is also such a thing as both While JCP compiles Some strings he knows must go to both And this is the actual language string be capitalised string Which is generated up here And [00:05:34](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m34s) This is then I trimmed and placed in it's place Now this array Gets Placed into the files at a certain Point That point is very much at the very end of the compilation of course when everything is being sort of Done We actually get to the place where [00:05:58](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m58s) We gonna now add two strings to the files So first we are basically Calling a function called setLangAdmin setLangSys basically This is in the interpreter You can see these these methods are here setLangSite Here is setLangAdmin Basically adds a bunch of strings that are default always being added And then Also all the other strings have been built And then [00:06:37](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h06m37s) Moves them over to a string called language And obviously the British English and it's for the admin area And so it does for all the various areas And in the infusion class it brings it together And then we grab the values of this strings We added to our value array And we basically Have the old multi language implementation running down From here from line 197 [00:07:09](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h07m09s) We start running into the multi language string implementation Now what does this do Basically It queries the database To see whether there is such a English language string in the database And whether there is been any translations made for it So doesn't really use the place holders Because the place holders are so ambiguous between various components and our idea was To prevent a very bloated oversized database we must try to share strings amongst Components [00:07:43](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h07m43s) And so currently when you compile a component it Gathers it's English strings like I have explained And then it checks the database whether these English strings already exist in the database And if they do it then checks whether they have Translations already linked to them And if they do Then it starts grabbing that translation strings and adds them To this Language object array Also by tag and by area and then here we are basically parsing this array so by this time [00:08:22](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m22s) Time we ready have all the languages In place and we are now able to put them into the component So It's basically these functions get multiple strings A multi language strings setLangPlaceholders ,purgeLanguageStrings These are the functions That actually does the work So you could go look at these they are all found in the get class the one where everything really starts [00:08:51](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m51s) They are found there and you can look at them they are All their doings are are Obviously open source so you can see Now so that means by the point we get to this line 1109 We already have all the language strings In their various Areas and various languages And we can now start adding them back into the component And that's really what this Part is doing [00:09:19](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m19s) It just adding it into the component So Now let's go back to the user interface to see this in action So I'm gonna compile a component Just any component Let's say this document manager And while I'm compiling it So keep in mind it will be running through And grabbing all the English strings then eventually will check This [00:09:47](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m47s) Language translation table Weather no strings Actually exist And if I do if they've been translated Ok so that's basically as simple as that It compiles it And It does most of the work for you Now the question has been asked What if [00:10:09](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m09s) You've changed some Fields name or some description And now That other description that Old English String Is no longer being used What what then Well at the moment It will basically be purged Now the purging works as follow [00:10:29](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m29s) When it Discovers that is string is no longer being used by a component We can go in the cone and I can show you that Then It basically asks the question Is another component still using it Ok so if more components are using it and if another component is using it It simply removes the current component from the string [00:10:55](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m55s) And then it it goes on , it doesn't Remove it If no other component is using it so let's say No all the component is any longer Linked to the string Then it checks whether there has been any work done in it Has there been translation done I mean it's quite a Huge job to do translation So we figured if you've done it you wouldn't want to just delete it [00:11:22](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h11m22s) So what we will do then As we basically archive The string We move it from the published State Do it archived State so you can go to archives and then there see all the strings that no longer Are actively linked to a component But has translations in it And if it does not have any translation So you've seen it's not link to a component And it does not have translation [00:11:48](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h11m48s) Then we remove the string from the database So these are the two functions to remove the string completely And so it's like it never it was there in the first place And so that is really how The Purge works at the moment it only purges That which really is no longer linked Neither has any work done in it And So That is what's happening at the moment Ok so now if we were to go to this component in JCB So the document manager [00:12:24](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m24s) You see there is a new tab called translation And in this tab it shows you all the English strings Whether it's been having any work done in it so it will say no translation when the work has been done to it And in how many components it's been used So currently Most of these strings as you see are used in quite a few other components And now you can from here Click on any of these strings And It will give you the list of all the components where it's used [00:12:57](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m57s) it show you the string but you cannot edit the string here But you can add translations so here you'll select the language and you will add the translation And you can add as many as you like to the string And Then every one of these components this translation will be Active So That is really how The translation manager works There are two ways to get to the strings the one is like a show you via the component And we are planning [00:13:29](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h13m29s) To add a button here Whereby you can import these and export these strings quite easily so that you could give them to other team members who can then make translations give back to you and you just import them here and then it gets linked automatically So that is still under development It should come out soon within the next......... Let me not give any promises Soon as we have the time And So to make it easier to do these translations [00:14:03](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h14m03s) The other way to get to these translations Is to Simply go to language translations And here you'll find all the components strings together So this could become a database With over 8000 lines I'm suppose But like you see it's working quite well I've already got a lot of components Mapped The ones that you see usually are the ones that are active Which I'm working on I've got quite a few in archive is well [00:14:36](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h14m36s) So the reality is I've been testing this against you know say 8 or 9 components at the same time sharing strings among each other And I expect this feature to become quite powerful Soon as we are able to you know speed up the translation method There is been suggestions that we also Add this feature to a sort of a community area somewhere Where we you can push your English strings there and you can pull Already translated strings from it [00:15:15](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h15m15s) I know this is a great idea but how to manage that so that we don't find people abusing the system are Still under the debate So anyone have any good suggestions please go to GitHub and open a issue and let's start talking Well I hope this is enough explanation On how to do Multiple language implementation on your components in Joomla component Builder I'm quite happy about this new feature I really think it will In the long run Become a very valuable asset [00:15:52](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h15m52s) Anyway Thank you Very much for watching Goodbye +# TRANSLATION MANAGER IN JCB EXPLAINED + + +Hi everyone. We have a great announcement to make. [00:00:06](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h00m06s) JCB has again been expanded to include a language translation feature. We are very grateful for one of the contributors have extended the code base for this. We are working together to insure that it remains stable. Those of you that been following the process on GitHub, [00:00:34](https://www.youtube, translatable..com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h00m34s) will know that as much time and effort put into this. So I would like to give you a quick explanation of how this will work. + +### JCB Builds English File For You + +Those of you that are already using JCB or ACB depends on who you are asking. ACB Advanced Component Builder or JCB Joomla Component Builder. It is a English component [00:01:00](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h01m00s) and it builds the English language file for you. Every where in your fields, when you create a field, there are areas in the field that says that it's translatable, not translatable. + +### Placeholder - Jtext - English Language String + +And if you enter those values here(XML field definition) JCB on the fly would take this description for example [00:01:33](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h01m33s) and will convert it into a language placeholder and will add it to the language file. The English language file, the British one. This is all being done automatically for every area of the JCB compiler. Even in templates and views that's now your front end. [00:01:56](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h01m56s) If you create site views, and even templates and layouts, you can add placeholders, these Jtext with the actual English language string in it. Then the passer will automatically grab that text and add it to the language file. So currently JCB is building a complete English [00:02:25](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h02m25s) Language File for you. It's already able to translate it. But it has not had the feature for you to add multiple other languages. That is really what has been the request. + +### Adding Of Other Languages + +The request is, isn't there a way we could [00:02:46](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h02m46s) translate this language strings, and then when JCB compiles the component, it will automatically add these other languages. The suggestion was that we add an area where you can create as many languages as you like in accordance with the conventions. [00:03:10](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h03m10s) Your language tags need to be in in accordance with the correct prefixes used in Joomla. So I think we could add a link here. Maybe on this page at some point just to take you somewhere where you can find all the information to use the correct tagging for your language file. And here(Name) you could add the language name, you can create as many languages as you like. [00:03:39](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h03m39s) Then when you compile a component, JCB, like I have explained, grabs all the strings from everywhere, and adds them to the British English translation file. + +### Code - Language String + +Let me show you some of what is happening in the code. In the a_Get.php class, we have a function called setLangStrings. [00:04:07](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m07s) It gets the content from wherever JCB is handing it and it parses it to see whether it has either this(sprintf) language string or that one(Jtext). Then it does some gymnastics here to grab all the actual strings into an array. Then it parses this array. Once it has it, and it converts it to a language string, and it adds it back [00:04:34](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m34s) into the content and returns the content. With this, we call it an object array, it is adding the language string, and the language key to the langContent array. So that's a first thing we have this langContent array. It's all over the place and it just gets bulkier and bulkier. Now the lang is basically the target. [00:05:04](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m04s) It's the area which this lang strings belong to either the site or the site system or the admin or the admin system area. There are also such a thing as both while JCB compiles. Some strings he knows must go to both. And this(keyLang) is the actual language string be capitalized string, which is generated up here(see video). [00:05:34](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m34s) I trimmed and placed in it's place. This array gets placed into the files at a certain point. That point is very much at the very end of the compilation when everything is being done. We actually get to the place where [00:05:58](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m58s) we going to add two strings to the files. + +### Adding Strings To The Files + +First we are calling a function called setLangAdmin, setLangSys this is in the interpreter. You can see these methods are here, setLangSite, here is setLangAdmin. Basically adds a bunch of strings that are default always being added. And then also all the other strings have been built. [00:06:37](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h06m37s) Moves them over to a string called language, the British English, and it's for the admin area. It does for all the various areas. In the infusion class, it brings it together. We grab the values of this strings, we add it to our value array. We basically have the old multi language implementation running down from here from line 1097. [00:07:09](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h07m09s) + +### Multi Language String Implementation + +We start running into the multi language string implementation. Now what does this do basically? It queries the database to see whether there is such a English language string in the database. Whether there is been any translations made for it. So it doesn't really use the placeholders. Because the placeholders are so ambiguous between various components and our idea was to prevent a very bloated over sized database, we must try to share strings among components. [00:07:43](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h07m43s) Currently when you compile a component it gathers it's English strings like I have explained, it checks the database whether these English strings already exist in the database, and if they do, it then checks whether they have translations already linked to them. If they do, then it starts grabbing that translation strings and adds them to this Language object array, also by tag and by area and here(see video) we are parsing this array. By this [00:08:22](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m22s) time we already have all the languages in place and we are now able to put them into the component. It's these functions getMultipleLangStrings, setLangPlaceholders, purgeLanguageStrings. These are the functions that actually does the work. So you could go look at these they are all found in the a_Get.php class, the one where everything really starts. [00:08:51](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m51s) They are found there and you can look at them. All their doings are open source you can see. By the point we get to this line 1109, we already have all the language strings in their various areas and various languages. + +### Adding Language Back To Component + +We can now start adding them back into the component. And that's really what this part is doing. [00:09:19](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m19s) It just adding it into the component. Let's go back to the user interface to see this in action. I'm going to compile a component, any component, let's say this document manager. While I'm compiling it, keep in mind it will be running through, and grabbing all the English strings, then eventually will check this [00:09:47](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m47s) Language translation table, whether those strings exist. If they do, they've been translated. It compiles it, and it does most of the work for you. + +### How Purging Works + +The question has been asked: What if [00:10:09](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m09s) you've changed some fields, name or some description, and that other description, that old English string is no longer being used, what then? Well at the moment it will be purged. Now the purging works as follow. [00:10:29](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m29s) When it discovers that a string is no longer being used by a component, we can go in the code and I can show you that. It asks the question: Is another component still using it? If another component is using it, it simply removes the current component from the string [00:10:55](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m55s) and then it goes on, it doesn't remove it. If no other component is using it, let's say no other component is any longer linked to the string, then it checks whether there has been any work done in it? Has there been translation done? It's quite a huge job to do translation, so we figured if you've done it you wouldn't want to delete it. [00:11:22](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h11m22s) + +* ### Move Strings From Published To Archived State + +So what we will do then, as we archive the string, we move it from the published state to the archived state. You can go to archives and then there see all the strings that no longer are actively linked to a component, but has translations in it. If it does not have any translation, as you've seen it's not link to a component and it does not have translation, [00:11:48](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h11m48s) then we remove the string from the database. These are the two functions to remove the string completely. It's like it never was there in the first place. And so that is how the purge works at the moment. It only purges that which is no longer linked, neither has any work done in it. + +### New Translation Tab + +If we were to go to the document manager, in component in JCB, [00:12:24](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m24s) you will see there is a new tab called translation. And in this tab shows you all the English strings whether it's been having any work done in it. It will say no translation when the work has been done to it, and in how many components it's been used. Currently most of these strings are used in quite a few other components. You can from here click on any of these strings and it will give you the list of all the components where it's used. [00:12:57](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h12m57s) It show you the string but you cannot edit the string. You can add translations, you'll select the language and you will add the translation. And you can add as many as you like to the string. Then every one of these components, this translation will be active. So That is really how the translation manager works. + +### Two Ways To Get To The String +* ### Via The Component + +There are two ways to get to the strings. The one is like I show you via the component. We are planning [00:13:29](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h13m29s) to add a button here. Whereby you can import these and export these strings quite easily so that you could give them to other team members who can make translations, give back to you and you just import them here, and then it gets linked automatically. That is still under development. [00:14:03](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h14m03s) + +* ### Go To Language Translations + +The other way to get to these translations is simply to go to language translations. Here you'll find all the components strings together. This could become a database with over 8000 lines. But like you see it's working quite well. I've already got a lot of components mapped. The ones that you see usually are the ones that are active which I'm working on. I've got quite a few in archive as well. [00:14:36](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h14m36s) I've been testing this again, say 8 or 9 components at the same time, sharing strings among each other, and I expect this feature to become quite powerful. As soon as we are able to speed up the translation method. There is been suggestions that we also add this feature to a community area somewhere. Where we you can push your English strings there, and you can pull already translated strings from it. [00:15:15](https://www.youtube.com/watch?v=zzAcVkn_cWU&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h15m15s) I know this is a great idea but how to manage that, so that we don't find people abusing the system are still under the debate. Anyone have any good suggestions please go to GitHub and open a issue and let's start talking. Well I hope this is enough explanation on how to do multiple language implementation on your components in Joomla Component Builder. I'm quite happy about this new feature. I really think it will in the long run become a very valuable asset.