Форум: "Прочее";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];
ВнизКакой великий смысл в использовании resourcestring вместо const ? Найти похожие ветки
← →
Игорь Шевченко © (2008-08-14 09:56) [0]Сабж, собственно. Может, я чего не до конца не понимаю, но до сих пор не увидел внятной причины использовать эту конструкцию в коде основной программы, если не используется ITE.
Поводом для ветки послужил пост [29] в закрытой ветке
http://delphimaster.net/view/2-1218647371/
"Наверное, лучше будет для строковых констант так:
unit MyConstr;
interface
resourcestring
rsMess1 = "Привет!";
rsMess2 = "Как Сам!";
rsMess3 = "Ошибка!";
implementation
end.
"
Вот кто бы мне объяснил, нафига использовать именно resourcestring
← →
oldman © (2008-08-14 09:59) [1]
> Вот кто бы мне объяснил
Видимо, тебе к автору шедевра
← →
McSimm © (2008-08-14 10:01) [2]Теоретическая возможность исправить синтаксическую ошибку без перекомпиляции :)
← →
Vlad Oshin © (2008-08-14 10:01) [3]править, видимо
← →
Anatoly Podgoretsky © (2008-08-14 10:02) [4]> Игорь Шевченко (14.08.2008 9:56:00) [0]
Смеешься или как?
В этом случае строки находятс в ресурсах и http://www.podgoretsky.com/OtherParts/DM/BadWill.aspx
Кроме локализации еще и более оптимальная работа с ресурсами, в отличии от жестко кодированого.
← →
Игорь Шевченко © (2008-08-14 10:03) [5]
> Теоретическая возможность исправить синтаксическую ошибку
> без перекомпиляции :)
С этого момента подробнее :)
← →
Игорь Шевченко © (2008-08-14 10:07) [6]Anatoly Podgoretsky © (14.08.08 10:02) [4]
Не смеюсь.
> В этом случае строки находятс в ресурсах
Догадываюсь. Но не видел кроме ITE никакого средства, позволяющего менять именно локализацию.
Я еще понимаю глубокую целесообразность, когда ID строки в ресурсе можно задавать жестко, каким-то образом, а в случае использования resourcestring, насколько мне известно, эти ID меняются при объявлении новых констант типа resourcestring.
← →
Игорь Шевченко © (2008-08-14 10:08) [7]
> Кроме локализации еще и более оптимальная работа с ресурсами,
> в отличии от жестко кодированого.
"Более оптимальная" - это как ? :)
← →
DrPass © (2008-08-14 10:09) [8]
> Игорь Шевченко © (14.08.08 10:03) [5]
>
> > Теоретическая возможность исправить синтаксическую ошибку
>
> > без перекомпиляции :)
>
>
> С этого момента подробнее :)
Restorator
← →
Rouse_ © (2008-08-14 10:11) [9]Вот что говорит хэлп по этому поводу:
Extracting resource strings helps centralize string definitions which can then be more easily translated, if necessary. You can extract string values to resource strings that are defined in the resourcestring section of your code file. If there is no resourcestring section in your code, the refactoring engine creates one following either the implementation keyword or the uses list.
← →
Игорь Шевченко © (2008-08-14 10:18) [10]Rouse_ © (14.08.08 10:11) [9]
Переведи :)
DrPass © (14.08.08 10:09) [8]
> Restorator
Я не понимаю глубокого смысла использовать пятые колеса у телег.
Кроме того, насколько мне известно, любой Delphi-йский EXEшник при своем запуске ищет ресурсную DLL - творчество ITE, основываясь на текущей локализации Windows. Мне бы хотелось этот процесс контролировать самому, определяя нужную DLL самостоятельно, а не от локализации операционной системы.
← →
turbouser © (2008-08-14 10:20) [11]
> Rouse_ © (14.08.08 10:11) [9]
>
> Вот что говорит хэлп по этому поводу:
>
...
> helps centralize string definitions which can then be more
> easily translated, if necessary
Угу... как же... easily translated...
devexpress например здорово экономит на переводах, но это им только минус.
← →
Rouse_ © (2008-08-14 10:20) [12]
> Переведи :)
Оно мне надо? :)
← →
turbouser © (2008-08-14 10:22) [13]
> Rouse_ © (14.08.08 10:20) [12]
> Оно мне надо? :)
Вот-вот :))))
← →
MsGuns © (2008-08-14 10:31) [14]>Игорь Шевченко © (14.08.08 10:18) [10]
>Переведи :)
Примерно так:
Чтобы попасть с Малой Бронной на Большую Грузинскую, нужно вызвать такси по номеру 322223. Хотя, конечно, оттуда туда есть автобусы 112, 186 и 834, троллейбусы 54, 76 и трамвай 137, да и метро туда ходит. Можно даже потратить 7 минут и пройти туда пешком. Но мы все же советуем обязательно воспользоваться вышеуказанным такси.
← →
Anatoly Podgoretsky © (2008-08-14 10:34) [15]
> Но не видел кроме ITE никакого средства, позволяющего менять
> именно локализацию.
Существуют и технология сильно используемая в Виндоус, например MUI
← →
Anatoly Podgoretsky © (2008-08-14 10:36) [16]
> "Более оптимальная" - это как ?
Оптимальность связа с использованием оперативной памяти (различие в загрузке и в ее количестве) и свопа, ресурсные строки не выкидываются в своп файл. Лучше конечно почитать специальные статьи по работе Виндоус с ресурсами, а не мое корявое объяснение.
← →
Игорь Шевченко © (2008-08-14 10:37) [17]Anatoly Podgoretsky © (14.08.08 10:34) [15]
> Существуют и технология сильно используемая в Виндоус, например
> MUI
Оно, MUI, как-то к Delphi и к resourcestring относится ? Я просто не видел никаких упоминаний на эту тему.
← →
Anatoly Podgoretsky © (2008-08-14 10:38) [18]> Игорь Шевченко (14.08.2008 10:18:10) [10]
На моем сайте есть пример текстового редактора, на основе TRichEdit, там есть подобная технология, как авто, так и принудительно, вне зависимости от локализации. Если интересует, то взгляни.
← →
Anatoly Podgoretsky © (2008-08-14 10:39) [19]> Rouse_ (14.08.2008 10:20:12) [12]
Ты прямо говори, сколько и в баксах или евро.
← →
xayam © (2008-08-14 10:42) [20]Игорь начал искать смысл. Ты на правильном пути. Что конечно не означает что дойдешь до конца этого пути))
← →
DVM © (2008-08-14 10:42) [21]
> Игорь Шевченко © (14.08.08 09:56)
Особой разницы нет кроме как в отличие от const, эти константы размещаются не в сегменте данных, а в ресурсах, а затем подгружаются оттуда по мере необходимости. Каждая такая константа на вид обычная строка. Но за каждой из них стоит структура:
PResStringRec = ^TResStringRec;
TResStringRec = packed record
Module: ^Cardinal;
Identifier: Integer;
end;
← →
Игорь Шевченко © (2008-08-14 10:42) [22]Anatoly Podgoretsky © (14.08.08 10:36) [16]
Я про работу с ресурсами несколько в курсе, но ни const, ни ресурсы в своп-файл не выкидываются никогда (за исключением запакованных файлов), так как и const и ресурсы находятся в EXE-файле (ну или в DLL).
Я немножко о другом - я прекрасно понимаю, что вынос строковых констант в ресурсы есть механизм полезный, в частности, для локализации, я к тому, что механизм именно resourcestring мне представляется крайне неудобным.
Мне бы хотелось строковые ресурсы в DLL собирать самостоятельно, вместе с другими ресурсами, битмапами, курсорами и прочими иконами. А если я объявлю resourcestring в программе и resourcestring в DLL у меня получится два набора ресурсов :)
← →
Игорь Шевченко © (2008-08-14 10:43) [23]DVM © (14.08.08 10:42) [21]
>
> Особой разницы нет кроме как в отличие от const, эти константы
> размещаются не в сегменте данных, а в ресурсах, а затем
> подгружаются оттуда по мере необходимости. Каждая такая
> константа на вид обычная строка. Но за каждой из них стоит
> структура:
>
> PResStringRec = ^TResStringRec;
> TResStringRec = packed record
> Module: ^Cardinal;
> Identifier: Integer;
> end;
Я в курсе, спасибо. Я хочу понять, в чем преимущества
← →
oldman © (2008-08-14 10:49) [24]
> Игорь Шевченко © (14.08.08 10:43) [23]
> Я хочу понять, в чем преимущества
А кто сказал, что они есть?
← →
Игорь Шевченко © (2008-08-14 11:00) [25]
> А кто сказал, что они есть?
Очевидно Borland
← →
oldman © (2008-08-14 11:04) [26]
> Игорь Шевченко © (14.08.08 11:00) [25]
> Очевидно Borland
Судя по ссылке в [0], это сказал DVM ©.
Анатолий вот еще пытается найти какие-то плюсы.
И все.
Про Borland поясни.
← →
turbouser © (2008-08-14 11:05) [27]
If there is no resourcestring section in your code, the refactoring engine creates one following either the implementation keyword or the uses list.
:-() а зачем?
← →
Игорь Шевченко © (2008-08-14 11:15) [28]
> :-() а зачем?
есть такой вид рефакторинга - замена строкового литерала на resourcestring.
Удобно, чтобы явные литералы в коде не присутствовали.
← →
turbouser © (2008-08-14 11:28) [29]
> Игорь Шевченко © (14.08.08 11:15) [28]
И зачем? Чем удобнее? Почему таки не const?
А уж об автоматизме сего промолчу :-х
← →
Игорь Шевченко © (2008-08-14 11:32) [30]
> И зачем? Чем удобнее?
отсутствие литералов оно всяко удобнее.
> Почему таки не const?
вот не знаю :)
← →
Anatoly Podgoretsky © (2008-08-14 12:07) [31]> Игорь Шевченко (14.08.2008 10:37:17) [17]
А не ты говорил про ITE - это таже самая технология - ресурсные ДЛЛ
← →
Anatoly Podgoretsky © (2008-08-14 12:11) [32]> Игорь Шевченко (14.08.2008 10:42:22) [22]
Ну тут Борланд пошел своим путем, сделал так, что бы разницы в коде не было, в отличии от использования чистых строковых ресурсов.
Насчет самостоятельной сборки - этого у тебя никто не отнимал, resourcestring автоматизирует не только создание ресурса, но и его использования, в файле же обычный String Table
← →
Anatoly Podgoretsky © (2008-08-14 12:12) [33]> Игорь Шевченко (14.08.2008 10:43:23) [23]
Читай два сообщения выше, преимущество для Дельфи в автоматизации работы, Дельфи скрывает всю кухню.
← →
Anatoly Podgoretsky © (2008-08-14 12:14) [34]> oldman (14.08.2008 11:04:26) [26]
Мой ответ Игорю, также и тебе. Локализация между прочим тут ни причем, она делается и другими механизмами. Просто ITE знает и про формы и про resourcestring и про ДЛЛ, много про что знает и предоставляет механизм, но это не из=за resourcestring - оно же преобразовывается в StringTable
← →
Anatoly Podgoretsky © (2008-08-14 12:17) [35]> Игорь Шевченко (14.08.2008 11:15:28) [28]
Явные литералы худшее зло.
Явный литерал (HardCoded) -> Const -> resource (resourcestring - спецподдержка для строк)
← →
Anatoly Podgoretsky © (2008-08-14 12:19) [36]
> И зачем? Чем удобнее? Почему таки не const?
Для строк нет смысла писать const - поскольку resourcestring абсолютно прозрачен.const
S1 = "abc";
resourcestring
S1 = "abc";
S := S1;
← →
Игорь Шевченко © (2008-08-14 12:20) [37]Anatoly Podgoretsky © (14.08.08 12:11) [32]
> Насчет самостоятельной сборки - этого у тебя никто не отнимал,
> resourcestring автоматизирует не только создание ресурса,
> но и его использования, в файле же обычный String Table
Вот у меня есть задача локализации.
Я пишу
unit langconsts;
interface
resourcestring
SYes = "Да";
SNo = "Нет";
end.
для другого языка я пишу
unit langconsts;
interface
resourcestring
SYes = "Yes";
SNo = "No";
end.
Хочу сделать две DLL для ресурсов на русском и английском языках.
1. Какой юнит я должен вставлять в приложение ?
2. Как я должен использовать идентификаторы в программе, чтобы ресурсные строки загружались из DLL ?
3. Будут ли соответствовать идентификаторы строк в приложении и в DLL ?
4. Я хочу язык приложения определять самостоятельно, не используя настройки Windows. Как ?
← →
Anatoly Podgoretsky © (2008-08-14 12:32) [38]> Игорь Шевченко (14.08.2008 12:20:37) [37]
1. Какой юнит я должен вставлять в приложение ?
Любой, в Дельфи обычно выбирается один базовый язык, на нем делается интерфейс, потом с помощью ITE создаются языковые файлы, если язык не находится, то используется ресурс не из ДЛЛ, а из программы (язык по умолчанию).
2. Как я должен использовать идентификаторы в программе, чтобы ресурсные строки загружались из DLL ?
Не знаю, не интересовался. Но идентификаторы могут быть любые. В Дельфи этот процесс как создание ИД для идентификаторов, так и использования ресурса по его имени автоматизировано. Но я уже ответил, в Дельфи S := S1; и синтаксис использования одинаков и для const и для resourcestring. Не в дельфи это все надо делать ручками, создавать ресурс, создавать файл определений, самостоятельно загружать строки из ресурса.
3. Будут ли соответствовать идентификаторы строк в приложении и в DLL ?
Идентификаторы не нужны, нужны ИД из StringTable и они должны быть одинаковы в приложении и во всех ресурсных ДЛЛ, ITE это обеспечивает.
4. Я хочу язык приложения определять самостоятельно, не используя настройки Windows. Как ?
Я тебя уже посылал на свою страницу, ну не лезть же мне самому в проект и смотреть как именно я там реализовал, а по памяти я не помню. Учти, что у Борланда своя поддержка, отличающаяся от Микрософт. Но в кратче нужны несколько записей в реестре, а сама поддержка встроена в код.
В ITE все продумано, но к нему надо привыкнуть, ну а это осуществляется с помощью пары матюгов, да и ITE сильно улучшили по сравнению с первыми версиями, где матюгов надо было три.
← →
Игорь Шевченко © (2008-08-14 13:56) [39]Anatoly Podgoretsky © (14.08.08 12:32) [38]
> В ITE все продумано, но к нему надо привыкнуть,
Я использовал ITE несколько лет назад, потом оставшееся время плевался.
ITE может быть хорошо использовать для готового более-менее неизменного проекта, а для реального, то есть, достаточно часто и интенсивно меняющегося использовать ITE получится только с заклинаниями "твой кролик написал".
То, что сама поддержка встроена в код, я в курсе, но ITE использовать не хочу, потому как неудобно.
> Не в дельфи это все надо делать ручками, создавать ресурс,
> создавать файл определений, самостоятельно загружать строки
> из ресурса.
Собственно это можно и в Delphi делать, и, собственно, делается. Немного дольше на начальном этапе получается, но при наличии генератора ресурсов вполне сопоставимо с затратами на время с ITE.
Кроме того, я могу попросить стороннего переводчика создать .rc файл, а вот просить его же поработать с ITE я, увы, не могу :)
← →
DiamondShark © (2008-08-14 15:16) [40]
> а для реального, то есть, достаточно часто и интенсивно
> меняющегося использовать ITE получится только с заклинаниями
> "твой кролик написал".
А доморощенный механизм удобнее, что-ли, будет? Не еврю!
> Кроме того, я могу попросить стороннего переводчика создать
> .rc файл, а вот просить его же поработать с ITE я, увы,
> не могу :)
Давненько я не брал в руки шашек, но разве ITE не создаёт .rc файлов, которые можно отдать стороннему переводчику?
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.006 c