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

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

Ответить
ivanov1
новенький
Сообщения: 32
Зарегистрирован: 03.01.2015 15:25:04

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

Сообщение ivanov1 »

Добрый день!

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

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

Конечно есть минусы, т.к. код не универсальный, но согласитесь и не сложный.
Вложения
langsload.rar
(6.3 КБ) 1407 скачиваний
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

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

Сообщение alexs »

Чем штатное то не угодило? Там проще некуда. Всё чуть ли не мышкой нащёлкивается. Да и языковые ресурсы потом править - есть куча навороченных редакторов po-файлов.
ivanov1
новенький
Сообщения: 32
Зарегистрирован: 03.01.2015 15:25:04

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

Сообщение ivanov1 »

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

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

Сообщение pupsik »

poedit - остальная куча от лукавого :wink:
Плюс лазарь сам может формировать файл локализации для форм и ресурсов. Куда уж проще. Кинул компонент, добавил рес.стринг и лазарь "запихнул" это в файл. Потом только подготовить под другие языки. Плюс большинство компонентов в лазаре заточено под ро файлы. И их можно "заставить" ругаться согласно необходимого языка. Попробуйте локализировать лаз.репорт, или сообщения лазаря.
Мне не понравилось, описание на wiki не смог разобрать
не понравилось и не смог разобраться - две разные вещи.
Ваш вариант не "хлещет" великолепностью. Т.е. в цикле искать в stringlist компонент... Хотя бы beginupdate воспользовались. Если "тяжкая" форма будет будут и тормоза.
Хотя...
это просто вариант
... Есть еще вариант на ини файлах.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

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

Сообщение Sharfik »

дайте ссылку на штатный инструмент, посмотреть что это такое)
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

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

Сообщение Ichthyander »

Описание от Lazarus http://wiki.freepascal.org/Translations ... rograms/ru
Краткая инструкция в первом посте how-to от меня viewtopic.php?p=86388#p86388
ivanov1
новенький
Сообщения: 32
Зарегистрирован: 03.01.2015 15:25:04

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

Сообщение ivanov1 »

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 писал(а):Достигается это написанием собственных наследников для нужного набора контролов, в которых переводимое слово тянется из базы, а указание того, куда и как переводить тоже делается не сложно - в базу добавлена таблица "технический язык", в которой все названия лежат на языке разработчика + к ним дописываюся индекы записи в базе. Пользователь нажимает кнопку - ко все названиям приписываюся индексы, пользователь прямо из программы открывает диалог редактирования перевода, в котором указывает индекс и нужный перевод.
- ребята, ну зачем из мухи делать слона. А как быть с нестандартными надписями? Бред, для любителей сломать головы. Вам не кажется?
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

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

Сообщение pupsik »

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

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

при этом найденные сразу удаляются
зачем? Или вы думаете так быстрее ? :)
А как быть с нестандартными надписями?
что имелось ввиду? Всё локализируется стандартными средствами.
ivanov1
новенький
Сообщения: 32
Зарегистрирован: 03.01.2015 15:25:04

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

Сообщение ivanov1 »

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

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

Вот это блеять и имелось ввиду. Что если надпись на кнопке "Блеять", то перевод будет искать в своем шибко умном словаре до завтра!!!
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

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

Сообщение Лекс Айрин »

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


да ну... вообще-то, насколько я помню, к каждой фразе указываются варианты перевода. Если их нет, то строка не переводится.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

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

Сообщение pupsik »

Что если надпись на кнопке "Блеять", то перевод будет искать в своем шибко умном словаре до завтра!!!
пришлось перечитать. А то показалось. И это ваше нестандартное слово? Э..э и при чём тут словарь?
п.с.
по правилам: локализация на англицком, а потом иные языки. И это ещё со времён дельфина (и не только). Если вы сразу на необходимом языке делаете то нет проблем с кириллицей. Или вы знаете случаи?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

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

Сообщение Лекс Айрин »

Все же, локализация с использованием PO файлов проще. Фактически, я полтора дня убил на переводы строк (английских/русский), а сама локализация прошла за минуту (или меньше) из-за перекомпиляции программы.
Ответить