Podpora směrů psaní

From mediawiki.org
This page is a translated version of the page Directionality support and the translation is 100% complete.
i18n dokumenty
Obsah v angličtině (LTR) s hebrejským (RTL) rozhraním.

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.
Směrovost může být matoucí, ale můžete se podívat na mooeypoo přednášku linux.conf.au s názvem "Wait, ?tahW: The Twisted Road to Right-to-Left Language Support" abyste lépe porozuměli problémům a souvisejícím řešením.

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 atributy lang a dir 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.

Novinkou je, že tyto třídy lze použít v rámci těchto tříd. Například .mw-content-rtl lze použít v článku LTR (mw-content-ltr). To je užitečné pro vícejazyčné stránky. Předtím bylo nutné použít místní MediaWiki:Common.css hacky, aby se např. seznamy odrážek se v textu <div dir="ltr/rtl"> zobrazují správně. Při úpravách wiki stránek byste proto měli místo <div dir="ltr/rtl"> použít <div class="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.

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

Související odkazy