Поиск сообщества
Показаны результаты для тегов 'перевод'.
Найдено: 1 результат
-
Друзья! Я тут в одной теме выложил юнит для локализации приложений и демо-пример к нему, а также приложение облегчающее создание и редактирование ресурсов для локализации (файлов с переводами на разные языки). Потом подумал - может стоит вынести это в отдельную тему? Данная проблема (локализации приложений) возникла уже давно. На заре XE2. Потом были все версии, вплоть до текущей. Но лично меня текущие решения так и не устраивали. Мне нужно было простое и удобное редактирование сразу всех языков приложения, и чтобы быстро работало. Тогда и были созданы этот юнит и приложения, с которыми я решил с вами поделиться. Создано это было для себя, для упрощения локализации собственных приложений. Поэтому никакой "красоты" кода прошу не искать - ее там нет. Местами вообще кому-то покажется "кривым"... ) Очень жаль, что у меня критически мало времени для общения на данном ресурсе, а потому я в некотором смысле извиняюсь - мог бы выложить этот код давно. Тем-более, что он очень простой. Все что в нем используется, и как используется, думаю, всем будет доступно и понятно. Итак. Приложение Test_Translator - это дело пример с, непосредственно, самим юнитом uTranslatorFM.pas В uTranslatorFM.pas вы увидите, что локализация осуществлена за счет использования INI-файлов, а сам "перевод" осуществляется простым перебором компонент на форме. Стоит отметить, что перевод осуществляется использованием свойства компонент HelpContext (integer), а у компонент, что не имеют этого свойства - используется свойство Tag. На первый взгляд может показаться неудобным. А если приложение большое - что-то может забыться. Однако, лично я очень быстро привык к такому использованию. И поверьте - приложение, в котором я использую этот юнит, очень большое! ))) Кроме того, если есть компоненты, которые не имеют этих свойств, или которые могут менять значение перевода самостоятельно, либо могут быть динамическими - можно использовать нулевой HelpContext, но при этом придавать им значения "вручную". Например: если требуется у компонента TLabel динамически менять значение в ходе выполнения программы, подставляя нужные "подстроки" (грубо - используя, например, Format(...)), то можно написать в программе Label1.Text := Format( AppTranslator.GetValue(_код_, _значение_по_умолчанию_), [_подставляемое_значение_]); где _код_ - это значение, которое будет считываться из INI-файла (например 100) _значение_по_умолчанию_ - значение строки по умолчанию, на тот случай, если данный текст отсутствует в INI-файле, или файла с таким переводом не существует (этот параметр не обязателен) _подставляемое_значение_ - в данном случае это просто пример, допустим - ход выполнения процесса (например 85%) А строка в INI-файле может быть такая: (файл lang.ru) 100=Процесс выполнения %d%% (файл lang.en) 100=The progress %d%% и также другие языки. Думаю тут, в примере, все элементарно и понятно. Все работает на любой платформе! Как вы будете подключать файлы к приложению - ваше дело. Можно скачивать с инета, можно встроить в качестве ресурсов, задеплоить в проект и т.д. Лично я встраиваю в качестве ресурсов (Win) и деплою (Mac и Android). У меня свои причины и аргументы. Файлы: Lang.ru Lang.en и другие, это INI-файлы соответствующих переводов где строки с переводами имеют одинаковые индексы LangList.ini - вспомогательный файл (разберетесь)) language.rc - файл для создания ресурса (Win) С приложением SLLanguage все немного и сложнее и проще, одновременно... Не вижу смысла его описывать - оно просто позволяет редактировать описанные выше ресурсы (файлы языков). Часть его кода откуда-то позаимствовано (не помню уже). Для чего все это я отдельно решил написать, в отдельную тему? Предлагаю всем пользоваться данным кодом - кому как заблагорассудится! Исправлять, дополнять и делится мыслями и идеями. Возможно кто-то решит создать компонент. Ну вот вроде все, друзья! Если что - спрашивайте! Отвечу по мере возможности. P.S. К модераторам - поправьте, если что, - вдруг не в ту тему закинул. SLLanguage.zip Test_Translator.zip P.P.S. Забыл уточнить - дело-пример делал под XE10, а приложение для создания ресурсов под XE7. Не сложно поправить - кому под что нужно.