Мульти строки и translation

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

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

Ответить
Аватара пользователя
khvalera
новенький
Сообщения: 57
Зарегистрирован: 29.06.2010 00:49:43
Контактная информация:

Мульти строки и translation

Сообщение khvalera »

Сегодня начал переводить на другие языки свою программулину и прозрел, насколько я понял, lazarus не умеет переводить мульти строки :cry: . Для перевода использую в модулях DefaultTranslator и mo файлы. В программе уже натыкано много Label с Caption и Hint с переносами на несколько строк. И как выяснилось такие компоненты не переводятся, на оф. wiki есть скудное и не совсем внятное упоминание об этом. Может я не прав, кто то сталкивался с подобной проблемой?
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Мульти строки поддерживаются

Код: Выделить всё

resourcestring;
  rsmltext='Multi'+#13#10+
           'multi'#13#10+
           'line'#13#10;
...
TMemo1.text:=rsmltext;

вполне будет работать, только #13#10 будет заменено на \n

Но перевод TMemo1.lines с формы осуществлен не будет, переводятся только TTranslatedString, не TStrings
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

khvalera писал(а):В программе уже натыкано много Label с Caption и Hint с переносами на несколько строк

Всё нормально переводится. И одинарные строки. И многострочные метки.
В параметрах проекта включаешь i18n. В качестве папки вывода указываешь locale
Собираешь проект. Рядом с исполняемым файлом появляется папка locale. В ней будет файл с ресурсами *.pot. Копируешь его в файл соответсвующего языка - например project1.ru.po. Переводишь строки.
После этого запускаешь твой проект. Перевод будет. Если язык локали отличается от нужно тебе - можно указать явно язык - --lang ru

Если хочешь чтобы все эелементы с формы автоматически попадали в файл языковых ресурсов - проверь чтобы в инспекторе проекта на форме (по правому клику мышки) была включена i18n.
Аватара пользователя
khvalera
новенький
Сообщения: 57
Зарегистрирован: 29.06.2010 00:49:43
Контактная информация:

Сообщение khvalera »

За #13#10 в оф. вики читал и пробовал, но не прокатило, не работает, может я что то упускаю, толи накосячили в новых сборках Лазарус.
Сделал тестовый пример, будет проще выяснить проблему.
Да, забыл написать, все проверялось под linux, сейчас попробую проверить и под Windows.

Добавлено спустя 9 минут 46 секунд:
Под Windows тот же результат, проверял на lazarus 2.02.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Протормозил, услышав про многострочность - сразу в голове мемо засело. с каптионом и хинтом вообще проблем никаких нет.
Если используется штатный переводчик (т.е. просто uses ...DefaultTranslator,...) файлы po должны лежать рядом с ексешником или в захардкоженых лцлем подпапках languages, locale (надо глядеть исходники непомню все точно), папка которая указана в настройках проекта работает только при создании локалей лазарем.
у вас в настройках указана папка PO в рантайме она неподхватывается
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

в LCLTranslator есть
procedure SetDefaultLang(Lang: string; Dir: string = ''; ForceUpdate: boolean = true);
там и задается рантайм путь к языковым файлам.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>там и задается рантайм путь к языковым файлам.

а в DefaultTranslator она вызывается

Код: Выделить всё

initialization
  //It is safe to place code here as no form is initialized before unit
  //initialization is made
  SetDefaultLang('', '', '', false);

end.

соответственно все ищется по дефолтным путям, вызывайте сами, не юзайте DefaultTranslator
Аватара пользователя
khvalera
новенький
Сообщения: 57
Зарегистрирован: 29.06.2010 00:49:43
Контактная информация:

Сообщение khvalera »

zub писал(а):Протормозил, услышав про многострочность - сразу в голове мемо засело. с каптионом и хинтом вообще проблем никаких нет.
Если используется штатный переводчик (т.е. просто uses ...DefaultTranslator,...) файлы po должны лежать рядом с ексешником или в захардкоженых лцлем подпапках languages, locale (надо глядеть исходники непомню все точно), папка которая указана в настройках проекта работает только при создании локалей лазарем.
у вас в настройках указана папка PO в рантайме она неподхватывается


:) файлы mo лежат в locale, и перевод из примера для Label2 работает, но не работает для Label1 где две строки. Файлы mo в примере генеряться скриптом create-lang.sh и ложатся в locale.

Добавлено спустя 11 минут 28 секунд:
zub писал(а):>>там и задается рантайм путь к языковым файлам.

а в DefaultTranslator она вызывается

Код: Выделить всё

initialization
  //It is safe to place code here as no form is initialized before unit
  //initialization is made
  SetDefaultLang('', '', '', false);

end.

соответственно все ищется по дефолтным путям, вызывайте сами, не юзайте DefaultTranslator


... проверил у меня не заработало!
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

положите туда PO и все заработает
он подхватывает MO из locale, что там у вас внутри MO переведено - мне посмотреть нечем - формат не текстовый. Возможно чтото нетак с лцлной MO читалкой или с форматом этих MO
Аватара пользователя
khvalera
новенький
Сообщения: 57
Зарегистрирован: 29.06.2010 00:49:43
Контактная информация:

Сообщение khvalera »

zub писал(а):положите туда PO и все заработает
он подхватывает MO из locale, что там у вас внутри MO переведено - мне посмотреть нечем - формат не текстовый. Возможно чтото нетак с лцлной MO читалкой или с форматом этих MO


ТЕМА ЗАКРЫТА
... век живи, век учись, po из locale сработал :shock:. Спасибки! На сколько помню раньше были проблемы и я всегда конвертил PO в MO.
Ответить