/o//commerce-media/accounts/-1/images/18404467?download=true

Ukrainian Translation
DXP App
Data Modeling, Process & Business Logic
18404418
This is full and fixed Ukrainian translation for Liferay.
DEVELOPER
处理模板时发生错误。
The string doesn't match the expected date/time/date-time format. The string to parse was: "13-8-2 上午12:00". The expected format was: "MM/dd/yy h:mm a".
The nested reason given follows:
Unparseable date: "13-8-2 上午12:00"

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${CPDefinition_displayDate.getData()?...  [in template "3192443#3192485#null" at line 53, column 20]
	~ Reached through: #nested  [in template "3192443#3192485#null" in macro "section" at line 204, column 17]
	~ Reached through: @section title=languageUtil.get(local...  [in template "3192443#3192485#null" at line 49, column 1]
----
1<#assign 
2	channel = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?accountId=-1&filter=name eq 'Marketplace Channel' and siteGroupId eq '${themeDisplay.getScopeGroupId()}'") 
3 
4	product = restClient.get( 
5		"/headless-commerce-delivery-catalog/v1.0/channels/" + channel.items[0].id + 
6		"/products/" + CPDefinition_cProductId.getData() + 
7		"?accountId=-1&nestedFields=categories,productSpecifications,skus&skus.accountId=-1&skus.currencyCode=USD" 
8
9 
10	catalogName = product.catalogName!"" 
11	categories = product.categories![] 
12	productSpecifications = product.productSpecifications![] 
13 
14	liferayVersions = productSpecifications?filter(item -> stringUtil.equals(item.specificationKey, "liferay-version")) 
15	platformOffering = categories?filter(item -> stringUtil.equals(item.vocabulary, "marketplace-liferay-platform-offering")) 
16
17 
18<#assign publisherDetailsResponse = restClient.get("/c/publisherdetailses?filter=publisherName eq '${catalogName}'") /> 
19<#assign redirectPath="https://marketplace.liferay.com/e/publisher-details/29282497"/> 
20 
21<#if publisherDetailsResponse.items?has_content> 
22	<#assign 
23		publisherDetails = publisherDetailsResponse.items[0] 
24		profileImageURL = publisherDetails.publisherProfileImage?replace("https://", "http://") 
25	/> 
26</#if> 
27 
28<#assign 
29	cpuValue = getSpecificationValue("cpu") 
30	developerName = getSpecificationValue("developer-name", catalogName) 
31	publisherURL = (getSpecificationValue("publisherwebsiteurl")?trim?replace(" ", ""))!"" 
32	ramValue = getSpecificationValue("ram") 
33	supportEmail = getSpecificationValue("supportemailaddress") 
34	supportPhone = getSpecificationValue("supportphone") 
35	type = getSpecificationValue("type")?lower_case 
36
37<@section title = languageUtil.get(locale, "developer")> 
38	<#if publisherDetails?has_content> 
39	  <a class="bg-neutral-8" href="${redirectPath}/${publisherDetails.id}"> 
40		   ${developerName} 
41		</a> 
42	<#else> 
43	  <a class="bg-neutral-8" 	href="/?developer-name=${developerName}"> 
44			 ${developerName} 
45		</a> 
46	</#if> 
47</@section> 
48 
49<@section title = languageUtil.get(locale, "publisher-date", "Publisher Date")> 
50	<#setting date_format = "MMMM d, yyyy"> 
51 
52	<#if CPDefinition_displayDate.getData()?has_content> 
53		<p>${CPDefinition_displayDate.getData()?date("MM/dd/yy h:mm a")?string("MMMM d, yyyy")}</p> 
54	</#if> 
55</@section> 
56 
57<@section title = languageUtil.get(locale, "deployment-method", "Deployment Method")> 
58	<#list platformOffering as offering> 
59		<p>${offering.name}</p> 
60	</#list> 
61</@section> 
62 
63<@section title = languageUtil.get(locale, "app-type", "App Type")> 
64 	<#if type == 'client-extension'> Client Extension </#if> 
65 	<#if type == 'cloud'> Cloud </#if> 
66 	<#if type == 'composite-app'> Composite App </#if> 
67 	<#if type == 'dxp'> DXP </#if> 
68 	<#if type == 'low-code-configuration'> Low Code Configuration </#if> 
69</@section> 
70 
71<@section title = languageUtil.get(locale, "version")> 
72	${getSpecificationValue("latest-version", "1.0.0")} 
73</@section> 
74 
75<#if liferayVersions?has_content> 
76	<@section title = languageUtil.get(locale, "supported-versions", "Supported Versions")> 
77		<#list liferayVersions as version> 
78			${version.value}<#if version?has_next>, </#if> 
79		</#list> 
80	</@section> 
81</#if> 
82 
83<#if cpuValue?has_content> 
84	<@section title = languageUtil.get(locale, "resource-requirements", "Resource Requirements")> 
85		<p> 
86			<#if cpuValue?has_content> 
87				${cpuValue} 
88				<#assign cpuNumber = cpuValue?number?default(0) /> 
89				<#if cpuValue?eval gt 1> 
90					CPUS 
91				</#if> 
92				<#if cpuValue?eval lt 2> 
93					CPU 
94				</#if> 
95			</#if>, <#if ramValue?has_content>${ramValue} GB RAM</#if> 
96		</p> 
97	</@section> 
98</#if> 
99 
100<@section title = languageUtil.get(locale, "standard-price", "Standard Price")> 
101	<div> 
102		<#assign purchasableSkus = [] /> 
103 
104		<#list product.skus as sku> 
105			<#if sku.purchasable?? && sku.purchasable> 
106				<#assign purchasableSkus = purchasableSkus + [sku] /> 
107			</#if> 
108		</#list> 
109 
110		<#assign standardSku = {} /> 
111 
112		<#list purchasableSkus as sku> 
113			<#assign matched = false /> 
114 
115			<#list sku.skuOptions as opt> 
116				<#if stringUtil.equals(opt.skuOptionValueKey, "standard")> 
117					<#assign 
118						matched = true 
119						standardSku = sku 
120					/> 
121 
122					<#break> 
123				</#if> 
124			</#list> 
125			<#if matched><#break></#if> 
126		</#list> 
127 
128		<#if standardSku.price?? && standardSku.price.price?eval gt 0> 
129			<div class="bg-neutral-8">${standardSku.price.priceFormatted!""}</div> 
130		<#else> 
131			${languageUtil.get(locale, "free", "Free")} 
132		</#if> 
133	</div> 
134</@section> 
135 
136<@section title = languageUtil.get(locale, "help-and-support", "Help and Support")> 
137	<div class="d-flex flex-column mt-4"> 
138		<div class="d-flex"> 
139			<span class="help-and-support-link-icon"> 
140				<@clay["icon"] symbol="document" /> 
141			</span> 
142 
143			<a class="d-flex w-100 justify-content-between help-and-support-link" href="https://www.liferay.com/en/legal/marketplace-terms-of-service" target="_blank"> 
144				<span class="copy-text ml-1 help-and-support-link"> 
145					${languageUtil.get(locale, "terms-and-conditions", "Terms & Conditions")} 
146				</span> 
147 
148				<@clay["icon"] 
149					className="help-and-support-link-arrow link-arrow ml-auto" 
150					height="12" 
151					symbol="angle-right" 
152				/> 
153			</a> 
154		</div> 
155 
156		<div class="d-flex"> 
157			<span class="help-and-support-link-icon"> 
158				<@clay["icon"] symbol="document" /> 
159			</span> 
160 
161			<a class="d-flex w-100 justify-content-between help-and-support-link" href="javascript:void(0)" onClick="openModal()"> 
162				<span class="copy-text ml-1 help-and-support-link"> 
163					${languageUtil.get(locale, "publisher-contact-info", "Publisher Contact Info")} 
164				</span> 
165 
166				<@clay["icon"] 
167					className="help-and-support-link-arrow link-arrow ml-auto" 
168					height="12" 
169					symbol="angle-right" 
170				/> 
171			</a> 
172		</div> 
173	</div> 
174</@section> 
175 
176<@section 
177	showLine = false 
178	title = languageUtil.get(locale, "share-link") 
179
180	<a class="align-items-center copy-text d-flex font-weight-bold ml-1 text-decoration-none text-primary" href="#copy-share-link" onclick="copyToClipboard(Liferay.ThemeDisplay.getCanonicalURL())"> 
181		<span class="help-and-support-link-icon mr-1"> 
182			<@clay["icon"] symbol="link" /> 
183		</span> 
184		Copy & Share 
185	</a> 
186</@section> 
187 
188<#function getSpecificationValue key default=""> 
189	<#local spec = productSpecifications?filter(productSpecification -> 
190		stringUtil.equals(productSpecification.specificationKey, key)) /> 
191 
192	<#return (spec?first.value)!default /> 
193</#function> 
194 
195<#macro section 
196	title 
197	showLine=true 
198
199	<p> 
200		<strong>${title}</strong> 
201	</p> 
202 
203	<div> 
204		<#nested> 
205	</div> 
206 
207	<#if showLine> 
208		<hr /> 
209	</#if> 
210</#macro> 
211 
212<script ${nonceAttribute}> 
213	function modalBody() { 
214		return ` 
215			<div class="align-items-center d-flex flex-row mb-3"> 
216				<span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;"> 
217					<#if profileImageURL?? && profileImageURL?length gt 0> 
218						<img src="${profileImageURL}" alt="Publisher Image" style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%;" /> 
219					<#else> 
220						<@clay["icon"] 
221							style="fill:#6B6C7E;" 
222							symbol="picture" 
223						/> 
224					</#if> 
225				</span> 
226 
227				<div class="d-flex flex-column"> 
228					<h3 class="font-weight-bold mb-0"> 
229						${catalogName} 
230					</h3> 
231				</div> 
232			</div> 
233 
234			<#if publisherURL?has_content> 
235				<div class="align-items-center d-flex flex-row mb-3"> 
236				<span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;"> 
237						<@clay["icon"] 
238							style="fill:#6B6C7E;" 
239							symbol="globe" 
240						/> 
241					</span> 
242 
243					<div class="d-flex flex-column"> 
244						<span class="text-black-50">${languageUtil.get(locale, "publisher-website", "Publisher Website")}</span> 
245 
246						<a href="${publisherURL}" target="_blank" class="font-weight-bold"> 
247							${publisherURL} 
248						</a> 
249					</div> 
250				</div> 
251			</#if> 
252 
253			<#if supportEmail?has_content> 
254				<div class="align-items-center d-flex flex-row mb-3"> 
255					<span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;"> 
256						<@clay["icon"] style="fill:#6B6C7E;"symbol="envelope-closed" /> 
257					</span> 
258 
259					<div class="d-flex flex-column"> 
260						<span class="text-black-50">${languageUtil.get(locale, "support-email", "Support Email")}</span> 
261 
262						<a class="font-weight-bold" href="mailto:${supportEmail}" target="_blank"> 
263							${supportEmail} 
264						</a> 
265					</div> 
266				</div> 
267			</#if> 
268 
269			<#if supportPhone?has_content> 
270				<div class="d-flex flex-row align-items-center mb-3"> 
271					<span class="align-items-center d-flex justify-content-center modal-icon-background mr-3" style="background: #E2E2E4; border-radius:50%; height:40px; overflow:hidden; width:40px;"> 
272						<@clay["icon"] 
273							style="fill:#6B6C7E;" 
274							symbol="phone" 
275						/> 
276					</span> 
277 
278					<div class="d-flex flex-column"> 
279						<span class="text-black-50">${languageUtil.get(locale, "phone")}</span> 
280 
281						<a class="font-weight-bold" href="tel:${supportPhone}" target="_blank"> 
282							${supportPhone} 
283						</a> 
284					</div> 
285				</div> 
286			</#if> 
287		`; 
288
289 
290	function openModal() { 
291		Liferay.Util.openModal({ 
292			bodyHTML: modalBody(), 
293			center: true, 
294			headerHTML: "<h2>Publisher Support Contact Info</h2>", 
295			size: "md" 
296		}); 
297
298</script> 
299 
300<script ${nonceAttribute}> 
301	function copyToClipboard(text) { 
302		if (navigator && navigator.clipboard && navigator.clipboard.writeText) { 
303			navigator.clipboard.writeText(text); 
304 
305			Liferay.Util.openToast({ message: "Copied link to the clipboard" }); 
306
307
308</script> 
309 
310<style ${nonceAttribute}> 
311	.copy-text { 
312		color: #282934; 
313		font-size: 16px; 
314
315 
316	.help-and-support-link { 
317		color: inherit; 
318		text-decoration: none; 
319
320 
321	.help-and-support-link-arrow { 
322		fill: rgb(133, 140, 148); 
323
324 
325	.help-and-support-link:hover { 
326		color: inherit; 
327		text-decoration: none; 
328
329 
330	.help-and-support-link-icon { 
331		color: rgb(133, 140, 148); 
332
333 
334	.help-and-support-svg mask, 
335	.link-arrow mask { 
336		mask-type: alpha; 
337
338</style> 
DEVELOPER
13-8-2 上午12:00
Published date
13-8-2 上午12:00
Published Date
13-8-2 上午12:00
SUPPORTED OFFERINGS
Liferay PaaS
Supported Versions
Resource Requirements
Edition
CE
PRICE
Free
help & support
SHARE LINK
Copy & Share

HTML Example

A paragraph is a self-contained unit of a discourse in writing dealing with a particular point or idea. Paragraphs are usually an expected part of formal writing, used to organize longer prose.