{{ translatedText }}
\n\t\t{{ t('appstore', 'Office suite switching is managed through the Nextcloud All-in-One interface.') }}
\n\t\t{{ t('appstore', 'Please use the AIO interface to switch between office suites.') }}
\n\t{{ t('appstore', 'Please note that installing requires manual server setup.') }}
\n\t\t\n\t\t{{ t('appstore', 'Office suite switching is managed through the Nextcloud All-in-One interface.') }}
\n\t\t{{ t('appstore', 'Please use the AIO interface to switch between office suites.') }}
\n\t{{ t('appstore', 'Please note that installing requires manual server setup.') }}
\n\t\t\n\t\t{{ app.summary }}
\n\t\t\t{{ app.summary }}
\n\t\t\t{{ translatedText }}
\n\t\t{{ translatedText }}
\n\t\t{{ app.summary }}
\n\t\t\t{{ app.summary }}
\n\t\t\t\n\t\t\t{{ t('files_versions', 'Named versions are persisted, and excluded from automatic cleanups when your storage quota is full.') }}\n\t\t
\n\t\n\t\t\t{{ t('files_versions', 'Named versions are persisted, and excluded from automatic cleanups when your storage quota is full.') }}\n\t\t
\n\t// -> /\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // //../
-> /\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // is 1 or more portions\n //