{"id":8120,"date":"2014-12-16T05:55:29","date_gmt":"2014-12-16T13:55:29","guid":{"rendered":"http:\/\/localhost\/exoblog\/?p=8120"},"modified":"2023-06-05T16:49:47","modified_gmt":"2023-06-05T14:49:47","slug":"developing-juzu-portlets-step-6-let-the-whole-world-create-new-secrets","status":"publish","type":"post","link":"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-6-let-the-whole-world-create-new-secrets\/","title":{"rendered":"Developing Juzu portlets \u2013 Step 6: Let the whole world create new secrets"},"content":{"rendered":"<p><a href=\"\/blog\/wp-content\/uploads\/2014\/12\/06-Juzu-tutorial-series.jpg\"><img decoding=\"async\" loading=\"lazy\" src=\"\/blog\/wp-content\/uploads\/2014\/12\/06-Juzu-tutorial-series.jpg\" alt=\"06-Juzu-tutorial-series\" width=\"650\" height=\"220\" class=\"aligncenter size-full wp-image-8127\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/06-Juzu-tutorial-series.jpg 650w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/06-Juzu-tutorial-series-300x102.jpg 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/06-Juzu-tutorial-series-500x169.jpg 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/06-Juzu-tutorial-series-360x122.jpg 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/06-Juzu-tutorial-series-200x68.jpg 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/06-Juzu-tutorial-series-100x34.jpg 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/06-Juzu-tutorial-series-70x24.jpg 70w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><\/a><\/p>\n<p><em>Previous steps:<br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/learn-how-to-develop-great-juzu-portlets-for-exo-platform\/\">Learn how to develop great Juzu portlets for eXo Platform!<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-2-viewing-and-posting-secrets\/\">Step 2: viewing and posting secrets<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-3-building-a-sexy-secret-wall\">Step 3: Building a sexy secret wall<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-4-adding-likes-and-comments-for-secret\/\">Step 4: adding Likes and Comments for Secret<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-5-saving-secrets-in-the-jcr\/\">Step 5: Saving Secrets in the JCR<\/a><\/em><\/p>\n<p>We are close to the end, guys. In this step, we will make our JuZcret portlet understandable by the <strong>whole world!<\/strong> Ok, for this tutorial we will just manage the <strong>French and Vietnamese languages<\/strong> but when you understand the concept, feel free to add all the languages you want.<br \/>\n<!--more--><\/p>\n<h2>Internationalization and Localization<\/h2>\n<h3>Internationalization<\/h3>\n<p>Internationalization is the process of <strong>developing software<\/strong> whose core design does <strong>not make assumptions based on a language<\/strong>. It means that all messages and labels in the application can be <strong>translated<\/strong> into all <strong>supported languages<\/strong>.<br \/>\n<em>Note: Juzu <strong>supports i18n natively<\/strong> in its core. We just need to modify all the labels in all our templates. Next time, remember to do this as soon you start developing a template.<\/em><\/p>\n<p>Update the <span class=\"navCode\">editMode.gtmpl<\/span> template:<\/p>\n<pre class=\"lang:default decode:true \">#{param name=enableComment\/}\n\n&lt;form action=\"@{JuZcretApplication.enableComment()}\" method=\"POST\" role=\"form\"&gt;\n\t&lt;h5&gt;&amp;{label.configuration}&lt;\/h5&gt;\n\t&lt;input type=\"checkbox\" name=\"enableComment\" &lt;%=enableComment ? \"checked\" : \"\" %&gt;\/&gt;&amp;{label.enableComment}\n\t&lt;button type=\"submit\"&gt;&amp;{label.save}&lt;\/button&gt;\n&lt;\/form&gt;<\/pre>\n<p>The syntax for retrieving an <strong>i18nized message<\/strong> is <span class=\"navCode\">&amp;{label}<\/span>. For instance we\u2019ve replaced <span class=\"navCode\">&lt;h5&gt;Configuration&lt;\/h5&gt;<\/span> with <span class=\"navCode\">&lt;h5&gt;&amp;{label.configuration}&lt;\/h5&gt;<\/span>.<\/p>\n<p>We need to do this for all the labels in all <strong>JuZcret templates<\/strong>:<\/p>\n<p><span class=\"navCode\">addsecret.gtmpl<\/span>:<\/p>\n<pre class=\"lang:default decode:true \">&lt;div class=\"secret-wall-container\"&gt;\n\t&lt;div class=\"secret-wall-heading\"&gt;\n\t\t&lt;div class=\"row-fluid\"&gt;\n\t\t\t&lt;div class=\"span6\"&gt;\n\t\t\t\t&lt;h3 class=\"title\"&gt;JuZcret Portlet&lt;\/h3&gt;\n\t\t\t&lt;\/div&gt;\n\t\t\t&lt;div class=\"span6 text-right\"&gt;\n\t\t\t\t&lt;a class=\"btn btn-primary\" href=\"@{JuZcretApplication.index()}\" role=\"button\"&gt;&amp;{label.secretWall}&lt;\/a&gt;\n\t\t\t&lt;\/div&gt;\n\t\t&lt;\/div&gt;\n\t&lt;\/div&gt;\n\t&lt;div class=\"text-center\"&gt;\n\t\t&lt;div class=\"uiBox share-secret-box\"&gt;\n\t\t\t&lt;h4 class=\"title\"&gt;&amp;{label.shareSecret}&lt;\/h4&gt;\n\t\t\t&lt;div class=\"uiContentBox\"&gt;\n\t\t\t\t&lt;form class=\"share-secret-form\" action=\"@{JuZcretApplication.addSecret()}\" method=\"POST\" role=\"form\"&gt;\n\t\t\t\t\t&lt;div class=\"control-group\"&gt;\n\t\t\t\t\t\t&lt;label class=\"control-label\" for=\"mySecret\"&gt;&amp;{label.mySecret}:&lt;\/label&gt;\n\t\t\t\t\t\t&lt;div class=\"controls\"&gt;\n\t\t\t\t\t\t\t&lt;textarea id=\"mySecret\" rows=\"3\" name=\"msg\" placeholder=\"&amp;{label.writeSecret}\"&gt;&lt;\/textarea&gt;\n\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t&lt;div class=\"control-group\"&gt;\n\t\t\t\t\t\t&lt;label class=\"control-label\" for=\"secrImgUrl\"&gt;&amp;{label.img}:&lt;\/label&gt;\n\t\t\t\t\t\t&lt;div class=\"controls\"&gt;\n\t\t\t\t\t\t\t&lt;input type=\"text\" id=\"secrImgUrl\" name=\"imgURL\" placeholder=\"\"&gt;\n\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t&lt;div class=\"control-group mgB0\"&gt;\n\t\t\t\t\t\t&lt;div class=\"controls text-center\"&gt;\n\t\t\t\t\t\t\t&lt;button type=\"submit\" class=\"btn btn-primary\"&gt;&amp;{label.share}&lt;\/button&gt;\n\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t&lt;\/form&gt;\n\t\t\t&lt;\/div&gt;\n\t\t&lt;\/div&gt;\n\t&lt;\/div&gt;\n&lt;\/div&gt;<\/pre>\n<p><span class=\"navCode\">secretWall.gtmpl<\/span>:<\/p>\n<pre class=\"lang:default decode:true \">#{param name=secretsList\/}\n#{param name=enableComment\/}\n\n&lt;div class=\"secret-wall-container\"&gt;\n\t&lt;div class=\"secret-wall-heading\"&gt;\n\t\t&lt;div class=\"row-fluid\"&gt;\n\t\t\t&lt;div class=\"span6\"&gt;\n\t\t\t\t&lt;h3 class=\"title\"&gt;JuZcret Portlet&lt;\/h3&gt;\n\t\t\t&lt;\/div&gt;\n\n\t\t\t&lt;div class=\"span6 text-right\"&gt;\n\t\t\t\t&lt;a class=\"btn btn-primary\" href=\"@{ JuZcretApplication.addSecretForm()}\" role=\"button\"&gt;&amp;{label.shareSecret}&lt;\/a&gt;\n\t\t\t&lt;\/div&gt;\n\t\t&lt;\/div&gt;\n\t&lt;\/div&gt;\n\t&lt;ul class=\"secret-wall-list clearfix\"&gt;\n\t\t&lt;% secretsList.each { secret -&gt; %&gt;\n\t\t&lt;li class=\"secret\" data-secretId=\"${secret.id}\"&gt;\n\t\t\t&lt;div class=\"secret-image\" style=\"background-image: url('${secret.imageURL}')\"&gt;\n\n\t\t\t\t&lt;div class=\"secret-mesage\"&gt;${secret.message}&lt;\/div&gt;\n\n\t\t\t\t&lt;div class=\"secret-action\"&gt;\n\t\t\t\t\t&lt;a class=\"btn-like secr-toggle-link toggle-like-comment\" href=\"#\"&gt;\n\t\t\t\t\t\t&lt;i class=\"uiIconThumbUp uiIconWhite\"&gt;&lt;\/i&gt;&lt;span class=\"numb\"&gt;&lt;\/span&gt;\n\t\t\t\t\t&lt;\/a&gt;\n                    &lt;a class=\"btn-popup-comment secr-toggle-link toggle-write-comment\" href=\"#\"&gt;\n                    \t&lt;i class=\"uiIconComment uiIconWhite\"&gt;&lt;\/i&gt;&lt;span class=\"numb\"&gt;&lt;\/span&gt;\n\t\t\t\t\t&lt;\/a&gt;\n\t\t\t\t&lt;\/div&gt;\n\n\t\t\t\t&lt;div class=\"popover popover-secret fade top\"&gt;\n\t\t\t\t\t&lt;button class=\"closePopover close\" type=\"button\"&gt;&amp;times;&lt;\/button&gt;\n\t\t\t\t\t&lt;div class=\"arrow\"&gt;&lt;\/div&gt;\n\n\t\t\t\t\t&lt;div class=\"popover-content\"&gt;\n\t\t\t\t\t\t&lt;div class=\"secr-comments-box\"&gt;\n\t\t\t\t\t\t\t&lt;ul class=\"secr-comments-list\"&gt;\n\t\t\t\t\t\t\t\t&lt;% secret.getComments().each { comment -&gt; %&gt;\n\t\t\t\t\t\t\t\t&lt;li&gt;&lt;!--Add class .open-popover to display popover --&gt;\n\t\t\t\t\t\t\t\t\t&lt;div class=\"media\"&gt;\n\t\t\t\t\t\t\t\t\t\t&lt;a class=\"pull-left\" href=\"https:\/\/localhost:8080\/portal\/intranet\/profile\/${comment.userId}\"&gt;\n\t\t\t\t\t\t\t\t\t\t\t&lt;img src=\"https:\/\/localhost:8080\/social-resources\/skin\/images\/ShareImages\/UserAvtDefault.png\" alt=\"avatar\"&gt;\n\t\t\t\t\t\t\t\t\t\t&lt;\/a&gt;\n\n\t\t\t\t\t\t\t\t\t\t&lt;div class=\"media-body\"&gt;\n\t\t\t\t\t\t\t\t\t\t\t&lt;div&gt;\n\t\t\t\t\t\t\t\t\t\t\t\t&lt;a class=\"cm-user-name\" href=\"https:\/\/localhost:8080\/portal\/intranet\/profile\/${comment.userId}\"&gt;${comment.userId}&lt;\/a&gt; &lt;span class=\"cm-time\"&gt;${comment.createdDate}&lt;\/span&gt;\n\t\t\t\t\t\t\t\t\t\t\t&lt;\/div&gt;\n\n\t\t\t\t\t\t\t\t\t\t\t&lt;div class=\"cm-content\"&gt;${comment.content}&lt;\/div&gt;\n\t\t\t\t\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t\t\t\t&lt;\/li&gt;\n\t\t\t\t\t\t\t\t&lt;% } %&gt;\n\t\t\t\t\t\t\t&lt;\/ul&gt;\n\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t\t&lt;div class=\"secr-create-comment clearfix\"&gt;\n\t\t\t\t\t\t\t&lt;button class=\"btn-comment btn btn-primary pull-right\"&gt;&amp;{label.comment}&lt;\/button&gt;\n\n\t\t\t\t\t\t\t&lt;div class=\"secr-write-comment \"&gt;\n\t\t\t\t\t\t\t\t&lt;div class=\"inner\"&gt;\n\t\t\t\t\t\t\t\t\t&lt;div class=\"media\"&gt;\n\t\t\t\t\t\t\t\t\t\t&lt;a href=\"#\" class=\"pull-left\"&gt;\n\t\t\t\t\t\t\t\t\t\t\t&lt;img src=\"https:\/\/localhost:8080\/social-resources\/skin\/images\/ShareImages\/UserAvtDefault.png\" alt=\"avatar\"&gt;\n\t\t\t\t\t\t\t\t\t\t&lt;\/a&gt;\n\n\t\t\t\t\t\t\t\t\t\t&lt;div class=\"media-body\"&gt;\n\t\t\t\t\t\t\t\t\t\t\t&lt;textarea name=\"comment\" class=\"secret-add-comment\" placeholder=\"&amp;{label.addComment}\"&gt;&lt;\/textarea&gt;\n\t\t\t\t\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t\t&lt;\/div&gt;\n\t\t\t\t&lt;\/div&gt;\n\t\t\t&lt;\/div&gt;\n\t\t&lt;\/li&gt;\n\t\t&lt;% } %&gt;\n\t&lt;\/ul&gt;\n&lt;\/div&gt;<\/pre>\n<p>That\u2019s it for internationalizing the templates.<\/p>\n<p>Now, how can I manage the translation of <span class=\"navCode\">&amp;{label.configuration}<\/span>?<br \/>\nIt\u2019s very <strong>simple and easy in Juzu<\/strong>. You just need to configure the path of your bundle in the <span class=\"navCode\">portlet.xml<\/span> and then create a Java resource bundle file (*.properties or *.xml) per language.<\/p>\n<p>So, first update the portlet.xml file in the <span class=\"navCode\">src\/main\/webapp\/WEB-INF<\/span> folder:<\/p>\n<pre class=\"lang:default decode:true \">&lt;portlet-app&gt;\n\t&lt;portlet&gt;\n\t\t&lt;portlet-name&gt;JuzcretApplication&lt;\/portlet-name&gt;\n\t\t[...]\n\t\t&lt;\/supports&gt;\n\t\t&lt;resource-bundle&gt;locale.portlet.juzcret&lt;\/resource-bundle&gt;\n\t\t&lt;portlet-info&gt;\n\t\t[...]\n\t&lt;\/portlet&gt;\n&lt;\/portlet-app&gt;<\/pre>\n<p>The <strong>resource bundle<\/strong> tells the portlet container to find the resource bundle files in <span class=\"navCode\">\/locale\/portlet\/juzcret_*.properties<\/span>.<\/p>\n<h3>Localization<\/h3>\n<p>Localization is the process of <strong>customizing an app for a particular language<\/strong>. That includes <strong>translating<\/strong> the labels and messages into that <strong>language<\/strong>.<br \/>\nIn this tutorial, we will limit support to French and Vietnamese.<\/p>\n<p>Add the resource bundle files to this path <span class=\"navCode\">\/src\/main\/resources\/locale\/portlet\/<\/span>, as declared in <span class=\"navCode\">portlet.xml<\/span>:<\/p>\n<p><span class=\"navCode\">juzcret.properties<\/span> for the default language (English in eXo Platform)<\/p>\n<pre class=\"lang:default decode:true \">label.addComment=Add your comment\nlabel.shareSecret=Share my secret\nlabel.configuration=Configuration\nlabel.enableComment=Enable Comment\nlabel.save=Save\nlabel.mySecret=My secret\nlabel.writeSecret=Write your secret here\nlabel.img=Image URL\nlabel.share=Share\nlabel.comment=Comment\nlabel.secretWall=Secret Wall<\/pre>\n<p><span class=\"navCode\">juzcret_vi.properties<\/span> for Vietnamese<\/p>\n<pre class=\"lang:default decode:true \">label.shareSecret=Chia s\\u1EBB b\\u00ED m\\u1EADt\nlabel.configuration=C\\u1EA5u h\\u00ECnh\nlabel.enableComment=Cho ph\\u00E9p b\\u00ECnh lu\\u1EADn\nlabel.save=L\\u01B0u\nlabel.mySecret=B\\u00ED m\\u1EADt c\\u1EE7a t\\u00F4i\nlabel.writeSecret=Vi\\u1EBFt b\\u00ED m\\u1EADt \\u1EDF \\u0111\\u00E2y\nlabel.img=\\u0110\\u01B0\\u1EDDng d\\u1EABn \\u1EA3nh\nlabel.share=Chia s\\u1EBB\nlabel.secretWall=T\\u01B0\\u1EDDng b\\u00ED m\\u1EADt\nlabel.addComment=Th\\u00EAm b\\u00ECnh lu\\u1EADn\nlabel.comment=B\\u00ECnh lu\\u1EADn<\/pre>\n<p><span class=\"navCode\">juzcret_fr.properties<\/span> for French<\/p>\n<pre class=\"lang:default decode:true \">label.shareSecret=Partager mon secret\nlabel.configuration=Configuration\nlabel.enableComment=Activer les commentaires\nlabel.save=Sauvegarder\nlabel.mySecret=Mon secret\nlabel.writeSecret=Ecrit ton secret ici\nlabel.img=URL de l'image\nlabel.share=Partager\nlabel.secretWall=Mur des secrets\nlabel.addComment=Ajouter votre commentaire\nlabel.comment=Ajouter<\/pre>\n<p>That\u2019s all.<br \/>\nRecompile and deploy JuZcret eXo Platform as explained in a previous step of this tutorial:<\/p>\n<pre class=\"lang:default decode:true \">$ mvn clean install<\/pre>\n<p>Copy and paste the war file (i.e., <em>replace the old one<\/em>) in the web app folder of eXo Platform, start the server and open the JuZcret page created in step 1.<\/p>\n<p>Now you can share secrets in Vietnamese:<\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese.png\"><img decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese.png\" alt=\"1-add-secret-vietnamese\" width=\"650\" class=\"aligncenter size-full wp-image-8121\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese.png 1280w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-300x188.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-1024x640.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-768x480.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-1250x781.png 1250w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-720x450.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-500x313.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-360x225.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-200x125.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-100x63.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/12\/1-add-secret-vietnamese-48x30.png 48w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<p>or look at the secret wall and add comments in French:<\/p>\n<p><a href=\"\/blog\/wp-content\/uploads\/2014\/12\/2-secret-wall-french.png\"><img decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/2014\/12\/2-secret-wall-french.png\" alt=\"2-secret-wall-french\" width=\"650\" class=\"aligncenter size-medium wp-image-8122\"><\/a><\/p>\n<p>So, here we are. We have an <strong>international JuZcret application<\/strong> ready for sharing secrets with people all around the world.<\/p>\n<p>Hum, do you think that we forgot to do some important things during the steps? Let\u2019s fix this in <a href=\"https:\/\/github.com\/juzu\/juzu\/blob\/update-doc-1.0.0-cr1\/doc\/tutorial-portlet\/guide\/src\/main\/asciidoc\/step7.adoc\" target=\"_blank\" rel=\"noopener\">the last step<\/a>.<\/p>\n<p><em>The final source of step 6 is available for <a href=\"https:\/\/github.com\/juzu\/portlet-tutorial\/tree\/step-6\/tutorial-juzcret\" target=\"_blank\" rel=\"noopener\">downloading from GitHub<\/a>.<\/em><\/p>\n<p><em>Previous and next steps:<br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/learn-how-to-develop-great-juzu-portlets-for-exo-platform\/\">Learn how to develop great Juzu portlets for eXo Platform!<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-2-viewing-and-posting-secrets\/\">Step 2: viewing and posting secrets<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-3-building-a-sexy-secret-wall\/\">Step 3: Building a sexy secret wall<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-4-adding-likes-and-comments-for-secret\/\">Step 4: adding Likes and Comments for Secret<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-5-saving-secrets-in-the-jcr\/\">Step 5: Saving Secrets in the JCR<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-6-let-the-whole-world-create-new-secrets\/\">Step 6: Let the whole world create new secrets<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.exoplatform.com\/blog\/developing-juzu-portlets-step-7-finishing-the-job-properly-with-unit-test\/\">Step 7: Finishing the job properly with unit test<\/a><\/em><\/p>\n<p><b><a href=\"https:\/\/community.exoplatform.com\/portal\/dw\/\" target=\"_blank\" rel=\"noopener\">Join the eXo tribe<\/a> by registering for the community and get updates, tutorials, support, and access to the Platform and add-on downloads!<\/b><\/p>\n<p><!--begin adv-events--><\/p>\n<div class=\"adv-events\" style=\"background: #476fad;padding: 30px 20px;color: white\">\n<div class=\"media\">\n<div class=\"pull-right\"><a href=\"#\"><br \/>\n<img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-6587 alignright\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/02\/how-to-make-the-most-of-eXo-platform41.png\" alt=\"make-the-most-out-of-eXo-platform4\" width=\"161\" height=\"85\"><br \/>\n<\/a><\/div>\n<div class=\"media-body\">\n<h4 class=\"media-heading\">Make the most out of eXo Platform 4<\/h4>\n<p>Register to the next webinar and get a complete overview of what you can do with eXo Platform 4. <strong><a href=\"https:\/\/www.exoplatform.com\/contact-us\/\">Reserve your seat now!<\/a><\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!--end adv-events--><\/p>\n","protected":false},"excerpt":{"rendered":"Previous steps: &#8211; Learn how to develop great Juzu portlets for eXo Platform! &#8211; Step 2: viewing and posting secrets &#8211; Step 3: Building a sexy secret wall &#8211; Step 4: adding Likes and Comments for Secret &#8211; Step 5: Saving Secrets in the JCR We are close to the end, guys. In this step, [&hellip;]","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[699],"tags":[],"lang":"en","translations":{"en":8120},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/8120"}],"collection":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/comments?post=8120"}],"version-history":[{"count":0,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/8120\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media?parent=8120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/categories?post=8120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/tags?post=8120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}