Nastavení češtiny v editoru TinyMCE
- BaruCepa
- Člen | 33
Zdravím, tak jsem tady zase. Ještě se trápím s TinyMCE editorem, tentokrát s nastavením češtiny pro tento editor (žádá si ji klient projektu). Stáhla jsem jazykové balíčky pro danou verzi, nastavila language_url, dle dev tools a záložky network se soubor cs.js načítá, ale content-type je text/html, takže se neaplikuje. Zkusila jsem změnit pomocí .htaccess ve složce www a vymazala cache:
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
# Remove multiple slashes #
RewriteCond %{THE_REQUEST} \s/+(?:.*?)/{2,}(?:[^\s]*)
RewriteCond %{REQUEST_URI} (.*)
RewriteRule .* %1 [R=301,L,NE]
# Remove trailing slash from existing files #
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^(.+\.[^/]+)/$
RewriteRule .* %1 [R=301,L]
# Forward any URI to index.php #
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+\.[^/]+)/(.+)$ index.php [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} !^/\.well-known(?!/(?:.+/)?\..*)
RewriteCond %{REQUEST_URI} /\..*
RewriteRule .* index.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L]
</IfModule>
<IfModule mod_mime.c>
<FilesMatch "\.js$">
ForceType application/javascript
</FilesMatch>
</IfModule>
Vůbec nepomohlo. ChatGPT poradil nastavit hlavičku pro PHP přímo v cs.js, ani to nepomohlo. Aktuální editor.latte, kde je právě skript pro editor, vypadá takto:
{block scripts}
<script src="https://cdn.jsdelivr.net/npm/tinymce@5.10.8/tinymce.min.js" referrerpolicy="origin"></script>
<script type="text/javascript">
tinymce.init({
selector: '.tinyarea',
language: 'cs',
language_url: '/vendor/tweeb/tinymce-i18n/langs/cs.js',
height: '50vh',
entity_encoding: 'raw',
verify_html: false,
content_css: [
'css/reset.css',
'css/section.css',
'css/style.css',
'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css',
],
body_id: 'content',
plugins: 'advlist anchor autolink charmap code colorpicker contextmenu directionality emoticons fullscreen hr image imagetools insertdatetime link lists nonbreaking noneditable pagebreak paste preview print save searchreplace tabfocus table textcolor textpattern visualchars',
toolbar1: 'insertfile undo redo | styleselect | fontselect | fontsizeselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | forecolor backcolor',
toolbar2: 'link unlink anchor | fontawesome | image media | responsivefilemanager | preview code',
});
</script>
{/block}
Projekt je dockerizovaný, běží na PHP 8.2-apache. Zatím stále jen na localhostu.
- kminekmatej
- Generous Backer | 34
Ozzrel napsal(a):
No a není to tím že
cs.js
je v prostoru nedostupném z pohledu klienta a proto se to nenačte? Dej ten soubor někam mezi běžné js, někde v WWW adresáři nejspíš.
cs.js píše že se jí načítá:
dle dev tools a záložky network se soubor cs.js načítá, ale content-type je text/html
Já si myslím že ten content-type: text/html je správně, protože to skutečně JE html kód, obsahující HTML tag <script> a v něm definovaný skript. Předpokládám ale že se ti ten skript nespustí (jinak bys sem asi nic nepsala). Zkoušel bych to debugovat v DEV tools proč (a jestli) se nespustí, nicméně chyba v Content-Type ani v Nette podle mého názoru není
- nightfish
- Člen | 474
@kminekmatej Jestli se bavíme o souboru
/vendor/tweeb/tinymce-i18n/langs/cs.js
, tak ten zcela určitě neobsahuje HTML
Osobně bych viděl problém v tom, že cesta /vendor/tweeb/...
nebude dostupná přes HTTP. Je dost dobře možné, že pravidla v
.htaccessu
požadavek na neexistující soubor předají na
index.php
, který má potenciál vrátit obsah typu
text/html
– i když teda pro neexistující soubor bych
očekával, že to bude se stavovým kódem 404. Ale záleží na tom, jak jsou
napsané routy, třeba matchnou nějaký existující presenter, takže se
vykreslí jeho šablona. (Což by koneckonců bylo vidět v Developer Tools
v panelu Network v náhledu požadavku na stažení cs.js
–
jestli je tam Javascript nebo něco jiného.)
Řešením je soubor vendor/tweeb/tinymce-i18n/langs/cs.js
zkopírovat do www/js/tinymce-i18n/langs/cs.js
a v inicializaci
TinyMCE upravit cestu k souboru na
language_url: '/js/tinymce-i18n/langs/cs.js'
.
- kminekmatej
- Generous Backer | 34
nightfish napsal(a):
@kminekmatej Jestli se bavíme o souboru
/vendor/tweeb/tinymce-i18n/langs/cs.js
, tak ten zcela určitě neobsahuje HTMLOsobně bych viděl problém v tom, že cesta
/vendor/tweeb/...
nebude dostupná přes HTTP. Je dost dobře možné, že pravidla v.htaccessu
požadavek na neexistující soubor předají naindex.php
, který má potenciál vrátit obsah typutext/html
– i když teda pro neexistující soubor bych očekával, že to bude se stavovým kódem 404. Ale záleží na tom, jak jsou napsané routy, třeba matchnou nějaký existující presenter, takže se vykreslí jeho šablona. (Což by koneckonců bylo vidět v Developer Tools v panelu Network v náhledu požadavku na staženícs.js
– jestli je tam Javascript nebo něco jiného.)Řešením je soubor
vendor/tweeb/tinymce-i18n/langs/cs.js
zkopírovat dowww/js/tinymce-i18n/langs/cs.js
a v inicializaci TinyMCE upravit cestu k souboru nalanguage_url: '/js/tinymce-i18n/langs/cs.js'
.
Tím Content-type jsem měl na mysli ten content vygenerovaný z toho latte snippetu co zde autorka postovala. Ten vrací HTML kód který dále instruuje browser že má stáhnout skript https://cdn.jsdelivr.net/…nymce.min.js (který najde na CDNku) a následně volá funkci init() kam předává ten language_url parametr na
/vendor/tweeb/tinymce-i18n/langs/cs.js
Taky si myslim že tam je celý problém v tom že obsah složky vendor není dostupný přes web server (což by tedy opravdu být neměl) a správné řešení by mělo být přesunout ten cs.js někam do podsložky www kde již dostupný bude.
- dms
- Člen | 87
Když už se tahá tinymce z jsdelivr tak proč ne rovnou i language pack? jinak univerzální řešení pro jazyky dle html atributu lang zde:
language: document.documentElement.lang,
language_url: `https://cdn.jsdelivr.net/npm/tinymce-i18n@23.8.28/langs/${document.documentElement.lang}.min.js`,