Podpora směrů psaní
Podpora různých směrů psaní (zleva doprava, zprava doleva) je důležitým aspektem pro vícejazyčný software. Od MediaWiki 1.18 se podpora výrazně zlepšila.
Tato stránka poskytuje některé relevantní informace a pokyny pro vývojáře a správce wiki, pokud chcete vytvořit funkci nebo rozšíření kompatibilní s rozhraním zprava doleva a obecně s různými směry.
Tipy na uživatelské úrovni
Několik obecných tipů pro uživatele, než se dostanete k podrobnostem pro vývojáře:
- Většina prohlížečů podporuje změnu směru oblasti úprav prostého textu, jako jsou pole pro vyhledávání článků, úpravy syntaxe wiki, shrnutí úprav atd. V závislosti na prohlížečích a operačních systémech to lze provést pomocí Ctrl+⇧ Shift (Chrome a IE na Windows), Ctrl+⇧ Shift+X (Firefox), Option-Click-Change direction (Mac). To by vám mělo pomoci při psaní ve směru, který se liší od obvyklého směru webu.
- Při psaní sekce v jazyce, který má jiný směr než web, přidejte značku div s příslušnými atributy lang, dir a class. Například při psaní anglické sekce v arabské Wikipedii zadejte
<div lang="en" dir="ltr" class="mw-content-ltr">
na začátek a</div>
na konec. - Když píšete jen pár slov do odstavce, vložte je do tagu
<span>
s příslušnými atributy lang a dir. (Mnoho wikin má pro to šablonu, například {{lang}}). - Chcete-li oddělit čísla od sousedního slova s různou směrovostí, použijte znaky RLM nebo LRM. Mnoho wikin pro to má šablony, například {{כ}} v hebrejské Wikipedii, {{RLM}} v arabské Wikipedii, {{رچ}} v perské Wikipedii atd. Pokud je k dispozici šablona, je obvykle preferováno použití samotného znaku Unicode.
Pomocí značky RTL můžete nahlásit chyby ve zpracování RTL v Phabricatoru v jakémkoli projektu souvisejícím s MediaWiki.
ResourceLoader
Díky ResourceLoader včetně CSSJanus se CSS automaticky překlopí zprava doleva, když je uživatelský jazyk RTL. Toto je výchozí od 1.18 (v předchozích verzích to bylo závislé na jazyku obsahu wiki). Existuje relativně málo CSS, které musí záviset na jazyce obsahu.
- Pozor: Při použití debug mode ResourceLoaderu může být CSS vykresleno nekonzistentně ve srovnání s produkčním režimem. Jako dočasné řešení testu RTL rozhraní s vypnutým laděním. (Problém je sledován jako Phabricator:T29025.)
Jaké jazyky?
Hlavní článek: Příručka:Jazyk
- $wgLang - uživatelský jazyk (a příslušný směr)
- $wgContLang - jazyk obsahu webu (a příslušný směr) -> zde LTR
- Název->getPageLanguage() - jazyk obsahu stránky (a příslušný směr) -> ve výchozím nastavení stejný jako jazyk obsahu webu
- Existují některé výchozí výjimky: viz níže
- Lze jej nastavit v rozšířeních jako háček PageContentLanguage
- Tím se nastaví TOC (a věci jako gramatika, i když to většinou není relevantní) pro tento jazyk. Chcete-li to provést, použijte parserOptions->setTargetLanguage()
- V rozšířeních, která by měla zůstat kompatibilní s 1.17, můžete použít wfUILang(), ale to narušuje kompatibilitu s 1.16 a nižšími. To vrátí $wgLang ve verzi 1.18 a vyšší, ale $wgContLang ve verzi 1.17 (ve výchozím nastavení).
Co by mělo následovat po kterém druhu?
- Speciální stránky se ve výchozím nastavení řídí uživatelským jazykem.
- Zdrojový kód by měl být anglický (stránky CSS/JS jsou standardně nastaveny na angličtinu).
- Stránky s překladem jako podstránky by se měly řídit jazykem překladu (např. "Page" je wgContLang, "Page/he" je "he"). Toto je výchozí pro jmenný prostor MediaWiki.
- Vstupní pole a textové oblasti ve výchozím nastavení sledují směr obsahu.
- Při prohlížení rozdílu se řídí jazykem uživatele, ale skutečný text rozdílu je v jazyce obsahu stránky.
Co mám přidat do zdrojového kódu?
- Cokoli na speciálních stránkách, které se liší od jazyka uživatele, by mělo mít značku
<div dir="..." lang="...">
.- Příklad: SpecialRecentchanges->setTopText(), který přidá zprávu "recentchangestext" v jazyce obsahu wiki.
- Cokoli ve vlastních jmenných prostorech, které obsahuje text odlišný od výchozího obsahu wiki, by také mělo mít značku
div
. - Pokud text rozdílu není stejný jako jazyk obsahu stránky, použijte
$diff->setTextLanguage( 'code' );
, kde $diff je objekt DifferenceEngine.
Atributy lang/dir
Měli byste použít HTML:
Xml::rawElement( 'div', array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() );
ale někdy je to v dynamicky generovaných prvcích obtížné a můžete se vrátit k CSS:
.class { direction: ltr; }
Obsah wiki
Verze MediaWiki: | ≥ 1.18 |
Třídy mw-content-ltr
a mw-content-rtl
můžete použít k využití odkazů na sekci úprav a prvků ul/ol založených na tomto směru.
- Například
Xml::rawElement( 'div', array(
'class' => 'mw-content-' . $wgLang->getDir(),
'lang' => $wgLang->getCode(),
'dir' => $wgLang->getDir(),
'Text'
);
To se samozřejmě používá pro obsah stránky článků.
- Na stránkách souborů se přidává pouze kolem skutečného textu, zatímco zbytek stránky souboru je vlastní uživatelské rozhraní (historie souborů, ...).
- Na stránkách kategorií se přidává jako na běžných stránkách, ale text v uživatelském jazyce je vložen do
div
s atributylang
adir
podle jazyka uživatele. - Na speciálních stránkách se "nepřidává", protože jsou z velké části v uživatelském jazyce. Část textu na speciálních stránkách může být v jazyce obsahu, který by pak měl být vložen do těchto tříd. Používá se například v rozšíření CodeReview pro souhrn kódu a komentáře ke kódu, které mohou obsahovat prvky ul/ol (* a # wikitext) v jazyce obsahu wiki a v zásadě samozřejmě ne v jazyce uživatele.
Přidávání věcí uživatelského rozhraní do těchto tříd by se nemělo provádět. Například odkazy na kategorie a kontrolní formulář FlaggedRevs jsou uvnitř #bodyContent, ale mimo .mw-content-ltr/rtl.
Viz také ID a třídy.
Třídy body
Značka body má ve výchozím nastavení třídu ltr
nebo rtl
, která se řídí jazykem uživatele.
Neměli byste to používat, protože CSS se automaticky překlápí podle jazyka uživatele.
Značka body také obsahuje novou (1.18) třídu sitedir-ltr
a sitedir-rtl
, která následuje po $wgContLang->getDir()
.
Pokud je to potřeba, lze přidat také "userlang-ltr/rtl" a/nebo "pagelang-ltr/rtl".
float/text-align
Můžete použít $wgLang->alignStart()
, $wgContLang->alignStart()
, $wgLang->alignEnd()
, $wgContLang->alignEnd()
, který dává příslušné hodnoty 'vpravo' nebo 'vlevo'.
Můžete použít CSS float
nebo text-align
, jejichž hodnota (left/right) je překlopena pro jazyky rozhraní RTL.
Příklady
Special:AllMessages je speciální stránka, což znamená, že sleduje směr jazyka uživatele. Skutečné zprávy by však měly sledovat směr zvoleného jazyka.
- Special:Allmessages = angličtina, LTR
- Special:Allmessages/he = hebrejština, RTL
Buňky v tabulce obsahující obsah zpráv mají atribut lang
& dir
.
Rozšíření Translate , využívající háček PageContentLanguage, nastavuje správný jazyk (a následně směr) pro přeložené stránky, viz např. meta:Wikimedia_maintenance_notice/ar který těží z třídy mw-content-rtl na LTR wiki.
Místní wikiny
Stránky MediaWiki:Common.css a příbuzní jsou také převrácené. To znamená, že musíte přidat @noflip tam, kde je potřeba.
Viz T33923: CSS webu by se ve výchozím nastavení nemělo převracet.
Problémy
- Většina hlavních funkcí a rozšíření má od verze 1.19 vylepšenou podporu, viz translatewiki:Project:Better directionality and i18n development.
- Známé zbývající problémy:
- Ikony externích odkazů jsou převráceny podle směru jazyka uživatele (menší problém)
- LiquidThreads - použijte
contlang
místopagelang
, jinak speciální stránka vrátíuserlang
- WikiLove - kittens zarovnána vlevo $soubor by měl být na RTL wiki zarovnán vpravo (menší problém)
- OmegaWiki: Potřebuje generální opravu (stránky Expression a DefinedMeaning by se měly řídit pokyny uživatele) + 23035
- Hledání chyb: https://bugzilla.wikimedia.org/buglist.cgi?quicksearch=rtl
Související odkazy
- Manual:Interface/IDs and classes
- Lokalizace
- translatewiki:Project:Better directionality and i18n development (kolem roku 2011) a mnohem starší m:BiDi workgroup
- Manual:Hooks/PageContentLanguage
- Visual editor/Bidirectional text requirements
- Extension:RevisionSlider/Developing a RTL-accessible feature in MediaWiki - what we've learned while creating the RevisionSlider
- Rychlý úvod: Obousměrný algoritmus Unicode o User:MSchottlender-WMF
- rtl.wtf - články a příklady o tom, jak podporovat zprava doleva online