Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заметка о мультиязычности БД. Как я трогал юникод. VCL -> BDE -> Paradox -> BDE -> VCL 
:(
    Опции темы
pseud
Дата 22.10.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Пишу подсистему для инфокиоска. 
Мультиязычная. Точнее двуязычная - русский/английский.
И все бы было хорошо, если бы так и оставалось [мульти = два].
Я, конечно, не верю словам Заказчика, который планирует пригласить кучу переводчиков и напереводить на кучу языков.
Но разум подсказывает, что минимум +1 язык он таки высосет. 
Может немецкий, а может французский (главное, чтоб не арабский и не китайский).

Воспоминания ползанья по форумам навеяли: "Юникод... Проблемы... Опа..."

Инструментарий: Delphi 6 Update Pack 2, Paradox, BDE. 

Да, есть уйма юникодовых компонентов (в частности, TNT). Да, дам я пользователю ввести в них всякие немецкие "умляуты" и прочие европейские буковки с закорючками то сверху/то снизу. А как эту радость сохранить в БД. Как ее оттуда достать. Как отобразить тупо в Label.

Уже видел во сне как вместо TEdit у меня сплошные TJvRichEdit, как сохраняю я значения полей не в БД, а в rtf-файлы. 
Кошмар.

Решил задать вопрос на форуме (делаю я это не то что редко, а.... 2 раза за все время пребывания).

Создал демо проектик, чтобы было людям куда тыкнуть меня носом. Без использования сторонних компонентов, чтобы у всех компилилось с базовой установкой. TEdit, TDatabse, TQuery, TDBGrid.
И тут облом - ВСЕ РАБОТАЕТ.

Итак Работающий_проект:
(во вложении проект с табличкой Paradox. если установлен BDE, то все заработает)

Таблица БД:
  - создана через Database Desktop
  - Paradox 7
Код

------------------------
t_names (Paradox)
------------------------
id    + 
name_ru    A 100
name_en    A 100
name_de    A 100
name_fr    A 100
name_it    A 100
------------------------


Приложение:

В группе Edit'ов для создания записи БД в первом Edit выставлено Font.Charset = RUSSIAN_CHARSET, в остальных - ANSI_CHARSET.
Аналогично - правая группа для отображения записи из БД.
В DBGrid1 вручную заваедены колонки и колонкам по аналогии с Edit'ами выставлены чарсеты.
На скриншоте все показано:

user posted image

Грабли №1

Как известно, проекты Delphi 6, использующие базовые контролы, выглядят а-ля Win98.
Для решения этого вопроса в D7 есть компонент XPManifest и все (ну или многое) приобретает вид XP (в Win XP, конечно).
Немножко заточить руки и в D6 можно заюзать этот манифест. Что я всегда и делаю.
Что было замечено:
  - никаких чарсетов выставлять не нужно в Edit'ах. В одном Edit можно писать и на русском, и на немецком, и на французском одновременно.
  - сохраняет в БД не то, что надо. А именно, например, вместо "а-умляут" - "просто-а".

отключаем манифЭст, и идем жевать агрЭст

Грабли №2 

На них я наступил сразу же. Даже из-за них чуть не пошел другим путем. Хорошо в офисе много тачек и не на всех эта проблема "решена".
С многими прогами случаются казусы, ака:
  - фотошоп русифицированный пишет кракозаблы
  - детская игра с конячками в диалогах конячек пишет ??????
  - DatabaseDesktop (ой стыыыдно) - тоже че та там вместо русского кочевряжит.
Лезем на форумы. А кто поумнее - копаем память. И опа - решение найдено.
Лезем в реестр и правим кодовые страницы:
1252 присваиваем "1251.nls" (а на всякий случай и 1250 := "1251.nls")
Перезагружаемся - УРА. Все работает.
Зато у нас ничего не работает.
Вот на эти грабли я и наступил.
Код

  - Edit1.Font.Charset = 'ANSI_CHARSET'
  - запускаем прогу
  - селектим немецкий язык
  - пишем всякие "умляуты" 
  - видим "без_умляуты"


Смотрим Панель управления/Язык/Дополнительно:
user posted image
1252 (ANSI - латиница 1)
Так какого ... фига мы ее обзываем кирилицей? Какого фига мы должны страдать от ... Adobe-программистов? ;)

возвращаем все кодовые страницы на свои места (привет рашн_фотошоп_пользователям)

Вложение:

Это сообщение отредактировал(а) pseud - 22.10.2008, 12:31

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  MultiLangProject.zip 408,07 Kb


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1072 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.