Модераторы: THandle, bems

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Локализация приложения на Delphi 
:(
    Опции темы
lukas
Дата 20.11.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



Можно использовать еще хитрее трюк, чем трюк с кодами фраз. Но он несет в себе опасность, зато программы переводить очень легко:

Код

ShowMessage( t('Yor Message') );


Функция t переводит фразу, где нибудь у нас есть база соответствий всех фраз англ и другого языка. Если необходимо вставить в фразу какой-то динамический контент, используем Format.

Код

ShowMessage( t(Format('Your %s Message')) );


Функции можно укоротить , превратить в одну.


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
imageman
Дата 29.11.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.9.2004

Репутация: нет
Всего: 1



я немного переработал

1. Определяем глобальные переменные (отдельный юнит)
2. Переводим все глобальные переменные на другой язык (процедура)
3. Используем эти переменные по мере необходимости

пункт 2 выглядит так: 
Код

DetektorTeksta:=Translate('DetektorTeksta','Детектор текста');

DetektorTeksta без кавычек - глобальная переменная
'DetektorTeksta' в кавычках - название строки в ini файле, который отвечает за перевод
'Детектор текста' - если в ini файле перевода нету, то переменной присвоить это значение. А заодно при выходе из программы написать в ini файл:
DetektorTeksta=Детектор текста
при этом как только мы исправим ini файл при следующем запуске мы получим новое значение глобальной переменной

Пункт 2 делал следующим образом. Создал монитор clipboardа. Прошелся в редакторе по всем строковым константам (find ' ). Выбираем вместе с '' строку, копируем в буфер обмена. Программа-монитор берет оттуда, в один файл пишет
Код

var DetektorTeksta


в другой 
Код

DetektorTeksta:=Translate('DetektorTeksta','Детектор текста');


и в буфер обмена помещает DetektorTeksta

т.е. мы вручную выбираем в редакторе кода строку - Ctrl-X Ctrl-V
а потом подсоединяем пару файлов к проекту. Насчет перевода формы сделал довольно монстрообразную функцию, которая перебирает все компоненты на форме, определяет что за компонент (класс) и перебирает все строковые поля компонента. Ну и переводит их через функцию Translate. Результирующая строка в ini файле перевода что-то вроде такого 
Код

m_openTiff.caption="Импортировать файл изображения"
SpeedButtonSaveProj.Whint="Сохранить проект<Ctrl+S>"

(префикс W использовал для юникодных переменных).


Это сообщение отредактировал(а) imageman - 29.11.2010, 14:49
PM MAIL   Вверх
remax
  Дата 30.11.2010, 03:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



а JEDI VCL не подходит?  (компонент TJvTranslator и связанные с ним...)  Работает в runtime. Переводить можно все - resourcestring, caption's и т.д, и т.п.  Сама либа (v3.38) идет вплоть до D2010.


 P.S. Я пользую этот функционал под D7. Нормально работает....

Это сообщение отредактировал(а) remax - 30.11.2010, 03:54


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
imageman
Дата 30.11.2010, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.9.2004

Репутация: нет
Всего: 1



Цитата(remax @ 30.11.2010,  02:44)
компонент TJvTranslator и связанные с ним...

на досуге посмотрю.

Интересно, как он работает с юникодами и с Ansi строками 
PM MAIL   Вверх
Akella
Дата 30.11.2010, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



Цитата(remax @  30.11.2010,  03:44 Найти цитируемый пост)
а JEDI VCL не подходит?

для этого нужно ставить весь этот мусорник двух пакетов: JCL + JVCL, хотя там есть выбор устанавливаемых компонент
PM MAIL   Вверх
remax
Дата 4.12.2010, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 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


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Akella
Дата 5.12.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



remax, спасибо. Там есть много вкусного  smile 
PM MAIL   Вверх
Akella
Дата 17.12.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



PM MAIL   Вверх
klyaksa
Дата 18.2.2011, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

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



PM MAIL   Вверх
Akella
Дата 7.6.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



Кто-нибудь использовал Lingobit Localizer?



Я пощупал TSiLang в течение нескольких дней. Продукт вроде хороший, мощный. Но я его удалил. Глючит. Константы переводит не так, как я ожидал. Встроить в программу переводчик не получится, нужно пользователям отдавать их специальный редактор переводов. Пока что не буду использовать.
PM MAIL   Вверх
Rohoss
Дата 7.6.2011, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 3
Всего: 18



А учитываете динамическую смену языка в элементах управления? Конечно, данная возможность может показаться не существенной, так как используется всего один раз за весь цикл жизни программы, однако в большинства популярных программ такая возможность есть.


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Akella
Дата 7.6.2011, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



Цитата(Rohoss @  7.6.2011,  16:55 Найти цитируемый пост)
А учитываете динамическую смену языка в элементах управления?

ну конечно smile 
Мы учитываем
PM MAIL   Вверх
Rohoss
Дата 15.6.2011, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 3
Всего: 18



А если использовать такой алгоритм:
Есть класс, LanguageManager который имеет статическую коллекцию windows, в которой хранятся ссылки на окна. Когда окно создаётся, оно добавляется в эту коллекцию, когда уничтожается уберается из неё. Хотя может такая коллекция в какой-то части приложения и так существует... Дальше, этот класс LanguageManager имеет метод ChangeLanguage, который проходит эту коллекцию циклом и находит все элементы управления. Если имя элемента управления содержится в сопоставленном ини-файле, значит мы меняем свойство Caption на соответствующее в ини-файле. Метод ChangeLanguage нужно вызывать каждый раз при создании окна и после инициализации элементов управления. Ну и соответственно в LanguageManager хранить текущий язык.
Как мне кажется реализовать не сложно, хотя могу ошибаться, так как давно с делфи не работал. Но в результате язык приложения должен меняться динамически (при вызове метода ChangeLanguage), который можно реализовать не только при загрузке окна а и на какой то кнопке вроде (сменить язык). Потом, локализировать может кто угодно, так как достаточно добавить новый ини.файл(Где то будет директория, в которой будут содержатся эти файлы). И потом, не нужно никаких компонентов  smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Keeper89
Дата 16.6.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: нет
Всего: 58



Так это сделано в CnPack, по крайней мере визуально )
Кстати, их компоненты что-то никто не перечисляет - вкладка CnMultiLang, 4 компонента, пробуйте.

Это сообщение отредактировал(а) Keeper89 - 16.6.2011, 12:07


--------------------
PM MAIL WWW   Вверх
Akella
Дата 16.6.2011, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



А никто и не знал. А есть инструкция? Может есть на русском? Примеры... картинки...

Добавлено через 42 секунды
Гугл про CnMultiLang ваще ниче не ведает
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle

Добро пожаловать в форум группы "Delphi".

В разделе разрешается:

  • Флудить (в приемлемых величинах)
  • Обсуждать модерирование данного раздела (но не его модератора)
  • Добавлять свои правила если они не противоречат существующим
  • Делать наезды на пешеходов***

Строго запрещено:

  • Размещать рекламу
  • Совершать оскорбления личностей
  • Материться
  • *** Пешеходами не являются (ко)модераторы, админы, участники клуба.

Если Вам понравилась атмосфера форума, заходите к нам чаще! Люблю, целую, вечно Ваш, THandle.

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


 




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


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

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