Здесь я хотел бы изложить план, по которому будет создаваться патч для Fluxbox. Этот план будет для меня полезен, потому что возможно будет оценить как много/мало уже сделано, что нужно сделать следующим и т.д. Патч вообщем-то не очень сложный, но будет объемным. Его задача это возможность использования gettext. Gettext — это инструмент, позволяющий быстро и просто создавать приложения, которые бы легко поддавались локализации и интернационализации (в данный момент для меня оба этих слова являются синонимами, но вроде бы у них есть различия). Другими словами, программа, использующая gettext сможет легко и непринужденно «разговаривать» с пользователем на его языке (русском, немецком, французском и т.д.)
Всю работу, которую нужно сделать я разбил на три этапа, ниже даётся подробное описание как для них самих так и для их составляющих.
На этой стадии я подготовлюсь и подготовлю всё к созданию патча.
Ну без этого никуда :) Нужно прочитать info gettext и еще одну статейку из интернета, чтобы получить максимально полное и правильное представление о работе gettext и его внедрении в программу. Это нужно сделать до начала работ, чтобы потом мне не пришлось что-либо еще раз искать и исправлять, делая таким образом работу повторно.
Состояние: выполнено
На этой стадии выявляются файлы, которые я буду править. Это также поможет видеть сколько файлов я уже обработал и сколько осталось.
Имена файлов, которые нуждаются в правке и их количество:
Количество функций-макросов, использующихся сейчас во Флюксе, которые нужно будет исправлять:
Сразу же становится видно, что реально макрос _FBTK_XTEXT не используется нигде, а лишь определяется в src/FbTk/I18n.hh.
Ну и есть ещё один файл, который вообще лишь вскользь, в комментарии, упоминает класс I18n, это файл src/Xinerama.h Вот, теперь, список можно считать полным.
Состояние: выполнено
На этой стадии будет производиться основная работа по созданию патча, потому что именно в этом периоде я его создавать и буду.
Смысл здесь, это во всех файлах, из списка, составленного на стадии подготовки, заменить функции используемые во Fluxbox на функции gettext. Также производится «чистка» кода от любых упоминаний функций и заголовочных/исходных файлов, которые использовались до этого для локализации программы.
Состояние: в процессе
Мне понадобится скрипт, который бы конвертировал существующие cat-файлы в po-файлы. Возможно, что в интернете уже есть подобный скрипт, но и самому написать его будет интересно и, как мне кажется, не очень трудно. Нужен обязательно скрипт или какая-либо программа, потому что вручную конвертировать файлы это долго, нудно, возможны ошибки, за которые мне потом будет стыдно, ну и главный довод — это не путь кодера :) Здесь работа очень однообразная, можно легко задать алгоритм, а если есть алгоритм, то можно написать и программу, которая сделает все за меня по заданному алгоритму. Одним словом, как написано в HOWTO о том как стать хакером: «рутина — это зло».
Состояние: готово на 85%, необходима адаптация
Нужно будет создать отдельный каталог с po-файлами, чтобы при компиляции они «превращались» в mo-файлы, а при установке инсталлировались в /usr/share/locale/$LANG/LC_MESSAGES/fluxbox.mo Перед выполнением этого пункта следует прочитать info gettextize.
Состояние: готово на 70%, необходимо тестирование
С этим пунктом пока еще не все так ясно, потому что я не вникал в подробности, но при прочтении статьи о локализации shell-скриптов мне и пришла такая идея.
Состояние: отложено, но идея обдумывается снова
К началу этой стадии у меня уже будет патч и он будет работать ;) Мне останется лишь его хорошо протестировать и попытаться отправить в upstream то бишь разработчикам.
Попросить нескольких знакомых, которые используют Fluxbox попробовать патч, высказать свои предложения и найти ошибки. Также, думаю, что стоит выложить этот патч в интернете и дать анонс о нём в fluxbox_wm и на ЛОР (или если не пропустят новость, то в l_o_r).
Добавить патч в мою сборку Fluxbox для ALT Linux.
Тут самое главное ради чего я и затевал весь сыр-бор. Мне хотелось бы, чтобы разработчики приняли мой патч и включили в основное дерево разработки. Я уже говорил на эту тему и почти уговорил Henrik'а (главного разработчика), но тут подоспел Mathias и начал говорить, что это не надо :( Я не знаю почему он не хочет использовать gettext и зачем он хочет модернизировать обработку cat-файлов. Моё мнение, что технология c использованием gencat устарела и пытаться её улучшить это городить лишние костыли и изобретать велосипед. Особенно это выглядит странным на фоне существования gettext, который уже используется в большинстве проектов и работает. В нем уже учтены многие проблемы.
Замечу, что некоторые из пунктов во всех трёх стадиях возможно выполнять параллельно с другими пунктами или даже менять их очередность.