Podpora vícejazyčného obsahu přibyla do jádra Drupalu s příchodem šesté řady. Konkrétně se jedná o modul Locale. Ten jistě znáte i z běžných webů, které fungují jen s jedním jazykem. Bez něj třeba nezprovozníte český překlad.
Druhým modulem, který již umožňuje přímo překlady obsahu v Drupalu a je zároveň součástí jeho jádra, je Content Translation. S tímto modulem si však nevystačíte. Umožní u každého uzlu určit, pro jakou jazykovou verzi je připraven, ale neprováže k sobě různé jazykové verze téhož článku. Výsledek je, že sice máte různojazyčné texty na webu, nefunguje však přepínání z jednoho jazyka na druhý. Alespoň ne způsobem, jaký každý očekává.
Modul Internationalization
Tím hlavním stavebním kamenem pro vícejazyčné weby na Drupalu je modul Internationalization. Obsahuje množství součástí a na rozdíl od Content Translation přímo v Drupalu umožní překládat i položky v menu, bloky nebo termíny v kategoriích. Zapněte proto všechny jeho součásti.
Rozklepněte si seznam typů obsahu a upravte ten typ obsahu, který chcete mít vícejazyčný. Rozklepněte si Nastavení postupu práce a u Podpory více jazyků nastavte Zapnuto, s překladem. Nastavení uložte a znovu se do něj vraťte. Nyní bude odblokována sekce Multilanguage options, kde zapněte podporu překladu.
Po zapnutí modulu Internationalization vám v seznamu záložek při editaci článku přibude položka pro překlad. Typický postup je tedy ten, že vytvoříte článek ve výchozím jazyce webu (třeba v češtině), přepnete se na záložku pro překlad, zvolíte si nový jazyk (třeba angličtinu) a článek uložíte se změněným textem. Modul pak již zajistí, aby se pod článkem zobrazil odkaz na další jazykové verze. V české podobě přibude odkaz na anglickou a obráceně. Jazyků samozřejmě můžete mít více.
Drupal a překlad článku
Na webu určitě využijete blok s přepínačem jazyků. Jeho nevýhodou je absence vlaječek použitých lokalizací. Pokud si nechcete hrát s kaskádovými styly a vlajky doplnit ručně, nainstalujte modul Language icons. Nedělá nic jiného, než že do bloku s přepínačem jazyků doplní vlajky.
Nezapomeňte v nastavení jazyků definovat prefix a doménu každého jazyka (včetně angličtiny, kde chybí), v opačném případě nebude přepínání jazyků fungovat.
Překlad netypických částí webu
Ne všechny části webu jsou však pomocí modulu Internationalization přeložitelné. Na mysli mám například Název webu, slogan, patičku, nebo cíle webu. Pro různé jazykové verze také můžete chtít definovat odlišnou titulní stránku.
Trikem, jak odlišných nastavení v závislosti na jazykové verzi docílit, je úprava souboru sites/default/settings.php. Na jeho konec umístěte následující:
$conf['i18n_variables'] = array( 'site_name', 'site_slogan', 'site_mission', 'site_footer', 'anonymous', 'menu_primary_menu', 'menu_secondary_menu', );
Soubor settings.php uložte, spusťte cron.php a přejděte do Nastavení webu > Informace o webu. Pomocí přepínače jazyků si nastavte češtinu a upravte nastavení pro náš jazyk. Uložte jej a přepněte se na druhý jazyk, například na angličtinu. Nyní nastavení informací o webu upravte pro angličtinu. Zadejte anglický slogan, cíle webu atd. Všimněte si, že pod políčky přibyla informace o tom, že se jedná o nastavení vícejazyčného webu (multiligual variable).
Kroky uvedené výše je nutné udělat přesně ve zmíněném pořadí, v opačném případě se vám bude ukládat nastavení stále jen pro výchozí jazyk webu. Pokud pod políčky nevidíte informaci multiligual variable, nastavení se rovněž uloží jen pro výchozí jazyk, resp. společně pro všechny lokalizace. Na vině v tomto případě bývají některé moduly pro vizuální editory, které přebíjejí vícejazyčnost nastavení. Doporučuji používat Wysiwyg, který je bez problémů.
Překlad řetězců v tématech a modulech
Pro vývoj modulů a tvorbu témat pro Drupal platí, že veškeré řetězce byste měli vkládat do funkce t(), například jako t(přeložitelný text);. Takto upravený řetězec se pak zobrazí v překladovém rozhraní Drupalu a budete jej moci použít v různých jazycích.
Automatický překlad
Na závěr jsem si nechal tip na modul, jehož výsledek vidíte v praxi jako jedno z posledních vylepšení Maxiorla. Modul GTranslate dovede překládat celou webovou stránku do desítek jazyků, přičemž k tomu využívá služeb online překladače Google Translator.
Pozor, nejde však o překlad, který by spolupracoval s modulem Internationalization a ukládal například do databáze přeložené verze článků. Překlad probíhá na základě již existujícího HTML výstupu, který Google Translator pouze přepíše.
Je mi jasné, že je tento článek možná příliš stručný, ale vyhovuje nadpisu „vícejazyčný web v kostce". Máte-li nějaké upřesňující dotazy, pište do komentářů pod článkem.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Podobné články
Komentáře k článku
Myslím, že to zařídí nastavení Mixed current language (if available) or default language (if not) and language neutral v admin/settings/language/i18n.
Pro přepínání jazyků a vlaječky používám modul Consistent Language Interface.
Dnes už ani nevím proč jsem mu dal přednost.
V setting.php je možnost nastavi podstatně víc vícejazyčných proměnných. Já používám toto nastavení:
$conf['i18n_variables'] = array(
// Site name, slogan, mission, etc..
'site_mail',
'site_name',
'site_slogan',
'site_mission',
'site_footer',
'anonymous',
// Different front page for each language
'site_frontpage',
// Primary and secondary links
'menu_primary_links_source',
'menu_secondary_links_source',
'menu_default_node_menu',
// Contact form information
'contact_form_information',
// For theme variables, read more below
'theme_settings',
'theme_default',
'theme_giordani_settings',
'file_directory_path',
'nice_menus_custom_css',
'logo_path',
'blog_help',
'story_help',
// User configuration
'user_registration_help',
'user_mail_password_reset_body',
'user_mail_password_reset_subject',
'user_mail_register_admin_created_body',
'user_mail_register_admin_created_subject',
'user_mail_register_no_approval_required_body',
'user_mail_register_no_approval_required_subject',
'user_mail_register_pending_approval_body',
'user_mail_register_pending_approval_subject',
'user_mail_status_activated_body',
'user_mail_status_activated_subject',
'user_mail_status_blocked_body',
'user_mail_status_blocked_subject',
'user_mail_status_deleted_body',
'user_mail_status_deleted_subject',
// Date format setting
'date_format_short',
'date_format_short_custom',
'date_format_medium',
'date_format_medium_custom',
'date_format_long',
'date_format_long_custom',
// Lightbox setting
'lightbox2_node_link_text',
'lightbox2_image_count_str',
'lightbox2_video_count_str',
'lightbox2_page_count_str',
'lightbox2_download_link_text',
'fast_gallery_title',
// Node help
'blog_help',
'story_help',
'contact_form_information',
// Location
'location_default_country',
'location_settings_user',
// Invite
'invite_subject',
'invite_default_mail_template',
// User_relationships
'user_relationship_mailer_request_subject',
'user_relationship_mailer_request_message',
'user_relationship_mailer_cancel_subject',
'user_relationship_mailer_cancel_message',
'user_relationship_mailer_approve_subject',
'user_relationship_mailer_approve_message',
'user_relationship_mailer_disapprove_subject',
'user_relationship_mailer_disapprove_message',
'user_relationship_mailer_remove_subject',
'user_relationship_mailer_remove_message',
'user_relationship_mailer_pre_approved_subject',
'user_relationship_mailer_pre_approved_message',
'user_relationships_ui_msg_submitted',
'user_relationships_ui_msg_accepted',
'user_relationships_ui_msg_disapproved',
'user_relationships_ui_msg_cancel',
'user_relationships_ui_msg_default',
'user_relationships_ui_msg_removed',
'user_relationships_ui_msg_pending',
'user_relationships_ui_msg_pre_approved',
'user_relationships_ui_msg_too_many_relationships',
'user_relationships_ui_msg_existing_request',
'user_relationships_ui_msg_existing_relationship',
'user_relationships_ui_msg_not_accepting_requests',
'user_relationships_ui_msg_self_request',
'user_relationships_ui_msg_non_existant_user',
'user_relationships_ui_msg_non_existant_type',
'user_relationships_ui_msg_unknown_error',
'user_relationships_ui_msg_relationship_type_not_set',
'user_relationships_ui_msg_relationship_type_not_allowed',
);
Z názvu proměnné je většinou zřejmé její použití.
Super, díky za pěkné doplnění.
GTranslate je výborná věc. Vy máte tu placenou verzi pro?
Ano, mám placenou verzi.
Pro kolik použití je ten placený? Mohu jej využívat neomezeně?
Chodí na přeložený obsah lidé z daných zemí? Jak se a to tváří google, indexuje to bez problémů?
Je to neomezené. Dostanete zakódovaný PHP soubor, který si dáte na web a je jenom váš. Je ale spjat s konkrétní doménou.
Na přeložený obsah chodí. Na Maxiorlovi je to ale jen minimum lidí, na zvýšení návštěvnosti se to neprojevilo. Záleží na tom, jak moc je získáte na zpětné odkazy.
Pro každou jazykovou verzi je možné přidat dokaz do sitemapy a tu hodit Googlu, aby začal cizojazyčný obsah indexovat. Po zakoupení placené verze Vám přidjou podrobné instrukce.
Vyborny manual, dekuji.
resim ale "drobny" problem. Vse jsem si nastavil, preklady makaji paradne, kdyz mam typ obsahu stranka, vse funguje.
Pak mam typ obsahu novinky a ten listuju pomoci views. Vytvori se mi alias po zadani novinky: domena.cz/en/news/new-number-1
Stejny alias vidim i v seznamu aliasu. Kdyz ale jdu na stranku kde se mi novinky v anglictine listuji, uz mi views nepridaji pred novinku en, takze odkaz je nefunkcni.
Jsem pomerne zoufaly, zkousel jsem to i vygooglit, ale nikdo to neresi, takze mam nekde nakyho sotka predpokladam :-)
Tak tady jsem neco nasel: http://blog.merge.nl/2009/01/16/drupal-6-multilingual-i18n/
Dobrý den,
díky za výborný návod a hlavně skvělé knihy (Podrobný průvodce... a 333 tipů a triků). Nastavení vícejazykového prostředí jsem udělal podle návodu, ale mám problém - po kliknutí na některý z primárních odkazů v české nebo anglické verzi některé z těchto odkazů zmizí, a to naprosto náhodně.
Postupoval jsem tak, ze každou položku primárního menu jsem vytvořil ve 2 verzích - české a anglické.
Děkuji za radu.
Dobrý den, díky. Bohužel ale netuším, kde by mohl být problém.
Já jsem vícejazyčný web řešil následovně:
1/ Pro každý jazyk mám samostatné menu menu vlevo a menu primární
2/ pomocí vícejazyčných proměnných (viz můj předchozí příspěvek) povolím pro kažký jazyk jiné primární menu
3/ V nastavení bloků nastavím zobrazení levého menu pouze pro daný jazyk
Ze začátku jsem měl pouze jedno menu, dnes už nevím co nešlo, tak jsem to předělal takto.
Koukněte www.penziondukla.cz , www.penziondukla.cz/en , www.penziondukla.cz/de (nejsou ještě přeložené všechny volby).
Mně se bohužel naskytl problém. Pokud v Administrace > Správa obsahu > Typy obsahu > upravit (např. Stránka) chci změnit Nastavení postupu práce. Kliknu na uložit, ale už se mi nezobrazí Vaše nastavení bylo uloženo. Pokud se do tohoto nastavení vrátím, jsou tam stále defaultní hodnoty. Když chci upravit Anketa, Nastavení postupu práce je již nastaveno, ale pro změnu nejde změnit Multilanguage options (udělá to to stejné).
Dobrý den,
chtěl bych se zeptat, zda by mi někdo poradil s vytvořením vícejazyčného webu. Mám web, který je v českém jazyce a potřeboval bych k němu udělat alternativu s tím rozdílem, že anglická verze bude mít jiné menu i obsah (angl. menu i obsah mám hotový)..jde mi o to, že bych chtěl, že když jsem v české verzi a kdykoliv zmáčknu angl. vlajecku, abych preskocil na uvodni stranku angl. verze a naopak. Předem děkuji za radu..
Pavel
Doinstalujte si modul http://drupal.org/project/i18n a zapněte si poté modul Menu translation.
Překlady názvů položek v menu pak uděláte klasicky přes překladové rozhraní v Drupalu.
Položky v anglickém menu jsou však jiné, než v českém menu, čili potřebuji, aby se mi při kliknutí na jakoukoliv vlaječku jazyka přeplo menu a obsah do pozadovaneho jazyka na uvodni stranku..děkuji
Aha. Řešil bych to tak, že menu zobrazím pomocí jeho bloku. DO jednoho regionu tedy půjde blok s českým i anglickým menu. V každém z těchto bloků pak nastavím viditelnost jen pro daný jazyk, a to třeba zápisem:
cs
cs/*
pro češtinu
en
en/*
pro angličtinu.
Dobry den,
resim nastaveni theme settings pro jazykove mutace. Ve variables modulu i18n moznost existuje, ale po "zatrzeni" se neulozi. Existuje moznost, jak si pro mutace upravit nastaveni, ktera theme nabizi (napr. logo_path nebo nastaveni title).
Mam subtheme vychazejici s omegy, ktere ma spoustu moznosti.
Dekuji za odpoved
Patrik
Mrkněte na toto http://drupal.org/node/568414
Jinak, šlo by to asi řešit se znalostí prefixů cest pro jednotlivé jazyky, modulem Sections.
Prosím poraďte, dá se nějak z článku odstranit ten odkaz na jiný jazyk? Chtěl bych web překládat jen přes menu s vlaječkama.
Vypíná se to v Regionální a jazyková nastavení - Multilingual settings - záložka Node options, kde je potřeba zatrhnout hned první položku Hide content translation links.
Dobrý den pane Polzer,
koukám, že máte stejný problém s Gtraslate jako já. A totiž takový, že vám nepřekládá popis obrázků, který se zobrazí při najetí kurzorem na některý obrázek.
Když se modul Gtranslate přepne z metody On fly do metody Google Default, tak již k překladu dochází (můžete sám vyzkoušet na svém webu). Nevíte, kde by mohl být problém, hodlám si koupit na svůj web Gtranslate Pro, ale potřeboval bych, aby toto bylo vyřešené.
Děkuji, hezký den
Dobrý den, s tím Vám asi neporadím. Zkuste napsat autorovi, je docela komunikativní, myslím, že odpoví.
Dobrý den,
už to na fórech možná zaznělo, ale nikde jsem to přesně nenašel. Mám web se dvěma jazyky. CZ a EN. V české administraci mi svítí české odkazy, v anglické jen anglické.
Když se ale přepnu do ostrého provozu, tak tam mám sice vlaječky na přepínání jazyka, ale menu mám české i anglické dohromady. Když kliknu na českou vlaječku, tak chci aby tam bylo jen české menu. Když kliknu na anglickou vlaječku, tak chci jen anglické menu. Jde o primary links, pomocí bloků to zatím řešit nechci. Nevíte jak na to? Jestli se nemá někde v administraci něco přepnout?
Děkuji
Martin
Dobrý den, v Nastavení webu > Jazyky > Multilingual system si zapněte, že chcete vidět jen aktuální jazyk.
V Drupalu 6 je to cesta do administrace admin/settings/language/i18n
Tohle tam mám myslím nastavené, ale nefunguje mi to. Zkusim to znovu. Děkuji
Ještě mě napadlo, jestli to neni někde nakonfigurovaný v tématu.
Tak jsem na to přišel proč se mi v administraci zobrazuje všechno správně a v ostrém provozu vidím v menu všechny jazyky najednou. V nastavení webu - jazyky - Mulgilingual system se musí nastavít poslední nabídka. All content. No language condition, protože jinak nefunguje v modulech active translation. Týká se to drupalu 6. Teď už všechno funguje tak, jak má.
Martin
Díky za info pro ostatní.
Dobrý deň, skúšal ste tento modul aj v Drupal 7? Aj keď v typoch obsahu povolím multilanguage, tak pri editácii nodu postrádam záložku "Přeložit". Neviete kde robím chybu? Ďakujem.
Tak už som na to prišiel. V typoch obsahu nestačí mať Podpora více jazyků: zapnuto, ale zapnuto s překladem. Možno to niekomu pomôže.
Dobrý den,
díky, článek pěkný.
Modul Internationalization funguje, ale modul Language Icons funguje s jedním omezením.
U dvou odkazů primárního menu se nezobrazí blok s přepínámím jazyka-vlaječky. Typ obsahu je u všech odkazů menu stejný-Stránka, jazyk všude neutrální, nastavení URL na stejném principu. Modul Language Icons (respektive-výběr jazyka) je v nastení bloku povolen k zobrazení všude. Nic mne nenapadá. Děkuji předem za reakci.
http://www.testuj-to.cz (zobrazí přepínání jazyka)
http://www.testuj-to.cz/k22 (nezobrazí přepínání jazyka)
Napadá mě jediné. Že ten daný obsah nemá odpovídající verzi v dalších jazycích, proto tam ty vlaječky nejsou.
Děkuji za reakci. V cestě:
Správa obsahu > Obsah > Seznam > Upravit > Jazyk: Jazykově neutrální přepnout na danou jazykovou verzi a uložit. V mém případě přepnuto na česky, německy, anglicky. Obsah se pak zobrazuje v daném jazyce v rámci url, importovaných-přeložených modulů ale samotný obsah stránky, článku je třeba upravit-přeložit ručně.
TY jazykové mutace (teď myslím překlady) se vytváří automaticky?
Ahoj, zajima mne, jestli nektery z modulu preklada automaticky veskery obsah a uklada je do kesh stranky, tak aby to vyhleavace mohli indexovat, co by melo mit za nasledek zvyseni navstevnosti webu...
Myslím, že to dělal ten GTranslate zmíněný na konci, ale velice rychle jsem pochopil, že strojový překlad není nic, co by chtěl člověk na seriozně míněném webu mít.
Rozjíždím vícejazyčný Web, ale nevím jak ošetřit neexistenci přeloženého obsahu - např. mám stránku jen v češtině, ale návštěvníka může napadnout kliknout na en vlaječku (modul language icons), potom drupal vrací hlášku, že stránka neexistuje.
Potřeboval poradit jestli jde modul s ikonami nastavit tak aby zobrazoval pouze ikony jazyků, v nichž existuje překlad článku nebo aby alespoň došlo k přesměrování na home ve zvoleném jazyce, pokud překlad neexistuje. Napadlo mě ručně vkládat místo lokalizovaného obsahu skript pro přesměrování, ale to je až poslední řešení.
Máte nějaký tip? Díky