Untranslated Pages

Last modified by Vincent Massol on 2021/03/18 11:28

cogLists documents that don't have translations
TypeSnippet
Category
Developed by

xwiki:XWiki.JeanCouteau

Rating
0 Votes
LicenseGNU Lesser General Public License 2.1

Table of contents

Description

Displays all the pages of the Wiki that don't have translations (except those from the XWiki, Scheduler and Panels Spaces).

It is very useful when you work on a multilingual wiki and you want to keep a default language up-to-date (people might add pages in their language and not translate them in the default language).

##GET THE BASE LANGUAGE YOU WANT TO CHECK

#set($baselanguage=$request.get("baselanguage"))

##FORM TO SET THE BASE LANGUAGE
<FORM method=GET action=$doc.getURL()>
Select base language : <SELECT name="baselanguage" onchange='this.form.submit()'>
<OPTION VALUE=></OPTION>
<OPTION VALUE="en">English</OPTION>
<OPTION VALUE="fr">Français</OPTION>
<OPTION VALUE="es">Castellano</OPTION>
</SELECT>
<INPUT type=submit value ="Select">
</FORM>

##GET ALL THE DOCUMENTS
#set($documents=$xwiki.searchDocuments(""))

##RUN THROUGH THE DOCUMENTS
#foreach($item in $documents)
 ##REMOVE ALL DOCUMENTS THAT ARE IN XWiki, Scheduler OR Panels SPACE
 #if(($xwiki.getDocument($item).getSpace()!="XWiki")&&($xwiki.getDocument($item).getSpace()!="Scheduler")&&($xwiki.getDocument($item).getSpace()!="Panels"))
   #set($defaultlanguage=$xwiki.getDocument($item).getDefaultLanguage())
   ##LOOK ONLY THROUGH THE DOCUMENTS THAT DO NOT HAVE THE DEFAULT LANGUAGE EQUALS TO THE CHECKED LANGUAGE
   #if($defaultlanguage!=$baselanguage)
     #set($translations=$xwiki.getDocument($item).getTranslationList())
     #set($untranslated="false")
     #foreach($language in $translations)
       #if($language==$baselanguage)
         #set($untranslated="true")
       #end
     #end
     #if($untranslated=="false")
       ##IF THE LANGUAGE IS NOT INTO THE AVAILABLE TRANSLATIONS AND IS NOT THE DEFAULT LANGUAGE, DISPLAY A LINK TO THE DOCUMENT
      * [$item]
     #end
   #end
 #end
#end

A more efficient version using nested queries, might not work on all databases:

<form method="get" action="$doc.getURL()">
<fieldset>
<select name="baseLanguage" onchange='this.form.submit()'>
 <option value="">Select language to check</option>
 <option value="en">English</option>
 <option value="fr">Français</option>
 <option value="es">Castellano</option>
</select>
<input type=submit value="Select"/>
</fieldset>
</form>

#set($baseLanguage = "$!request.get('baseLanguage')")
#if($baseLanguage != '')
 #foreach($d in $xwiki.searchDocuments("where doc.translation = 0 and doc.defaultLanguage <> '$baseLanguage' and doc.fullName not in (select d2.fullName from XWikiDocument d2 where d2.translation = 1 and d2.language = '$baseLanguage') and doc.space not in ('XWiki', 'Scheduler', 'Panels', 'Blog')"))
  * [$d]
 #end
#end
Tags: localization
     

Get Connected