![]() |
Модераторы: THandle, bems |
![]() ![]() ![]() |
|
lukas |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: нет Всего: 15 |
Можно использовать еще хитрее трюк, чем трюк с кодами фраз. Но он несет в себе опасность, зато программы переводить очень легко:
Функция t переводит фразу, где нибудь у нас есть база соответствий всех фраз англ и другого языка. Если необходимо вставить в фразу какой-то динамический контент, используем Format.
Функции можно укоротить , превратить в одну. -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
||||
|
|||||
imageman |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 30.9.2004 Репутация: нет Всего: 1 |
я немного переработал
1. Определяем глобальные переменные (отдельный юнит) 2. Переводим все глобальные переменные на другой язык (процедура) 3. Используем эти переменные по мере необходимости пункт 2 выглядит так:
DetektorTeksta без кавычек - глобальная переменная 'DetektorTeksta' в кавычках - название строки в ini файле, который отвечает за перевод 'Детектор текста' - если в ini файле перевода нету, то переменной присвоить это значение. А заодно при выходе из программы написать в ini файл: DetektorTeksta=Детектор текста при этом как только мы исправим ini файл при следующем запуске мы получим новое значение глобальной переменной Пункт 2 делал следующим образом. Создал монитор clipboardа. Прошелся в редакторе по всем строковым константам (find ' ). Выбираем вместе с '' строку, копируем в буфер обмена. Программа-монитор берет оттуда, в один файл пишет
в другой
и в буфер обмена помещает DetektorTeksta т.е. мы вручную выбираем в редакторе кода строку - Ctrl-X Ctrl-V а потом подсоединяем пару файлов к проекту. Насчет перевода формы сделал довольно монстрообразную функцию, которая перебирает все компоненты на форме, определяет что за компонент (класс) и перебирает все строковые поля компонента. Ну и переводит их через функцию Translate. Результирующая строка в ini файле перевода что-то вроде такого
Это сообщение отредактировал(а) imageman - 29.11.2010, 14:49 |
||||||||
|
|||||||||
remax |
|
|||
![]() Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
а JEDI VCL не подходит? (компонент TJvTranslator и связанные с ним...) Работает в runtime. Переводить можно все - resourcestring, caption's и т.д, и т.п. Сама либа (v3.38) идет вплоть до D2010.
P.S. Я пользую этот функционал под D7. Нормально работает.... Это сообщение отредактировал(а) remax - 30.11.2010, 03:54 -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
imageman |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 30.9.2004 Репутация: нет Всего: 1 |
на досуге посмотрю. Интересно, как он работает с юникодами и с Ansi строками |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
||||
|
||||
remax |
|
|||
![]() Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
Вот еще "Пример достаточно мощной многоязыковой поддержки. Языки хранятся в отдельных ини-файлах. Поддерживается ANSI, UTF-8 и Unicode. Можно изменять значение любого свойства любого компонента на любой форме. Все это делается одной командой:
LangReader.SetLanguage(nil, LangFileName). Проверено на D7, D2007, D2010. " Имя файла: multilang.zip Размер файла: 567057 байт Дата закачки: 12.12.2009 22:59:21 GMT Количество скачиваний: 514 Автор: Логинов Дмитрий сайт:http://matrix.kladovka.net.ru (в разделе разное) скачать multilang.zip П.С. Я сам еще не проверял..... Это сообщение отредактировал(а) remax - 4.12.2010, 23:50 -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
remax, спасибо. Там есть много вкусного
![]() |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
||||
|
||||
klyaksa |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Кто-нибудь использовал Lingobit Localizer?
Я пощупал TSiLang в течение нескольких дней. Продукт вроде хороший, мощный. Но я его удалил. Глючит. Константы переводит не так, как я ожидал. Встроить в программу переводчик не получится, нужно пользователям отдавать их специальный редактор переводов. Пока что не буду использовать. |
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 3 Всего: 18 |
А учитываете динамическую смену языка в элементах управления? Конечно, данная возможность может показаться не существенной, так как используется всего один раз за весь цикл жизни программы, однако в большинства популярных программ такая возможность есть.
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
||||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 3 Всего: 18 |
А если использовать такой алгоритм:
Есть класс, LanguageManager который имеет статическую коллекцию windows, в которой хранятся ссылки на окна. Когда окно создаётся, оно добавляется в эту коллекцию, когда уничтожается уберается из неё. Хотя может такая коллекция в какой-то части приложения и так существует... Дальше, этот класс LanguageManager имеет метод ChangeLanguage, который проходит эту коллекцию циклом и находит все элементы управления. Если имя элемента управления содержится в сопоставленном ини-файле, значит мы меняем свойство Caption на соответствующее в ини-файле. Метод ChangeLanguage нужно вызывать каждый раз при создании окна и после инициализации элементов управления. Ну и соответственно в LanguageManager хранить текущий язык. Как мне кажется реализовать не сложно, хотя могу ошибаться, так как давно с делфи не работал. Но в результате язык приложения должен меняться динамически (при вызове метода ChangeLanguage), который можно реализовать не только при загрузке окна а и на какой то кнопке вроде (сменить язык). Потом, локализировать может кто угодно, так как достаточно добавить новый ини.файл(Где то будет директория, в которой будут содержатся эти файлы). И потом, не нужно никаких компонентов ![]() |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: нет Всего: 58 |
Так это сделано в CnPack, по крайней мере визуально )
Кстати, их компоненты что-то никто не перечисляет - вкладка CnMultiLang, 4 компонента, пробуйте. Это сообщение отредактировал(а) Keeper89 - 16.6.2011, 12:07 |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
А никто и не знал. А есть инструкция? Может есть на русском? Примеры... картинки...
Добавлено через 42 секунды Гугл про CnMultiLang ваще ниче не ведает |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi" | |
|
Добро пожаловать в форум группы "Delphi". В разделе разрешается:
Строго запрещено:
Если Вам понравилась атмосфера форума, заходите к нам чаще! Люблю, целую, вечно Ваш, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Форум группы: delphi | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |