Русские символы под Линукс
Модератор: Модераторы
Давайте я выскажу более полно свою задачу.
Существует программа на Лазаре под Винду (в свою очередь переводилась с Делфи). Рассчитана она на работу с базой в Firebird в кодировке 1251. База уже существует и перекодировать ее не очень то и хочется.
Кроме того, в программе присутствуют строковые константы, содержащие русские символы. Ну и русские комментарии терять тоже не хочется.
Собственно, на Лазаря программа переделывалась ради кроссплатформенности. Т.е. с одной базой должны работать клинеты и из под Винды, и из под Линукса.
Может кто-то уже решал подобную задачу? Поделитесь методикой, если можно.
Существует программа на Лазаре под Винду (в свою очередь переводилась с Делфи). Рассчитана она на работу с базой в Firebird в кодировке 1251. База уже существует и перекодировать ее не очень то и хочется.
Кроме того, в программе присутствуют строковые константы, содержащие русские символы. Ну и русские комментарии терять тоже не хочется.
Собственно, на Лазаря программа переделывалась ради кроссплатформенности. Т.е. с одной базой должны работать клинеты и из под Винды, и из под Линукса.
Может кто-то уже решал подобную задачу? Поделитесь методикой, если можно.
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Ну, скажем так, некоторую часть этой проблемы я решал следующим образом: в WinXP открывал блокнотом файл с исходниками в ANSI кодировке (1251), а потом сохранял в UTF8. Или наоборот... не помню точно. С базой данных проблем вообще быть не должно, хотя при переносе с сервака на винде на сервак на линуксе однозначно лучше воспользоваться бэкап-рестором.tria писал(а):Давайте я выскажу более полно свою задачу.
Существует программа на Лазаре под Винду (в свою очередь переводилась с Делфи). Рассчитана она на работу с базой в Firebird в кодировке 1251. База уже существует и перекодировать ее не очень то и хочется.
Кроме того, в программе присутствуют строковые константы, содержащие русские символы. Ну и русские комментарии терять тоже не хочется.
Собственно, на Лазаря программа переделывалась ради кроссплатформенности. Т.е. с одной базой должны работать клинеты и из под Винды, и из под Линукса.
Может кто-то уже решал подобную задачу? Поделитесь методикой, если можно.
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
tria писал(а):базой в Firebird в кодировке 1251. База уже существует и перекодировать ее не очень то и хочется.
...
Т.е. с одной базой должны работать клинеты и из под Винды, и из под Линукса.
А "жарптичка" поддерживает опцию соединения вроде CLIENT_ENCODING ? Вроде бы серьезный сервер - должна быть. Или ошибаюсь ?
tria писал(а):Кроме того, в программе присутствуют строковые константы, содержащие русские символы. Ну и русские комментарии терять тоже не хочется.
Сочувствую - комплексное и прозрачное решение, по части строковых констант и комментариев, вижу пока только в MSEgui ( изначально сделанном под знаменем тотального UNICODE). Там в редакторе задается формат хранения исходников "utf8" ( что даст одинаковый текст и в Вынь32, и в Линуксе ), а для компилятора - выставляется недокументированная FPC-опция "-Fcutf8" ( для переноса строковых констант в бинарники без искажений ).
Короче, если Лазарус тоже умеет хранить исходники в utf8, то остается вопрос - прописать "-Fcutf8", да так, чтобы срабатывало каждый раз при сборке проеков.
tria писал(а):В /usr/lib/locale/ каталога ru_RU.cp1251 небыло. После:
localedef --no-archive -i ru_RU -f cp1251 ru_RU.cp1251
он появился.
Пробую:
# LC_ALL=ru_RU.cp1251 strace -e trace=open lazarus 2>&1 |grep ru_RU
open("/usr/share/locale/ru_RU.cp1251/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru_RU/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
-*-arial-medium-r-normal--12-*-*-*-*-*-microsoft-cp1251,*-r-*" does not support all the required character sets for the current locale "ru_RU.cp1251"
open("/usr/share/locale/ru_RU.cp1251/LC_MESSAGES/gtk+.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru_RU/LC_MESSAGES/gtk+.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
Вопрос. Почему ищется файл в /usr/share/locale/ru_RU/
а не в /usr/lib/locale/
?
От чего это зависит?
Не, ну я конечно могу попробовать тупо скопировать директорию из одной папочки в другую. Но я линукс не знаю и не ведаю, к чему это приведет.
в /usr/lib/locale/ лежит описание локали в /usr/share/locale/ru_RU.cp1251/LC_MESSAGES лежат переводы сообщений программ
так что можешь спокойно файлики libc.mo и gtk+.mo из американской локали в /usr/share/locale/ru_RU.cp1251/LC_MESSAGES копировать.
будет у тебя вместо "Да"/"Нет" "Yes"/"No"
Я так понял, что все предлагают переходить на utf8. У меня соответствпенно накопилось еще несколько вопросов.
1. Может ли Лазарус под Виндоуз работать в кодировке utf8? И как это сделать?
2. Как указать визуальным компонентам, что они работают в utf8?
3. Поддерживает ли FIBL utf8?
4. Я так понял, редактор исходного кода Лазаря под Линукс работает только в utf8? (имеется в виду последний, 0.9.16).
5. Каких граблей стоит ожидать при работе с переменными типа string?
1. Может ли Лазарус под Виндоуз работать в кодировке utf8? И как это сделать?
2. Как указать визуальным компонентам, что они работают в utf8?
3. Поддерживает ли FIBL utf8?
4. Я так понял, редактор исходного кода Лазаря под Линукс работает только в utf8? (имеется в виду последний, 0.9.16).
5. Каких граблей стоит ожидать при работе с переменными типа string?
tria писал(а):Судя по всему, в Win32 работать с utf8 нет возможности.
Тогда может кто-нибудь подскажет, как можно заставить работать редактор кода в Линуксе на кодировке cp1251?
Я так понимаю, в версии 0.9.14 такая возможность была, а начиная с 0.9.16 ее убрали...
что конкретно не работает?
Код: Выделить всё
LC_ALL=ru_RU.cp1251 lazarusрезультат:
Lazarus 0.9.16
Ubuntu 6.06 LTS
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
jwv писал(а):У тебя получилось под ГТК2 скомпилить? точнее он у тебя под ГТК2 заработал? у меня нет, правда я особо и не старался
в Лазаре скомпелённом под ГТК1 вполне нормально ГТК2 проги писать можно
0.9.14 скомпилился и под CentOS и под MyLinux
0.9.16 только под CentOS, под MyLinux не захотел.
Вчера снес Лазаря на MyLinux-е и поставил с нуля. Запустил
LC_ALL=ru_RU.cp1251 LANG==ru_RU.cp1251 lazarus
И появился русский текст в редакторе кода! Но в таком г.. шрифте...
Запустил из меню, установил интерфейс en - говорит, что шрифт не поддерживает utf8.
После этого запустил снова в cp1251 - изменился шрифт и вместо русских символов кракозяберы. Пытаюсь установить шрифт в редакторе - список шрифтов пустой.
Я так понял, текущая проблема - это шрифты. Щас сижу гуглю по этому поводу.
