понедельник, 14 июня 2010 г.

twiki 5 и русский язык в TinyMCEPlugin

Есть такая корпоративная Wiki для Enterprise сегмента, TWiki (а так же ее форк FosWiki). Очень мощное решение, изначально написанное для корпоративного использования.
Единственное, что я в ней никогда не любила, так это то, что она написана на Perl, который я не знаю.

Кто-то, конечно, использует и MediaWiki (которая и мне сама по себе гораздо больше нравиться) и другие Wiki вроде Maco, а так же проприетарные и платные Wiki, но все-таки для Enterprise сегмента мощный ACL + LDAP must have, а с этим, особенно с первым, у MediaWiki не так хорошо.

В Twiki, к сожалению, время от времени возникают проблемы с кирилицей, так как русских среди контрибьютуров очень мало.

Вот и сегодня, когда ставили 5.0 заказчику, всплыла проблема с кирилицей в плагине TinyMCE

Cannot decode string with wide characters at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/Encode.pm line 173., referer: http://wiki.домен.tld/bin/edit/Web_заказчика/WebHome?t=1276519484

Нужно сказать, что в нашей инсталляции, еще четвертой ветки, этой проблемы не было.

Вот патч, который написала на скорую руку, для файла lib/TWiki/Plugins/WysiwygPlugin/HTML2TML.pm

--- lib/TWiki/Plugins/WysiwygPlugin/HTML2TML.pm /root/HTML2TML.pm 2010-06-14 16:55:29.000000000 +0400
+++ /root/HTML2TML.pm 2010-06-14 17:00:46.000000000 +0400
@@ -109,9 +109,11 @@

# If the text is UTF8-encoded we have to decode it first, otherwise
# the HTML parser will barf.
- if (WC::encoding() =~ /^utf-?8/) {
- $text = Encode::decode_utf8($text);
- }
+
+ if (utf8::valid($text)) {
+ utf8::decode($text);
+ }
+

# get rid of nasties
$text =~ s/\r//g;
@@ -126,9 +128,12 @@
$text = $this->{stackTop}->rootGenerate( $opts );

# If the site charset is UTF8, we need to recode
- if (WC::encoding() =~ /^utf-?8/) {
$text = Encode::encode_utf8($text);
- }
+
+ if (utf8::valid($text)) {
+ utf8::decode($text);
+ }
+

# Convert (safe) named entities back to the
# site charset. Numeric entities are mapped straight to the

Не забудьте поставить в configure скрипте

Localisation -

{UserInterfaceInternationalisation} - галочку

{Languages}{ru}{Enabled} - галочку

{DefaultDateFormat} - день-месяц-год

{UseLocale} - галочку

{Site}{Locale} - ru_RU.UTF-8

{Site}{CharSet} - UTF-8


Все это ставится на CentOS 5, никаких CPAN-модулей, разрушающих пакетную структуру системы. Советую вот этот официальный ман

Все прекрасно ставится и работает из RPM(CPAN-модули из RPM) с русским языком :)