From e39282a93efdf7bc72999423e342aa3fa0218b3d Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Sun, 28 Apr 2024 23:58:51 +0300 Subject: [PATCH] use modified fallback for translations --- pages/api/translations/[...locale].ts | 44 ++++++++-------- pages/cart/translations/index.tsx | 72 ++++++++++++++------------- 2 files changed, 61 insertions(+), 55 deletions(-) diff --git a/pages/api/translations/[...locale].ts b/pages/api/translations/[...locale].ts index de67d51..84cb6c7 100644 --- a/pages/api/translations/[...locale].ts +++ b/pages/api/translations/[...locale].ts @@ -1,35 +1,37 @@ import fs from 'fs'; import path from 'path'; import { NextApiRequest, NextApiResponse } from 'next'; -type Translations = { - [key: string]: string; -}; -export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { locale } = req.query; - const filePath = path.join(process.cwd(), `content/i18n/${locale}.json`); - const translations: Translations = JSON.parse(fs.readFileSync(filePath, 'utf8')); +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { locale, type } = req.query; + const baseFilePath = path.join(process.cwd(), `content/i18n/${locale}.json`); + const modifiedFilePath = path.join(process.cwd(), `content/i18n/${locale}.modified.json`); + + let translations = {}; + + try { + translations = JSON.parse(fs.readFileSync(baseFilePath, 'utf8')); + if (fs.existsSync(modifiedFilePath)) { + const modifiedTranslations = JSON.parse(fs.readFileSync(modifiedFilePath, 'utf8')); + translations = { ...translations, ...modifiedTranslations }; + } + } catch (error) { + console.error('Error loading translation files:', error); + } switch (req.method) { case 'GET': + res.status(200).json(translations); + break; + case 'POST': try { - res.status(200).json(translations); + fs.writeFileSync(modifiedFilePath, JSON.stringify(req.body, null, 2), 'utf8'); + res.status(200).json({ status: 'Updated' }); } catch (error) { - console.error('Error reading translation file:', error); - res.status(500).json({ error: 'Failed to read translation file' }); + console.error('Error writing modified translation file:', error); + res.status(500).json({ error: 'Failed to update translation file' }); } break; - - case 'POST': try { - const newTranslations = req.body; - fs.writeFileSync(filePath, JSON.stringify(newTranslations, null, 2), 'utf8'); - res.status(200).json({ status: 'Updated' }); - } catch (error) { - console.error('Error writing translation file:', error); - res.status(500).json({ error: 'Failed to update translation file' }); - } - break; - default: res.setHeader('Allow', ['GET', 'POST']); res.status(405).end(`Method ${req.method} Not Allowed`); diff --git a/pages/cart/translations/index.tsx b/pages/cart/translations/index.tsx index e95757c..e272f7f 100644 --- a/pages/cart/translations/index.tsx +++ b/pages/cart/translations/index.tsx @@ -1,26 +1,26 @@ - import axiosInstance from '../../../src/axiosSecure'; -import common from '../../../src/helpers/common'; import { useState, useEffect } from 'react'; -import { Availability, UserRole } from "@prisma/client"; -import ProtectedRoute, { serverSideAuth } from "../../../components/protectedRoute"; +import ProtectedRoute from "../../../components/protectedRoute"; +import { UserRole } from "@prisma/client"; + +// Simulate importing locales from a config or define directly here +const locales = ['en', 'bg', 'ru']; const AdminTranslations = () => { - const [translations, setTranslations] = useState({}); const [locale, setLocale] = useState('en'); useEffect(() => { - console.log("Current locale:", locale, "Fetching translations..."); axiosInstance.get(`/api/translations/${locale}`).then(res => setTranslations(res.data)); }, [locale]); const handleSave = () => { - axiosInstance.post(`/api/translations/${locale}`, translations).then(res => { - if (res.data.status === 'Updated') { - alert('Translations updated!'); - } - }); + axiosInstance.post(`/api/translations/${locale}/modified`, translations) + .then(res => { + if (res.data.status === 'Updated') { + alert('Translations updated!'); + } + }); }; const handleChange = (key, value) => { @@ -28,30 +28,34 @@ const AdminTranslations = () => { }; return ( - <> - -
-

Edit Translations

- - {Object.keys(translations).map(key => ( -
- - handleChange(key, e.target.value)} - /> -
+ +
+

Edit Translations

+ + + + {Object.entries(translations).map(([key, value]) => ( + + + + + ))} + +
{key} + handleChange(key, e.target.value)} + style={{ width: '100%' }} + /> +
+ +
+
); };