freepascal.ru • Просмотр темы - Локализация попроще
 

Локализация попроще

Модератор: Модераторы

Локализация попроще

Сообщение ivanov1 » 27.06.2016 11:23:09

Добрый день!

Хочу поделиться с вами свойм вариантом локализации приложений.
Те что я нашел в лазарусе показались мне очень сложными, поэтому решил придумать свой вариант, который использую уже в своей программе.
В приложении тестовая программа и модуль.

Буду рад комментариям и доработкам.

Конечно есть минусы, т.к. код не универсальный, но согласитесь и не сложный.
Вложения
langsload.rar
(6.3 КБ) Скачиваний: 112
ivanov1
новенький
 
Сообщения: 30
Зарегистрирован: 03.01.2015 16:25:04

Re: Локализация попроще

Сообщение alexs » 27.06.2016 23:42:31

Чем штатное то не угодило? Там проще некуда. Всё чуть ли не мышкой нащёлкивается. Да и языковые ресурсы потом править - есть куча навороченных редакторов po-файлов.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3662
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Локализация попроще

Сообщение ivanov1 » 28.06.2016 22:21:04

alexs писал(а):Чем штатное то не угодило? Там проще некуда. Всё чуть ли не мышкой нащёлкивается. Да и языковые ресурсы потом править - есть куча навороченных редакторов po-файлов.
Мне не понравилось, описание на wiki не смог разобрать, + Вы пишите - куча редакторов, и Вы же понимаете, что с этой кучей надо разбираться, а это время, + я гдето на форуме читал, что там какие то были проблемы, + мой, это просто вариант (который вы даже не посмотрели), каждый выберет сам.
ivanov1
новенький
 
Сообщения: 30
Зарегистрирован: 03.01.2015 16:25:04

Re: Локализация попроще

Сообщение pupsik » 28.06.2016 22:44:25

poedit - остальная куча от лукавого :wink:
Плюс лазарь сам может формировать файл локализации для форм и ресурсов. Куда уж проще. Кинул компонент, добавил рес.стринг и лазарь "запихнул" это в файл. Потом только подготовить под другие языки. Плюс большинство компонентов в лазаре заточено под ро файлы. И их можно "заставить" ругаться согласно необходимого языка. Попробуйте локализировать лаз.репорт, или сообщения лазаря.
Мне не понравилось, описание на wiki не смог разобрать
не понравилось и не смог разобраться - две разные вещи.
Ваш вариант не "хлещет" великолепностью. Т.е. в цикле искать в stringlist компонент... Хотя бы beginupdate воспользовались. Если "тяжкая" форма будет будут и тормоза.
Хотя...
это просто вариант
... Есть еще вариант на ини файлах.
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

Re: Локализация попроще

Сообщение Sharfik » 29.06.2016 01:59:58

дайте ссылку на штатный инструмент, посмотреть что это такое)
Sharfik
постоялец
 
Сообщения: 481
Зарегистрирован: 20.07.2013 01:04:30

Re: Локализация попроще

Сообщение Ichthyander » 29.06.2016 03:22:28

Описание от Lazarus http://wiki.freepascal.org/Translations ... rograms/ru
Краткая инструкция в первом посте how-to от меня viewtopic.php?p=86388#p86388
Аватара пользователя
Ichthyander
постоялец
 
Сообщения: 409
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Локализация попроще

Сообщение ivanov1 » 30.06.2016 00:07:19

Sharfik писал(а):Ваш вариант не "хлещет" великолепностью. Т.е. в цикле искать в stringlist компонент... Хотя бы beginupdate воспользовались. Если "тяжкая" форма будет будут и тормоза.

stringlist заполняется данными из файла, и да, в цикле ищется значение нужных (tag=0) текстовых свойств компонентов формы, при этом найденные сразу удаляются, то есть не участвуют в дальнейших циклах, так везде, пойск по сравнению. За замечание про beginupdate спасибо, добавлю в свою програмку.
В общем beginupdate свойства нет у tcomponent, придется делать доп проверку if, легче тогда сделать в программе, а не в модуле...
Код: Выделить всё
procedure TForm1.Button3Click(Sender: TObject); // Загрузка из файла
var
s: string;
begin
s:='';
memo1.Clear;
lang.clear;
lang.load(edit1.Text,'error load');
form1.beginupdate;
lang.langload(form1);
lang.langload(frame1_1);
lang.resfind(res1.memo1lines);  // Загружаем константы
if lang.errorcount>0 then memo1.Append(lang.errorshow) else memo1.Append( 'файл загружен без ошибок' ); // Что не найдено, покажем
memo1.Append( 'Лишних строк осталось: '+inttostr(lang.musor(s)) ); // Лишнее нужно будет убрать
memo1.Append( s );
form1.endupdate;
end;     


Добавлено спустя 25 минут 20 секунд:
Ichthyander писал(а):Краткая инструкция в первом посте how-to от меня viewtopic.php?p=86388#p86388

stanilar писал(а):Достигается это написанием собственных наследников для нужного набора контролов, в которых переводимое слово тянется из базы, а указание того, куда и как переводить тоже делается не сложно - в базу добавлена таблица "технический язык", в которой все названия лежат на языке разработчика + к ним дописываюся индекы записи в базе. Пользователь нажимает кнопку - ко все названиям приписываюся индексы, пользователь прямо из программы открывает диалог редактирования перевода, в котором указывает индекс и нужный перевод.
- ребята, ну зачем из мухи делать слона. А как быть с нестандартными надписями? Бред, для любителей сломать головы. Вам не кажется?
ivanov1
новенький
 
Сообщения: 30
Зарегистрирован: 03.01.2015 16:25:04

Re: Локализация попроще

Сообщение pupsik » 30.06.2016 09:35:50

В общем beginupdate свойства нет у tcomponent
я не за tcomponent писал.

и да, в цикле ищется значение нужных (tag=0) текстовых свойств компонентов формы
возможно так проще:
I:=StrList.IndexOf(Text); // Возвращает индекс строки с заданным текстом Text, или -1, если поиск неудачен

при этом найденные сразу удаляются
зачем? Или вы думаете так быстрее ? :)
А как быть с нестандартными надписями?
что имелось ввиду? Всё локализируется стандартными средствами.
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

Re: Локализация попроще

Сообщение ivanov1 » 30.06.2016 20:53:24

pupsik писал(а):зачем? Или вы думаете так быстрее ?
Да, так как пойск идет с начала лок. файла и самая первая строка всегда будет той, которая нужна.

Добавлено спустя 3 минуты 30 секунд:
pupsik писал(а):что имелось ввиду? Всё локализируется стандартными средствами.

Вот это блеять и имелось ввиду. Что если надпись на кнопке "Блеять", то перевод будет искать в своем шибко умном словаре до завтра!!!
ivanov1
новенький
 
Сообщения: 30
Зарегистрирован: 03.01.2015 16:25:04

Re: Локализация попроще

Сообщение Лекс Айрин » 30.06.2016 20:58:56

ivanov1 писал(а): то перевод будет искать в своем шибко умном словаре до завтра!!!


да ну... вообще-то, насколько я помню, к каждой фразе указываются варианты перевода. Если их нет, то строка не переводится.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4200
Зарегистрирован: 19.02.2013 16:54:51

Re: Локализация попроще

Сообщение pupsik » 01.07.2016 00:22:28

Что если надпись на кнопке "Блеять", то перевод будет искать в своем шибко умном словаре до завтра!!!
пришлось перечитать. А то показалось. И это ваше нестандартное слово? Э..э и при чём тут словарь?
п.с.
по правилам: локализация на англицком, а потом иные языки. И это ещё со времён дельфина (и не только). Если вы сразу на необходимом языке делаете то нет проблем с кириллицей. Или вы знаете случаи?
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

Re: Локализация попроще

Сообщение Лекс Айрин » 31.05.2017 09:41:40

Все же, локализация с использованием PO файлов проще. Фактически, я полтора дня убил на переводы строк (английских/русский), а сама локализация прошла за минуту (или меньше) из-за перекомпиляции программы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4200
Зарегистрирован: 19.02.2013 16:54:51


Вернуться в Компоненты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru