Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Поддержка многоязычности
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Dmitry



Joined: 27 Feb 2006
Posts: 4

Post (Separately) Posted: Mon Feb 27, 2006 12:09    Post subject: Поддержка многоязычности Reply with quote

Вопрос: пишу утилиту на Delphi для Total Commander. Планирую реализовать поддержку многоязычности через lng-файлы, но пока не знаю, как лучше, т.к. никогда этим не занимался. Подскажите, как лучше и быстрее это организовать Smile Может у кого-то есть готовые наработки/шаблоны для поддержки многоязычности?
Back to top
View user's profile Send private message
Athari



Joined: 19 Dec 2004
Posts: 81
Location: Казань

Post (Separately) Posted: Mon Feb 27, 2006 13:09    Post subject: Reply with quote

Если делаешь через LNG-файлы, то ничего гениального не придумаешь. Просто вместо константных строк читаешь строки из LNG...
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Dmitry



Joined: 27 Feb 2006
Posts: 4

Post (Separately) Posted: Mon Feb 27, 2006 21:16    Post subject: Reply with quote

Athari wrote:
Если делаешь через LNG-файлы, то ничего гениального не придумаешь. Просто вместо константных строк читаешь строки из LNG...


Если можно по-подробнее. Я ведь сюда и обратился, чтобы не изобретать велосипед Smile Есть же, наверное, какие-нибудь компоненты для Delphi для автоматического создания lng-файлов по свойствам Caption, Text... элементов управления формы?
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Tue Feb 28, 2006 00:58    Post subject: Reply with quote

Dmitry wrote:
Есть же, наверное, какие-нибудь компоненты для Delphi для автоматического создания lng-файлов по свойствам Caption, Text... элементов управления формы?

InqSoft Translation Tool

Quote:
InqSoft Translation Tool - инструмент, при помощи которого осуществляется поддержка иностранных языков во всех проектах автора. Кроме утилиты AutoTranslator, способной автоматически генерировать LNG-файлы и программный код для подключения к тексту программы, в состав пакета входит пример модуль для Delphi 5-7 в исходных текстах, позволяющий легко добавить поддержку иностранных языков в Ваши программы, а также пример, демонстрирющий использование InqSoft Translation Tool.
Back to top
View user's profile Send private message
Dmitry



Joined: 27 Feb 2006
Posts: 4

Post (Separately) Posted: Tue Feb 28, 2006 19:38    Post subject: Reply with quote

2Volniy

Благодарю, посмотрел и думаю, что мне это поможет
Back to top
View user's profile Send private message
Nik



Joined: 01 Jan 2005
Posts: 574
Location: Киров

Post (Separately) Posted: Thu Mar 02, 2006 20:03    Post subject: Reply with quote

Имхо, самый надежный способ - ручная загрузка строк из ini-файла. При написании, конечно, много геморроя, но зато скорость и гибкость - на высоте (проверено временем; я перепробовал десяток компонентов и от всех отказался)...

Для самых одаренных - пример:
Code:

procedure LoadLanguage(File: string);
begin
 Button1.Caption:=GetIniString('main', 'Button1Caption', 'Отмена', File);
[/quote]
Back to top
View user's profile Send private message
Sam Dark



Joined: 25 Apr 2005
Posts: 484
Location: Voronezh, Russia

Post (Separately) Posted: Fri Mar 03, 2006 09:25    Post subject: Reply with quote

Nik
Одобряю. Самый лучший способ.
Back to top
View user's profile Send private message MSN Messenger
Parcan



Joined: 15 Dec 2004
Posts: 398
Location: Russian

Post (Separately) Posted: Fri Mar 03, 2006 10:01    Post subject: Reply with quote

Nik
аналогично, быстрее чем сам никакие сторонние программы не сделают.
Back to top
View user's profile Send private message
Моторокер



Joined: 06 May 2005
Posts: 1482
Location: г. Пермь (читается Перьмь)

Post (Separately) Posted: Fri Mar 03, 2006 10:13    Post subject: Reply with quote

Quote:
Button1.Caption:=GetIniString('main', 'Button1Caption', 'Отмена', File);


это же всё в цикле делается
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Fri Mar 03, 2006 12:29    Post subject: Reply with quote

Nik wrote:
Имхо, самый надежный способ - ручная загрузка строк из ini-файла. При написании, конечно, много геморроя, но зато скорость и гибкость - на высоте (проверено временем; я перепробовал десяток компонентов и от всех отказался)...

Для самых одаренных - пример:
Code:

procedure LoadLanguage(File: string);
begin
 Button1.Caption:=GetIniString('main', 'Button1Caption', 'Отмена', File);
Я балдею от Вас ребята, ну чес слово. Даже не посмотрев, что там по ссылке (там же 200 килобайт всего), обо***ть то, что сделано качественно и с умом. Какие там на хрен компоненты? Человек написал программу, которая генерирует сама готовые к переводу lng-файлы. А пример кода загрузки этих lng-файлов в вашу программу прост как 5 копеек, но при этом оптимизирован чтобы работать быстро. В отличие от предлагаемой тут работы с ini-файлом, когда за один раз считывается по одной строке, чтение секциями ускоряет этот процесс в десятки раз, особенно на NT-шных системах.
Back to top
View user's profile Send private message
Parcan



Joined: 15 Dec 2004
Posts: 398
Location: Russian

Post (Separately) Posted: Fri Mar 03, 2006 16:01    Post subject: Reply with quote

Volniy
Quote:
тение секциями ускоряет этот процесс в десятки раз

я бы так не горячился
Back to top
View user's profile Send private message
Dmitry



Joined: 27 Feb 2006
Posts: 4

Post (Separately) Posted: Sat Mar 04, 2006 16:03    Post subject: Reply with quote

Вручную, может и надежнее, но не факт. Поискал я все-таки еще и вот, что нашел для Delphi 7:

DKLang Localization Package (~85Kb) freeware
http://www.torry.net/vcl/vcltools/multilanguage/dklang-package-2.1.zip

Balmsoft Polyglot (~1Mb) freeware
http://www.torry.net/vcl/vcltools/multilanguage/BalmsoftPolyglot.exe

MH Translation Package (~75Kb) freeware
http://www.torry.net/vcl/vcltools/multilanguage/mhtranspack70.zip

Здесь только то, что я проверил на работоспособность.
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sat Mar 04, 2006 16:26    Post subject: Reply with quote

Parcan wrote:
Volniy
Quote:
тение секциями ускоряет этот процесс в десятки раз

я бы так не горячился

Я вполне спокоен. Это мои личные наблюдения - когда ждать закрытия окна диалога нужно несколько секунд только потому что код производит запись в ини-файл, это не очень радует глаз и нервишки. Возможно, на очень быстром компе это и не заметно. Насколько мне известно дело тут в некоторых антивирусниках с их специфическими настройками проверки файлов. Ведь одно дело проверить файл однократно при чтении секции целиком и совсем иное дело проверять этот файл столько раз, сколько имеется в этой секции считываемых параметров.

Если я и горячился, то только по поводу высказываний в стиле "Никогда этого не видел, но уж точно дерьмо." (с) Smile
Back to top
View user's profile Send private message
Nik



Joined: 01 Jan 2005
Posts: 574
Location: Киров

Post (Separately) Posted: Sun Mar 05, 2006 00:33    Post subject: Reply with quote

Volniy
Я пробовал все (!!!) упомянутые выши компоненты и утилиты. Ни одна из них не смогла обеспечить должную гибкость!
Что касается скорости, что здесь тоже все не так просто. Такие вот локализаторы считывают строки для каждого элемента интерфейса отдельно. А если в моей программе есть элементы, имеющие одинаковые имена? В моем AmpView, например, есть строки, которые используются по три-четыре раза! А если нужно делать составные строки? Вписывать в lng-файл локализаторы их все равно придется, но для них нужно объявлять константы, а это лишние строки

Моторокер
Quote:
Quote:
Button1.Caption:=GetIniString('main', 'Button1Caption', 'Отмена', File);


это же всё в цикле делается

Ничево подобного! Для каждой строки пишется своя команда. Да, это лишний код и приходится регулярно дописывать процедуру. Но зато ты точно знаешь, почему та или иная строка не переведена. А искать баги в чужом коде... Увольте... Smile
Back to top
View user's profile Send private message
vserd



Joined: 26 Apr 2005
Posts: 118

Post (Separately) Posted: Tue Mar 07, 2006 21:57    Post subject: Reply with quote

Nik
Quote:
А если нужно делать составные строки?

Хотя я сам в своих проектах использую ini в качестве Lng, но рекомендации по локализации крайне не рекомендуют использование составных строк. И я исходя из собственного опыта с ними согласен. Это мои грабли которыми я получил шишку.
Так что крайне не рекомендую использовать составные строки в проектах которые по крайней мере ВОЗМОЖНО будут локализовываться. Это черевато.

Quote:
Но зато ты точно знаешь, почему та или иная строка не переведена.

Это высказывание зависит от принятого способа загрузки данных о переводе. Иногда способ приемлим, иногда нет.

Quote:
А искать баги в чужом коде... Увольте...

Смотря как сделана и опубликована система тестирования...
Иногда баги в сторонних компонентах даже приятно искать, это как спортивное состязние. Но опять же это на вкус и цвет...

Volniy
Quote:
Я балдею от Вас ребята, ну чес слово. Даже не посмотрев, что там по ссылке (там же 200 килобайт всего),

при всем уважении, но в данном вопросе, код который написан собствено ручно, обычно более отвечает потребностям, не факт что он лучшее чем решение которое нашел автор компонента. Если вы заявите автору ситуацию, которую он сможет воспроизвести и решить что это стоит потраченного на разбирательства времени, тогда обычно идет исправление ошибки/переоценка принятого решения.

А 200 К это не так уж и мало.... IMO, если нет нужды особо не полезешь.
всем
А в общем, на вкус и цвет, товарища нет. Если компонент устраивает, значит его можно использовать, если нет, либо писать свой, либо код прямой загрузки. И не надо быть фанатиками, каждой проблеме свое решение. Только автор знает устраивает его это или нет, но альтернативы и уже наработанные возможности нужно озвучить, покрайней мере для того чтобы посмотреть на возможные способы решения.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group