SASGIS

Веб-картография и навигация

Нужна помощь в смене базового языка SAS.Планеты

Форум для обсуждения деталей разработки программы SAS.Планета

Модераторы: vdemidov, Tolik

Нужна помощь в смене базового языка SAS.Планеты

Сообщение vdemidov » 12 окт 2010, 14:34

Для того что бы сделать английский язык базовым для программы, необходимо заменить все русские строчки в исходниках на их английские аналоги. Основной проблемой является обработка делфовских dfm файлов. У них текстовый формат, но русские буквы закодированы кодами примерно так:
Код: Выделить всё
  Caption = #1044#1086#1073#1072#1074#1080#1090#1100' '#1085#1086#1074#1099#1081' '#1087#1091#1090#1100

Вручную править нереально.
Нужна тулза, которая сможет:
1. автоматом пройтись по такому файлу
2. найти русские строчки
3. нормально их прочитать
4. при помощи механизма локализации получить английский вариант строчки
5. если строка отличается от исходной, то заменить в dfm файле правильно закодировав все нелатинские символы.

PS: для локализации сейчас используется делфовская реализация GNU GetText, называющаяся dxgettext http://dxgettext.po.dk/

PPS: Для чего это все нужно? Для того что бы можно было быть уверенным, что программа будет работать на компьютерах без русской локали, и что бы можно было перевести программу на любой язык, были бы желающие это сделать.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Нужна помощь или хотя бы подсказка.

Сообщение DJ VK » 13 окт 2010, 14:05

2. по какому принципу ищется текст? просто найти #1044 или Сначала поля Caption, Text ?
4,5. С чем конкретно сравнивать, не совсем понял..

А вообще маленькая идея. Можно локализатор делать "в самой программе". Дело в том что в запущенной программе кодом для конкретной формы можно перенумировать все компоненты, то есть поройтись циклом по всем им. И проверить - метка ли это. Если да то мы сразу получаем Caption в виде строки. тут же в этом цикле идет переименование.

Может использовать чтото типо такого:
Korzh Localizer
Lingobit Localizer Enterprise
?
Последний раз редактировалось DJ VK 13 окт 2010, 14:21, всего редактировалось 2 раз(а).
Аватара пользователя
DJ VK
Гуру
 
Сообщения: 1468
Зарегистрирован: 16 апр 2009, 13:57
Откуда: 8 км. от МКАД
Благодарил (а): 82 раз.
Поблагодарили: 323 раз.

Re: Нужна помощь или хотя бы подсказка.

Сообщение vdemidov » 13 окт 2010, 14:15

DJ VK писал(а):2. по какому принципу ищется текст? просто найти #1044 или Сначала поля Caption, Text ?

Нет. Нужно просто найти все строковые параметры в dfm.
DJ VK писал(а):4,5. С чем конкретно сравнивать, не совсем понял..

Строку полученную из dfm со строкой полученной для нее из локализации. Если строка не подлежит локализации то локализатор просто возращает ее без изменений.

DJ VK писал(а):А вообще маленькая идея. Можно локализатор делать "в самой программе". Дело в том что в запущенной программе одом для конкретной формы можно перенумировать все компоненты, то есть поройтись циклом по всем им. И проверить - метка ли это. Если да то мы сразу получаем Caption в виде строки. тут же в этом цикле идет переименование.

Мне тулза нужна для разовой операции. И все. Пихать это внутрь программы слишком сложно.

DJ VK писал(а):Может использовать чтото типо такого:Korzh LocalizerLingobit Localizer Enterprise?

Попробуйте. Если сможете с его помощью из русскоязычной dfm и файла перевода получить англоязычную dfm то сообщите мне, я скину вам dfm-ки SAS.Планеты. А файл перевода можете взять в последней альфе.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Нужна помощь или хотя бы подсказка.

Сообщение DJ VK » 13 окт 2010, 14:21

Не совсем понятен смысл перевода форм. Ведь можно один раз создать какой нибудь репозиторий, который хранится в отдельном файле рядом с программой, и добавлять в него только новые метки. А потом переводить один репозиторий на нужное количество языков. А при загрузке репозитория из файла подставлять нужный файл?
Вот например у меня в LMD -TLMDStorPropertiesStorage позволяет добавлять в него любые свойства, но каждое ручками. а к нему есть TLMDStorINIVault, и другие которые пишут по закрытию все параметры в INI и оттуда их берут. Можно мгновенно поменять язык.
Аватара пользователя
DJ VK
Гуру
 
Сообщения: 1468
Зарегистрирован: 16 апр 2009, 13:57
Откуда: 8 км. от МКАД
Благодарил (а): 82 раз.
Поблагодарили: 323 раз.

Re: Нужна помощь или хотя бы подсказка.

Сообщение DJ VK » 13 окт 2010, 14:24

5. если строка отличается от исходной - это то есть перевелась успешно, и стала не русской а английской?
Аватара пользователя
DJ VK
Гуру
 
Сообщения: 1468
Зарегистрирован: 16 апр 2009, 13:57
Откуда: 8 км. от МКАД
Благодарил (а): 82 раз.
Поблагодарили: 323 раз.

Re: Нужна помощь или хотя бы подсказка.

Сообщение vdemidov » 13 окт 2010, 14:29

Вы скачивали последнюю альфу? Язык менять пробовали? Язык налету сменить уже можно.
Мне нужно разово поменять базовый язык программы, который зашит в исходниках и dfm. Все.
po-файл с перводом строчек есть в последней альфе. Пример dfm могу прислать в любой момент.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Нужна помощь или хотя бы подсказка.

Сообщение vdemidov » 13 окт 2010, 14:29

DJ VK писал(а):5. если строка отличается от исходной - это то есть перевелась успешно, и стала не русской а английской?

То заменить ее в dfm
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Нужна помощь или хотя бы подсказка.

Сообщение DJ VK » 13 окт 2010, 14:30

с альфой не работал пока что. Щас погляжу как там сделано.
Аватара пользователя
DJ VK
Гуру
 
Сообщения: 1468
Зарегистрирован: 16 апр 2009, 13:57
Откуда: 8 км. от МКАД
Благодарил (а): 82 раз.
Поблагодарили: 323 раз.

Re: Нужна помощь или хотя бы подсказка.

Сообщение DJ VK » 13 окт 2010, 14:52

2 варианта.
1. Если названия контролов совпадают - Читаю po. Беру в нем строки типа Fmain..TBDock..TBXMainMenu..NView..N40..NGShScale1000000..Caption, ищу нужный контрол, и подставляю в нужную форму в нужный Caption текст после msgstr.

2. Открываю формы. Беру русский текст.
в po файле я ищу саму строку, где текст после msgid русский совпадает
заменяю текстом после msgstr
или надо искать именно имя контрола в po файле?
Аватара пользователя
DJ VK
Гуру
 
Сообщения: 1468
Зарегистрирован: 16 апр 2009, 13:57
Откуда: 8 км. от МКАД
Благодарил (а): 82 раз.
Поблагодарили: 323 раз.

Re: Нужна помощь или хотя бы подсказка.

Сообщение vdemidov » 13 окт 2010, 15:23

Вам не кажется, что второй вариант, это именно то, что я просил изначально? С той лишь разницей, что указал инструмент (dxgettext), который позволит не заморачиваться с разбором po-файла.
DJ VK писал(а):строки типа Fmain..TBDock..TBXMainMenu..NView..N40..NGShScale1000000..Caption,
На них ориентироваться нельзя. Мало ли что уже переименовано.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

След.

Вернуться в Раздел для разработчиков программы SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3