kernel panic in userspace

my own self destruction
  • Blog
  • about
  • articles
    • Virtualbox bridge
    • linux blogging
    • Gentoo on Acer Extensa 5630Z
  • code
    • @unfollowr
    • WordPress
      • WordPress-bbPress syncronization
      • IE Warning
      • PostAds
    • Callisto overlay
    • @listwatcher
  • CV
  • belarusian
  • russian
  • english

multilanguage wordpress + jLanguage hacking

Jan 07 2008
  • belarusian
  • russian

Все должны понимать, что многоязычный контент это труъ. Кто не понимает, то ошибается. Я беру более-менее общие случаи, когда материал может быть интересен людям, не владеющим его языком. Да и согласитесь, большинству из нас приятнее читать статьи в той же Википедии на своём родном языке. Мне вот приятнее читать статьи на русском или беларуском языке, это помогает абстрагироваться от процесса перевода и читать, а не читать и переводить одновременно.
Свой блог я сделал многоязычным чуть ли не по религиозным причинам. Большинство моих читателей живет за территорией Беларуси, мало того, для абсолютного большинства беларуский язык не является не то что основным, родным не является. RSS ленту беларускоязычной версии читает 2 человека по соображениям feedburner. Что же, читают не только через ленту, а тем, у кого в браузере стандартным стоит беларуский, в большинстве случаев и покажет соответствующий контент. Эдакий мой персональный культурный резистанс :-) Но все это вступление.

А теперь к сути. Все эти переводы реализуются с помощью плагина, т.к. сам по себе WordPress не предоставляет по умолчанию средств к локализации. О WPLANG я расскажу далее. Плагин этот – jLanguage, на данный момент версии 2.2. В общем и целом суть проста – определяем язык пользователя полуавтоматом (по настройкам браузера или по данным URL), ищем контент на нужном языке и выдаём, если не находим – выдаём стандартное. Все предельно просто, не правда ли? Сам контент переводится в следующем стиле:

[russian]текст на русском[/russian]
[belarusian]тэкст па-беларуску[/belarusian]
[english]text in english[/english]

Идея не нова, так или иначе её реализовывало много плагинов, просто большинство из них либо довольно плохо работают, либо в новых версиях WordPress вообще не работают.
Теперь перейдем к недостаткам. Плагин реализует только перевод заголовков и самих текстов. Остальное все ручками надо доделывать :-)
Для начала забудем о неполном функционале и заметим баг. Суть в том, что плагин при переключении на альтернативный язык javascript скриптом после загрузки страницы добавляет ко всем ссылкам атрибут lan=язык. Баг найден камрадом Serzh, исправлен мной. JavaScript я не знал, к документации не обращался, но оно удивительным образом работает. Патч можно скачать отсюда.
Снова вернемся к нашим баранам, а точнее к расширению функционала.
К переводу информации на нашем сайте неплохо было бы добавить и перевод всего сопутствующего функционала, как то даты, фразы “Добавить комментарий” и прочая. В WordPress за это отвечает Gettext, но он берет информацию о текущем языке из константы WPLANG. Кроме того есть фильтр locale. Остаётся только установить соответствие между текущим языком, определенным плагином jLanguage и языком WordPress. Что ж, дорогой читать, и это я сделал за тебя :-) Плагин можно скачать отсюда: wplang_changer-0.1c.tar.gz.
Замечания: для настройки придется немного подправить текст плагина, если хотите использовать языки, отличные от русского, беларуского и английского. Вам придется найти в файле следующую строку

$languages = array(‘russian’ => ‘ru_RU’, ‘belarusian’ => ‘be_BY’, ‘english’ => ‘en’);

И добавить в массив необходимые языки и их коды. Плагин использует класс jLanguage2, который держит с собой. Функционала jLanguage он не предоставляет равно как и возможностей настройки. Используйте только на пару с jLanguage. Также не забудьте поместить в директорию wp-includes/languages используемые файлы перевода на нужные языки (например ru_RU.mo, be_BY.mo), их найдете в локализованных пакетах WordPress.
Двигаемся далее в направлении совершенства :-) На очереди категории. Для начала стоит указать, что в WordPress длина названий категорий ограничено 55 знаками и для расширения нам придется выполнить следующий запрос в базе данных (например через phpMyAdmin):

ALTER TABLE префикс_таблицterms MODIFY name VARCHAR(255) NOT NULL

Префикс таблиц указывается в wp-config.php как $table_prefix.
Теперь длины названий должно хватить даже с учетом написания на паре языков с их полными названиями. Категории переводятся абсолютно аналогично другому контенту и названиям (см. выше). Далее нам нужно добавить фильтры для категорий в плагин jLanguage, добавляем следующие строки:

// Перевод категорий
add_filter(‘the_category’, ‘jLanguage_processTitle’);
add_filter(’single_cat_title’, ‘jLanguage_processTitle’);
add_filter(‘list_cats’, ‘jLanguage_processTitle’);

Подобные фильтры можно дописать и к другому контенту, например к ссылкам. Напоследок добавлю, что можно использовать функционал jLanguage в теме и своих плагинах, например при собственной выборке из базы данных.

Я пытался наиболее понятно показать возможности применения сторонних разработок для собственных нужд, рассказал возможности расширения. Как всегда, на абсолютную полноту материал не рассчитывает, он просто собирает то, что мне было полезно для собственной разработки, надеюсь будет кому-нибудь полезно. Комментарии приветствуются :-)

  • belarusian
  • russian

Усе павінны разумець, што шматмоўны кантэнт гэта тру. Хто не разумее, той памыляецца. Я бяру больш-менш агульныя выпадкі, калі матэр’ял можа быць цікавы людзям, якія не валодаюць яго мовай. Да таго ж пагадзіцеся, большасбці з нас прыемней чытаць артыкулы ў Вікіпэдыі на сваёй роднай мове. Мне вось прыемней чытаць артыкулы на расейскай ці беларускай мовах, гэта дапамагае абстрагіявацца ад працэсу пераклада і чытаць, а не чытаць і перакладаць адначасова.
Свой блог я зрабіў шматмоўным ледзь не праз рэлігійныя перакананьні. Большасьці маіх чытачоў жыве па-за тэрыторыяй Беларусі, мала таго, для абсалютнай большасьці беларуская мова не зьяўляецца не толькі асноўнай, але і роднай не зьяўляецца. RSS стужку беларускамоўнай вэрсіі чытае 2 чалавека па меркаваньням feedburner. Што ж, чытаюць ня толькі праз стужку, а тым, у каго ў браўзэры стандартнай стаіць беларуская мова, у большасьці выпадкаў і пакажа адпаведны кантэнт. Гэтакі мой асабісты рэзыстанс :-) Але гэта ўсё ўступ.

А цяпер да асноўнага. Усе гэтыя пераклады рэалізуюцца з дапамогай плягіна, таму што сам па сабе WordPress не дае па змоўчанбні сродкаў для лякалізацыі. Пра WPLANG я распавяду далей. Плягін гэты – jLanguage, на дадзены момант вэрсіі 2.2. Увогуле сутнасьць працэса праста – вызначаемся з мовай чытача паўаўтаматам (па наладках браўзэра ці праз дадзеныя URL), шукаем кантэнт на патрэбнай мове і выдаём, калі не знаходзім – выдаём стандартнае. Усё проста, праўда? Сам кантэнт прадстаўляецца ў наступным выглядзе:

[russian]текст на русском[/russian]
[belarusian]тэкст па-беларуску[/belarusian]
[english]text in english[/english]

Ідэя не новая, так ці інакш яе рэалізоўвала шмат плягінаў, проста большасьць зь іх ці даволі блага працуюць, ці ў новых вэрсіях WordPress увогуле не працуюць.
Цяпер пераходзім да недахопаў. Плягін рэалізуе толькі пераклад толькі назоў і саміх тэкстаў. Усё астатняе трэба дарабляць ручкамі :-)
Для пачатку забудземся пра няпоўны функцыянал і заўважым баг. Сутнасьць бага ў тым, што плягін пры пераключэньні на альтэрнатыўную мову javascript скрыптам пасьля загрузкі старонкі дадае да ўсіх спасылак атрыбут lan=язык. Баг знойдзены камрадам Serzh, выпраўлены мной. JavaScript я ня ведаў, да дакумэнтацыі не зьвяртаўся, але яно працуе цудоўным чынам. Патч можна спампаваць адсюль.
Зноў вернемся да нашых баранаў, а дакладней да пашырэньня функцыяналу.
Да перакладу інфармармацыі на нашым сайце няблага было бы дадаць і пераклад усяго функцыянала, які яе акружае, як то даты, фразы “Дадаць камэнтарый” і інш. У WordPress за гэта адказвае Gettext, але ён бярэ інфармацыі пра бягучую мову з канстанты WPLANG. Акрамя таго, ёсьць фільтр locale. Застаецца толькі ўсталяваць сувязь між бягучай мовай, якую вызначыў плягін jLanguage і мовай WordPress. Што ж, дарагі чытач, я зрабіў гэта за цябе :-) Плягін можна спампаваць адсюль: wplang_changer-0.1c.tar.gz.
Заўвагі: для наладкі прыйдзецца трошкі падправіць тэкст плягіна, калі хаціце выкарыстоўваць іншыя мовы, акрамя беларускай, расейскай і ангельскай. Вам прыйдзецца знайсьці ў файле наступны радок

$languages = array(‘russian’ => ‘ru_RU’, ‘belarusian’ => ‘be_BY’, ‘english’ => ‘en’);

І дадаць ў масіў неабходныя мовы і кады. Плягін выкарыстоўвае кляс jLanguage2, які мае з сабой. Функцыяналу jLanguage ён не дае, роўна як і магчымасьцей наладкі. Выкарыстоўвайце толькі на пару з jLanguage. Таксама не забудзьцеся пакласьці ў дырэкторыю wp-includes/languages неабходныя файлы пераклада на патрэбныя мовы (напрыклад ru_RU.mo, be_BY.mo), іх вы знойдзіце ў лякалізаваных пакетах WordPress.
Рухаемся далей у напрамку да абсалюту :-) На чарзе катэгорыі. Спачатку трэба зазначыць, што ў WordPress дліна назоў катэгорый абмежавана 55 сымбалямі і для пашырэньня нам спатрэбіцца выканаць наступны запыт у базе дадзеных (напрыклад праз phpMyAdmin):

ALTER TABLE прэфікс_табліцterms MODIFY name VARCHAR(255) NOT NULL

Прэфікс табліц вызначаецца ў wp-config.php як $table_prefix.
Цяпер дліны назоў павінна хапіць нават з улікам напісаньня на пары моў зь іх поўнымі назовамі. Катэгорыі перакладаюцца абсалютна аналягічн астатняму кантэнту і назовам (гл. вышэй). Далей нам трэба дадаць фільры для катэгорый у плягін jLanguage, дадаем наступныя радкі:

// Перевод категорий
add_filter(‘the_category’, ‘jLanguage_processTitle’);
add_filter(’single_cat_title’, ‘jLanguage_processTitle’);
add_filter(‘list_cats’, ‘jLanguage_processTitle’);

Падобныя фільтры можна дапісаць і да іншага кантэнту, напрыклад да спасылак. Напрыканцы дадам, што можна выкарыстоўваць функцыянал jLanguage у тэме і сваіх плягінах, напрыклад пры сваёй выбарке з базы дадзеных.

Я паспрабаваў найбольш зразумела паказаць магчымасьці выкарыстоўваньня чужых распрацовак для асабістых патрэб, распавёў пра магчымасьці пашырэньня. Як заўжды, матэр’ял не прэтэндуе на абсалютную паўнату, ён проста зьбірае тое, што мне было карысна пры маіх распрацоўках, спадзяюся, што будзе нечым вам карысны таксама. Каменты вітаюцца :-)

« true web sufrer back to linux-0.01 »

Tags
, afisha, alter table, coding, download, filters, gettext, jLanguage, localization, multilanguage, php, plugins, projects, sql, wordpress, wplang_changer
Categories
Belarusian, Russian
Meta
Subscribe [ru] Subscribe [be] Comments rss Trackback
Similar
twitter & jLanguage fix | jLanguage javascript tweaks | wordpress performance fail | jQuery val() & change() tricks | gajim and mpd daemon

2 responses to “multilanguage wordpress + jLanguage hacking”

Aug 28 2008
petimi (14:58:35) :

ooh maan
I wish you would have that hack in english too.

I’ve been trying to find a writing that teaches me how to handle categories and other page elements with jlanguage

If you have seen any sites with some english info ot’d be more than appreciated

thanks
petimi

Aug 28 2008
bobrik (16:14:48) :

I don’t know, but i can make patched jLanguage version to make handling more elements with translation possible. If you really need it :)
This hack is for any language

Leave a comment

You can use these tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


RSS antisocial feeling

  • Ворачиваться в страну шпрот собираешься?
  • (via priskorbno) хочу. давно хотел. где купить?
  • ??
  • "((foldl (+) 0 [1..100]) ^ 2) - (foldl (+) 0 (map (^ 2) [1..100]))"
  • ?

Tags

bash belarus blog blogs bugs coding concerts download friends fun gentoo google images internet javascript kde language life links linux livejournal me money music overlays perl photos php plugins portage projects rss school shell social social networks ssh studying tests twitter ubuntu univer vkontakte wifi wordpress

links

  • asocial feeling
  • Callisto overlay
  • daThumbs
  • last.fm
  • twitter
  • Vkontakte
  • ~idioteque

Recent Comments

  • bobrik on @listwatcher
  • Process_of_illumination on WordPress-bbPress syncronization
  • Process_of_illumination on WordPress-bbPress syncronization
  • Aviva Gabriel on @listwatcher
  • Aviva Gabriel on @listwatcher
  • Larry D. Halstead on @listwatcher
  • neagaoleg on Hide Mentions in Twitter Web Interface
  • neagaoleg on about
  • Martina Bella on @unfollowr
  • gamersroute.com on WordPress-bbPress syncronization

Archives

  • January 2010 (1)
  • November 2009 (2)
  • October 2009 (5)
  • September 2009 (2)
  • August 2009 (2)
  • July 2009 (3)
  • June 2009 (1)
  • April 2009 (2)
  • March 2009 (1)
  • February 2009 (1)
  • January 2009 (2)
  • December 2008 (12)
  • November 2008 (17)
  • October 2008 (20)
  • September 2008 (13)
  • August 2008 (25)
  • July 2008 (18)
  • June 2008 (15)
  • May 2008 (7)
  • March 2008 (1)
  • February 2008 (9)
  • January 2008 (11)
  • December 2007 (24)
  • November 2007 (27)
  • October 2007 (21)

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org

Creative Commons License rss comments rss valid xhtml