Многоязычный интерфейс в приложении на Lazarus

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Многоязычный интерфейс в приложении на Lazarus

Сообщение ViruZ »

Каким образом можно создать приложение с мультиязычным интерфейсом (чтобы можно было локаль устанавливать как в LAZARUS IDE)?
Пишу прогу для Linux/Windows, нужно использовать разные кодировки в интерфейсе.
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Исхо, самый надежный способ - это подгрузка текстовых строк из заданного файла. Ну а файл это может быть в любой кодировке. Собственно, как-то так Лазарь и работает (точно не знаю - исходники в этом месте не смотрел :) )
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

Хорошо, текстовые строки подгружать не сложно, но оригинальный интерфейс тогда приходится писать английский? Если я буду одновременно работать то под Линухом, то под Виндой, другого выхода нет?
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Я сделал таким образом:
- текстовый файл загружаю в открытый массив array of string
- в текстовых полях компонентов вместо текста указал номера строк из этого массива
- написал одну процедурину, которая перебирает все компоненты формы и меняет номера на тексты.

Одно неудобство - на этапе разработки плохо видно, как будет выглядеть форма, неудобно работать с менюшками.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Лазарь локализован с помощью GNU Gettext, как, собственно, и весь Linux. Строки при этом берутся из .mo файла, который отличается от текстового, по сути, только наличием дерева для быстрого поиска. Оригинальный интерфейс пишут, как правило, на английском, но для gettext это безразлично - его задача найти исходную строку и взять соответствующую ей пару. Если не нашел, то строка просто остается в непереведенном виде.
Что в Лазаре делается автоматически, а что нужно вручную - я до сих пор так и не понял. Теоретически, должно быть достаточно положить нужный .mo в нужную папку. Но все это можно глянуть в файле lcl\defaulttranslator.pas
Ответить