Global gender transformative approaches initiative for women’s land rights
Global gender transformative approaches initiative for women’s land rights BANNER

Global gender transformative approaches initiative for women’s land rights
Global gender transformative approaches initiative for women’s land rights
Access to land and resources and control over them are vital components of women’s empowerment. Land is a critical physical asset, but also has a social role, defining social status and political power and structuring relationships both within and outside the household.
Yet many rural women face significant barriers to enjoying land rights, limiting their ability to fully participate in and equally benefit from profitable economic activities. Restricted access to resources and services, such as land, finance, healthcare, education, market information, agricultural inputs and technology, are compounded by broader systemic barriers. All of which are exacerbated during times conflict, food, economic and environmental crises.
The Global Gender Transformative Approaches initiative for Women’s Land Rights is a global initiative with the overarching goal to promote and strengthen women’s land rights through the integration of gender transformative approaches (GTAs) in rural development interventions in Bangladesh, Colombia, Ethiopia, The Gambia, Kyrgyzstan, Niger and Uganda.
Jointly implemented by IFAD and a consortium comprised of the Center for International Forestry Research and World Agroforestry Centre (CIFOR-ICRAF), the International Food Policy Research Institute (IFPRI) and the Alliance of Bioversity International and the
International Center for Tropical Agriculture (CIAT), the initiative works with selected IFAD projects to enhance the recognition and protection of women’s land rights (WLR) and contribute to the creation of conditions that would enable women’s enjoyment of land rights over time.
The initiative has three main objectives:
- To design and deploy innovative and participatory GTAs that contribute to the increased recognition and protection of WLR in targeted countries.
- To engage key stakeholders at local and national levels to build capacities and ensure that evidence and experiences from country-level pilots inform relevant policy and implementation processes.
- To generate evidence-based recommendations and share best practices for integrating GTAs into IFAD’s global portfolio and advocacy strategy.
Understanding and addressing the institutional barriers women face across different levels is essential both to achieve gender equality and to secure rights and access to land. The three-year initiative (2021-2024), is structured around two components comprising gender analysis and piloting tools, and scaling up the GTA agenda. The initiative will develop and pilot context-appropriate gender transformative approaches to advance the recognition and protection of women’s land rights in different IFAD projects. The initiative team works collaboratively with IFAD project personnel in each country to share, add value and learn from ongoing efforts. Approaches that are useful, appropriate and relevant are being shared to scale up women´s land rights.
Each IFAD project is unique, entailing different phases and timelines of project implementation, approaches to address gender considerations, and issues concerning rights to land and resources. Few focus explicitly on land rights or gender equality, but land and resource tenure rights and gender are underpinning project implementation, offering a variety of entry points for intervention. The initiative uses the different types of projects in order to pull out learnings from the different contexts and promote cross learning.
Gender Transformative Approaches CONTACTS
Contacts


Related stories
Related stories
The potential and unknowns of gender transformative approaches
Related publications
Related publications
Gender transformative approaches for food security, improved nutrition and sustainable agriculture – A compendium of fifteen good practices
Related documents
Related documents
The following has evaluated to null or missing: ==> abstract_text [in template "10154#10192#ABSTRACT_ROW" at line 121, column 52] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${htmlUtil.escape(htmlUtil.extractTex... [in template "10154#10192#ABSTRACT_ROW" at line 121, column 13] ----
1<#assign
2journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
3assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
4groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")
5classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")
6ddmStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService")
7assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
8
9<#assign globalGroup = groupLocalService.getFriendlyURLGroup(companyId, "/global")>
10<#assign destMacroClassId = classNameLocalService.getClassNameId("com.liferay.asset.kernel.model.AssetEntry")>
11<#include "_TEMPLATE_CONTEXT_/${companyId}/${globalGroup.groupId}/${destMacroClassId}/ASSET_ENTRY_MACROS" />
12
13<#assign voc_type = assetVocabularyLocalService.getGroupVocabulary(company.getGroupId(), "Document_type")>
14
15<#assign currentUrl = themeDisplay.getURLCurrent()>
16
17<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(articleGroupId), .vars['reserved-article-id'].data)>
18
19<#assign asset = assetEntryLocalService.getEntry('com.liferay.journal.model.JournalArticle', article.resourcePrimKey)>
20
21<#assign jaClassNameId = classNameLocalService.getClassNameId("com.liferay.journal.model.JournalArticle")>
22<#assign curArticleStructure = ddmStructureLocalService.getStructure(company.getGroupId(), jaClassNameId, article.getStructureId())>
23<#assign structureLocalizedName = curArticleStructure.getName(locale)>
24<#assign structureId = article.getStructureId()?lowerCase>
25
26<#assign leftColumnSize = "col-md-4">
27<#assign rightColumnSize = "col-md-8">
28<#assign abstarct_img_default_class = "abstract-img-publication-land">
29<#assign contentTypeRowClass ="">
30
31<#if structureId == "publication" || structureId == "project">
32 <#assign leftColumnSize = "col-md-2">
33 <#assign rightColumnSize = "col-md-10">
34 <#assign abstarct_img_default_class = "abstract-img-publication-port">
35 <#assign contentTypeRowClass ="publication-row">
36</#if>
37
38<#-- Article URL resolution -->
39
40<#assign articleUrl = renderRequest.getAttribute("viewURL")!"">
41
42<#assign disableSpa = false>
43<#if (abstract_link?? && abstract_link.getData()?hasContent) ||
44 (shorthand_story_url?? && shorthand_story_url.getData()?hasContent)>
45 <#assign disableSpa = true>
46</#if>
47
48<#if (abstract_link?? && abstract_link.getData()?hasContent)>
49 <#assign articleUrl = abstract_link.getData()>
50</#if>
51
52<#if articleUrl == "">
53 <#assign articleUrl =
54 asset.getAssetRenderer().getURLViewInContext(themeDisplay, currentUrl)>
55</#if>
56
57<#assign article_title = resolveArticleTitle(short_title!"", abstract_title!"") />
58
59<div class="row border-bottom abstract-row ${contentTypeRowClass}">
60 <div class="${leftColumnSize} col-xs-12">
61 <#if abstract_icon?hasContent && abstract_icon.getData()?hasContent>
62 <#assign myabstract_icon = abstract_icon.getData()>
63 <#else>
64 <#if locale.getLanguage() != "ar">
65 <#assign myabstract_icon = "/o/ifad-global-theme/images/placeholders/document-icon.png">
66 <#else>
67 <#assign myabstract_icon = "/o/ifad-global-theme/images/placeholders/document-icon-ar.png">
68 </#if>
69 </#if>
70
71 <#if structureId == "project">
72 <img class="img-fluid" src="${myabstract_icon}">
73 <#else>
74 <#if abstract_image_medium?hasContent && abstract_image_medium.getData()?hasContent>
75 <#assign myabstract_image_medium = abstract_image_medium.getData()>
76 <#else>
77 <#assign myabstract_image_medium = "/o/ifad-global-theme/images/placeholders/IFADlogongrey.jpg">
78 </#if>
79 </#if>
80
81 <div class="abstract-img-wrapper">
82 <div class="abstract-img-publication ${abstarct_img_default_class}"
83 style="background-image: url(${myabstract_image_medium})"></div>
84 </div>
85 </div>
86
87 <div class="${rightColumnSize} col-xs-12 abstract-row-content-wrapper">
88 <#if articleUrl != "#">
89 <a href="${articleUrl}" ${disableSpa?then("data-senna-off=\"true\"", "")}>
90 <h3 class="abstract-title-text">${article_title}</h3>
91 </a>
92 <#else>
93 <span>${article_title}</span>
94 </#if>
95
96 <@getAdminMenu asset />
97
98 <#assign publicationDateFormatted = getFormattedDateForAbstractArticle(article, abstract_publication_date!"", locale, "MMMM yyyy") />
99
100 <div class="abstract-row-author">
101 ${publicationDateFormatted}
102 <#if structureId != "publication" && structureId != "generic" &&
103 !currentUrl?contains("videos") && !currentUrl?contains("photos") && !currentUrl?contains("stories")>
104 - ${structureLocalizedName?upperCase}
105 </#if>
106 </div>
107 <div class="abstract-row-categories">
108 <#if structureId == "publication">
109 <#-- TODO Check if that's used anywhere -->
110 <#--<span class="abstract-category">${publicationDateFormatted} ${publication_publisher.getData()}</span>-->
111 <#else>
112 <#list asset.getCategories() as category>
113 <#if category.getVocabularyId() == voc_type.getVocabularyId()>
114 <span class="abstract-category">${category.getName()}</span>
115 </#if>
116 </#list>
117 </#if>
118 </div>
119
120 <div class="abstract-content-text ellipsis-text">
121 ${htmlUtil.escape(htmlUtil.extractText(abstract_text.getData())) }
122 </div>
123
124 <#if structureId == "publication">
125 <#assign langList = {}>
126 <#assign displayLangList = false>
127
128 <#list article.getAvailableLanguageIds() as articleLocale>
129 <#assign langCode = articleLocale?split("_")[0]>
130
131 <#assign localizedUrl =
132 articleUrl?replace("/${locale.getLanguage()}/", "/${langCode}/")>
133 <#assign langList = langList + {"${localeUtil.fromLanguageId(articleLocale).getDisplayLanguage()}": "${localizedUrl}"}>
134
135 <#-- Display full list only if there is at least one non-official language-->
136 <#if langCode != "en" && langCode != "es" && langCode != "fr" && langCode != "ar">
137 <#assign displayLangList = true>
138 </#if>
139 </#list>
140
141 <#if displayLangList>
142 <small class="d-block text-uppercase abstract-row-langs">
143 <span><@liferay.language key="additional-languages" /></span>:
144
145 <#list langList as langName, localizedUrl>
146 <a href="${localizedUrl}">${langName}${langName?hasNext?then(', ','')}</a>
147 </#list>
148 </small>
149 </#if>
150 </#if>
151 </div>
152</div>
The following has evaluated to null or missing: ==> abstract_text [in template "10154#10192#ABSTRACT_ROW" at line 121, column 52] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${htmlUtil.escape(htmlUtil.extractTex... [in template "10154#10192#ABSTRACT_ROW" at line 121, column 13] ----
1<#assign
2journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
3assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
4groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")
5classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")
6ddmStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService")
7assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
8
9<#assign globalGroup = groupLocalService.getFriendlyURLGroup(companyId, "/global")>
10<#assign destMacroClassId = classNameLocalService.getClassNameId("com.liferay.asset.kernel.model.AssetEntry")>
11<#include "_TEMPLATE_CONTEXT_/${companyId}/${globalGroup.groupId}/${destMacroClassId}/ASSET_ENTRY_MACROS" />
12
13<#assign voc_type = assetVocabularyLocalService.getGroupVocabulary(company.getGroupId(), "Document_type")>
14
15<#assign currentUrl = themeDisplay.getURLCurrent()>
16
17<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(articleGroupId), .vars['reserved-article-id'].data)>
18
19<#assign asset = assetEntryLocalService.getEntry('com.liferay.journal.model.JournalArticle', article.resourcePrimKey)>
20
21<#assign jaClassNameId = classNameLocalService.getClassNameId("com.liferay.journal.model.JournalArticle")>
22<#assign curArticleStructure = ddmStructureLocalService.getStructure(company.getGroupId(), jaClassNameId, article.getStructureId())>
23<#assign structureLocalizedName = curArticleStructure.getName(locale)>
24<#assign structureId = article.getStructureId()?lowerCase>
25
26<#assign leftColumnSize = "col-md-4">
27<#assign rightColumnSize = "col-md-8">
28<#assign abstarct_img_default_class = "abstract-img-publication-land">
29<#assign contentTypeRowClass ="">
30
31<#if structureId == "publication" || structureId == "project">
32 <#assign leftColumnSize = "col-md-2">
33 <#assign rightColumnSize = "col-md-10">
34 <#assign abstarct_img_default_class = "abstract-img-publication-port">
35 <#assign contentTypeRowClass ="publication-row">
36</#if>
37
38<#-- Article URL resolution -->
39
40<#assign articleUrl = renderRequest.getAttribute("viewURL")!"">
41
42<#assign disableSpa = false>
43<#if (abstract_link?? && abstract_link.getData()?hasContent) ||
44 (shorthand_story_url?? && shorthand_story_url.getData()?hasContent)>
45 <#assign disableSpa = true>
46</#if>
47
48<#if (abstract_link?? && abstract_link.getData()?hasContent)>
49 <#assign articleUrl = abstract_link.getData()>
50</#if>
51
52<#if articleUrl == "">
53 <#assign articleUrl =
54 asset.getAssetRenderer().getURLViewInContext(themeDisplay, currentUrl)>
55</#if>
56
57<#assign article_title = resolveArticleTitle(short_title!"", abstract_title!"") />
58
59<div class="row border-bottom abstract-row ${contentTypeRowClass}">
60 <div class="${leftColumnSize} col-xs-12">
61 <#if abstract_icon?hasContent && abstract_icon.getData()?hasContent>
62 <#assign myabstract_icon = abstract_icon.getData()>
63 <#else>
64 <#if locale.getLanguage() != "ar">
65 <#assign myabstract_icon = "/o/ifad-global-theme/images/placeholders/document-icon.png">
66 <#else>
67 <#assign myabstract_icon = "/o/ifad-global-theme/images/placeholders/document-icon-ar.png">
68 </#if>
69 </#if>
70
71 <#if structureId == "project">
72 <img class="img-fluid" src="${myabstract_icon}">
73 <#else>
74 <#if abstract_image_medium?hasContent && abstract_image_medium.getData()?hasContent>
75 <#assign myabstract_image_medium = abstract_image_medium.getData()>
76 <#else>
77 <#assign myabstract_image_medium = "/o/ifad-global-theme/images/placeholders/IFADlogongrey.jpg">
78 </#if>
79 </#if>
80
81 <div class="abstract-img-wrapper">
82 <div class="abstract-img-publication ${abstarct_img_default_class}"
83 style="background-image: url(${myabstract_image_medium})"></div>
84 </div>
85 </div>
86
87 <div class="${rightColumnSize} col-xs-12 abstract-row-content-wrapper">
88 <#if articleUrl != "#">
89 <a href="${articleUrl}" ${disableSpa?then("data-senna-off=\"true\"", "")}>
90 <h3 class="abstract-title-text">${article_title}</h3>
91 </a>
92 <#else>
93 <span>${article_title}</span>
94 </#if>
95
96 <@getAdminMenu asset />
97
98 <#assign publicationDateFormatted = getFormattedDateForAbstractArticle(article, abstract_publication_date!"", locale, "MMMM yyyy") />
99
100 <div class="abstract-row-author">
101 ${publicationDateFormatted}
102 <#if structureId != "publication" && structureId != "generic" &&
103 !currentUrl?contains("videos") && !currentUrl?contains("photos") && !currentUrl?contains("stories")>
104 - ${structureLocalizedName?upperCase}
105 </#if>
106 </div>
107 <div class="abstract-row-categories">
108 <#if structureId == "publication">
109 <#-- TODO Check if that's used anywhere -->
110 <#--<span class="abstract-category">${publicationDateFormatted} ${publication_publisher.getData()}</span>-->
111 <#else>
112 <#list asset.getCategories() as category>
113 <#if category.getVocabularyId() == voc_type.getVocabularyId()>
114 <span class="abstract-category">${category.getName()}</span>
115 </#if>
116 </#list>
117 </#if>
118 </div>
119
120 <div class="abstract-content-text ellipsis-text">
121 ${htmlUtil.escape(htmlUtil.extractText(abstract_text.getData())) }
122 </div>
123
124 <#if structureId == "publication">
125 <#assign langList = {}>
126 <#assign displayLangList = false>
127
128 <#list article.getAvailableLanguageIds() as articleLocale>
129 <#assign langCode = articleLocale?split("_")[0]>
130
131 <#assign localizedUrl =
132 articleUrl?replace("/${locale.getLanguage()}/", "/${langCode}/")>
133 <#assign langList = langList + {"${localeUtil.fromLanguageId(articleLocale).getDisplayLanguage()}": "${localizedUrl}"}>
134
135 <#-- Display full list only if there is at least one non-official language-->
136 <#if langCode != "en" && langCode != "es" && langCode != "fr" && langCode != "ar">
137 <#assign displayLangList = true>
138 </#if>
139 </#list>
140
141 <#if displayLangList>
142 <small class="d-block text-uppercase abstract-row-langs">
143 <span><@liferay.language key="additional-languages" /></span>:
144
145 <#list langList as langName, localizedUrl>
146 <a href="${localizedUrl}">${langName}${langName?hasNext?then(', ','')}</a>
147 </#list>
148 </small>
149 </#if>
150 </#if>
151 </div>
152</div>
The following has evaluated to null or missing: ==> abstract_text [in template "10154#10192#ABSTRACT_ROW" at line 121, column 52] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${htmlUtil.escape(htmlUtil.extractTex... [in template "10154#10192#ABSTRACT_ROW" at line 121, column 13] ----
1<#assign
2journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
3assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
4groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")
5classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")
6ddmStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService")
7assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
8
9<#assign globalGroup = groupLocalService.getFriendlyURLGroup(companyId, "/global")>
10<#assign destMacroClassId = classNameLocalService.getClassNameId("com.liferay.asset.kernel.model.AssetEntry")>
11<#include "_TEMPLATE_CONTEXT_/${companyId}/${globalGroup.groupId}/${destMacroClassId}/ASSET_ENTRY_MACROS" />
12
13<#assign voc_type = assetVocabularyLocalService.getGroupVocabulary(company.getGroupId(), "Document_type")>
14
15<#assign currentUrl = themeDisplay.getURLCurrent()>
16
17<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(articleGroupId), .vars['reserved-article-id'].data)>
18
19<#assign asset = assetEntryLocalService.getEntry('com.liferay.journal.model.JournalArticle', article.resourcePrimKey)>
20
21<#assign jaClassNameId = classNameLocalService.getClassNameId("com.liferay.journal.model.JournalArticle")>
22<#assign curArticleStructure = ddmStructureLocalService.getStructure(company.getGroupId(), jaClassNameId, article.getStructureId())>
23<#assign structureLocalizedName = curArticleStructure.getName(locale)>
24<#assign structureId = article.getStructureId()?lowerCase>
25
26<#assign leftColumnSize = "col-md-4">
27<#assign rightColumnSize = "col-md-8">
28<#assign abstarct_img_default_class = "abstract-img-publication-land">
29<#assign contentTypeRowClass ="">
30
31<#if structureId == "publication" || structureId == "project">
32 <#assign leftColumnSize = "col-md-2">
33 <#assign rightColumnSize = "col-md-10">
34 <#assign abstarct_img_default_class = "abstract-img-publication-port">
35 <#assign contentTypeRowClass ="publication-row">
36</#if>
37
38<#-- Article URL resolution -->
39
40<#assign articleUrl = renderRequest.getAttribute("viewURL")!"">
41
42<#assign disableSpa = false>
43<#if (abstract_link?? && abstract_link.getData()?hasContent) ||
44 (shorthand_story_url?? && shorthand_story_url.getData()?hasContent)>
45 <#assign disableSpa = true>
46</#if>
47
48<#if (abstract_link?? && abstract_link.getData()?hasContent)>
49 <#assign articleUrl = abstract_link.getData()>
50</#if>
51
52<#if articleUrl == "">
53 <#assign articleUrl =
54 asset.getAssetRenderer().getURLViewInContext(themeDisplay, currentUrl)>
55</#if>
56
57<#assign article_title = resolveArticleTitle(short_title!"", abstract_title!"") />
58
59<div class="row border-bottom abstract-row ${contentTypeRowClass}">
60 <div class="${leftColumnSize} col-xs-12">
61 <#if abstract_icon?hasContent && abstract_icon.getData()?hasContent>
62 <#assign myabstract_icon = abstract_icon.getData()>
63 <#else>
64 <#if locale.getLanguage() != "ar">
65 <#assign myabstract_icon = "/o/ifad-global-theme/images/placeholders/document-icon.png">
66 <#else>
67 <#assign myabstract_icon = "/o/ifad-global-theme/images/placeholders/document-icon-ar.png">
68 </#if>
69 </#if>
70
71 <#if structureId == "project">
72 <img class="img-fluid" src="${myabstract_icon}">
73 <#else>
74 <#if abstract_image_medium?hasContent && abstract_image_medium.getData()?hasContent>
75 <#assign myabstract_image_medium = abstract_image_medium.getData()>
76 <#else>
77 <#assign myabstract_image_medium = "/o/ifad-global-theme/images/placeholders/IFADlogongrey.jpg">
78 </#if>
79 </#if>
80
81 <div class="abstract-img-wrapper">
82 <div class="abstract-img-publication ${abstarct_img_default_class}"
83 style="background-image: url(${myabstract_image_medium})"></div>
84 </div>
85 </div>
86
87 <div class="${rightColumnSize} col-xs-12 abstract-row-content-wrapper">
88 <#if articleUrl != "#">
89 <a href="${articleUrl}" ${disableSpa?then("data-senna-off=\"true\"", "")}>
90 <h3 class="abstract-title-text">${article_title}</h3>
91 </a>
92 <#else>
93 <span>${article_title}</span>
94 </#if>
95
96 <@getAdminMenu asset />
97
98 <#assign publicationDateFormatted = getFormattedDateForAbstractArticle(article, abstract_publication_date!"", locale, "MMMM yyyy") />
99
100 <div class="abstract-row-author">
101 ${publicationDateFormatted}
102 <#if structureId != "publication" && structureId != "generic" &&
103 !currentUrl?contains("videos") && !currentUrl?contains("photos") && !currentUrl?contains("stories")>
104 - ${structureLocalizedName?upperCase}
105 </#if>
106 </div>
107 <div class="abstract-row-categories">
108 <#if structureId == "publication">
109 <#-- TODO Check if that's used anywhere -->
110 <#--<span class="abstract-category">${publicationDateFormatted} ${publication_publisher.getData()}</span>-->
111 <#else>
112 <#list asset.getCategories() as category>
113 <#if category.getVocabularyId() == voc_type.getVocabularyId()>
114 <span class="abstract-category">${category.getName()}</span>
115 </#if>
116 </#list>
117 </#if>
118 </div>
119
120 <div class="abstract-content-text ellipsis-text">
121 ${htmlUtil.escape(htmlUtil.extractText(abstract_text.getData())) }
122 </div>
123
124 <#if structureId == "publication">
125 <#assign langList = {}>
126 <#assign displayLangList = false>
127
128 <#list article.getAvailableLanguageIds() as articleLocale>
129 <#assign langCode = articleLocale?split("_")[0]>
130
131 <#assign localizedUrl =
132 articleUrl?replace("/${locale.getLanguage()}/", "/${langCode}/")>
133 <#assign langList = langList + {"${localeUtil.fromLanguageId(articleLocale).getDisplayLanguage()}": "${localizedUrl}"}>
134
135 <#-- Display full list only if there is at least one non-official language-->
136 <#if langCode != "en" && langCode != "es" && langCode != "fr" && langCode != "ar">
137 <#assign displayLangList = true>
138 </#if>
139 </#list>
140
141 <#if displayLangList>
142 <small class="d-block text-uppercase abstract-row-langs">
143 <span><@liferay.language key="additional-languages" /></span>:
144
145 <#list langList as langName, localizedUrl>
146 <a href="${localizedUrl}">${langName}${langName?hasNext?then(', ','')}</a>
147 </#list>
148 </small>
149 </#if>
150 </#if>
151 </div>
152</div>