Getting Liferay Journal Localize Content From Java

Liferay store journal article localize content in xml format. Normally we use the velocity to get the data. But how to we get the value from our java code ?




Show sample journal’s xml content
Hide sample journal’s xml content

  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <root default-locale="en_US" available-locales="en_US,fi_FI">
  4.         <dynamic-element instance-id="HThZWrt5"
  5.                          name="title" type="text" index-type="">
  6.  
  7.         <dynamic-content language-id="fi_FI">
  8.                        <![CDATA[lorem ipsum]]>
  9.         </dynamic-content>
  10.  
  11.         <dynamic-content language-id="en_US">
  12.                        <![CDATA[English Title]]>
  13.         </dynamic-content>
  14. </dynamic-element>
  15.  
  16. <dynamic-element instance-id="kPQ0EPt2" name="ingress"
  17.          type="text_area" index-type="">
  18.                    
  19.         <dynamic-content language-id="fi_FI">
  20.                  <![CDATA[<p>FINNISH INGRESS</p>]]>
  21.         </dynamic-content>
  22.  
  23.         <dynamic-content language-id="en_US">
  24.                  <![CDATA[<p>ENGLISH INGRESS</p>]]>
  25.         </dynamic-content>
  26.  </dynamic-element>
  27.        
  28. <dynamic-element instance-id="lLq4bW9T"
  29.         name="image" type="image_gallery" index-type="">
  30.                            
  31.         <dynamic-content language-id="fi_FI">
  32.                          <![CDATA[]]>
  33.         </dynamic-content>
  34.        
  35.         <dynamic-content language-id="en_US">
  36.                          <![CDATA[]]>
  37.         </dynamic-content>
  38.  
  39. </dynamic-element>
  40.  
  41. <dynamic-element instance-id="L2Q0Filu" name="author" type="text" index-type="">
  42.         <dynamic-content language-id="fi_FI">
  43.                <![CDATA[loongest]]>        
  44.         </dynamic-content>
  45.         <dynamic-content language-id="en_US">
  46.                <![CDATA[loongest]]>
  47.         </dynamic-content>
  48. </dynamic-element>     
  49. </root>
  50.  

Getting custom element

Base on the sample journal xml content, if we want to get the localize ingress content. We can used liferay’s portal-kernel package such as SAXReaderUtil to parse the xml and get back the value. but we need to supply the locale.

  1.  
  2. Document document = SAXReaderUtil.read(article.getDefaultLocale());
  3. OR
  4. Document document = SAXReaderUtil.read(article.getContentByLocale(locale));
  5.  

Sample Code

  1.  
  2. import com.liferay.portal.kernel.xml.Document;
  3. import com.liferay.portal.kernel.xml.Node;
  4. import com.liferay.portal.kernel.xml.SAXReaderUtil;
  5. ………..
  6. private String getParseValue(String fieldname, JournalArticle article, String locale)
  7. {
  8.     String value = "";
  9.     try {
  10.          Document document =
  11.                        SAXReaderUtil.read(article.getContentByLocale(locale));
  12.          
  13.          Node node = document.selectSingleNode("/root/dynamic-element[@name='"
  14.                         + fieldname + "']/dynamic-content");
  15.  
  16.          value = node.getText();
  17.     }
  18.     catch(Exception e){
  19.        
  20.         if(log.isErrorEnabled()){
  21.               log.error(e.getMessage());
  22.         }
  23.     }
  24.  
  25.     return value;
  26. }
  27.  

DONE!

You can leave a response, or trackback from your own site.

Leave a Reply

Security Code: