О кодировках различных замолвите слово
Привет!
Разнообразие кодировок зачастую (иногда?) приводит и пользователей и разработчиков к необходимости творить "чудеса" находчивости...
Вообщем, нынче наткнулся на проблемку в одной
Всем привет, недавно опять решил предпринять очередную попытку вставать рано,
из CMS: в админке и еще в нескольких местах слова выводились на русском языке но с первой буквой ввиде "кракозяблы"
Первое на что подумал - файл перевода, начал копать где же он хранится... оказалось все намного интереснее чем просто файлик.
Хранилось это добро в формате библиотеки gettext, используя дляиз CMS: в админке и еще в нескольких местах слова выводились на русском языке но с первой буквой ввиде "кракозяблы"
Первое на что подумал - файл перевода, начал копать где же он хранится... оказалось все намного интереснее чем просто файлик.
Хранилось это добро в формате библиотеки gettext, используя для
Всем привет! Сегодня хочу предложить тем читателям блога, которые интересуются
этого всего два файла на каждый язык - messages.mo ("скомпилированный" из текстового файла) и messages.po (собственно текстовый исходник). Преобразование из одного файла в другой происходит с помощью linux команды msgfmt, собственно такой вот командой:
msgfmt -o messages.mo messages.po
Эта махинация потребовалась мне, чтобы подправить местами перевод и скомпилировать бинарную версию. Но на этом проблема не изчезла, и продолжая копать уже сам код в очередной раз убедился, что "все гениальное просто" - оказалось что скрипт использует вывод некоторых строк с помощью функции ucfirst, которая и коверкала первую букву.
Причины сего безобразия выяснять не стал, т.к. решил что форматирование строк - это уже дело HTML+CSS. Возможно это потому что данная функция некорректно работает с UTF-8, либо с русской локалью. На всякий случай, для тех кто столкнется с этой же проблемой, вот решение:
а)этого всего два файла на каждый язык - messages.mo ("скомпилированный" из текстового файла) и messages.po (собственно текстовый исходник). Преобразование из одного файла в другой происходит с помощью linux команды msgfmt, собственно такой вот командой:
msgfmt -o messages.mo messages.po
Эта махинация потребовалась мне, чтобы подправить местами перевод и скомпилировать бинарную версию. Но на этом проблема не изчезла, и продолжая копать уже сам код в очередной раз убедился, что "все гениальное просто" - оказалось что скрипт использует вывод некоторых строк с помощью функции ucfirst, которая и коверкала первую букву.
Причины сего безобразия выяснять не стал, т.к. решил что форматирование строк - это уже дело HTML+CSS. Возможно это потому что данная функция некорректно работает с UTF-8, либо с русской локалью. На всякий случай, для тех кто столкнется с этой же проблемой, вот решение:
а)
использовать многобайтовый (mb_*) вариант функции ucfirst, однако насколько я знаю она еще не входит в php, но ее можно найти в комментариях к ucfirst на php.net.
б) выводить строку без преобразования, задавая стиль в шаблонах (собственно это я и выбрал)
P.S: Эх, давно не писал в блог, совсем обленился, а ведь столько есть мыслей и идей, которыми хотелось бы поделится с народом, но постараюсь постепенно возвращаться "в струю"
Что за это время произошло - думаю мало кому будет интересно, скажу лишь что замечательно отдохнул в сентябре на южном берегу Крыма с близким другом и партнером по офигенным проектам - testing openx !