Template:Pagelang/doc/cs
Toto je dokumentace podstránky Template:Pagelang/doc. Obsahuje informace o použití, kategorie a další obsah, který není součástí původní stránky Template. |
This template is used on approximately 50,000 pages. To avoid large-scale disruption and unnecessary server load, any changes to this template should first be tested in its /sandbox or /testcases subpages or in your own user subpage. The tested changes can then be added to this page in one single edit. Please consider discussing any changes on the talk page before implementing them. |
Uses Lua: |
Použití
editThis stuff template for check language of translated subpage (for translatable pages). Used for automate substitution localized values that will match the language of the current page. Also used to help defining text direction (with using with {{dir}}). It is designed to be called from other templates.
Parameter | Description | Type | Status | |
---|---|---|---|---|
Page title | 1 | Page title to get language for. By default the title of the current page. | Page name | optional |
Příklady
edit{{pagelang}}
cs
{{pagelang|Page name}}
{{pagelang|Page name/ja}}
ja
Příklady běžného použití v přeložených stránkách nebo šablonách:
<!--
Zobrazí název jazyka daného kódu jazyka v parametru 1 ve stejném jazyce jako aktuální přeložená stránka s popisem zobrazujícím název jazyka v preferovaném jazyce uživatele.
--><span lang="{{BCP47|{{int:lang}}}}" title="{{#language:{{1}}|{{int:lang}}}} ({{{1}}})"><!--
--><span lang="{{BCP47|{{pagelang}}}}" dir="{{dir|{{pagelang}}}}" class="autonym"><!--
-->{{#language:{{1}}|{{pagelang}}<!--
--></span></span>
<!--
Zarovná plovoucí obrázek na správnou stranu v závislosti na jazyce aktuální přeložené stránky
-->[[File:Example|{{dir|{{pagelang}}|left|right}}|30x30px]]
Technická poznámka
editPokud podstránka obsahuje jakékoli (jednoduché nebo dvojité) uvozovky nebo ampersandy, nejedná se o platný kód jazyka; PAGENAME
a SUBPAGENAME
obvykle tyto znaky ve své návratové hodnotě kódují HTML, takže je lze bezpečně použít jako vstup #language
. Ale #titleparts
tyto uvozovky nebo ampersandy obnoví jejich dekódováním v HTML.
Ale pak #language
způsobí závažnou chybu serveru, když je použit s "kódy jazyků" s jednoduchých uvozovkách.
- Důkaz
Tohle funguje:
{{#language:fr|{{#titleparts:There's a fatal bug in MediaWiki|1}}}}
To nefunguje:
{{#language:fr|{{PAGENAME:There's a fatal bug in MediaWiki}}}}
Ani tohle:
{{#language:fr|There's a fatal bug in MediaWiki}}
Toto je kritická chyba funkce parseru #language
a zřejmě vážné bezpečnostní problémy, které by mohly být způsobeny nějakým chytrým vložením kódu do PHP místo citátu.
Tato chyba se vyskytuje pouze ve druhém parametru #language
(cílový jazyk, do kterého se má zadat název jazyka určeného kódem v prvním parametru). Platnost se kontroluje pouze u prvního parametru, u druhého nikoli. Zde, kde #language
nemůže najít název jazyka v žádném cílovém jazyce, by měl vrátit název rodného jazyka, jako v:
{{#language:fr|invalid language}}
- français
- Slova použitá v této šabloně
Abychom se vyhnuli této závažné chybě, chceme detekovat uvozovky (nebo ampersandy) v názvech podstránek, protože jsou stejně neplatné v jakémkoli kódu jazyka, abychom vrátili prázdný řetězec, nikoli název podstránky: Takový název podstránky nemůže být kód jazyka tak jako tak.
Jedním ze způsobů, jak zjistit podstránky, které nemohou být bezpečnými kódy jazyků, je zkontrolovat, zda se jejich hodnota filtrovaná pomocí #titleparts
rovná jejich hodnotě filtrované pomocí PAGENAME
: pokud se nerovnají to proto, že obsahovaly "ampersandy" neboli uvozovky.
- Proč používáme
#titleparts
a ne jenomSUBPAGENAME
?
#titleparts
je v této šabloně použit místo použití SUBPAGENAME
, ale použití SUBPAGENAME
by se také nevyhnulo chybě, protože by také mohlo vrátit celý název stránky obsahující uvozovky (SUBPAGENAME
funguje pouze ve jmenných prostorech, kde byly aktivovány podstránky, takže v hlavním jmenném prostoru nefunguje, aby se zjistilo, zda byl přeložen pomocí přípony kódu jazyka).
Související odkazy
edit- Příručka:Kódování PAGENAMEE
- {{TNT }}
- {{LL }}
- {{BCP47 }}
- {{Dir }}