Nastavení češtiny v editoru TinyMCE

BaruCepa
Člen | 33
+
0
-

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.

Ozzrel
Generous Backer | 51
+
+3
-

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íš.

kminekmatej
Generous Backer | 34
+
0
-

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
+
+2
-

@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
+
0
-

nightfish napsal(a):

@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'.

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.

kbtm
Člen | 22
+
0
-

Nestačí jen parametr „… language: ‚cs‘, …“ ?
(+ soubor cz.js na defaultním umístění \langs)

Mě to alespoň tak funguje.

BaruCepa
Člen | 33
+
0
-

Tak už to jede. Je to, jak jste psali, je potřeba umístit js soubor s jazykovou mutací, kterou chci použít, do root složky www. Postupovala jsem dle instrukcí @nightfish a čeština se rozjela. Moc děkuji za pomoc a vysvětlení :)

dms
Člen | 87
+
0
-

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`,