Template:Pagelang/doc/cs

From mediawiki.org

Použití[edit]

This 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.

Template parameters[Edit template data]

This template prefers inline formatting of parameters.

ParameterDescriptionTypeStatus
Page title1

Page title to get language for. By default the title of the current page.

Page nameoptional

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[edit]

Pokud 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 jenom SUBPAGENAME?

#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]