А ещё он умеет "локализовывать" строки.
Вместо типа String мы используем TafwString. Который определяется как-то так:
type TvcmString = object
rKey : String;
rValue : String;
...
function Value: String;
...
end;//TvcmString
var
SomeString : TvcmString = (rKey : 'SomeStringKey'; rValue : 'Это значение строки');
...
initialization
SomeString.Register;
в чём цимес?
А в том, что эти строки регистрируются в глобальном менеджере строк. Который умеет сохранять их (в некий аналог ini-файла) и читать "скопом". А также умеет "переводить". Клиенты используют ТОЛЬКО функцию Value. Соответственно - мы всегда можем локализовать наше приложение.
Таких решений - на просторах интернета - масса. Но мы его к себе инкорпорировали. Только и всего.
Ну и конечно это генерируется из UML. Для упрощения жизни.
Но можно и руками писать. Как и ВСЁ, что генерируется из UML.
Вместо типа String мы используем TafwString. Который определяется как-то так:
type TvcmString = object
rKey : String;
rValue : String;
...
function Value: String;
...
end;//TvcmString
var
SomeString : TvcmString = (rKey : 'SomeStringKey'; rValue : 'Это значение строки');
...
initialization
SomeString.Register;
в чём цимес?
А в том, что эти строки регистрируются в глобальном менеджере строк. Который умеет сохранять их (в некий аналог ini-файла) и читать "скопом". А также умеет "переводить". Клиенты используют ТОЛЬКО функцию Value. Соответственно - мы всегда можем локализовать наше приложение.
Таких решений - на просторах интернета - масса. Но мы его к себе инкорпорировали. Только и всего.
Ну и конечно это генерируется из UML. Для упрощения жизни.
Но можно и руками писать. Как и ВСЁ, что генерируется из UML.
Комментариев нет:
Отправить комментарий