fix: resolve localization issues and ensure English translations for UI elements
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
import { getPayload } from 'payload'
|
||||
import configPromise from '../src/payload.config'
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
// Helper to remove ids
|
||||
function removeIds(obj: any): any {
|
||||
if (Array.isArray(obj)) return obj.map(removeIds)
|
||||
if (obj !== null && typeof obj === 'object') {
|
||||
const newObj: any = {}
|
||||
for (const key of Object.keys(obj)) {
|
||||
if (key !== 'id') {
|
||||
newObj[key] = removeIds(obj[key])
|
||||
}
|
||||
}
|
||||
return newObj
|
||||
}
|
||||
return obj
|
||||
}
|
||||
|
||||
async function run() {
|
||||
const payload = await getPayload({ config: configPromise })
|
||||
|
||||
// We already uploaded media 8 and 9 in previous script. Let's find any media.
|
||||
const allMedia = await payload.find({ collection: 'media', limit: 10 })
|
||||
const defaultImageId = allMedia.docs[0]?.id || 8
|
||||
|
||||
// Load snapshot
|
||||
const snapshotPath = path.join(process.cwd(), 'scripts', 'content-snapshot.json')
|
||||
const snapshot = JSON.parse(fs.readFileSync(snapshotPath, 'utf-8'))
|
||||
|
||||
const enTitles: Record<string, string> = {
|
||||
'home': 'Home',
|
||||
'uslugi': 'Services',
|
||||
'jak-sie-umowic': 'How to make an appointment',
|
||||
'o-nas': 'About Us',
|
||||
'faq': 'FAQ',
|
||||
'kontakt': 'Contact',
|
||||
'stowarzyszenie': 'Association',
|
||||
'polityka-prywatnosci': 'Privacy Policy',
|
||||
'polityka-cookies': 'Cookie Policy',
|
||||
'impressum': 'Imprint'
|
||||
}
|
||||
|
||||
for (const pageSnapshot of snapshot.pages) {
|
||||
const slug = pageSnapshot.pl.slug
|
||||
if (slug === 'home') continue // Already fixed
|
||||
|
||||
const dbPage = await payload.find({ collection: 'pages', where: { slug: { equals: slug } }, locale: 'pl' })
|
||||
if (!dbPage.docs[0]) continue
|
||||
const pageId = dbPage.docs[0].id
|
||||
|
||||
const updateLayout = async (loc: 'pl' | 'de' | 'en', baseLoc: 'pl' | 'de') => {
|
||||
let layout = removeIds(pageSnapshot[baseLoc]?.layout || pageSnapshot.pl.layout)
|
||||
|
||||
// Inject images
|
||||
layout = layout.map((block: any) => {
|
||||
if (block.blockType === 'hero' || block.blockType === 'pageHeader' || block.blockType === 'about' || block.blockType === 'contactSection') {
|
||||
block.image = defaultImageId
|
||||
}
|
||||
if (block.blockType === 'servicesList') {
|
||||
if (block.items) {
|
||||
block.items = block.items.map((i: any) => ({ ...i, image: defaultImageId }))
|
||||
}
|
||||
}
|
||||
return block
|
||||
})
|
||||
|
||||
try {
|
||||
await payload.update({
|
||||
collection: 'pages',
|
||||
id: pageId,
|
||||
locale: loc,
|
||||
data: {
|
||||
title: loc === 'en' ? (enTitles[slug] || pageSnapshot[baseLoc].title) : (pageSnapshot[baseLoc]?.title || pageSnapshot.pl.title),
|
||||
layout
|
||||
}
|
||||
})
|
||||
console.log(`Successfully fixed ${slug} layout for ${loc}`)
|
||||
} catch(e) {
|
||||
console.error(`Failed to fix ${slug} for ${loc}`)
|
||||
}
|
||||
}
|
||||
|
||||
await updateLayout('pl', 'pl')
|
||||
if (pageSnapshot.de) {
|
||||
await updateLayout('de', 'de')
|
||||
}
|
||||
await updateLayout('en', 'pl') // Clone EN from PL base
|
||||
}
|
||||
|
||||
process.exit(0)
|
||||
}
|
||||
run().catch(console.error)
|
||||
Reference in New Issue
Block a user