Skip to content

Fix : translate rich text #120

@thibault-peronno

Description

@thibault-peronno

diff --git a/dist/client/providers/Translator/TranslatorProvider.js b/dist/client/providers/Translator/TranslatorProvider.js
index 6fca7a76d31e80ff90abcdefbab05b613712231c..4c7b93b3bad298c40967d10551d772d48f25241a 100644
--- a/dist/client/providers/Translator/TranslatorProvider.js
+++ b/dist/client/providers/Translator/TranslatorProvider.js
@@ -36,15 +36,16 @@ export const TranslatorProvider = ({ children })=>{
if (!localization) throw new Error('Localization config is not provided and PluginTranslator is used');
const localesOptions = localization.locales.filter((each)=>each.code !== locale.code);
const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState('');

  • useEffect(()=>{
  •    const defaultFromOptions = localesOptions.find((each)=>localization.defaultLocale === each.code);
    
  •    if (defaultFromOptions) setLocaleToTranslateFrom(defaultFromOptions.code);
    
  •    setLocaleToTranslateFrom(localesOptions[0].code);
    
  • }, [
  •    locale,
    
  •    localesOptions,
    
  •    localization.defaultLocale
    
  • ]);
  • // [PATCH] Fix: impossible de changer la langue source quand on traduit vers une langue autre que l'anglais.
  • // Cause: localesOptions dans les deps du useEffect est recréé à chaque rendu (filter → nouveau tableau),
  • // donc l'effet se relançait en boucle et réinitialisait localeToTranslateFrom à localesOptions[0].
  • // Correction: dépendances stables (locale.code, defaultLocale), calcul des options dans l'effet, une seule assignation.
  • useEffect(() => {
  •    const options = localization.locales.filter((each) => each.code !== locale.code);
    
  •    if (options.length === 0) return;
    
  •    const defaultFrom = options.find((each) => localization.defaultLocale === each.code);
    
  •    setLocaleToTranslateFrom((defaultFrom ?? options[0]).code);
    
  • }, [locale?.code, localization?.defaultLocale]);
    const closeTranslator = ()=>modal.closeModal(modalSlug);
    const submit = async ({ emptyOnly })=>{
    if (!resolver) return;
    diff --git a/dist/resolvers/openAI.js b/dist/resolvers/openAI.js
    index 644947d3c98805f26ea5d41b3a22153a1674710f..de7b5b0c99193da0c6e2bb4d990dd6ad05322d71 100644
    --- a/dist/resolvers/openAI.js
    +++ b/dist/resolvers/openAI.js
    @@ -52,7 +52,32 @@ export const openAIResolver = ({ apiKey, baseUrl, chunkLength = 100, model = 'gp
    success: false
    };
    }
  •                const translatedChunk = JSON.parse(content);
    
  •                let contentToParse = content.trim();
    
  •                if (contentToParse[0] !== '[') {
    
  •                    const match = contentToParse.match(/\[[\s\S]*\]/);
    
  •                    if (match) contentToParse = match[0];
    
  •                }
    
  •                let translatedChunk;
    
  •                try {
    
  •                    translatedChunk = JSON.parse(contentToParse);
    
  •                } catch (e1) {
    
  •                    var afterJsonMatch = e1.message && e1.message.match(/after JSON at position (\d+)/);
    
  •                    if (afterJsonMatch) {
    
  •                        contentToParse = contentToParse.substring(0, parseInt(afterJsonMatch[1], 10)).trim();
    
  •                    } else {
    
  •                        contentToParse = contentToParse.replace(/"\s+"/g, '", "').replace(/,\s*([\]}])/g, '$1');
    
  •                    }
    
  •                    try {
    
  •                        translatedChunk = JSON.parse(contentToParse);
    
  •                    } catch (e2) {
    
  •                        req.payload.logger.error({
    
  •                            message: 'An error occurred when trying to translate the data using OpenAI API',
    
  •                            originalErr: e1.message,
    
  •                            afterTrailingCommaFix: e2.message
    
  •                        });
    
  •                        return { success: false };
    
  •                    }
    
  •                }
                   if (!Array.isArray(translatedChunk)) {
                       req.payload.logger.error({
                           data: translatedChunk,
    

@@ -63,6 +88,7 @@ export const openAIResolver = ({ apiKey, baseUrl, chunkLength = 100, model = 'gp
success: false
};
}

  •                translatedChunk = translatedChunk.flatMap(function (item) { return Array.isArray(item) ? item : [item]; });
                   for (const text of translatedChunk){
                       if (text && typeof text !== 'string') {
                           req.payload.logger.error({
    

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions