Список форумов Форум Libreoffice

Форум Libreoffice

Добро пожаловать на Форум Libreoffice!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

English French German Italian Portuguese Russian Spanish
Локализация диалогов и кода

 
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic
Предыдущая тема :: Следующая тема  
Автор Сообщение
JohnSUN



Репутация: 0    

Зарегистрирован: 29.08.2011
Сообщения: 39
Откуда: Киев, Украина

СообщениеДобавлено: Пт Окт 14, 2011 9:07 am    Заголовок сообщения: Локализация диалогов и кода Ответить с цитатой

Кто уже пробовал изменять язык готового макроса или расширения?
Ну, в редакторе диалогов есть отдельная функция "Управление языками"... Как она работает и куда сбрасывает варианты перевода пока не разбирался, а в хэлпе невнятно как-то...

Меня больше локализация кода интересует. Вот, например, расширение mottko, всё на немецком. В том числе и создание диалогов из кода.
Код:
'Hilfe
oModbut3 = oDialog1Mod.createInstance("com.sun.star.awt.UnoControlButtonModel")
oModbut3.setPropertyValue("Name", "help_but")
oModbut3.setPropertyValue("PositionX", 4)
oModbut3.setPropertyValue("PositionY", 33)
oModbut3.setPropertyValue("Width",  45)
oModbut3.setPropertyValue("Height", 15)
oModbut3.setPropertyValue("Label", "Hilfe")

Так-то всё в порядке. Но вот последняя строка для русской версии должна была бы выглядеть иначе:
Код:
oModbut3.setPropertyValue("Label", "Справка")


Вопрос: есть ли какой-то инструмент, который легко подменит строку на функцию "выбора текста по текущей локали"?
_________________
Владислав Орлов aka JohnSUN
LibreOffice 3.4.0 OOO340m1 (Build:12) WinXP SP2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
mathnew



Репутация: 0    

Зарегистрирован: 20.08.2011
Сообщения: 24

СообщениеДобавлено: Пт Окт 14, 2011 1:07 pm    Заголовок сообщения: Ответить с цитатой

Локализацией расширений не занимался, но, кажется, в расширениях своя локализация встроена, если посмотреть, например, как она сделана в AltSearch.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
JohnSUN



Репутация: 0    

Зарегистрирован: 29.08.2011
Сообщения: 39
Откуда: Киев, Украина

СообщениеДобавлено: Пт Окт 14, 2011 1:52 pm    Заголовок сообщения: Ответить с цитатой

Ну да, по старинке. Для каждого из возможных языков отдельный модуль с одной процедурой, которая всем необходимым текстовым переменным присваивает значения. Утомительно...
Просто когда увидел, что в редакторе диалогов есть возможность языки тасовать по-всякому, захотелось помечтать о хорошем.

Знаете, в 1С начиная с "восьмерки" появилась встроенная функция НСтр. Перечисляешь в параметре этой функции коды локалей и соответствующие строки и она сама уже во время выполнения подставит нужный текст
Код:
Текст = "ru = ""Добрый вечер!""; en = ""Good Evening!""";
Сообщить(НСтр(Текст));

Ну, плюс дополнительный инструментарий для поиска строк по всем текстам и замене в соответствии с языком.
Размечтался, в общем...
Так что, никто ничего такого не слышал?
_________________
Владислав Орлов aka JohnSUN
LibreOffice 3.4.0 OOO340m1 (Build:12) WinXP SP2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
mathnew



Репутация: 0    

Зарегистрирован: 20.08.2011
Сообщения: 24

СообщениеДобавлено: Пт Окт 14, 2011 3:19 pm    Заголовок сообщения: Ответить с цитатой

JohnSUN писал(а):
Ну, плюс дополнительный инструментарий для поиска строк по всем текстам и замене в соответствии с языком.

Ну, для расширения это можно сделать дополнительным модулем, который переберет строки всех модулей расширения и сделает нужные замены.

JohnSUN писал(а):
Знаете, в 1С начиная с "восьмерки" появилась встроенная функция НСтр.


В Office тоже ведь есть встроенная локализация в source для программ (Writer, Calc, ....). Расширить её для расширений? (Во, загнул!)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Пт Окт 14, 2011 10:11 pm    Заголовок сообщения: Ответить с цитатой

JohnSUN писал(а):
oModbut3.setPropertyValue("Label", "Справка")

Эта строка должна была быть такой
Код:
oModbut3.setPropertyValue("Label", sprlocal)

а значение sprlocal брать из файла локализации
Код:
local "de": sprlocal="Hilfe"
local "ru": sprlocal="Справка"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
JohnSUN



Репутация: 0    

Зарегистрирован: 29.08.2011
Сообщения: 39
Откуда: Киев, Украина

СообщениеДобавлено: Сб Окт 15, 2011 8:38 am    Заголовок сообщения: Ответить с цитатой

RFJ писал(а):
значение sprlocal брать из файла локализации
Код:
local "de": sprlocal="Hilfe"
local "ru": sprlocal="Справка"

Можешь чуть подробнее? Что за "файл локализации"? Офиса? Или конкретного расширения? Как выглядит? Где лежит (куда ложить... Тьфу, класть!)? Есть ли хоть какой-то инструментарий для его удобной правки?

Я бы, если честно, предпочел бы что-то в виде
Код:
oModbut3.setPropertyValue("Label", lStr("Справка"))

где lStr - "локальная строка" - записывается на языке автора программы. А сама функция при каждом вызове ныряет в какой-то "файл локализации" и выдергивает соответствие для текущей локали. Если оно есть, конечно...

Тогда код для автора выглядит как родной. И для пользователя интерфейс - как родной... Вот только локализатору как-то не особо удобно...
_________________
Владислав Орлов aka JohnSUN
LibreOffice 3.4.0 OOO340m1 (Build:12) WinXP SP2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Сб Окт 15, 2011 8:58 am    Заголовок сообщения: Ответить с цитатой

Да я написал "навскидку" на примере того же AltSearch, где есть файлы локализации Local.xba, Local1.xba, Local2.xba.

PS. "навскидку", потому что внимательно не смотрел.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
JohnSUN



Репутация: 0    

Зарегистрирован: 29.08.2011
Сообщения: 39
Откуда: Киев, Украина

СообщениеДобавлено: Сб Окт 15, 2011 2:38 pm    Заголовок сообщения: Ответить с цитатой

Создал и поковырял тестовый файлик...
Можно, конечно, было бы и документацию почитать, но я - как и всякий нормальный программист - большой лентяй, документацию ищу и читаю только если методом тыка не разобрался...
В общем, при добавлении в диалог "основного языка", в файле \Dialogs\Standard создается пустой (нулевой длины) файлик DialogSettings_<код локали>.default и файл ресурсов под него DialogStrings_<код локали>.properties. При добавлении новых локалей к диалогу, добавляются и соответствующие файлы properties.
Структура такого файла:
Первая строка всегда "# Strings for Dialog Library Standard"
А дальше - перенумерованные пары
0.<имя диалога>.HelpText=<строка уникода>
1.<имя диалога>.Title=<строка уникода>
2.<имя диалога>.<имя элемента>.HelpText=<строка уникода>
3.<имя диалога>.<имя элемента>.<Label|Text...>=<строка уникода>
Скорее всего, простых средств дотянуться до этих строчек (считать-изменить-добавить новые) нет, при загрузке-сохранении диалога эти файлы обрабатываются самим офисом...

Вывод: локализовать диалоги можно только если они нарисованы в редакторе диалогов. Если автор расширения решил формировать диалог динамически (ну, как это сделано в mottko) - облом. Или переписывать весь код, подменяя встречающиеся национальные строки на переменные, которые где-то нужно переопределять на локальные (а-ля AltSearch). При этом сделать это надо быстро и отослать автору. Чтобы, когда он возьмется за модификацию софта, у него уже был вариант кода пригодный для локализации. Или просто идти по коду и менять строки на свой родной язык - ну, получится еще одна версия расширения, ну, не сможет она автоматически обновится.

Можно, конечно, попробовать наваять отдельное расширение, эдакий локализатор...
Натравливаем его на модуль. Локализатор пытается отыскать в библиотеке модуль с предопределенным именем... ну, скажем, lclztr (локализатор же!). Если находит, то парсит его в несколько массивов и переменные, которые через отдельный диалог предоставляет для редактирования. Если не находит - предлагает создать: пробегается по всем модулям, формирует список всего что заключено в парные кавычки и просит перепроверить - то ли отобрал... Выбрасываем лишнее, говорим для какой локали эти строки. Локализатор опять пробегается по тексту, заменяет оставшиеся строки на вызов функции с параметром-строкой, создает модуль lclztr, в котором объявляет
Public Const lclztrLocale="ru_RU" (или что там было выбрано), ниже дописывает текст функции, а еще ниже - пачка заремленных строк, которые по сути всего лишь таблица соответствий строк для разных локалей похожая на упрощенный csv. Почему упрощенный? Ну, реальный csv хранит данные разных типов, и даты, и числа. А нам-то нужны только строки... Упростим формат - упростится процедура парсинга. Что-то вроде такого:
Код:
REM *** Local stringts ***
REM Локаль;"ru_RU";"en-US "
REM;"Здравствуй, дружок!";"Hello, my friend! "
REM;"Хочешь, я расскажу тебе сказку?";"Do you want me to tell you a story? "

Вроде как всё пока логично и не очень сложно, а?
_________________
Владислав Орлов aka JohnSUN
LibreOffice 3.4.0 OOO340m1 (Build:12) WinXP SP2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Сб Окт 15, 2011 3:27 pm    Заголовок сообщения: Ответить с цитатой

JohnSUN писал(а):
Вроде как всё пока логично и не очень сложно, а?

Да вроде бы нормально.
Сделать универсальный локализатор очень привлекательно.
Но его можно сделать только для нелокализованных расширений (а-ля mottco).
Нужно сделать пробные варианты и посмотреть, как это выглядит на практике.
Но, вот если расширение уже частично локализовано, причем метод локализации оригинальный авторский (а-ля AltSearch), но отсутствует какой-то язык, например, русский? Придется делать вручную, копируя автора.

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



Репутация: 0    

Зарегистрирован: 29.08.2011
Сообщения: 39
Откуда: Киев, Украина

СообщениеДобавлено: Сб Окт 15, 2011 4:21 pm    Заголовок сообщения: Ответить с цитатой

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

Частично локализованное расширение по идее (!) должно почти в пол-пинка ложиться под локализатор. Просто выбираем одну из процедур Sub Load_<чего-то там>, переводим все строки в этой процедуре в вызовы функции-локализатора, в модуле-ресурсе собираем все доступные переводы и добавляем свои, а в case, где выбирается текущая локаль, оставляем один вызов на все случаи...
Кстати, это тоже будет классная фича! В списке "просит перепроверить - то ли отобрал" добавить возможность указать локаль для каждой строки и соответствующую строку-оригинал. Чтобы локализатор сразу раскидывал уже имеющиеся переводы по нужным ячейкам массива. И не придется возиться с переводами для уже существующих языков.
Кстати, о переводах. Можно ведь и гугль-переводчик на эту работу напрячь... Где код этой процедуры публиковался?
_________________
Владислав Орлов aka JohnSUN
LibreOffice 3.4.0 OOO340m1 (Build:12) WinXP SP2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Сб Окт 15, 2011 6:04 pm    Заголовок сообщения: Ответить с цитатой

JohnSUN писал(а):
Кстати, о переводах. Можно ведь и гугль-переводчик на эту работу напрячь... Где код этой процедуры публиковался?

Да, вроде бы, и в этом разделе есть такой, даже два.
JohnSUN писал(а):
Частично локализованное расширение по идее (!) должно почти в пол-пинка ложиться под локализатор.

От идеи до реализации - о-го-го сколько проблем может быть.
А когда можно ждать хотя бы пробный вариант, интересно взглянуть на рабочий пример?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
JohnSUN



Репутация: 0    

Зарегистрирован: 29.08.2011
Сообщения: 39
Откуда: Киев, Украина

СообщениеДобавлено: Сб Окт 15, 2011 7:12 pm    Заголовок сообщения: Ответить с цитатой

Что? Уже прямо сейчас начинать писать? Не-е-е-ет... Этот скелет идеи еще даже не начал деталями обрастать... Начать кодить прямо сейчас - это значит столкнуться с каждой из этих самых "о-го-го сколько проблем"...
Нужно еще поговорить, повспоминать разное-всякое... Например, где-то был хороший алгоритм парсинга csv. Не на бэйсике, а на чем-то похожем по синтаксису - вариант для легкого перевода на StarBasic... Какую часть кода, какой функционал локализатора нужно будет копировать в локализуемое расширение?.. Что должен делать локализатор при повторном запуске на уже локализованное расширение? Особенно если нарвется на функцию lStr со строкой, которой еще не было в словаре... Какие подводные камни могут встретиться при выдирании строк из кода? Ну, кроме сдвоенных кавычек внутри строки... Ну, и так далее.
_________________
Владислав Орлов aka JohnSUN
LibreOffice 3.4.0 OOO340m1 (Build:12) WinXP SP2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
mathnew



Репутация: 0    

Зарегистрирован: 20.08.2011
Сообщения: 24

СообщениеДобавлено: Вс Окт 16, 2011 6:24 am    Заголовок сообщения: Ответить с цитатой

Вырисовываются две задачи.
1. Локализация готового расширения, как нелокализованного, так и частично локализованого. Разработка этой методики и соотвествующего инструментария. Как я понял, JohnSUN решил этим заняться, что уже очень хорошо, поскольку это предполагает изучение существующих приемов локализации и, вероятно, разработку иных.
2. Выработка предложений для стандартизации локализации расширений, поскольку для большинства авторов расширений локализация оных не самое интересное занятие ("я так думаю"), хотя и крайне нужное для продвижения расширения "в массы". То есть, предложить метод локализации расширений (вместе с неоходимым инструментарием), не требующий от авторов (будущих) расширений лишних усилий по локализации, и совместимый с пунктом 1 ("долокализация" стандартным инструментом). (Впрочем, если авторы не захотят воспользоваться этим предложением, то могут локализовывать своими собственными способами.)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic Часовой пояс: GMT
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Вы можете бесплатно создать форум на MyBB2.ru, RSS