C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Интернационализация приложения
Daisy
Отправлено: 04.12.2005, 18:51


Дежурный стрелочник

Группа: Участник
Сообщений: 36



Подскажите, пожалуйста.
Не пойму, можно ли и, если можно, то как можно переключать язык приложения в процессе работы программы, а не на этапе компиляции и не в зависимости от языка Windows.
Ресурсы храню в файле .dfm.
Хочется, чтобы можно было выбрать язык из меню программы или хотя бы в формочке при запуске приложения.
Gal
Отправлено: 05.12.2005, 13:15


Станционный диспетчер

Группа: Участник
Сообщений: 124



Посмотри подобные программы!
В них есть внешние файлы содержащие ту или инию кодировку,
и в зависимости какой язык ты выбираещь происходит чтение из того или иного файла
Daisy
Отправлено: 06.12.2005, 10:29


Дежурный стрелочник

Группа: Участник
Сообщений: 36



Мне не понятно, как это сделать средствами Билдера, если ресурсы. Resource DLL Wizard, перевод. А дальше нужна компиляция для разных языков отдельно. sad.gif
Guest
Отправлено: 06.12.2005, 11:01


Не зарегистрирован







к примеру создаещь два ини файла в одно английский в другом русский
пример
На русском
[Menu]
Item1="Файл"
Item2="Открыть"
...

На английском
[Menu]
Item1="Files"
Item2="Open"
...

в меню есть пункты выбора языка-Выбиращь русский открыващь ини файл на русском и в меню Caption items присваиваещ. значения прочитанные из файла. вотпримерно так в двух словах
Daisy
Отправлено: 07.12.2005, 11:03


Дежурный стрелочник

Группа: Участник
Сообщений: 36



Ура. Все получилось. Спасибо.
Русский, английски — все нормально.
Извините, что туплю. Но ещё вопрос.
А может либыть ини-файл юникодом? Немецкие умляюты и всякие гачеки (ščě) не хотят из него читаться.
Gal
Отправлено: 07.12.2005, 11:10


Станционный диспетчер

Группа: Участник
Сообщений: 124



Ну в принципет я с юникодом не работал, но думаю для этой цели лучше использовать не ini файл , а xml, в нем в первой строке указывается кодировка.
Gedeon
Отправлено: 07.12.2005, 12:50


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (Daisy @ 07/12/2005, 11:03)
А может либыть ини-файл юникодом? Немецкие умляюты и всякие гачеки (ščě) не хотят из него читаться.

Ини файл может хранить все, что угодно, и, читается он скорее всего правильно, а вот отобразиться не может, для отображения юникода нужны другие компоненты, ищите по форуму, я приводил ссылку, да тип переменной надеюсь WideChar используете.
Daisy
Отправлено: 07.12.2005, 16:30


Дежурный стрелочник

Группа: Участник
Сообщений: 36



[CODE] TIniFile *iniRussian;
iniRussian = new TIniFile(ChangeFileExt(Application->ExeName, ".INI"));
pMenuSettings = iniRussian -> ReadString("Menu","mSet", "ms");

delete iniRussian;


.....

Label1->Caption = IntToStr(pMenuSettings.Length());

[CODE]

// Отображается число символов вне зависимотсти от ASCII или UNICODE. Или ансистринг надо как-то настроить, чтоб он читал уникод?
Gedeon
Отправлено: 07.12.2005, 16:57


Ветеран

Группа: Модератор
Сообщений: 1742



Используйте WideString вместо АнсиСтринг, и еще я не уверен что борландовский TIniFile умеет читать юникод, тогда используйте апи, ну или все же лучше xml
Daisy
Отправлено: 07.12.2005, 17:11


Дежурный стрелочник

Группа: Участник
Сообщений: 36



А ну да, WideString конечно же smile.gif
Спасибо большое. Буду копать.

Вернуться в Вопросы программирования в C++Builder