Смена языка интерфейса в программе "на лету"

Вопросы программирования и использования среды Lazarus.

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

Re: Смена языка интерфейса в программе "на лету"

Сообщение heX » 25.02.2016 14:39:35

Лекс Айрин писал(а):Загоняешь PO файл в переводчик и на его основе делаешь перевод. Да и сам перевод строк через онлайн переводчик не проблема.

Ага, жаль только переводчик переводит все подряд - а там нужно через строку переводить. Одну оставить как есть, а другую перевести. Это конечно не проблема - можно и руками все потом восстановить.
Но может кто-то знает как "защитить" строку в переводчике от перевода? (онлайн переводчики может есть специализированные, или в гугл-транслэйт есть особый символ?)
heX
новенький
 
Сообщения: 12
Зарегистрирован: 19.02.2016 17:20:32

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 25.02.2016 14:46:07

heX, пробовать надо. Хотя это не проблема. Ручками тоже не слишком тяжко.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4097
Зарегистрирован: 19.02.2013 16:54:51

Re: Смена языка интерфейса в программе "на лету"

Сообщение vitaly_l » 25.02.2016 14:58:52

heX писал(а):Но может кто-то знает как "защитить" строку в переводчике от перевода? (онлайн переводчики может есть специализированные, или в гугл-транслэйт есть особый символ?)

Там есть API. как у яндекса так и у гуглей. делаете зарос к серверу с нужным словом, получаете ответ с нужным переводом. Именно поэтому мне идея понравилась, в веб программах такое часто, а вот на локальной машине. Я не сообразил, а когда лекс айрин написал, то пробило что можно делать перевод без всяких приблуд. напрямую с яндекса или гуууглей. И результат сохранить в ро. Поэтому и зашла речь про вкусный модуль.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3074
Зарегистрирован: 31.01.2012 16:41:41

Re: Смена языка интерфейса в программе "на лету"

Сообщение heX » 25.02.2016 15:30:23

Лекс Айрин писал(а):Проблема в том, что штатное решение и есть костыль.
...
Реализацию i18n могут внезапно поменять... или выпилить, заменив другой технологией. А за лисапед я спокоен.

Реализацию не поменяют - *.po файлы это не выдумка разработчиков lazarus, "стандарт" существует минимум 10 лет и описан достаточно подробно.
http://www.gnu.org/software/gettext/man ... l#PO-Files
https://ru.wikipedia.org/wiki/Gettext

И про костыль не соглашусь - костыль это когда чтото собранное на коленке прикручивается сбоку. А здесь полностью интегрированная в IDE система локализации. Такие вещи называют инструментом, а не костылем. Иначе так можно и про Lazarus сказать что это костыль к FPC компилятору.
heX
новенький
 
Сообщения: 12
Зарегистрирован: 19.02.2016 17:20:32

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 25.02.2016 15:40:52

heX, а она и прикручена сбоку проволокой. Была бы не прикручена, одна галочка включала бы мультиязычность без необходимости что-то прописывать в тексте программы, а язык легко можно было выбирать из списка, в том числе и динамически. А пока, как я заметил, все строки переписываются после загрузки формы, но до ее показа.

heX писал(а):"стандарт" существует минимум 10 лет и описан достаточно подробно.


то, что стандарт существует, еще не означает, что это лучший способ реализации.

heX писал(а):Реализацию не поменяют - *.po файлы это не выдумка разработчиков lazarus, "стандарт" существует минимум 10 лет


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

Re: Смена языка интерфейса в программе "на лету"

Сообщение zub » 25.02.2016 16:22:36

Лекс Айрин
Может гдето отрицание очевидного и бывает полезно. Но не в этом топике.
Юзайте свои костыли молча, не формируйте неправильное мнение у неокрепшей общественности
zub
долгожитель
 
Сообщения: 2261
Зарегистрирован: 14.11.2005 23:51:26

Re: Смена языка интерфейса в программе "на лету"

Сообщение heX » 25.02.2016 18:00:23

одна галочка включала бы мультиязычность без необходимости что-то прописывать в тексте программы ... язык легко можно было выбирать из списка, в том числе и динамически

Именно так это сейчас и работает. А красивый ComboBox с языками - соглашусь, такого компонента пожалуй не хватает, но его оказалось легко написать самому.

Лекс Айрин писал(а):а она и прикручена сбоку проволокой

Когда делаете такие утверждения подписывайте пожалуйста "ИМХО" - чтобы не вводить других в заблуждение о истинном положении дел.
heX
новенький
 
Сообщения: 12
Зарегистрирован: 19.02.2016 17:20:32

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 25.02.2016 18:29:29

heX писал(а):Именно так это сейчас и работает.


ой ли... а зачем тогда прописывать код запуска процедуры перекодировки? Ведь согласно OOO Way правильно использовать свойство, допустим, Lang самой формы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4097
Зарегистрирован: 19.02.2013 16:54:51

Re: Смена языка интерфейса в программе "на лету"

Сообщение zub » 25.02.2016 19:30:47

>>Ведь согласно OOO Way правильно использовать свойство, допустим, Lang самой формы. ИМХО
Поправил))
Потому что мухи и котлеты должны употребляться отдельно и друг о друге им совсем необязательно ничего знать. Не всем нужна локализация, не всем нужны формы и т.д. и т.п.
zub
долгожитель
 
Сообщения: 2261
Зарегистрирован: 14.11.2005 23:51:26

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 25.02.2016 19:48:54

zub, наличие свойства не означает, что им надо пользоваться всегда. А мухи от котлет отделяются в предках.

zub писал(а):Не всем нужна локализация, не всем нужны формы и т.д. и т.п.


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

Re: Смена языка интерфейса в программе "на лету"

Сообщение zub » 25.02.2016 22:50:16

Лекс Айрин
Спорить бесполезно)) Лучше закругляться))

ЗЫ.
Напоследок. Я тут написал одну очень полезный юнит, вы его ждали как из печки пирога...
Вот его исходники:
Код: Выделить всё
unit SuperUnit;
{$mode objfpc}{$H+}
interface

resourcestring
rsWelcome='Hi from SuperUnit';

procedure mySuperHitroProcedure;

implementation
procedure mySuperHitroProcedure;
begin
  writeln(rsWelcome);
end;
end.

Ваши действия по прилаживанию этого добра в свой проект с вашей системой локализации?
zub
долгожитель
 
Сообщения: 2261
Зарегистрирован: 14.11.2005 23:51:26

Re: Смена языка интерфейса в программе "на лету"

Сообщение vitaly_l » 25.02.2016 23:35:29

zub писал(а):Ваши действия по прилаживанию этого добра в свой проект с вашей системой локализации?

Ну лично я бы прикрутил сюда synaps и подключился бы к яндекс API. А пользователю, бы предоставил возможность выбрать любой из предлагаемых яндексом языков. Как только пользователь выбирает нужный язык (например русский), программа перебирает все ресурсы и переводит их на нужный пользователю язык(русский). Потом всё это сохраняется в файл например lang.ru.po. Сохранять действительно лучше в формате *.po, т.к. даже я знаю этот формат (на нём все веб приложения переводятся). И в последствии пользователь пользуется программой из файла *.po на русском языке без обращения к яндексу. Постольку поскольку модуль хотел я, поэтому я и ответил, как он должен работать.

Соответственно сохраняется система i18n и + добавляется перевод программы на любой язык за пять минут.

Тем кому не нравится яндекс, можно предлагать гууглей. Но на мой взгляд, яндекс более прост в обращении. Хотя... API и там и там очень хорошие. Из вышесказанного можно предположить что модуль можно заранее расположить на форме, чтобы из проекта вызывалась готовая форма, кликом ShowModal; всё остальное модуль должен делать сам. Вот, так я вижу модуль, который нужно приладить в Лазарус на постоянной основе. Как перебрать ресурсы я не умею. И кстати спасибо за resourcestring, т.к. я им как обычно не пользовался, но теперь буду пользоваться.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3074
Зарегистрирован: 31.01.2012 16:41:41

Re: Смена языка интерфейса в программе "на лету"

Сообщение zub » 25.02.2016 23:59:41

vitaly_l
Попарсите таки топик с начала, при нахождении ссылок на lazarus wiki, особенно касаемо локализации приложений, попарсите их содержимое тоже. Включайте фантазию при написании сути программ, а не на такой рутине как локализация))
zub
долгожитель
 
Сообщения: 2261
Зарегистрирован: 14.11.2005 23:51:26

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 26.02.2016 09:46:46

zub писал(а):Ваши действия по прилаживанию этого добра в свой проект с вашей системой локализации?


Код: Выделить всё
//rsWelcome='Hi from SuperUnit';//да и то не обязательно...
...
case ...
       'ru':rsWelcome:= 'это ваш SuperUnit';




Это если не переделывать form
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4097
Зарегистрирован: 19.02.2013 16:54:51

Re: Смена языка интерфейса в программе "на лету"

Сообщение vitaly_l » 26.02.2016 11:23:59

Лекс Айрин писал(а):case ...
       'ru':rsWelcome:= 'это ваш SuperUnit';

case <==== ???? Да Вы что? Это-ж застрелиться какой громадный case получится.
Там должна быть какая-то возможность перебрать всё в авто-режиме. С помощью while итп


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3074
Зарегистрирован: 31.01.2012 16:41:41

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru