Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.007 c
15-1218639160
Goric
2008-08-13 18:52
2008.10.05
Отображение файлов


11-1194267604
Эдик
2007-11-05 16:00
2008.10.05
Classes.pas не компиллируеться


2-1219467347
apic
2008-08-23 08:55
2008.10.05
Создание папок


15-1218912590
palva
2008-08-16 22:49
2008.10.05
Опять затмение


2-1219648273
Razrab7
2008-08-25 11:11
2008.10.05
Как указать путь к папке, где лежит exe-шник?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский