Перейти к содержанию
Fire Monkey от А до Я

Локализация приложений


AngryOwl

Рекомендуемые сообщения

Друзья!

Я тут в одной теме выложил юнит для локализации приложений и демо-пример к нему, а также приложение облегчающее создание и редактирование ресурсов для локализации (файлов с переводами на разные языки).

Потом подумал - может стоит вынести это в отдельную тему?

Данная проблема (локализации приложений) возникла уже давно. На заре 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. Не сложно поправить - кому под что нужно.

Изменено пользователем AlexG
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...